1 引言
智能樓宇工程中的中央空調,、電梯,、通風、給排水,、照明,、火災報警等個子系統(tǒng)的互聯方案中,采用modbus tcp協議的串行通信方式,,全面兼容modbus工業(yè)標準,,數據傳輸可靠,響應速度快,,擴展靈活,,通過互聯網實現各子系統(tǒng)與中央管理系統(tǒng)的通信。modbus tcp協議是在tcp/ip標準中,,應用層采用工業(yè)領域事實標準modbus,。modbus使用tcp/ip應用層的502端口,這是經過國際公認的,。該串行總線方式支持各種介質的rs-232,、rs-422、rs-485接口,。modbus tcp的網絡通信模式采用client/server方式,,如圖1所示。
圖1 modbus tcp的網絡通信模式
2 modbus tcp串行通信分析與實現
某智能樓宇中各子系統(tǒng)主要采用plc作為主控模塊,,如圖2所示,。網絡互聯采用modbus tcp網絡通信模式,中央管理系統(tǒng)與該網絡的互聯是亟待解決的問題,,plc將智能樓宇中各子系統(tǒng)的相關狀態(tài)和參數信息保存于它的寄存器中,,中央管理系統(tǒng)需要讀取plc中一些保持寄存器的數值,以此來進行智能樓宇的全面監(jiān)控與管理,。modbus tcp協議提供了相應指令來進行保持寄存器的讀取,。
圖2 智能樓宇系統(tǒng)示意圖
2.1 協議分析
modbus tcp數據報文結構,,如圖3所示。
圖3 modbus tcp數據報文結構
一次modbus tcp讀取保持寄存器的通信分析(省略了ip/tcp頭):從左向右分析該數據報文:00 03為此次通信編號,,一般每次通信之后將被要求加1以區(qū)別不同的通信數據報文,;00 00表示協議標識符,00 00為modbus協議,;00 06為數據長度,,用來指示接下來數據的長度,單位字節(jié),;03為設備地址,,用以標識連接在串行線或者網絡上的遠程服務端的地址。以上七個字節(jié)也被稱為modbus報文頭,。03為功能碼,,此時代碼03為讀取保持寄存器數據。00 00 00 01為功能碼的參數,,指示將被讀取的保持寄存器的地址與長度,。從左向右分析該數據報文:00 03為此次通信編號,應答報文要求與先前對應的請求保持一致,;00 00為協議標識符,,00 00表示modbus協議;00 05為數據長度,,用來指示接下來數據的長度,,單位字節(jié);03為設備地址,,應答報文要求與先前對應的請求保持一致,。以上七個字節(jié)同樣為modbus報文頭。03為功能碼,,正常情況下應答報文要求與先前對應的請求保持一致,,如果出錯則返回80h+先前的功能碼。02為功能碼的第一個參數,,指示接下來數據的字節(jié)長度,;00 17為被讀取的保持寄存器中的數據值,即要求被讀取的地址為00 00的保持寄存器中的數值為0017h,。
測試程序(master)發(fā)送數據(hex)及 plc(modbus tcp slave) 響應數據(hex)樣例分析如圖4所示,。
圖4 程序發(fā)送/接收數據包樣例分析
2.2 程序流程
以下是主程序的流程圖,如圖5所示,,主要功能是建立tcp/ip連接以及連接錯誤處理。modbus tcp協議的每一次工作循環(huán)的流程圖,,如圖6所示,。
圖5 主程序流程圖
圖6 一次工作循環(huán)流程圖
2.3 程序測試
首先在ip中填上需要被連接的服務端ip地址,,然后點擊connect進行連接。連接成功后,,在offset中填寫需要讀取的保持寄存器的開始地址,,在length中填寫需要讀取的保持寄存器的長度。最后點擊trigger讀取一次上述保持寄存器,,同時將在sent和received中顯示發(fā)送及收到的數據報文(hex),,并且在data monitor中顯示對這些報文的解釋。
3 結束語
本文對modbus tcp協議以及modbus tcp串行通信在智能樓宇工程中的應用作了簡單介紹,,重點分析研究了modbus tcp讀取plc的保持寄存器數據的過程,,并提出實現modbus tcp協議通信的解決方案,進行編程以及調試,,成功實現了預期的功能,。