如果大家從事物聯(lián)網(wǎng)相關(guān)行業(yè)的開發(fā)或者運維,相信對于Modbus協(xié)議不會陌生。剛好我在平時運維工作中,也會因為需要排查問題而接觸到Modbus協(xié)議。本文就通過常用調(diào)試工具結(jié)合實例帶大家來解析Modbus協(xié)議,希望可以通過具體協(xié)議數(shù)據(jù)解析,讓大家加深對該協(xié)議的理解。
一、Modbus協(xié)議簡介
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。
此協(xié)議定義了一個控制器能認識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。它描述了一控制器請求訪問其它設(shè)備的過程,如果回應(yīng)來自其它設(shè)備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。當在一Modbus網(wǎng)絡(luò)上通信時,此協(xié)議決定了每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。
此外,Modbus協(xié)議是Modicon公司(現(xiàn)在的施耐德電氣 Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發(fā)表。Modbus已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標準(De facto),并且現(xiàn)在是工業(yè)電子設(shè)備之間常用的連接方式。
此協(xié)議是一個請求/應(yīng)答協(xié)議,包括ASCII、RTU、TCP等版本。它定義了控制器能夠認識和使用的消息結(jié)構(gòu),而不管它們是通過何種硬件方式進行通信的。所以硬件接口可以是RS-232、RS-422、RS-485和以太網(wǎng)等設(shè)備。TCP和RTU是Modbus協(xié)議的兩種常見形式,其中TCP的使用頻率更高一些。
二、案例協(xié)議文檔
以下解析案例來自某廠家的溫濕度傳感器協(xié)議文檔。
(一)通訊參數(shù) 1、上位機串口設(shè)置 本溫濕度傳感器通訊數(shù)據(jù)幀格式采用固定的“N,8,1”格式,使用時請將串口設(shè)置成1位起始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗位。
2、數(shù)據(jù)寄存器地址
(二)應(yīng)用舉例 1、應(yīng)用舉例 (1)多個寄存器數(shù)據(jù)讀取 主機發(fā)送
子機響應(yīng) 地址為1的傳感器收到上面的數(shù)據(jù)后,將會做出以下響應(yīng)
(2)功能碼06應(yīng)用舉例:將子機地址改為2,波特率改為19200
功能碼06時的子機響應(yīng):子機會將主機發(fā)來的數(shù)據(jù)原封返回。
三、協(xié)議解析
以下對上方溫濕度傳感器及其協(xié)議進行數(shù)據(jù)解析。以下環(huán)境均搭建完畢
(一)需要準備工具及其環(huán)境: 1、溫濕度傳感器設(shè)備一套; 2、485串口線一條(USB轉(zhuǎn)232線,再通過232轉(zhuǎn)485口接傳感器485口); 3、windows環(huán)境作為上位機軟件Modbus Poll運行環(huán)境; (二)Modbus協(xié)議數(shù)據(jù)解析舉例 1、讀取溫濕度傳感器的溫度的測量值 (1)打開上位機軟件Modbus Poll,如下圖所示:
(2)通過在上位機軟件中進行串口連接相關(guān)配置(根據(jù)自己實際電腦串口號進行配置),如下圖所示:
(3)在上位機軟件中設(shè)置讀取傳感器的相關(guān)參數(shù),一般根據(jù)協(xié)議文檔中說明設(shè)置,如下圖對傳感器的溫度值進行讀?。?/p>
(4)打開日志進行記錄傳感器串口收發(fā)數(shù)據(jù),方便我們等下轉(zhuǎn)化值進行比對,如下所示:
點擊Log按鈕還可以將串口收發(fā)數(shù)據(jù)保存在文件中,方便查看。
(5)完成以上設(shè)置后,即可讀取傳感器的溫度值,如下所示:
(6)執(zhí)行讀取操作后,可以看到如下結(jié)果:
串口收發(fā)數(shù)據(jù)如下:
Tx:002-01 03 00 33 00 01 74 05
Rx:003-01 03 02 06 49 7A 12
根據(jù)協(xié)議文檔對上位機發(fā)送的串口數(shù)據(jù)01 03 00 33 00 01 74 05進行解析: 第一個字節(jié)01表示讀取地址為1的傳感器數(shù)據(jù); 第二個字節(jié)03表示功能碼; 第三、第四個字節(jié)00 33表示從寄存器的地址0x0033開始讀; 第五、第六個字節(jié)00 01表示讀取寄存器的個數(shù)為1; 第七、第八個字節(jié)74 05表示CRC碼; 根據(jù)協(xié)議文檔對傳感器返回的串口數(shù)據(jù)01?03?02 06 49 7A 12進行解析: 第一個字節(jié)01表示485地址為1的傳感器進行回應(yīng); 第二個字節(jié)03表示功能碼對應(yīng)3; 第三個字節(jié)02表示讀取一個寄存器對應(yīng)2個字節(jié)數(shù); 第四、第五兩個字節(jié)06 49表示寄存器地址為0x0033對應(yīng)的內(nèi)容,轉(zhuǎn)化為10進制等于1609,跟上位機軟件自動轉(zhuǎn)化的值一樣; 第六、第七兩個字節(jié)7A 12表示CRC碼; 2、讀取溫濕度傳感器的濕度、溫度、露點的測量值,即讀取3個寄存器地址所對應(yīng)的值
(1)在上位機軟件中設(shè)置讀取傳感器的相關(guān)參數(shù),一般根據(jù)協(xié)議文檔中說明設(shè)置,如下圖所示:
(2)開啟串口數(shù)據(jù)收發(fā)日志記錄
(3)執(zhí)行讀取操作后,可以看到如下結(jié)果:
串口收發(fā)數(shù)據(jù)如下:
Tx:004-01 03 00 32 00 03 A4 04
Rx:005-01 03 06 0F 5A 06 50 00 E4 79 55
根據(jù)協(xié)議文檔對上位機發(fā)送的串口數(shù)據(jù)01 03 00 32 00 03 A4 04進行解析: 第一個字節(jié)01表示讀取地址為1的傳感器數(shù)據(jù); 第二個字節(jié)03表示功能碼; 第三、第四個字節(jié)00 32表示從寄存器的地址0x0032開始讀; 第五、第六個字節(jié)00 03表示讀取寄存器的個數(shù)為3; 第七、第八個字節(jié)A4 04表示CRC碼; 根據(jù)協(xié)議文檔對傳感器返回的串口數(shù)據(jù)01 03 06 0F 5A 06 50 00 E4 79 55進行解析: 第一個字節(jié)01表示485地址為1的傳感器進行回應(yīng); 第二個字節(jié)03表示功能碼對應(yīng)3; 第三個字節(jié)06表示讀取3個寄存器對應(yīng)6個字節(jié)數(shù); 第四、第五兩個字節(jié)0F 5A表示寄存器地址為0x0032對應(yīng)的內(nèi)容,轉(zhuǎn)化為10進制等于3930,跟上位機軟件自動轉(zhuǎn)化的值一樣; 第六、第七兩個字節(jié)06?50表示寄存器地址為0x0033對應(yīng)的內(nèi)容,轉(zhuǎn)化為10進制等于1616,跟上位機軟件自動轉(zhuǎn)化的值一樣; 第八、第九兩個字節(jié)00?E4表示寄存器地址為0x0034對應(yīng)的內(nèi)容,轉(zhuǎn)化為10進制等于228,跟上位機軟件自動轉(zhuǎn)化的值一樣; 第十、第十一兩個字節(jié)79 55表示CRC碼;
四、總結(jié) 到此,我們已經(jīng)結(jié)合一款溫濕度傳感器的協(xié)議文檔,對它的Mudbus協(xié)議進行數(shù)據(jù)解析。其它產(chǎn)品的跟這個差不多,無非可能是參數(shù)指標多點。掌握其協(xié)議原理并且解析,可以有助于我們排查問題。比如客戶反饋溫濕度的值不準了,我們第一時間只能通過協(xié)議抓包解析,看看它底端的原始值是多少,才能知道不準的根本原因。 關(guān)于Mudbus協(xié)議數(shù)據(jù)轉(zhuǎn)化,我們經(jīng)常在16進制與10進制之間進行轉(zhuǎn)化,下面給大家附上一些在線轉(zhuǎn)換工具網(wǎng)址。 https://jisuan5.com/hexadecimal-to-decimal/
審核編輯:黃飛
?
評論
查看更多