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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

Modbus RTU通訊協(xié)議詳解與實(shí)例演示

jf_10471008 ? 來源:jf_10471008 ? 作者:jf_10471008 ? 2022-07-22 14:27 ? 次閱讀

Modbus通訊協(xié)議詳解

Modbus RTU通訊協(xié)議在數(shù)據(jù)通訊上采用主從應(yīng)答的方式進(jìn)行。只能由主機(jī)(PC,HMI等)通過唯一從機(jī)地址發(fā)起請(qǐng)求,從機(jī)(終端設(shè)備)根據(jù)主機(jī)請(qǐng)求進(jìn)行響應(yīng),即半雙工通訊。該協(xié)議只允許主機(jī)發(fā)起請(qǐng)求,從機(jī)進(jìn)行被動(dòng)響應(yīng),因此從機(jī)不會(huì)主動(dòng)占用通訊線路造成數(shù)據(jù)沖突。

類似Modbus RTU協(xié)議的主從應(yīng)答協(xié)議還有西門子的PPI、電表常用的DL/T645-2007等協(xié)議。

一、modbus協(xié)議格式

信息傳輸為異步方式,使用16進(jìn)制進(jìn)行通訊,信息幀格式:


地址碼

功能碼

數(shù)據(jù)區(qū)

CRC校驗(yàn)碼

1字節(jié)

1字節(jié)

N字節(jié)

2字節(jié)

地址碼

地址碼是每個(gè)通訊信息幀的第一個(gè)字節(jié),一般支持1到247,部分設(shè)備也支持0地址,用于接收主機(jī)的廣播數(shù)據(jù),每個(gè)從機(jī)在總線上地址必須唯一,只有與主機(jī)發(fā)送的地址碼相符的從機(jī)才能響應(yīng)返回?cái)?shù)據(jù)。

功能碼

功能碼是每個(gè)通訊信息幀的第二個(gè)字節(jié)。主機(jī)發(fā)送,通過功能碼告知從機(jī)設(shè)備應(yīng)當(dāng)執(zhí)行何種操作。

常見的八種功能碼:

功能碼

定義

操作

01H

讀取線圈

讀取一個(gè)或多個(gè)連續(xù)線圈狀態(tài)

05H

寫單個(gè)線圈

操作指定位置的線圈狀態(tài)

0FH

寫多個(gè)線圈

操作多個(gè)連續(xù)線圈狀態(tài)

02H

讀取離散量輸入

讀取一個(gè)或多個(gè)連續(xù)離散輸入狀態(tài)

04H

讀取輸入寄存器

讀取一個(gè)或多個(gè)連續(xù)輸入寄存器數(shù)據(jù)

03H

讀保持寄存器

讀取一個(gè)或多個(gè)保持寄存器數(shù)據(jù)

06H

寫單個(gè)保持寄存器

把兩個(gè)十六進(jìn)制數(shù)據(jù)寫入對(duì)應(yīng)位置

10H

寫多個(gè)保持寄存器

把4*N個(gè)十六進(jìn)制數(shù)據(jù)寫入N個(gè)連續(xù)保持寄存器

數(shù)據(jù)區(qū)

數(shù)據(jù)區(qū)隨功能碼以及數(shù)據(jù)方向的不同而不同,這些數(shù)據(jù)可以是“寄存器首地址+讀取寄存器數(shù)量”、“寄存器地址+操作數(shù)據(jù)”、“寄存器首地址+操作寄存數(shù)量+數(shù)據(jù)長(zhǎng)度+數(shù)據(jù)”等不同的組合,在“功能碼分析”詳解不同功能碼的數(shù)據(jù)區(qū)。

Modbus CRC校驗(yàn)

Modbus RTU協(xié)議常用與工業(yè)現(xiàn)場(chǎng)對(duì)數(shù)據(jù)傳輸?shù)姆€(wěn)定性和正確性有較高的要求,因此通過CRC校驗(yàn)保證數(shù)據(jù)傳輸?shù)恼_性和完整性。

二、錯(cuò)誤反饋

地址與CRC校驗(yàn)錯(cuò)誤并不會(huì)收到從機(jī)的數(shù)據(jù)反饋,其他錯(cuò)誤將向主機(jī)返回錯(cuò)誤碼。數(shù)據(jù)幀的第二位加上0X80表示請(qǐng)求發(fā)生錯(cuò)誤(非法功能碼、非法數(shù)據(jù)值等),錯(cuò)誤數(shù)據(jù)幀如下:

地址碼

功能碼

錯(cuò)誤碼

CRC校驗(yàn)碼

1字節(jié)

1字節(jié)

1字節(jié)

2字節(jié)

常見錯(cuò)誤碼如下:

名稱

說明

01H

非法的功能碼

不支持該功能碼操作寄存器

02H

非法的寄存器地址

訪問設(shè)備禁止訪問的寄存器

03H

非法的數(shù)據(jù)值

寫入不支持的參數(shù)

04H

從機(jī)故障

設(shè)備工作異常

三、通訊信息傳輸過程

通訊命令由主機(jī)發(fā)送從機(jī)時(shí),與主機(jī)發(fā)送的地址碼相符的從機(jī)接收通訊命令,如果CRC校驗(yàn)無誤,則執(zhí)行相應(yīng)的操作,然后把執(zhí)行結(jié)果(數(shù)據(jù))返回給主機(jī)。返回信息中包含地址碼、功能碼、執(zhí)行后的數(shù)據(jù)以及CRC校驗(yàn)碼。如果地址不匹配或者CRC校驗(yàn)出錯(cuò)就不返回任何信息。

四、功能碼分析

功能碼01H:讀線圈

例如:主機(jī)要讀取從機(jī)地址為01H,起始線圈地址為00H的1個(gè)線圈狀態(tài),主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

01

起始線圈地址

高字節(jié)

00

低字節(jié)

00

線圈數(shù)量

高字節(jié)

00

低字節(jié)

01

CRC校驗(yàn)

低字節(jié)

FD

高字節(jié)

CA

如果從機(jī)寄存器00H線圈閉合,從機(jī)返回:

從機(jī)返回

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

01

字節(jié)數(shù)

01

線圈狀態(tài)

01

CRC校驗(yàn)碼

低字節(jié)

90

高字節(jié)

48

仿真演示:

modbus RTU協(xié)議單線圈



功能碼0FH:寫多個(gè)線圈

例如:主機(jī)要控制從機(jī)地址為01H,起始線圈地址為00H的4個(gè)線圈狀態(tài),主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

0F

起始線圈地址

高字節(jié)

00

低字節(jié)

00

線圈數(shù)量

高字節(jié)

00

低字節(jié)

04

寫入字節(jié)數(shù)

01

控制方式

00(全部斷開)、0F(全部閉合)

CRC校驗(yàn)

低字節(jié)

XX

高字節(jié)

XX

功能碼0FH操作,從機(jī)返回:

從機(jī)返回

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

0F

起始線圈地址

高字節(jié)

00

低字節(jié)

00

線圈數(shù)量

高字節(jié)

00

低字節(jié)

04

CRC校驗(yàn)

低字節(jié)

54

高字節(jié)

08

仿真演示:

mudbus協(xié)議多線圈



功能碼02H:讀離散輸入

例如:主機(jī)要讀取從機(jī)地址為01H,起始離散量地址為00H的4個(gè)輸入狀態(tài),主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

02

起始離散量地址

高字節(jié)

00

低字節(jié)

00

讀取數(shù)量

高字節(jié)

00

低字節(jié)

04

CRC校驗(yàn)

低字節(jié)

79

高字節(jié)

C9

如果從機(jī)首地址00H開始的4離散輸入全部檢測(cè)到輸入,從機(jī)返回:

從機(jī)返回

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

02

字節(jié)數(shù)

01

離散輸入狀態(tài)

0F

CRC校驗(yàn)碼

低字節(jié)

E1

高字節(jié)

8C

仿真演示:

moudbus通信協(xié)議輸入



功能碼04H:讀取輸入寄存器

例如:主機(jī)要讀取從機(jī)地址為01H,起始寄存器地址為02H的1個(gè)輸入寄存器數(shù)據(jù),主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

04

起始寄存器地址

高字節(jié)

00

低字節(jié)

02

寄存器數(shù)量

高字節(jié)

00

低字節(jié)

01

CRC校驗(yàn)

低字節(jié)

90

高字節(jié)

0A

如果從機(jī)輸入寄存器02H的數(shù)據(jù)為3344H,從機(jī)返回:

從機(jī)返回

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

04

字節(jié)數(shù)

02

寄存器05H數(shù)據(jù)

高字節(jié)

33

低字節(jié)

44

CRC校驗(yàn)碼

低字節(jié)

AD

高字節(jié)

F3

仿真演示:

modbus通信協(xié)議寄存器輸入



功能碼03H:讀保持寄存器

例如:主機(jī)要讀取從機(jī)地址為01H,起始寄存器地址為05H的2個(gè)保持寄存器數(shù)據(jù),主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

03

起始寄存器地址

高字節(jié)

00

低字節(jié)

05

寄存器數(shù)量

高字節(jié)

00

低字節(jié)

02

CRC校驗(yàn)

低字節(jié)

D4

高字節(jié)

0A

如果從機(jī)保持寄存器05H、06H的數(shù)據(jù)為1122H、3344H,從機(jī)返回:

從機(jī)返回

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

03

字節(jié)數(shù)

04

寄存器05H數(shù)據(jù)

高字節(jié)

11

低字節(jié)

22

寄存器06H數(shù)據(jù)

高字節(jié)

33

低字節(jié)

44

CRC校驗(yàn)碼

低字節(jié)

4B

高字節(jié)

C6

仿真演示:

modbus RTU協(xié)議保持寄存器




功能碼06H:寫單個(gè)保持寄存器

例如:主機(jī)寫入9988H的數(shù)據(jù)給從機(jī)地址為01H,寄存器地址為0050H的寄存器,主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

06

寄存器地址

高字節(jié)

00

低字節(jié)

50

寫入值

高字節(jié)

99

低字節(jié)

88

CRC校驗(yàn)

低字節(jié)

E3

高字節(jié)

ED

從機(jī)返回與主機(jī)請(qǐng)求相同;

modbus協(xié)議單個(gè)保持寄存器



功能碼10H:寫多個(gè)保持寄存器

例如:主機(jī)要把數(shù)據(jù)0005H、2233H保存到從機(jī)地址為01H,起始寄存器地址為0020H的2個(gè)寄存器中,主機(jī)發(fā)送:

主機(jī)發(fā)送

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

10

起始寄存器地址

高字節(jié)

00

低字節(jié)

20

寄存器數(shù)量

高字節(jié)

00

低字節(jié)

02

寫入字節(jié)數(shù)

04

0000H

寄存器待寫入

高字節(jié)

00

低字節(jié)

05

0001H

寄存器待寫入

高字節(jié)

22

低字節(jié)

33

CRC校驗(yàn)

低字節(jié)

B9

高字節(jié)

03

功能碼10H操作,從機(jī)返回:

從機(jī)返回

發(fā)送數(shù)據(jù)(HEX)

地址碼

01

功能碼

10

起始寄存器地址

高字節(jié)

00

低字節(jié)

20

寄存器數(shù)量

高字節(jié)

00

低字節(jié)

02

CRC校驗(yàn)

低字節(jié)

40

高字節(jié)

02

仿真演示:

modbs多保持寄存器

審核編輯:湯梓紅

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

    關(guān)注

    28

    文章

    1718

    瀏覽量

    76420
  • 通訊協(xié)議
    +關(guān)注

    關(guān)注

    10

    文章

    263

    瀏覽量

    20271
  • RTU
    RTU
    +關(guān)注

    關(guān)注

    0

    文章

    384

    瀏覽量

    28547
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    modbus協(xié)議講解modbus-rtu以及modbus-tcp協(xié)議詳解

    modbus協(xié)議講解modbus-rtu以及modbus-tcp協(xié)議詳解,見附件。
    發(fā)表于 03-01 10:14

    STM32--MODBUS 通訊篇 精選資料分享

    MODBUS STM32通訊篇文章目錄MODBUS STM32通訊篇一、MODBUS簡(jiǎn)介二、MODBUS
    發(fā)表于 08-03 06:50

    請(qǐng)問MODBUS通訊協(xié)議及PLC編程通訊實(shí)例有哪些

    請(qǐng)問MODBUS通訊協(xié)議及PLC編程通訊實(shí)例有哪些?
    發(fā)表于 09-29 08:45

    Modbus RTU通訊協(xié)議相關(guān)資料下載

    Modbus RTU通訊協(xié)議中OSI模型,數(shù)據(jù)鏈路層和應(yīng)用層是通訊關(guān)鍵部分。
    發(fā)表于 11-30 08:29

    Modbus_RTU通訊方式是什么

    Modbus_RTU通訊方式RTU 半雙工通訊方式本次使用的是 CPU:1215C DC/DC /RLY通信模塊:CM1241(RS232/RS485)硬件標(biāo)識(shí)符:269(如圖 1)
    發(fā)表于 02-16 06:52

    Modbus-RTU協(xié)議包括哪些呢

    Modbus-RTUModbus 一個(gè)工業(yè)上常用的通訊協(xié)議、一種通訊約定。Modbus協(xié)議包括RTU
    發(fā)表于 02-16 07:43

    如何快速實(shí)現(xiàn)Modbus RTUModbus TCP協(xié)議轉(zhuǎn)換?

    Modbus RTU轉(zhuǎn)Modbus TCP,實(shí)現(xiàn)不同協(xié)議設(shè)備通訊呢?01物通博聯(lián)工業(yè)智能網(wǎng)關(guān)協(xié)議
    發(fā)表于 08-18 18:36

    怎么可以用modbus_rtu協(xié)議通訊?

    怎么可以用modbus_rtu協(xié)議通訊
    發(fā)表于 11-02 07:04

    MODBUS通訊協(xié)議及編程

    ModBus通訊協(xié)議分為RTU協(xié)議和ASCII協(xié)議,下面就M
    發(fā)表于 07-17 11:58 ?1.5w次閱讀

    Modbus_通訊協(xié)議詳解

    Modbus_通訊協(xié)議詳解,Modbus_通訊協(xié)議
    發(fā)表于 12-08 14:13 ?0次下載

    485-Modbus-RTU通訊協(xié)議

    Modbus RTU通信協(xié)議解讀,本協(xié)議采用主從問答方式。
    發(fā)表于 10-12 16:05 ?48次下載

    Modbus-RTU協(xié)議

    Modbus-RTUModbus 一個(gè)工業(yè)上常用的通訊協(xié)議、一種通訊約定。Modbus協(xié)議包括RTU
    發(fā)表于 12-20 18:48 ?38次下載
    <b class='flag-5'>Modbus-RTU</b><b class='flag-5'>協(xié)議</b>

    C#上位機(jī):Modbus RTU通訊實(shí)例

    本文是對(duì)前文的補(bǔ)充,主要是針對(duì)上位機(jī)的串口通訊Modbus RTU協(xié)議方面的運(yùn)用。在前文中有詳細(xì)代碼描述了如何搭建一個(gè)串口通訊上 位機(jī)模
    發(fā)表于 05-09 14:38 ?6次下載
    C#上位機(jī):<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>通訊實(shí)例</b>

    Profinet轉(zhuǎn)Modbus RTU網(wǎng)關(guān)連接PLC與多功能電表modbus通訊

    Profinet是一種工業(yè)以太網(wǎng)通訊協(xié)議,廣泛用于工業(yè)自動(dòng)化系統(tǒng)中。而Modbus RTU是一種串行通信協(xié)議,常用于PLC和儀表之間的
    的頭像 發(fā)表于 11-23 10:13 ?507次閱讀
    Profinet轉(zhuǎn)<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>網(wǎng)關(guān)連接PLC與多功能電表<b class='flag-5'>modbus</b><b class='flag-5'>通訊</b>

    Modbus-RTU通訊協(xié)議是什么?

    Modbus-RTU通訊協(xié)議是一種串行通訊協(xié)議,它可以用于連接不同類型的設(shè)備,以實(shí)現(xiàn)遠(yuǎn)程監(jiān)控和控制。Mo
    的頭像 發(fā)表于 05-23 15:06 ?439次閱讀