0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳解ModbusTCP協(xié)議

jf_kBxdsOIg ? 來源:你身邊的機器人專家 ? 2023-07-26 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【導讀】【視頻+圖文】詳解ModbusTCP協(xié)議。

概述

Modbus由MODICON公司于1979年開發(fā),是一種工業(yè)現(xiàn)場總線協(xié)議標準。1996年施耐德公司推出基于以太網(wǎng)TCP/IP的Modbus協(xié)議:ModbusTCP。Modbus協(xié)議是一項應用層報文傳輸協(xié)議,包括ASCII、RTU、TCP三種報文類型。標準的Modbus協(xié)議物理層接口RS232RS422、RS485和以太網(wǎng)接口,采用master/slave方式通信。

Modbus TCP數(shù)據(jù)幀

ModbusTCP的數(shù)據(jù)幀可分為兩部分:MBAP+PDU。

(一)報文頭MBAP :MBAP為報文頭,長度為7字節(jié),組成如下:

wKgaomTAikuAay-WAAA6iv50Mk0073.png

wKgaomTAikuAZHcLAADeFtD4FqI415.png

(二)幀結(jié)構(gòu)PDU :PDU由功能碼+數(shù)據(jù)組成。功能碼為1字節(jié),數(shù)據(jù)長度不定,由具體功能決定。

(1)功能碼: Modbus的操作對象有四種:線圈、離散輸入、保持寄存器、輸入寄存器。

wKgZomTAikuADSp8AADdccs1D64082.png

(2)根據(jù)對象的不同,Modbus的功能碼有:

wKgaomTAikuAIfWvAADLz5SiS6s984.png

(3)說明更詳細的表:

wKgZomTAikuAAaH9AAEodLnJQrU552.png

PDU詳細結(jié)構(gòu)

(1)0x01:讀線圈: 在從站中讀1~2000個連續(xù)線圈狀態(tài),ON=1,OFF=0

請求:MBAP 功能碼 起始地址H 起始地址L 數(shù)量H 數(shù)量L(共12字節(jié))

響應:MBAP 功能碼 數(shù)據(jù)長度 數(shù)據(jù)(一個地址的數(shù)據(jù)為1位)

如:在從站0x01中,讀取開始地址為0x0002的線圈數(shù)據(jù),讀0x0008位

00 01 00 00 00 06 01 01 00 02 00 08

回:數(shù)據(jù)長度為0x01個字節(jié),數(shù)據(jù)為0x01,第一個線圈為ON,其余為OFF

00 01 00 00 00 04 01 01 01 01

(2)0x05:寫單個線圈: 將從站中的一個輸出寫成ON或OFF,0xFF00請求輸出為ON,0x000請求輸出為OFF。

請求:MBAP 功能碼 輸出地址H 輸出地址L 輸出值H 輸出值L(共12字節(jié))

響應:MBAP 功能碼 輸出地址H 輸出地址L 輸出值H 輸出值L(共12字節(jié))

如:將地址為0x0003的線圈設為ON

00 01 00 00 00 06 01 05 00 03 FF 00

回:寫入成功

00 01 00 00 00 06 01 05 00 03 FF 00

(3)0x0F:寫多個線圈: 將一個從站中的一個線圈序列的每個線圈都強制為ON或OFF,數(shù)據(jù)域中置1的位請求相應輸出位ON,置0的位請求響應輸出為OFF。

請求:MBAP 功能碼 起始地址H 起始地址L 輸出數(shù)量H 輸出數(shù)量L 字節(jié)長度 輸出值H 輸出值L

響應:MBAP 功能碼 起始地址H 起始地址L 輸出數(shù)量H 輸出數(shù)量L

(4)0x02:讀離散量輸入: 從一個從站中讀1~2000個連續(xù)的離散量輸入狀態(tài)。

請求:MBAP 功能碼 起始地址H 起始地址L 數(shù)量H 數(shù)量L(共12字節(jié))

響應:MBAP 功能碼 數(shù)據(jù)長度 數(shù)據(jù)(長度:9+ceil(數(shù)量/8))

如:從地址0x0000開始讀0x0012個離散量輸入

00 01 00 00 00 06 01 02 00 00 00 12

回:數(shù)據(jù)長度為0x03個字節(jié),數(shù)據(jù)為0x01 04 00,表示第一個離散量輸入和第11個離散量輸入為ON,其余為OFF

00 01 00 00 00 06 01 02 03 01 04 00

(5)0x04:讀輸入寄存器: 從一個遠程設備中讀1~2000個連續(xù)輸入寄存器。

請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L(共12字節(jié))

響應:MBAP 功能碼 數(shù)據(jù)長度 寄存器數(shù)據(jù)(長度:9+寄存器數(shù)量×2)

如:讀起始地址為0x0002,數(shù)量為0x0005的寄存器數(shù)據(jù)

00 01 00 00 00 06 01 04 00 02 00 05

回:數(shù)據(jù)長度為0x0A,第一個寄存器的數(shù)據(jù)為0x0c,其余為0x00

00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00

(6)0x03:讀保持寄存器: 從遠程設備中讀保持寄存器連續(xù)塊的內(nèi)容。

請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L(共12字節(jié))

響應:MBAP 功能碼 數(shù)據(jù)長度 寄存器數(shù)據(jù)(長度:9+寄存器數(shù)量×2)

如:起始地址是0x0000,寄存器數(shù)量是 0x0003

00 01 00 00 00 06 01 03 00 00 00 03

回:數(shù)據(jù)長度為0x06,第一個寄存器的數(shù)據(jù)為0x21,其余為0x00

00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

(7)0x06:寫單個保持寄存器: 在一個遠程設備中寫一個保持寄存器。

請求:MBAP 功能碼 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字節(jié))

響應:MBAP 功能碼 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字節(jié))

如:向地址是0x0000的寄存器寫入數(shù)據(jù)0x000A

00 01 00 00 00 06 01 06 00 00 00 0A

回:寫入成功

00 01 00 00 00 06 01 06 00 00 00 0A

(8)0x10:寫多個保持寄存器: 在一個遠程設備中寫連續(xù)寄存器塊(1~123個寄存器)。

請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L 字節(jié)長度 寄存器值(13+寄存器數(shù)量×2)

響應:MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L(共12字節(jié))

如:向起始地址為0x0000,數(shù)量為0x0001的寄存器寫入數(shù)據(jù),數(shù)據(jù)長度為0x02,數(shù)據(jù)為0x000F

00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F

回:寫入成功

00 01 00 00 00 06 01 10 00 00 00 01

Modbus TCP示例報文

ModBusTcp與串行鏈路Modbus的數(shù)據(jù)域是一致的,具體數(shù)據(jù)域可以參考串行Modbus。這里給出幾個ModbusTcp的鏈路解析說明,輔助新人分析報文。

wKgZomTAikuAN83sAAC9zYML8C0554.jpg

wKgZomTAikuAahEOAAFDB3K5uKQ186.jpg

wKgaomTAikuAZp0YAADB59_FTwA776.jpg

wKgZomTAikuATDepAAC7-4oLw5A286.jpg

Modbus TCP通信

(一)通信方式

Modbus設備可分為主站(poll)和從站(slave)。主站只有一個,從站有多個,主站向各從站發(fā)送請求幀,從站給予響應。在使用TCP通信時,主站為client端,主動建立連接;從站為server端,等待連接。

主站請求:功能碼+數(shù)據(jù)

從站正常響應:請求功能碼+響應數(shù)據(jù)

從站異常響應:異常功能碼+異常碼,其中異常功能碼即將請求功能碼的最高有效位置1,異常碼指示差錯類型

需要超時管理機制,避免無期限的等待可能不出現(xiàn)的應答

IANA(Internet Assigned Numbers Authority,互聯(lián)網(wǎng)編號分配管理機構(gòu))給Modbus協(xié)議賦予TCP端口號為 502 ,這是目前在儀表與自動化行業(yè)中唯一分配到的端口號。

(二)通信過程

connect 建立TCP連接

準備Modbus報文

使用send命令發(fā)送報文

在同一連接下等待應答

使用recv命令讀取報文,完成一次數(shù)據(jù)交換

通信任務結(jié)束時,關閉TCP連接

仿真軟件

Modbus poll 和Modbus slave是一組Modbus仿真軟件,可以實現(xiàn)Modbus RTU、TCP、串口仿真等。

仿真軟件網(wǎng)址:https://modbustools.com/download.html

在ModbusTCP中,Modbus poll 作為客戶端請求數(shù)據(jù),Modbus slave 作為服務器端處理請求。

使用c語言編寫客戶端連接Modbus slave時,注意數(shù)據(jù)格式,一條指令一次性發(fā)出,否則連接會出錯。

使用軟件時,需要指定功能碼,在setup->slave definition或者poll definition中進行設置。

– slave ID:從站編號(事務標識符)

– function:功能碼,0x01對應線圈操作,0x02對應離散量操作,0x03對應保持寄存器操作,0x04對應輸入寄存器操作

– address:開始地址

– quantity:寄存器/線圈/離散量 的數(shù)量

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 以太網(wǎng)

    關注

    41

    文章

    5628

    瀏覽量

    175665
  • 通信
    +關注

    關注

    18

    文章

    6199

    瀏覽量

    137711
  • PDU
    PDU
    +關注

    關注

    0

    文章

    96

    瀏覽量

    17303
  • 總線協(xié)議

    關注

    0

    文章

    128

    瀏覽量

    15248
  • ModbusTCP
    +關注

    關注

    0

    文章

    215

    瀏覽量

    4890

原文標題:【干貨】ModbusTCP協(xié)議詳解

文章出處:【微信號:你身邊的機器人專家,微信公眾號:你身邊的機器人專家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    圖文詳解ModbusTCP協(xié)議

    Modbus由MODICON公司于1979年開發(fā),是種工業(yè)現(xiàn)場總線協(xié)議標準。1996年施耐德公司推出基于以太網(wǎng)TCP/IP的Modbus協(xié)議ModbusTCP。Modbus
    發(fā)表于 11-16 11:31 ?4w次閱讀

    ModbusTCP轉(zhuǎn)CanOpen網(wǎng)關助力工控行業(yè)

    在工業(yè)自動化領域,協(xié)議轉(zhuǎn)換網(wǎng)關直扮演著至關重要的角色。其中,modbustcp轉(zhuǎn)canopen網(wǎng)關以其獨特的優(yōu)勢,成為不同設備間通信的橋梁。這款網(wǎng)關將modbus TCP協(xié)議的設備與
    發(fā)表于 12-11 10:53

    知道ModbusTCP協(xié)議和上位機編寫

    Modbus由MODICON公司于1979年開發(fā),是種工業(yè)現(xiàn)場總線協(xié)議標準。Modbus協(xié)議項應用層報文傳輸協(xié)議,包括ASCII、RT
    發(fā)表于 11-20 10:52 ?5265次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>知道<b class='flag-5'>ModbusTCP</b><b class='flag-5'>協(xié)議</b>和上位機編寫

    ModbusTCP報文詳解

    ModbusTCP報文詳解是工業(yè)控制常用的協(xié)議,通過對Modbus報文的理解,能很快提升自己的實際應用能力。
    發(fā)表于 06-07 15:15 ?4次下載

    詳解精密封裝技術

    詳解精密封裝技術
    的頭像 發(fā)表于 12-30 15:41 ?1927次閱讀

    詳解分立元件門電路

    詳解分立元件門電路
    的頭像 發(fā)表于 03-27 17:44 ?4004次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>分立元件門電路

    詳解pcb和smt的區(qū)別

    詳解pcb和smt的區(qū)別
    的頭像 發(fā)表于 10-08 09:31 ?4463次閱讀

    詳解pcb地孔的作用

    詳解pcb地孔的作用
    的頭像 發(fā)表于 10-30 16:02 ?2243次閱讀

    詳解pcb不良分析

    詳解pcb不良分析
    的頭像 發(fā)表于 11-29 17:12 ?1510次閱讀

    詳解pcb的msl等級

    詳解pcb的msl等級
    的頭像 發(fā)表于 12-13 16:52 ?1.3w次閱讀

    詳解pcb微帶線設計

    詳解pcb微帶線設計
    的頭像 發(fā)表于 12-14 10:38 ?4948次閱讀

    詳解pcb的組成和作用

    詳解pcb的組成和作用
    的頭像 發(fā)表于 12-18 10:48 ?2349次閱讀

    智能樓宇系統(tǒng)canopen協(xié)議ModbusTCP協(xié)議進行通訊

    通過耐特森CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備進行轉(zhuǎn)換:可以使用個CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備,將CANopen協(xié)議轉(zhuǎn)換為Modbus TCP
    的頭像 發(fā)表于 01-03 15:17 ?711次閱讀

    智能樓宇系統(tǒng)canopen協(xié)議ModbusTCP協(xié)議進行通訊

    通過CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備進行轉(zhuǎn)換:可以使用個CANopen轉(zhuǎn)ModbusTCP網(wǎng)關設備,將CANopen協(xié)議轉(zhuǎn)換為Modbus TCP
    的頭像 發(fā)表于 01-03 15:20 ?717次閱讀
    智能樓宇系統(tǒng)canopen<b class='flag-5'>協(xié)議</b>與<b class='flag-5'>ModbusTCP</b><b class='flag-5'>協(xié)議</b>進行通訊

    【實用篇】ModbusTCP協(xié)議詳解

    ModBusTcp與串行鏈路Modbus的數(shù)據(jù)域是致的,具體數(shù)據(jù)域可以參考串行Modbus。這里給出幾個ModbusTcp的鏈路解析說明,輔助新人分析報文。
    的頭像 發(fā)表于 01-14 11:13 ?3958次閱讀
    【實用篇】<b class='flag-5'>ModbusTCP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>詳解</b>

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品