由於工作需要,碰到很多客戶調試modbus通訊的問題。針對在空調項目中,Modbus RTU通訊測試,這裡發一個modbus測試小工具小教程。
1,首先是用什麼工具,工欲善其事必先利其器。
1.1 軟體部分這裡推薦兩個小工具:
Modbbus poll(傳送門:https://www.modbustools.com/download.html)
大小只有2mb的工具。
功能強大,(可連結參考其他高手寫的教程
):
Modbus Poll是一個主機仿真器,用來幫助開發人員測試Modbus從設備,或者其它MOdbus協議的測試和仿真。它支持多文檔接口,即,可以同時監視多個從設備/數據域。每個窗口簡單地設定從設備ID,功能,地址,大小和輪詢間隔。你可以從任意一個窗口讀寫寄存器和線圈。如果你想改變一個單獨的寄存器,簡單地雙擊這個值即可。或者你可以改變多個寄存器/線圈值。提供數據的多種格式方式,比如浮點、雙精度、長整型(可以字節序列交換)。
狀態條顯示錯誤信息。
Modscan
大小只有1.3mb的工具。
功能和教程(
參考這裡《Modbus通信測試軟體使用說明與下載地址!》
)
Modscan和modbus poll都是modbus調試的簡單小工具。其實還有串口助手等其它工具,但是,Modscan和modbus poll對modbus較有針對性。
小編最先使用的是modscan,基本上操作過1次,10分鐘左右能靈活使用。
而modbus poll比modscan功能要稍微強大一點,而沒有失去易用性。所以本文,以介紹modbus poll為例。
1.2 硬體工具也是要準備的,因為Modbus RTU的485接口口,一般電腦都是沒有的。淘寶上有很多usb轉485接口的工具。
這裡推薦我平常使用的帝特D tech usb轉232接口轉換器(http://www.dtech.cn 帝特公司看到這裡,請和我談廣告業務事宜)+ 232轉485接口工具
PS:硬體工具儘量選擇可靠品牌。因為小編用過低價轉換器,識別不出數據停止位的。
1.3 安裝usb轉換器的驅動,一般購買的時候會帶光碟,或書明書、官網上有下載連結。安裝完驅動,連接usb轉換工具,打開設備管理器,確定是否安裝成功,和生成的COM接口。如下圖,生成了COM5,後面步驟要用到。
安裝Modbus poll 工具,安裝完後提示要註冊的,不註冊只能使用30天,大家百度一下怎麼註冊……
1.4 準備好測試設備的modbus點表,或者使用說明書。
上圖,關鍵信息是:
波特率:9600
傳輸方式:RTU
數據位:8
奇偶校驗:無
停止位:2
注意:一般有Even奇校驗或者Oven偶校驗,停止位1;
無奇偶校驗的,一般停止位是2,保持數據長度一致。
點位表,modbus數據有不同類型:
01: Read coil status 讀線圈狀態
02: Read input status 讀輸入狀態
03: Read holding register讀保持寄存器
04: Read input registers 讀輸入寄存器
05: Force single coil 強制單線圈
06: Preset single register 預置單寄存器
15: Force multiple coils 強制多線圈
16: Preset multiple registers 預置多寄存器
17: Report slave ID 報告從設備ID
22: Mask write register 屏蔽寫寄存器
23: Read/Write registers 讀/寫寄存器
注意,選擇測試的數據,應該是比較有代表性的,如溫度。避免選擇測試0,1狀態開關量的數據,因為不容易被識別。
這裡選擇04功能,地址1的室內溫度。
2 連接要測試的設備和usb轉換工具
A,B(+,-)對接,要注意正負。測試時,儘量讀取1個設備,避免接到現場多個設備的通訊線上測試,避免現場線纜問題、某個設備壞了等幹擾測試結果。
可以測試後單個設備後,再接到多個設備的通訊線上測試。
3 Modbus poll的使用
打開modbus poll 後,選擇connection > connecting...
據設備的modbus的協議信息,填寫
協議類型:Serial Port是串口485類型,(其實還支持modbus TCP,這裡不展開了)
串口號:COM6
波特率:9600
傳輸方式:RTU
數據位:8
奇偶校驗:無
停止位:2
然後setup> read/write definition 設定讀寫設備和數據的信息
Slave ID 1 (設備地址1)
function 04(讀取數據類型 應該選04: Read input registers 讀輸入寄存器)
address 1(數據地址1)
quantity 1(同時讀取多少個數據 1)
scan rate 1000(讀取頻率,這裡1000ms是1秒)
然後會出現讀取的情況:
TX=0,Err=0,ID=1,F=03,SR=1000ms。意思是,發送0次命令,錯誤次數,從機ID,功能號,輪詢間隔。
如果通訊出錯,會在窗口第二行顯示錯誤信息,因為沒有連接設備,所以有no connection報警,
4,比較常見的問題有:
a,數據錯位,由於設備寄存器和軟體的起始位可能是0或者1,有可能產生錯1位的問題。可以針對某一兩個數據讀取正確以後,確定全部數據是否錯位(+1或者-1),本文例子中是-1的;
b,試了幾個設備都讀取不到數據,迫不得已時可以嘗試調整modbus 協議的波特率,奇偶校驗,停止位等參數……
如果真碰到工廠文檔出錯,這種萬裡挑一的問題。如本例子,就是很奇特的無奇偶校驗+1停止位。
c,如果真的碰到奇怪的現象,modbus poll工具支持把讀取的數據命令和反饋數據實時寫入excel,Display > Communication...此處是彩蛋,我也是看中這個功能,轉投modbus poll。
d,最後,解答很多人的一個問題。york的主機yvag和fcu溫控器t8600可以通過modbus連起來,聯動工作。為什麼接入第三方智能家居時,不能在這個基礎上,把第三方智能家也連到這跟通訊線上?
原因就是modbus協議,是只能1個modbus主機(master),其它設備都只能是從機(slave)。只有master主機可以發請求指令,從機只能被動發送反饋數據。
york的主機和fcu溫控器t8600聯動的時候,yvag主機是modbus主機,第三方智能家居也是master主機角色,因為master的唯一性,不能接入這個通訊線。
如果,把yvag冷水主機作為從機(改成接入bas模式),fcu溫控器t8600也是從機。這個時候是可以全部接入第三方智能家居系統。然而,由於yvag和t8600都是從機,不能主動互相通訊。聯動的邏輯是需要寫在第三方智能家居系統的。
點擊上方↑↑↑「智慧樓宇技術」關注
智慧樓宇技術
Michael Wong
智慧樓宇科技,包含樓控BA技術,暖通技術,暖通產品,製冷技術,甚至IBMS等相關IT技術…… 也可以參考個人博客: www.michaelwong.tech
長按識別關注