電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 97|回復(fù): 0
收起左側(cè)

ModbusTCP協(xié)議及通信報(bào)文解讀

[復(fù)制鏈接]

359

主題

359

帖子

3318

積分

四級(jí)會(huì)員

Rank: 4

積分
3318
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-10-21 12:08:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容

作者 | 嵌入式情報(bào)局
Modbus大家都用過(guò),或者聽說(shuō)過(guò)吧?在嵌入式領(lǐng)域算是非常熱門的一種通信協(xié)議,今天來(lái)解讀一下ModbusTCP協(xié)議及通信報(bào)文。1、modbus協(xié)議設(shè)計(jì)思想   Modbus設(shè)備使用主從(客戶端-服務(wù)器)技術(shù)進(jìn)行通信,其中只有一個(gè)設(shè)備(主設(shè)備/客戶端)可以啟動(dòng)事務(wù)(稱為查詢)。其他設(shè)備(從設(shè)備/服務(wù)器)通過(guò)向主設(shè)備提供請(qǐng)求的數(shù)據(jù)或采取查詢中請(qǐng)求的操作進(jìn)行響應(yīng)。從設(shè)備是任何外圍設(shè)備(I/O轉(zhuǎn)換器、閥門、網(wǎng)絡(luò)驅(qū)動(dòng)器或其他測(cè)量設(shè)備),它處理信息并使用Modbus將其輸出發(fā)送到主設(shè)備。
主機(jī)可以尋址單個(gè)從機(jī),也可以向所有從機(jī)發(fā)起廣播消息。從屬服務(wù)器會(huì)返回對(duì)單獨(dú)發(fā)送給它們的所有查詢的響應(yīng),但不會(huì)響應(yīng)廣播查詢。從屬服務(wù)器不會(huì)自己?jiǎn)?dòng)消息,它們只響應(yīng)來(lái)自主服務(wù)器的查詢。
主查詢將包括一個(gè)從地址(或廣播地址)、一個(gè)定義所請(qǐng)求操作的功能代碼、任何所需數(shù)據(jù)和一個(gè)錯(cuò)誤檢查字段。從機(jī)的響應(yīng)由確認(rèn)所采取的操作、要返回的任何數(shù)據(jù)和錯(cuò)誤檢查字段組成。
請(qǐng)注意,查詢和響應(yīng)都包括設(shè)備地址、功能代碼、適用數(shù)據(jù)和錯(cuò)誤檢查字段。如果沒(méi)有發(fā)生錯(cuò)誤,則從設(shè)備的響應(yīng)包含所請(qǐng)求的數(shù)據(jù)。如果收到的查詢中出現(xiàn)錯(cuò)誤,或者從設(shè)備無(wú)法執(zhí)行請(qǐng)求的操作,則從設(shè)備將返回一條異常消息作為響應(yīng)。
從機(jī)消息幀的錯(cuò)誤檢查字段允許主機(jī)確認(rèn)消息的內(nèi)容是有效的。傳統(tǒng)的Modbus消息是串行傳輸?shù)模媾夹r?yàn)也應(yīng)用于其數(shù)據(jù)幀中的每個(gè)傳輸字符。
在這一點(diǎn)上,重要的是要區(qū)分Modbus本身是一個(gè)應(yīng)用協(xié)議,因?yàn)樗x了組織和解釋數(shù)據(jù)的規(guī)則,但仍然只是一個(gè)消息傳遞結(jié)構(gòu),獨(dú)立于底層物理層。
2、modbusTCP   Modbus消息結(jié)構(gòu)是一種應(yīng)用協(xié)議,定義了獨(dú)立于數(shù)據(jù)傳輸介質(zhì)的數(shù)據(jù)組織和解釋規(guī)則。
TCP/IP是指?jìng)鬏斂刂茀f(xié)議和互聯(lián)網(wǎng)協(xié)議,為Modbus TCP/IP消息提供傳輸介質(zhì)。
注意:TCP的主要功能是確保所有數(shù)據(jù)包都被正確接收,TCP/IP只是一個(gè)傳輸協(xié)議,并沒(méi)有定義數(shù)據(jù)的含義或數(shù)據(jù)的解釋方式,這是應(yīng)用協(xié)議的工作)。


從本質(zhì)上講,Modbus TCP/IP消息只是封裝在以太網(wǎng)TCP/IP封裝器中的Modbus通信。Modbus-TCP將標(biāo)準(zhǔn)Modbus數(shù)據(jù)幀嵌入到TCP幀中,沒(méi)有Modbus校驗(yàn)和,如下圖所示。

你一定會(huì)奇怪相比串口版本的modbusRTU,為什么沒(méi)有沒(méi)有使用Modbus錯(cuò)誤檢查字段校驗(yàn)。
因?yàn)門CPIP是一種可靠傳輸,其使用標(biāo)準(zhǔn)以太網(wǎng)TCP/IP鏈路層校驗(yàn)和方法來(lái)保證數(shù)據(jù)的完整性。
3、報(bào)文介紹  

還是把這張圖拿過(guò)來(lái)。從圖中可以看出,功能代碼和數(shù)據(jù)字段與原始形式一樣。
Modbus TCP/IP應(yīng)用數(shù)據(jù)單元(ADU)采用7字節(jié)報(bào)頭(事務(wù)標(biāo)識(shí)符+協(xié)議標(biāo)識(shí)符+長(zhǎng)度字段+單元標(biāo)識(shí)符)和協(xié)議數(shù)據(jù)單元(功能代碼+數(shù)據(jù))的形式。
MBAP標(biāo)頭長(zhǎng)7個(gè)字節(jié),包括以下字段:
  • 事務(wù)/調(diào)用標(biāo)識(shí)符(2個(gè)字節(jié)):當(dāng)客戶端沿同一TCP連接發(fā)送多條消息而不等待先前響應(yīng)時(shí),此標(biāo)識(shí)字段用于事務(wù)配對(duì)。
  • 協(xié)議標(biāo)識(shí)符(2字節(jié)):此字段對(duì)于Modbus服務(wù)始終為0,其他值保留用于未來(lái)擴(kuò)展。
  • 長(zhǎng)度(2字節(jié)):該字段是剩余字段的字節(jié)計(jì)數(shù),包括單元標(biāo)識(shí)符字節(jié)、功能代碼字節(jié)和數(shù)據(jù)字段。
  • 單元標(biāo)識(shí)符(1字節(jié)):此字段用于標(biāo)識(shí)位于非TCP/IP網(wǎng)絡(luò)上的遠(yuǎn)程服務(wù)器(用于串行橋接)。在典型的Modbus TCP/IP服務(wù)器應(yīng)用程序中,單元ID設(shè)置為00或FF,被服務(wù)器忽略,并在響應(yīng)中簡(jiǎn)單地回顯。
    完整的Modbus TCP/IP應(yīng)用數(shù)據(jù)單元嵌入到標(biāo)準(zhǔn)TCP幀的數(shù)據(jù)字段中,并通過(guò)TCP發(fā)送到系統(tǒng)端口502,該端口專門為Modbus應(yīng)用保留。
    Modbus TCP/IP客戶端和服務(wù)器通過(guò)端口502監(jiān)聽和接收Modbus數(shù)據(jù)。
    我們可以看到,Modbus在以太網(wǎng)上的操作對(duì)Modbus寄存器/命令結(jié)構(gòu)幾乎是透明的。因此,如果您已經(jīng)熟悉傳統(tǒng)Modbus的操作,那么您已經(jīng)非常熟悉Modbus TCP/IP的操作。
    聲明:本文素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。
    ------------ END ------------

    ●專欄《嵌入式工具●專欄《嵌入式開發(fā)》●專欄《Keil教程》●嵌入式專欄精選教程
    關(guān)注公眾號(hào)回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。
    點(diǎn)擊“閱讀原文”查看更多分享。
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表