超聲波流量計MODBUS協(xié)議調(diào)試辦法(1)
MODBUS協(xié)議的兩種格式都能支持。通過在菜單窗口M63中,選擇使用MODBUS-RTU還是MODBUS-ASCII格式。默認狀態(tài)下支持MODBUS-ASCII格式。
超聲波流量計/熱能表只能支持MODBUS功能代碼03和06以及16三種功能代碼,分別是讀寄存器和寫單一寄存器以及數(shù)據(jù)塊寫入功能。
例如在RTU方式下讀取1號設(shè)備的流速,即讀寄存器5,6共2個寄存器,命令如下:
01 03 00 04 00 02 85 CA (十六進制數(shù)字)
設(shè)備號 功能 起始寄存器 寄存器數(shù)目 效驗和
其中85 CA 是16進制數(shù)值,是按照CRC-16 (BISYNCH,多項式是x16 + x15 + x2 + 1屏蔽字為0A001H)循環(huán)冗余算法得到的。請參考MODBUS有關(guān)資料了解進一步的算法。
返回的數(shù)據(jù)應(yīng)該為(設(shè)定狀態(tài)為模擬運行狀態(tài),流速=1.2345678m/s):
01 03 04 06 51 3F 9E 3B 32(十六進制數(shù)字)
設(shè)備號 功能 數(shù)據(jù)字節(jié)數(shù) 數(shù)據(jù)=1.234567 效驗和
其中 3F 9E 06 51四個字節(jié)即為1.2345678的IEEE754格式單精度浮點形式。
再舉例,讀凈累積流量,REG25,REG26兩個寄存器命令如下:
01 03 00 18 00 02 44 0C(十六進制數(shù)字)
返回數(shù)據(jù)應(yīng)該為(設(shè)凈累積器=802609,其4字節(jié)16進制表示為 00 0C 3F 31)
01 03 04 3F 31 00 0C A7 ED(十六進制數(shù)字,A7 ED為效驗和)
當(dāng)凈累計=0時,返回數(shù)據(jù)為01 03 04 00 00 00 00 FA 33
其中FA 33為效驗和。
請注意上面例子中數(shù)據(jù)存放的順序。對于使用C語言解釋數(shù)值時,可以使用指針直接把所需的數(shù)據(jù)放入相應(yīng)的變量地址中即可,一般常用的存放順序為低字節(jié)在前,例如上面的1.23456m/s例子中,3F 9E 06 51數(shù)據(jù)的存放順序為 51 06 9E 3F。
在 ASCII方式下讀取1號設(shè)備的從寄存器1開始的10個寄存器的命令如下
:01030000000AF2(回車換行)
返回數(shù)據(jù)為 :0103280000000000000000000000000000000000000000D4
其中“:”是ASCII方式下的引導(dǎo)符,“F2”和“D4” 是雙字節(jié)效驗和。求法是把除“:”及行尾的回車換行以外的所有字符順序進行單字節(jié)加法,不計進位,然后求補碼得到的。例如上面的命令中 01h+03h+00h+00h+00h+0Ah=0Eh, 其補碼=0-0Eh=F2。而返回數(shù)據(jù)的效驗和等于 1+3+28h=2Ch,其補碼=0-2Ch=D4h。
在MODBUS-RTU狀態(tài)下,每次最多能夠讀出125個寄存器。而在MODBUS-ASCII狀態(tài)下每次只能讀出61個寄存器。如果多于這些數(shù)目,流量計就會返回出錯信息。
有關(guān)MODBUS協(xié)議細節(jié)請參考有關(guān)資料。
在調(diào)試MODBUS協(xié)議時,推薦使用一種免費調(diào)試軟件MODSCAN,這個軟件可以在互聯(lián)網(wǎng)上搜索到。當(dāng)出現(xiàn)問題時,如果能夠接受到效驗和正確的數(shù)據(jù)包則說明通訊本身是不存在問題的。
在默認狀態(tài)下通信的設(shè)置速率一般是9600、無效驗、8數(shù)據(jù)位、1個停止位。
- 上一篇:便攜式丨手持式超聲波流量計應(yīng)用在什么領(lǐng)域 2020/4/28
- 下一篇:超聲波流量計通訊故障問題解析 2020/4/13