modbus如何發送浮點數
利用Modbus協議來實現不同設備之間的通訊,操作簡便,適用性強,通訊速度快。因此,在各種工控系統中,Modbus是極為常見的一種通訊協議。同時,Modbus也是一種實力較強的現場總線,在工業控制實現真正的網絡化過程中,Modbus將發揮更大的作用。
modbus協議字節傳送順序
在Modbus總線中,數據傳輸時是低位字節先傳送,傳送過來后如果不進行交換,二進制的數值排列是反向的,即原來的低字節在高位,高字節在低位,所以得到的數據和原數據相差甚遠。只要將數據的高低位字節進行交換(swap位置1),就可解決此問題。
32位數據與Modbus RTU
Modbus協議是一種通用工業標準,國家標準位GB/T19582-2008。只要遵循Modbus協議,不同廠商生產的設備可以連成工業網絡,進行互相通信。
Modbus協議中規定寄存器是16位長度,但是隨著芯片處理能力的加強及現場要求的提高,32位數據在各類工業設備上使用日漸增多,因此本文主要梳理Modbus RTU協議與32位數據之間的關系,給產品開發提供理論支持。為行文方便,下面將Modbus RTU協議簡稱為協議。
協議中規定16位數據排列順序位先高后低,例如ushort數據
0x0102,字節01為高字節,02為低字節。這個順序我個人理解是按照人的書寫閱讀順序習慣定義的,從左到右,高字節在前,低字節在后。 數據傳輸幀如下:
下面看32位數據,例如ulong數據0x01020304。由于協議中寄存器大小為16位,該數據需要兩個寄存器才能存儲,因此將該數據拆分為兩個16位數據0x0102與0x0304。這兩個16位數據在寄存器中的順序沒有疑問,先高后低排列,但是關鍵問題是協議未規定這兩個寄存器的先后順序,因此在實際使用中會有2種情況出現,先0x0102后0x0304,或者先0x0304后0x0102,這2種排列順序都是允許的,根據協議內容,建議首選先0x0102后0x0304,協議標準測試軟件Modscan提供交換選項。但是絕對不會出現0x0201或0x0403的排列,違反了協議先高后低的規范,是不標準的。數據傳輸幀如下:
或
最后來看32位浮點數,同樣我們需要定義浮點數的書寫閱讀順序,根據IEEEE754標準,浮點數的書寫順序為:符號、階碼、尾數。例如-4.00,編碼順序為0xC0800000,得出2個寄存器內容分別為0xC080與0x0000,這2個寄存器同樣可以交換,但寄存器內部數據順序不能變動。數據傳輸幀如下:
或
總結,根據Modbus RTU標準協議,對于32位數據,只存在寄存器交換與不交換2種選項,當有涉及到寄存器內部字節交換的時候,都是非標準的。
modbus發送浮點數
在Modbus現場總線系統中,浮點數的數據傳輸一般有兩種辦法,一種是將浮點數按照量程映射到一個寄存器中(2個字節),例如0到65535對應0到100%,還有一種就是采用兩個寄存器四個字節傳輸浮點數。
非常好我支持^.^
(16) 88.9%
不好我反對
(2) 11.1%
相關閱讀:
- [電子說] EtherCAT從站轉modbus RTU協議轉換網關用modbus slave測試的方法 2023-10-24
- [電子說] DLT698轉modbus協議網關把電能數據接到wincc的方法 2023-10-24
- [電子說] 軟啟動器與PLC通過ModbusRTU轉Profinet網關連接的配置案例 2023-10-24
- [電子說] Modbus485轉profinet網關連接伺服主軸驅動器與PLC的具體應用 2023-10-24
- [電子說] 通過MODBUS轉PROFINET(PROFINET轉MODBUS)網關連接EP1C系列通用伺服驅動器 2023-10-24
- [電子說] 軟啟動器與PLC通過ModbusRTU轉Profinet網關連接的配置案例 2023-10-24
- [電子說] Modbus485轉profinet網關連接伺服主軸驅動器與PLC的具體應用 2023-10-24
- [電子說] CRT-通用3-6軸MF系列多功能運動控制系統示教編輯案例 2023-10-21
( 發表人:李建兵 )