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