Modbus協(xié)議

Modbus協(xié)議

概述

Modbus是全球第一個(gè)真正用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議。Modbus網(wǎng)絡(luò)是一個(gè)工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計(jì)算機(jī)通過公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過程監(jiān)控。
現(xiàn)在Modbus支持串行鏈路和以太網(wǎng)鏈路兩種硬件形式,從協(xié)議上說有Modbus RTU、Modbus ASCII、Modbus TCP。現(xiàn)在用的最多的就是基于串行鏈路的Modbus RTU和基于以太網(wǎng)的Modbus TCP兩種。在國(guó)標(biāo)中規(guī)定,在串行鏈路上,Modbus RTU協(xié)議是默認(rèn)項(xiàng),而Modbus ASCII為可選項(xiàng)。

Modbus協(xié)議說明

包字節(jié)順序都是按照高位在前,低位在后(大端模式)
Unit 1Byte設(shè)備碼,1byte功能碼,N數(shù)據(jù),
RTU 2byteCRC(小端)
網(wǎng)絡(luò) 6Byte包頭

網(wǎng)絡(luò)6Byte包頭
2byte包計(jì)數(shù)(小端),2byte協(xié)議(置0),2byte數(shù)據(jù)段長(zhǎng)度

Unit
1byte設(shè)備碼,1-255范圍
1byte功能碼,

功能碼 描述
1 讀取01,DO
2 讀取02,DI
3 讀取03,AO
4 讀取04,AI
5 寫入單個(gè)01,DO
6 寫入單個(gè)03,AO
15 寫入多個(gè)01,DO
16 寫入多個(gè)03,AO

N數(shù)據(jù)可歸類為讀取,單次寫,多次寫
1.讀取時(shí)發(fā)送請(qǐng)求包unit結(jié)構(gòu):

設(shè)備碼 功能碼 起始地址 寄存器(2byte)個(gè)數(shù)M
1byte 1byte 2byte 2byte

正常回復(fù)

設(shè)備碼 功能碼 數(shù)據(jù)段字節(jié)個(gè)數(shù)N 數(shù)據(jù)段字節(jié)
1byte 1byte 1byte N個(gè)byte

1,2數(shù)據(jù)表時(shí)存在 (M+7)/8 = N
3,4數(shù)據(jù)表時(shí)存在M*2=N

異常回復(fù)

設(shè)備碼 功能碼F 錯(cuò)誤碼E
1byte 1byte(F 0x80) 1byte

E錯(cuò)誤碼情況
01 所請(qǐng)求的數(shù)據(jù)表不存在
02 讀溢出(起始地址+長(zhǎng)度找不到)

  1. 單個(gè)寫
設(shè)備碼 功能碼 起始地址 目標(biāo)寄存器的設(shè)置值
1byte 1byte 2byte 2byte

回復(fù)幀

設(shè)備碼 功能碼 起始地址 目標(biāo)寄存器的設(shè)置值
1byte 1byte 2byte 2byte

異常回復(fù)(同上異常回復(fù))

3.多個(gè)寫

設(shè)備碼 功能碼 起始地址 寄存器個(gè)數(shù)n 數(shù)據(jù)byte長(zhǎng)度 數(shù)據(jù)byte
1byte 1byte 2byte 2byte 1byte Nbyte

其中,當(dāng)寄存器個(gè)數(shù)為n時(shí),對(duì)應(yīng)的數(shù)據(jù)長(zhǎng)度的byte長(zhǎng)度為:
當(dāng)為1,2表時(shí),所占用字節(jié)數(shù)為: (n+7)/8
當(dāng)為3,4表時(shí),所占字節(jié)數(shù)為: n*2

正常回復(fù)

設(shè)備碼 功能碼 起始地址 寄存器個(gè)數(shù)n
1byte 1byte 2byte 2byte

異常回復(fù)(同上異常回復(fù))

網(wǎng)絡(luò)Modbus TCP
6byte包頭+ModbusUnit

包計(jì)數(shù)(小端) 協(xié)議 Unit部分的字節(jié)數(shù) Modbus-unit部分
2byte 2byte協(xié)議(置0) Nbyte Nbyte

數(shù)據(jù)轉(zhuǎn)換
float 3.14
mem 0xF5C3 0x4048
mem C3 F5 48 40

大端數(shù)據(jù)+大端傳輸
transfer 40 48 F5 C3
convert 1 C3 F5 48 40

小端數(shù)據(jù)
傳輸 C3 F5 48 40

大端swap
傳輸 48 40 C3 F5 uint8[]
convert 1 0x4048 0xF5C3 uint16[]
0xF5C3 0x4048
C3 F5 48 40 UINT8[]

小端swap
傳輸 F5 C3 40 48
convert1 48 40 c3 f5
0x4048 0xf5c3
0xf5c3 0x4048

libmodbus中文手冊(cè)詳解

https://blog.csdn.net/qq_23670601/article/details/82155378

Libmodbus Manual Page

https://libmodbus.org/docs/v3.1.4/

工業(yè)控制系統(tǒng)安全之——Modbus學(xué)習(xí)筆記

https://cloud.tencent.com/developer/article/1045841
Modbus協(xié)議中涉及到DI、DO、AI、DO四張表

控制數(shù)據(jù)四種型式:

  • DI:DigitalInput(數(shù)字輸入,離散輸入),一個(gè)地址一個(gè)數(shù)據(jù)位,用戶只能讀取它的狀態(tài),不能修改。以一個(gè) bit表示 On/Off,用來記錄控制信號(hào)的狀態(tài)輸入,例如:開關(guān),接觸點(diǎn),馬達(dá)運(yùn)轉(zhuǎn),超限switch…等等。于PLC上被稱為Input relay、input coil等。

  • DO:DigitalOutput(數(shù)字輸出,線圈輸出),一個(gè)地址一個(gè)數(shù)據(jù)位,用戶可以置位、復(fù)位,可以回讀狀態(tài)。以一個(gè) bit表示 On/Off,用來輸出控制信號(hào),以激活或停止馬達(dá),警鈴,燈光…等等。于PLC上被稱為Output relay、Output coil等。

  • AI:Analog Input(模擬輸入,輸入寄存器),一個(gè)地址16位數(shù)據(jù),用戶只能讀,不能修改,,以16 bits integer表示一個(gè)數(shù)值,用來記錄控制信號(hào)的數(shù)值輸入,例如:溫度、流量、料量、速度、轉(zhuǎn)速、文件板開度、液位、重量…等等。于PLC上被稱為Input register。

  • AO:AnalogOutput(模擬輸出,保持寄存器),一個(gè)地址16位數(shù)據(jù),用戶可以寫,也可以回讀,以16 bits integer表示一個(gè)數(shù)值,用來輸出控制信號(hào)的數(shù)值,例如:溫度、流量、速度、轉(zhuǎn)速、文件板開度、飼料量…等等設(shè)定值。于PLC上被稱為Output register、Holding register。

Modbus-TCP和Modbus-RTU的區(qū)別:http://www.szyuanhao.com/news/573.html

Modbus rtu和Modbus tcp兩個(gè)協(xié)議的本質(zhì)都是MODBUS協(xié)議,都是靠MODBUS寄存器地址來交換數(shù)據(jù);但所用的硬件接口不一樣,Modbus RTU一般采用串口RS232C或RS485/422,而Modbus TCP一般采用以太網(wǎng)口。現(xiàn)在市場(chǎng)上有很多協(xié)議轉(zhuǎn)換器,可以輕松的將這些不同的協(xié)議相互轉(zhuǎn)換 如:Intesisbox可以把modbus rtu轉(zhuǎn)換成Modbus tcp
實(shí)際上Modbus協(xié)議包括ASCII、RTU、TCP。
標(biāo)準(zhǔn)的Modicon控制器使用RS232C實(shí)現(xiàn)串行的Modbus。Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和就答的方式,數(shù)據(jù)通訊采用Maser/Slave方式。Modbus的TCP協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和應(yīng)答的方式,數(shù)據(jù)通訊采用Server/Client的方式。

Modbus協(xié)議需要對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),串行協(xié)議中除有奇偶校驗(yàn)外,ASCII模式采用LRC校驗(yàn),RTU模式采用16位CRC校驗(yàn).
ModbusTCP模式?jīng)]有額外規(guī)定校驗(yàn),因?yàn)門CP協(xié)議是一個(gè)面向連接的可靠協(xié)議。

TCP和RTU協(xié)議非常類似,只要把RTU協(xié)議的兩個(gè)字節(jié)的校驗(yàn)碼去掉,然后在RTU協(xié)議的開始加上5個(gè)0和一個(gè)6并通過TCP/IP網(wǎng)絡(luò)協(xié)議發(fā)送出去即可。

Modbus相關(guān)參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。