一、協(xié)議的特點
TCP協(xié)議是1996年施耐德公司推出的基于TCP/IP協(xié)議的Modbus協(xié)議。此協(xié)議與Modbus-RTU協(xié)議最大的不同就是使用了在TCP/IP協(xié)議上專用的報文識別Modbus應(yīng)用數(shù)據(jù)單元。這種報文頭被稱為MBAP報文頭。
MBAP報文頭
報文頭的長度是7個字節(jié),分別有:事務(wù)處理標(biāo)識符,長度為兩個字節(jié),用于事務(wù)處理配對。它是Modbus的事務(wù)處理碼,每次通信后就要加一。協(xié)議標(biāo)識符,長度為兩個字節(jié),用于系統(tǒng)內(nèi)的多路復(fù)用。當(dāng)它的值是0(00 00),表示使用Modbus協(xié)議。長度,由兩個字節(jié)構(gòu)成,用于說明下面還有多少個字節(jié)的數(shù)量。這樣即使TCP將整個報文分為多個信息包傳輸,接收者也能識別報文的邊界。單元標(biāo)識符,由一個字節(jié)構(gòu)成,當(dāng)Modbus客戶端在請求中設(shè)置這個域,在響應(yīng)中服務(wù)器必須利用相同的值返回這個域,可以將其理解為設(shè)備地址。報文頭之后的功能碼和數(shù)據(jù)部分與Modbus-RTU協(xié)議相似。我們還是以實際的報文加以說明。
報文頭各區(qū)域含義
二、實驗設(shè)備介紹
實驗中將網(wǎng)絡(luò)調(diào)試助手軟件作為客戶機(主站),MT1004或MT2003遠程I/O模塊作為服務(wù)器(從站)。
主站和從站
MT1004有16個DO輸出端口(線圈)。
MT1004
MT2003有8組AI端口。
MT2003
它們可以測量電壓和電流信號。模塊的配套軟件可以查詢它的詳細信息也具有修改端口號等功能。我們盡量將端口號設(shè)置在2000以上,避免與其他協(xié)議產(chǎn)生沖突。打開MT軟件,找到模塊的IP地址、網(wǎng)關(guān)、端口等信息。在網(wǎng)絡(luò)調(diào)試助手的網(wǎng)絡(luò)設(shè)置中,選擇TCP Client協(xié)議類型,輸入遠程主機地址為192.168.1.200,遠程主機端口為2000。接著改變電腦的IP地址,使它們處于同一個網(wǎng)段內(nèi)。打開電腦的網(wǎng)絡(luò)設(shè)置,選擇以太網(wǎng),點擊屬性,選中Internet協(xié)議版本4,點擊屬性,輸入IP地址為:192.168.1.111,子網(wǎng)掩碼為255.255.255.0,點擊確定。返回網(wǎng)絡(luò)調(diào)試助手,點擊連接,這樣就可以在客戶端和服務(wù)器之間建立通信。此次通信我們沒有將模塊并聯(lián)到一起,所以兩模塊的參數(shù)設(shè)置都是相同的。(此段內(nèi)容是軟件及電腦的設(shè)置內(nèi)容,在文章下方推薦的視頻鏈接中可以看到。)
三、報文詳細說明
打開網(wǎng)絡(luò)調(diào)試軟件,點擊左上角電腦圖標(biāo),在工具選項中選擇MODBUS調(diào)試器,在出現(xiàn)的窗口中選擇Modbus-TCP協(xié)議?,F(xiàn)在我們想讀取模塊DO 5~DO 10的狀態(tài)。我們根據(jù)指令填寫字節(jié),設(shè)備默認的ID是01,Do在Modbus中被稱為線圈,所以選擇01命令。這里我們給出協(xié)議中四種數(shù)據(jù)類型的特征以及功能碼匯總。
寄存器種類
常用功能碼描述
打開MT1004模塊的用戶手冊選擇相應(yīng)的寄存器地址。
MT1004映射表
通道5的地址是00006,輸入的地址應(yīng)該是0x0005。讀取數(shù)據(jù)的長度是6個。所以生成的報文為:00 04 00 00 00 06 01 01 00 05 00 06。
01命令的請求報文
我們嘗試分析這個報文:00 04,是報文頭的事務(wù)處理標(biāo)識,點擊更新我們能看到它會加一,變?yōu)?0 05;
任務(wù)處理標(biāo)識自動加1
00 00,是協(xié)議標(biāo)識,說明使用Modbus協(xié)議;00 06,說明之后有六個字節(jié)的報文內(nèi)容;01,是單元標(biāo)識符,也就是設(shè)備地址;01,是功能碼,表示讀取線圈狀態(tài);00 05,是寄存器起始地址;00 06,是讀取的線圈數(shù)量。調(diào)整接收設(shè)置的格式為HEX,服務(wù)器(從機)返回的響應(yīng)報文是:00 05 00 00 00 04 01 01 01 00。
01命令的響應(yīng)報文
00 05,是此次通信的事務(wù)處理標(biāo)識,與請求報文保持一致;00 00,是協(xié)議標(biāo)識符,與請求報文一致;00 04,是提示之后有4個字節(jié)長度的內(nèi)容;01,是設(shè)備地址;01,是功能碼,與請求報文相同;01,說明接下來的報文長度;00,表明DO線圈均處于斷開狀態(tài)(0000 0000),高位用零補充。
接下來我們以閉合、斷開的規(guī)律改變通道5~10的線圈狀態(tài),也就是進行寫線圈操作,它的命令是0F。生成的報文是:00 07 00 00 00 08 01 0F 00 05 00 06 01 15。
0F命令的請求報文
報文的解釋是:00 07,事務(wù)處理標(biāo)識符;00 00,協(xié)議標(biāo)識,說明使用Modbus協(xié)議;00 08,說明接下來有8個字節(jié)的報文長度;01,是設(shè)備地址;0F,是功能碼,請求執(zhí)行寫線圈操作;00 05,是寄存器的起始地址;00 06,是寫寄存器的個數(shù);01,說明之后有一個字節(jié)的內(nèi)容;15,反映了要寫入的寄存器狀態(tài),我們將其寫成二進制是:0001 0101,對應(yīng)通道是10、9、8、7、6、5,最高兩位以0補齊。
響應(yīng)報文是:00 07 00 00 00 06 01 0F 00 05 00 06。
0F命令的響應(yīng)報文
對它的解釋是:00 07為事務(wù)處理標(biāo)識符;00 00為協(xié)議標(biāo)識符;00 06說明后面有6個字節(jié)的報文長度;01為設(shè)備地址;0F為功能碼;00 05是開始寄存器的地址;00 06是服務(wù)器一共改寫了6個線圈的狀態(tài),我們可以打開軟件看一下??梢娨呀?jīng)成功為線圈寫入狀態(tài)。
線圈狀態(tài)
最后,我們將壓力傳感器連接到MT2003模塊的AI 5通道上,嘗試讀取采集卡的輸入寄存器的值,功能碼是:04。各設(shè)備的接線圖如下圖所示:
設(shè)備接線圖
打開用戶手冊,AI 5的寄存器地址是6(十進制),
MT2003映射表
所以生成的響應(yīng)報文是:00 05 00 00 00 06 01 04 00 05 00 01。
04命令的請求報文
返回的響應(yīng)報文是:00 05 00 00 00 05 01 04 02 61 11。
04命令的響應(yīng)報文
通過報文可以看到,模塊寄存器中的值是61 11,它反映了模塊采集到的電流值的大小。將其轉(zhuǎn)換為十進制是24849。根據(jù)用戶手冊,4mA~20mA的電流值對應(yīng)0~65535(十進制)的數(shù)據(jù)值,所以24849對應(yīng)的電流值為10.07mA。依據(jù)壓力傳感器的技術(shù)指標(biāo),其測量到的壓力大小約為39.1MPa。計算過程如下圖所示。
計算(一)
計算(二)
Modbus-TCP協(xié)議產(chǎn)生錯誤時返回的報文與Modbus-RTU協(xié)議一樣,都是功能碼加0x80后跟著一個字節(jié)的錯誤代碼。大家可以觀看我們發(fā)布的Modbus-RTU協(xié)議的文章,這里我們就不再贅述了。
錯誤報文示例
以上就是Modbus-TCP協(xié)議的相關(guān)內(nèi)容。更推薦觀看文章內(nèi)容的視頻版:Modbus TCP協(xié)議說明
文章中使用的調(diào)試軟件是Modbus Poll,使用的模塊可以進入Smacq官網(wǎng)查看。有任何問題大家可以留言給我們或是直接從微信公眾號:Smacq思邁科華,聯(lián)系我們。
審核編輯 黃宇
-
Modbus TCP協(xié)議
+關(guān)注
關(guān)注
0文章
32瀏覽量
1522
發(fā)布評論請先 登錄
PROFINET轉(zhuǎn)MODBUS TCP網(wǎng)關(guān)接安科瑞馬達保護器案例
生物疫苗生產(chǎn)精度保障依托總線協(xié)議的Modbus TCP 轉(zhuǎn) RTU案例
智能物流立體倉庫通訊困境:基于協(xié)議轉(zhuǎn)換的Modbus TCP 轉(zhuǎn) Modbus RTU解決方案
光伏逆變器上料-測試協(xié)同依托數(shù)據(jù)采集的Modbus TCP 轉(zhuǎn) Modbus RTU協(xié)議應(yīng)用案例
DLT698轉(zhuǎn)Modbus RTU-TCP網(wǎng)關(guān)
Profinet從轉(zhuǎn)Modbus(TCP)主總線協(xié)議轉(zhuǎn)換網(wǎng)關(guān)
上海泗博網(wǎng)關(guān)ENS-317——解鎖串口設(shè)備數(shù)據(jù)直通 Modbus TCP 網(wǎng)絡(luò)
塔訊 Modbus RTU 轉(zhuǎn) Modbus TCP 在污水處理廠 PLC 數(shù)據(jù)采集中的配置案例
通用串口轉(zhuǎn)Modbus TCP 網(wǎng)關(guān)
Modbus TCP 轉(zhuǎn) Modbus RTU電腦端 TCP 與西門子 V20 變頻器的通信案例
CC\\-Link IE轉(zhuǎn)Modbus TCP:風(fēng)電設(shè)備通信的“雙語模式”
CCLinkIE與Modbus TCP的“跨界戀愛”:中央空調(diào)系統(tǒng)通信新姿勢!
CAN從站轉(zhuǎn)Modbus TCP主站總線協(xié)議轉(zhuǎn)換網(wǎng)關(guān)
JF - 600MT稱重變送器與Modbus TCP轉(zhuǎn)Profibus DP網(wǎng)關(guān)通訊案例
Modbus TCP協(xié)議說明
評論