孫 碩 倪建云 陳在平
(天津理工大學 a.天津市復雜系統控制理論及應用重點實驗室;b.自動化學院,天津 300384)
基于STC15單片機的ModbusI/O模塊的設計
孫 碩a,b倪建云a,b陳在平a,b
(天津理工大學 a.天津市復雜系統控制理論及應用重點實驗室;b.自動化學院,天津 300384)
基于STC15單片機構建具有Modbus通信功能的8路I/O模塊,給出模塊的硬件組成和軟件流程。該模塊不僅滿足基本I/O量數據的傳輸,而且利用STC15單片機的EEPROM可保存模塊的重要參數。模塊工作電壓+3.3V,具有低功耗、低成本、經濟可靠及電路設計簡單等優點。測試結果證實:該模塊能夠正常穩定工作,并且實現了重要參數(如設備地址)的掉電保護。
ModbusI/O模塊 重要參數掉電保護 STC15單片機
Modbus作為多現場總線中的一種,具有協議開發簡單、透明度高等優點,被廣泛應用于制造業、工業過程控制、交通、電力及樓宇等自動化領域[1,2]。而基于Modbus協議的I/O模塊,可以實現總線、電源和I/O現場設備全部以接插件方式連接,具有連接快速方便的優點。目前國內使用該類I/O模塊常見的品牌有美國的WOODHEAD、德國的TURCK和PHOENIX,但是存在價格昂貴、維修困難和不適應國內工業生產環境等問題[3]。因此設計一種經濟可靠的Modbus I/O模塊具有廣闊的市場前景。
筆者介紹的ModbusI/O模塊,以STC15W4K48S4單片機為核心,采用標準Modbus協議(傳輸模式為遠程終端設備(RTU)),不僅滿足基本I/O量數據的傳輸,而且實現了模塊重要參數的掉電保護功能。
ModbusI/O模塊包括Modbus輸入模塊和Modbus輸出模塊,兩種模塊硬件電路結構相同,筆者只介紹Modbus輸入模塊。
Modbus輸入模塊的硬件結構框圖如圖1所示,主要包括RS-485驅動電路、ADuM1402數字隔離電路、STC15W4K48S4芯片、PC847光電隔離電路及電源轉換電路等。
1.1RS-485驅動電路和ADuM1402數字隔離電路
RS-485驅動電路選用了符合RS-485和RS-422串行協議的+3.3V低功耗半雙工收發器系列的SP3485芯片,單片機的P3.6、P3.7和P0.5口經過ADuM1402數字隔離電路與SP3485連接,單片機的P0.5可使SP3485在接收和發送之間切換,空閑狀態下芯片處于接收狀態。

圖1 Modbus輸入模塊的硬件結構框圖
ADuM1402數字隔離器的一端連接STC15W4K48S4單片機,另一端連接SP3485芯片。該數字隔離器為雙電源供電,相對于其他光電耦合器,具有集成度高、功耗低及數據傳輸速率高等優點,為通信提供更穩定可靠的環境。
1.2STC15W4K48S4單片機
STC15W4K48S4內部集成了高精度R/C時鐘和高可靠復位電路,因而徹底省掉了外部昂貴的晶振和外部復位電路,可配置時鐘范圍5~35MHz,本系統設置時鐘工作在11.059 2MHz。同時,該單片機還設有4個超高速串口、容量10KByte的片內EEPROM及7個定時器/計數器等硬件資源[4,5],為實現ModbusI/O模塊快速可靠的工作提供了有力保證。
1.3PC847光電隔離電路和電源轉換電路
在工業現場控制系統中,由于被控對象往往處在較強的噪聲環境中,設備產生的信號不能直接供單片機采集。因此PC847光電隔離電路用來隔離外部的干擾信號,并避免接地環路的產生。現場設備供電往往采用24V(DC),而該模塊的工作電壓為+3.3V,所以需要電源轉換電路。系統采用雙電源供電方式,一路是工作電壓24VB,經LM2674M3.3芯片將電壓轉換成3.3V為模塊供電;一路是負載電壓24VL,既為模塊提供工作電壓又為現場設備提供負載電壓。
ModbusI/O模塊作為Modbus通信中的從機,并且模塊未使用硬件(撥碼開關等)設置模塊地址,而是使用單片機內部的EEPROM來保存模塊地址,地址的有效范圍規定為1~250,故從機程序設計包括主程序和寫EEPROM程序兩部分。
ModbusI/O模塊的主程序流程如圖2所示。其中初始化包括設置單片機相應IO口為準雙向口,設置串口位置在P3.6、P3.7(參考STC15手冊),串口工作模式,設置定時器2初始值,以及設置定時器2作為串口的波特率發生器等,然后設定模塊地址,等待主站發送請求命令。

圖2 ModbusI/O模塊的主程序流程
在主程序完成初始化后,緊接著讀取EEPROM中存放設備地址的寄存器,然后判斷EEPROM中存放的設備地址是否非法(非法地址指的是超出1~250范圍的),若為非法地址,則進入寫EEPROM程序。另外,在主站發送設置設備地址數據幀時,程序也會進入寫EEPROM程序。寫EEPROM程序流程如圖3所示。
Modbus從節點功能的測試主要是對其主要功能碼的測試。在測試平臺的搭建上,選用串口助手軟件作為模擬主站,該軟件能對Modbus的幾個常用功能碼進行測試,并能實現數據的連續收發。
本次測試選取了Modbus的兩個關鍵功能碼“06”、“01”,即寫寄存器(設置設備地址)和讀取多個線圈狀態,進行連續收發功能測試。

圖3 寫EEPROM程序流程
首先測試功能碼“06”,通過串口助手向從站發送寫寄存器指令,發送時間間隔300ms,從站能夠周期性地回復響應數據幀。寫寄存器指令測試結果如圖4所示。功能碼“06”的請求/響應報文的解析見表1。

圖4 寫寄存器指令測試結果

參數主機請求從機響應數據長度Byte數據長度Byte設備地址001001功能碼061061寄存器地址0000200002寫入數據0003200032CRC校驗C81A2C81A2
測試功能碼“01”時,將一開關量為閉合的輸出值輸入到8路輸入模塊的第二路。讀取多個線圈狀態的測試結果如圖5所示。功能碼“01”的請求/響應報文的解析見表2。

圖5 讀取多個線圈狀態測試圖

參數主機請求從機響應數據長度Byte數據長度Byte設備地址031031功能碼011011寄存器地址00002011數據的數量00082021CRC校驗3C2E2D1F12
筆者詳細介紹了以STC15W4K48S4單片機為核心的ModbusI/O模塊的軟硬件設計,以及測試方案和結果。該ModbusI/O模塊的工作電壓為+3.3V,不需要外擴EEPROM或拔碼開關,即可實現掉電保存設備重要參數的功能,并且有很強的抗干擾能力,因此該模塊具有低功耗、低成本、經濟可靠及電路設計簡單等優點。
[1] 孫進生,施寶酉.基于CPLD的Modbus遠程I/O模塊設計[J].制造業自動化,2008,30(7):47~51.
[2] 聶冰.基于Modbus通信協議的ScatterI/O優化方法[J].工業儀表與自動化裝置,2006,(6):62~64.
[3] 朱嶸濤,徐愛鈞,葉傳濤.基于STC15單片機的無線遙控智能小車的設計[J].電腦知識與技術,2014,10(14):3445~3447.
[4] 王佳承,費敏銳,王海寬.基于Modbus的多現場總線集成測控系統設計[J].自動化儀表,2009,30(6):20~22.
[5] 史運濤,孫德輝,李志軍,等.基于Modbus協議的通信集成技術研究[J].化工自動化及儀表,2010,37(4):67~72.
TH862+.7
A
1000-3932(2016)06-0662-03
2016-03-24(修改稿)基金項目:科技部中小企業創新基金項目(09C262112022954);天津市自然科學基金重點項目(07JCZDJC09600);天津市科技支撐計劃重點項目(10ZCKFGX03000);天津市高等學校科技發展基金計劃項目(20120705);天津理工大學教學基金項目(YB11-62)