[轉載]MODBUS TCP協(xié)議實例數(shù)據(jù)幀詳細分析

MODBUS TCP協(xié)議實例數(shù)據(jù)幀詳細分析
MODBUS TCP協(xié)議實例數(shù)據(jù)幀詳細分析
1.簡介
2.ModbusTCP數(shù)據(jù)幀
2.1.報文頭MBAP
2.2.幀結構PDU
3.ADU詳細結構
3.1. 0x01:讀線圈
3.2. 0x02:讀離散量輸入
3.3. 0x03:讀保持寄存器
3.4. 0x04:讀輸入寄存器
3.5. 0x05:寫單個線圈
3.6. 0x06:寫單個保持寄存器
3.7. 0x0F:寫多個線圈
3.8. 0x10:寫多個保持寄存器
1.簡介
Modbus由MODICON公司于1979年開發(fā),是一種工業(yè)現(xiàn)場總線協(xié)議標準。1996年施耐德公司推出基于以太網(wǎng)TCP/IP的Modbus協(xié)議:ModbusTCP陋气。Modbus協(xié)議是一項應用層報文傳輸協(xié)議橡羞,包括ASCII看疗、RTU、TCP三種報文類型。標準的Modbus協(xié)議物理層接口有RS232、RS422啤呼、RS485和以太網(wǎng)接口,采用master/slave方式通信呢袱。

2.ModbusTCP數(shù)據(jù)幀
ModbusTCP的數(shù)據(jù)幀可分為兩部分:MBAP+PDU官扣,如下圖所示。

2.1.報文頭MBAP
MBAP為報文頭羞福,長度為7字節(jié)惕蹄,組成如下:

事務處理標識 協(xié)議標識 長度 單元標識符
2字節(jié) 2字節(jié) 2字節(jié) 1字節(jié)
內(nèi)容 含義
事務處理標識 可以理解為報文的序列號,一般每次通信之后就要加1以區(qū)別不同的通信數(shù)據(jù)報文
協(xié)議標識符 00 00 表示Modbus TCP協(xié)議
長度 表示接下來的數(shù)據(jù)長度坯临,單位為字節(jié)焊唬。
單元標識符 可以理解為設備地址
2.2.幀結構PDU
PDU由功能碼+數(shù)據(jù)組成。功能碼為1字節(jié)看靠,數(shù)據(jù)長度不定,由具體功能決定液肌。
Modbus的操作對象有四種:線圈挟炬、離散輸入、保持寄存器、輸入寄存器谤祖。

對象 含義
線圈 PLC的輸出位婿滓,開關量,在Modbus中可讀可寫
離散量 PLC的輸入位粥喜,開關量凸主,在Modbus中只讀
輸入寄存器 PLC中只能從模擬量輸入端改變的寄存器,在Modbus中只讀
保持寄存器 PLC中用于輸出模擬量信號的寄存器额湘,在Modbus中可讀可寫
根據(jù)對象的不同卿吐,Modbus的功能碼有:
功能碼 含義
– –
0x01 讀線圈
0x02 讀離散量輸入
0x03 讀保持寄存器
0x04 讀輸入寄存器
0x05 寫單個線圈
0x06 寫單個保持寄存器
0x0F 寫多個線圈
0x10 寫多個保持寄存器
說明更詳細的表如下表所示
功能碼 中文含義解析
– –
0x01 讀線圈狀態(tài)
0x02 讀離散量輸入狀態(tài)
0x03 讀保持寄存器
0x04 讀輸入寄存器
0x05 寫單個線圈
0x06 寫單個保持寄存器
0x0F 寫多個線圈
0x10 寫多個保持寄存器
3.ADU詳細結構
3.1. 0x01:讀線圈
在從站中讀連續(xù)線圈狀態(tài),ON=1,OFF=0锋华。

請求:
MBAP 功能碼 起始地址H 起始地址L 線圈數(shù)量H 線圈數(shù)量L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
響應:
MBAP 功能碼 線圈數(shù)據(jù)長度 數(shù)據(jù)
7字節(jié) 1字節(jié) 1字節(jié) 線圈數(shù)據(jù)長度個字節(jié)
注意:線圈數(shù)據(jù)長度=1+(線圈數(shù)-1)/8

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

請求:
MBAP 功能碼 起始地址H 起始地址L 線圈數(shù)量H 線圈數(shù)量L
00 01 00 00 00 06 01 01 00 00 00 08
如:數(shù)據(jù)長度為0x01個字節(jié)衍腥,數(shù)據(jù)為0x01,第一個線圈為ON纳猫,其余為OFF婆咸。

響應:
MBAP 功能碼 線圈數(shù)據(jù)長度 數(shù)據(jù)
00 01 00 00 00 04 01 01 01 01
3.2. 0x02:讀離散量輸入
在從站中讀連續(xù)離散量輸入狀態(tài),ON=1,OFF=0芜辕。

請求:
MBAP 功能碼 起始地址H 起始地址L 離散量輸入數(shù)量H 離散量輸入數(shù)量L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
響應:
MBAP 功能碼 離散量輸入數(shù)據(jù)長度 數(shù)據(jù)
7字節(jié) 1字節(jié) 1字節(jié) 離散量輸入數(shù)據(jù)長度個字節(jié)
注意:離散量輸入數(shù)據(jù)長度=1+(離散量輸入-1)/8

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

請求:
MBAP 功能碼 起始地址H 起始地址L 離散量輸入數(shù)量H 離散量輸入數(shù)量L
00 01 00 00 00 06 01 02 00 00 00 08
如:在從站0x01中乖仇,讀取開始地址為0x0000的離散量輸入數(shù)據(jù),讀0x008位

響應:
MBAP 功能碼 離散量輸入數(shù)據(jù)長度 數(shù)據(jù)
00 01 00 00 00 04 01 02 01 01
3.3. 0x03:讀保持寄存器
在從站中讀連續(xù)保持寄存器的值

請求:
MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
響應:
MBAP 功能碼 數(shù)據(jù)長度 數(shù)據(jù)
7字節(jié) 1字節(jié) 1字節(jié) 數(shù)據(jù)長度個字節(jié)
注意:保持寄存器數(shù)據(jù)長度=保持寄存器數(shù)*2

如:在從站0x01中询兴,讀取開始地址為0x0000的保持寄存器數(shù)據(jù)乃沙,讀0x003個

請求:
MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L
00 01 00 00 00 06 01 03 00 00 00 03
如:數(shù)據(jù)長度為0x06個字節(jié),第1個寄存器的數(shù)據(jù)為0x21诗舰,其余為0x00警儒。

響應:
MBAP 功能碼 數(shù)據(jù)長度 數(shù)據(jù)
00 01 00 00 00 09 01 03 06 00 21 00 00 00 00
3.4. 0x04:讀輸入寄存器
在從站中讀連續(xù)輸入寄存器的值

請求:
MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
響應:
MBAP 功能碼 數(shù)據(jù)長度 數(shù)據(jù)
7字節(jié) 1字節(jié) 1字節(jié) 數(shù)據(jù)長度個字節(jié)
注意:輸入寄存器數(shù)據(jù)長度=輸入寄存器數(shù)*2

如:在從站0x01中,讀取開始地址為0x0000的輸入寄存器數(shù)據(jù)眶根,讀0x003個

請求:
MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L
00 01 00 00 00 06 01 04 00 00 00 03
如:數(shù)據(jù)長度為0x06個字節(jié)蜀铲,第1個寄存器的數(shù)據(jù)為0x21,其余為0x00属百。

響應:
MBAP 功能碼 數(shù)據(jù)長度 數(shù)據(jù)
00 01 00 00 00 09 01 04 06 00 21 00 00 00 00
3.5. 0x05:寫單個線圈
將從站中的一個線圈輸出寫成ON或OFF记劝,0xFF00請求輸出為ON,0x000請求輸出為OFF

請求:
MBAP 功能碼 線圈地址H 線圈地址L 輸出值H 輸出值L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
響應:
MBAP 功能碼 線圈地址H 線圈地址L 輸出值H 輸出值L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
如:在從站0x01中,將地址為0x0000的線圈設置為ON

請求:
MBAP 功能碼 線圈地址H 線圈地址L 輸出值H 輸出值L
00 01 00 00 00 06 01 05 00 00 FF 00
響應:
MBAP 功能碼 線圈地址H 線圈地址L 輸出值H 輸出值L
00 01 00 00 00 06 01 05 00 00 FF 00
3.6. 0x06:寫單個保持寄存器
將從站中的一個保持寄存器設置

請求:
MBAP 功能碼 保持寄存器地址H 保持寄存器地址L 設置值H 設置值L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
響應:
MBAP 功能碼 保持寄存器地址H 保持寄存器地址L 設置值H 設置值L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
如:在從站0x01中族扰,將地址為0x0000的保持寄存器設置為0x000A厌丑。

請求:
MBAP 功能碼 保持寄存器地址H 保持寄存器地址L 設置值H 設置值L
00 01 00 00 00 06 01 06 00 00 00 0A
響應:
MBAP 功能碼 保持寄存器地址H 保持寄存器地址L 設置值H 設置值L
00 01 00 00 00 06 01 06 00 00 00 0A
3.7. 0x0F:寫多個線圈
將從站中的多個線圈輸出寫成ON或OFF定欧,線圈輸出值每1位“1”請求輸出為ON,“0”請求輸出為OFF

請求:
MBAP 功能碼 線圈起始地址H 線圈起始地址L 線圈數(shù)H 線圈數(shù)L 線圈輸出字節(jié)長度 線圈輸出值
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
注意:線圈輸出字節(jié)長度=1+(線圈數(shù)-1)/8

響應:
MBAP 功能碼 線圈起始地址H 線圈起始地址L 線圈數(shù)H 線圈數(shù)L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
如:在從站0x01中,將以地址0x0000開始連續(xù)的4個線圈設置為ON

請求:
MBAP 功能碼 線圈起始地址H 線圈起始地址L 線圈數(shù)H 線圈數(shù)L 線圈輸出字節(jié)長度 線圈輸出值
00 01 00 00 00 08 01 0F 00 00 00 04 01 0F
響應:
MBAP 功能碼 線圈起始地址H 線圈起始地址L 線圈數(shù)H 線圈數(shù)L
00 01 00 00 00 06 01 0F 00 00 00 04
3.8. 0x10:寫多個保持寄存器
寫從站中的多個連續(xù)的寄存器怒竿。

請求:
MBAP 功能碼 寄存器起始地址H 寄存器起始地址L 寄存器數(shù)H 寄存器數(shù)L 寄存器數(shù)據(jù)字節(jié)長度 寄存器數(shù)據(jù)
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
注意:寄存器數(shù)據(jù)字節(jié)長度=寄存器數(shù)量×2

響應:
MBAP 功能碼 寄存器起始地址H 寄存器起始地址L 寄存器數(shù)H 寄存器數(shù)L
7字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié) 1字節(jié)
如:在從站0x01中砍鸠,向起始地址為0x0000,數(shù)量為0x0001的寄存器寫入數(shù)據(jù)耕驰,數(shù)據(jù)長度為0x02爷辱,數(shù)據(jù)為0x000F。

請求:
MBAP 功能碼 寄存器起始地址H 寄存器起始地址L 寄存器數(shù)H 寄存器數(shù)L 寄存器數(shù)據(jù)字節(jié)長度 寄存器數(shù)據(jù)
00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F
響應:
MBAP 功能碼 寄存器起始地址H 寄存器起始地址L 寄存器數(shù)H 寄存器數(shù)L
00 01 00 00 00 06 01 10 00 00 00 01

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朦肘,一起剝皮案震驚了整個濱河市饭弓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厚骗,老刑警劉巖示启,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異领舰,居然都是意外死亡夫嗓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門冲秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舍咖,“玉大人,你說我怎么就攤上這事锉桑∨琶梗” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵民轴,是天一觀的道長攻柠。 經(jīng)常有香客問我,道長后裸,這世上最難降的妖魔是什么瑰钮? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮微驶,結果婚禮上浪谴,老公的妹妹穿的比我還像新娘。我一直安慰自己因苹,他們只是感情好苟耻,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扶檐,像睡著了一般凶杖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蘸秘,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天官卡,我揣著相機與錄音蝗茁,去河邊找鬼醋虏。 笑死寻咒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的颈嚼。 我是一名探鬼主播毛秘,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阻课!你這毒婦竟也來了叫挟?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤限煞,失蹤者是張志新(化名)和其女友劉穎抹恳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體署驻,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡奋献,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旺上。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶蚂。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宣吱,靈堂內(nèi)的尸體忽然破棺而出窃这,到底是詐尸還是另有隱情,我是刑警寧澤征候,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布杭攻,位于F島的核電站,受9級特大地震影響疤坝,放射性物質發(fā)生泄漏兆解。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一卒煞、第九天 我趴在偏房一處隱蔽的房頂上張望痪宰。 院中可真熱鬧,春花似錦畔裕、人聲如沸衣撬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽具练。三九已至,卻和暖如春甜无,著一層夾襖步出監(jiān)牢的瞬間扛点,已是汗流浹背哥遮。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陵究,地道東北人眠饮。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像铜邮,于是被迫代替她去往敵國和親仪召。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 讀線圈狀態(tài) 讀取從設備的線圈或離散量輸出狀態(tài)松蒜,即DO(Discrete Output扔茅,離散輸出)請求碼:01地址范...
    中_中_閱讀 17,574評論 0 1
  • 電力系統(tǒng)是一個綜合化的系統(tǒng),作為一個熟練的電工秸苗,對于通信有著一定的認識召娜。否則很多問題,我們將無從下手惊楼。首先我們從廣...
    洪城小電工閱讀 117,614評論 8 34
  • Modbus地址區(qū)的0x玖瘸、1x、3x胁后、4x各代表什么店读?如何區(qū)分和應用?0x、1x攀芯、 3x屯断、4x各是一片數(shù)據(jù)區(qū),是M...
    andycheng閱讀 886評論 0 1
  • 概述 Modbus協(xié)議最初由Modicon公司開發(fā)出來侣诺,在1979年末該公司成為施耐德自動化部門的一部分殖演,現(xiàn)在Mo...
    得奕閱讀 1,940評論 1 0
  • 一、Modbus 協(xié)議簡介 ModBus網(wǎng)絡是一個工業(yè)通信系統(tǒng)年鸳,由帶智能終端的可編程序控制器和計算機通過公用線路或...
    漠漠彡閱讀 91,984評論 2 21