0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Modbus RTU通讯协议详解与实例演示

jf_10471008 来源:jf_10471008 作者:jf_10471008 2022-07-22 14:27 次阅读

Modbus通讯协议详解

Modbus RTU通讯协议在数据通讯上采用主从应答的方式进行。只能由主机(PC,HMI等)通过唯一从机地址发起请求,从机(终端设备)根据主机请求进行响应,即半双工通讯。该协议只允许主机发起请求,从机进行被动响应,因此从机不会主动占用通讯线路造成数据冲突。

类似Modbus RTU协议的主从应答协议还有西门子的PPI、电表常用的DL/T645-2007等协议。

一、modbus协议格式

信息传输为异步方式,使用16进制进行通讯,信息帧格式:


地址码

功能码

数据区

CRC校验码

1字节

1字节

N字节

2字节

地址码

地址码是每个通讯信息帧的第一个字节,一般支持1到247,部分设备也支持0地址,用于接收主机的广播数据,每个从机在总线上地址必须唯一,只有与主机发送的地址码相符的从机才能响应返回数据。

功能码

功能码是每个通讯信息帧的第二个字节。主机发送,通过功能码告知从机设备应当执行何种操作。

常见的八种功能码:

功能码

定义

操作

01H

读取线圈

读取一个或多个连续线圈状态

05H

写单个线圈

操作指定位置的线圈状态

0FH

写多个线圈

操作多个连续线圈状态

02H

读取离散量输入

读取一个或多个连续离散输入状态

04H

读取输入寄存器

读取一个或多个连续输入寄存器数据

03H

读保持寄存器

读取一个或多个保持寄存器数据

06H

写单个保持寄存器

把两个十六进制数据写入对应位置

10H

写多个保持寄存器

把4*N个十六进制数据写入N个连续保持寄存器

数据区

数据区随功能码以及数据方向的不同而不同,这些数据可以是“寄存器首地址+读取寄存器数量”、“寄存器地址+操作数据”、“寄存器首地址+操作寄存数量+数据长度+数据”等不同的组合,在“功能码分析”详解不同功能码的数据区。

Modbus CRC校验

Modbus RTU协议常用与工业现场对数据传输的稳定性和正确性有较高的要求,因此通过CRC校验保证数据传输的正确性和完整性。

二、错误反馈

地址与CRC校验错误并不会收到从机的数据反馈,其他错误将向主机返回错误码。数据帧的第二位加上0X80表示请求发生错误(非法功能码、非法数据值等),错误数据帧如下:

地址码

功能码

错误码

CRC校验码

1字节

1字节

1字节

2字节

常见错误码如下:

名称

说明

01H

非法的功能码

不支持该功能码操作寄存器

02H

非法的寄存器地址

访问设备禁止访问的寄存器

03H

非法的数据值

写入不支持的参数

04H

从机故障

设备工作异常

三、通讯信息传输过程

通讯命令由主机发送从机时,与主机发送的地址码相符的从机接收通讯命令,如果CRC校验无误,则执行相应的操作,然后把执行结果(数据)返回给主机。返回信息中包含地址码、功能码、执行后的数据以及CRC校验码。如果地址不匹配或者CRC校验出错就不返回任何信息。

四、功能码分析

功能码01H:读线圈

例如:主机要读取从机地址为01H,起始线圈地址为00H的1个线圈状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

01

起始线圈地址

高字节

00

低字节

00

线圈数量

高字节

00

低字节

01

CRC校验

低字节

FD

高字节

CA

如果从机寄存器00H线圈闭合,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

01

字节数

01

线圈状态

01

CRC校验码

低字节

90

高字节

48

仿真演示:

modbus RTU协议单线圈



功能码0FH:写多个线圈

例如:主机要控制从机地址为01H,起始线圈地址为00H的4个线圈状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

0F

起始线圈地址

高字节

00

低字节

00

线圈数量

高字节

00

低字节

04

写入字节数

01

控制方式

00(全部断开)、0F(全部闭合)

CRC校验

低字节

XX

高字节

XX

功能码0FH操作,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

0F

起始线圈地址

高字节

00

低字节

00

线圈数量

高字节

00

低字节

04

CRC校验

低字节

54

高字节

08

仿真演示:

mudbus协议多线圈



功能码02H:读离散输入

例如:主机要读取从机地址为01H,起始离散量地址为00H的4个输入状态,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

02

起始离散量地址

高字节

00

低字节

00

读取数量

高字节

00

低字节

04

CRC校验

低字节

79

高字节

C9

如果从机首地址00H开始的4离散输入全部检测到输入,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

02

字节数

01

离散输入状态

0F

CRC校验码

低字节

E1

高字节

8C

仿真演示:

moudbus通信协议输入



功能码04H:读取输入寄存器

例如:主机要读取从机地址为01H,起始寄存器地址为02H的1个输入寄存器数据,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

04

起始寄存器地址

高字节

00

低字节

02

寄存器数量

高字节

00

低字节

01

CRC校验

低字节

90

高字节

0A

如果从机输入寄存器02H的数据为3344H,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

04

字节数

02

寄存器05H数据

高字节

33

低字节

44

CRC校验码

低字节

AD

高字节

F3

仿真演示:

modbus通信协议寄存器输入



功能码03H:读保持寄存器

例如:主机要读取从机地址为01H,起始寄存器地址为05H的2个保持寄存器数据,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

03

起始寄存器地址

高字节

00

低字节

05

寄存器数量

高字节

00

低字节

02

CRC校验

低字节

D4

高字节

0A

如果从机保持寄存器05H、06H的数据为1122H、3344H,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

03

字节数

04

寄存器05H数据

高字节

11

低字节

22

寄存器06H数据

高字节

33

低字节

44

CRC校验码

低字节

4B

高字节

C6

仿真演示:

modbus RTU协议保持寄存器




功能码06H:写单个保持寄存器

例如:主机写入9988H的数据给从机地址为01H,寄存器地址为0050H的寄存器,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

06

寄存器地址

高字节

00

低字节

50

写入值

高字节

99

低字节

88

CRC校验

低字节

E3

高字节

ED

从机返回与主机请求相同;

modbus协议单个保持寄存器



功能码10H:写多个保持寄存器

例如:主机要把数据0005H、2233H保存到从机地址为01H,起始寄存器地址为0020H的2个寄存器中,主机发送:

主机发送

发送数据(HEX)

地址码

01

功能码

10

起始寄存器地址

高字节

00

低字节

20

寄存器数量

高字节

00

低字节

02

写入字节数

04

0000H

寄存器待写入

高字节

00

低字节

05

0001H

寄存器待写入

高字节

22

低字节

33

CRC校验

低字节

B9

高字节

03

功能码10H操作,从机返回:

从机返回

发送数据(HEX)

地址码

01

功能码

10

起始寄存器地址

高字节

00

低字节

20

寄存器数量

高字节

00

低字节

02

CRC校验

低字节

40

高字节

02

仿真演示:

modbs多保持寄存器

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MODBUS
    +关注

    关注

    28

    文章

    1759

    浏览量

    76824
  • 通讯协议
    +关注

    关注

    10

    文章

    269

    浏览量

    20320
  • RTU
    RTU
    +关注

    关注

    0

    文章

    404

    浏览量

    28617
收藏 人收藏

    评论

    相关推荐

    modbus协议讲解modbus-rtu以及modbus-tcp协议详解

    modbus协议讲解modbus-rtu以及modbus-tcp协议详解,见附件。
    发表于 03-01 10:14

    STM32--MODBUS 通讯篇 精选资料分享

    MODBUS STM32通讯篇文章目录MODBUS STM32通讯篇一、MODBUS简介二、MODBUS
    发表于 08-03 06:50

    Modbus RTU通讯协议相关资料下载

    Modbus RTU通讯协议中OSI模型,数据链路层和应用层是通讯关键部分。
    发表于 11-30 08:29

    Modbus_RTU通讯方式是什么

    Modbus_RTU通讯方式RTU 半双工通讯方式本次使用的是 CPU:1215C DC/DC /RLY通信模块:CM1241(RS232/RS485)硬件标识符:269(如图 1)
    发表于 02-16 06:52

    Modbus-RTU协议包括哪些呢

    Modbus-RTUModbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU
    发表于 02-16 07:43

    如何快速实现Modbus RTUModbus TCP协议转换?

    Modbus RTUModbus TCP,实现不同协议设备通讯呢?01物通博联工业智能网关协议
    发表于 08-18 18:36

    怎么可以用modbus_rtu协议通讯

    怎么可以用modbus_rtu协议通讯
    发表于 11-02 07:04

    MODBUS通讯协议及编程

    ModBus通讯协议分为RTU协议和ASCII协议,下面就M
    发表于 07-17 11:58 1.5w次阅读

    Modbus_通讯协议详解

    Modbus_通讯协议详解Modbus_通讯协议
    发表于 12-08 14:13 0次下载

    485-Modbus-RTU通讯协议

    Modbus RTU通信协议解读,本协议采用主从问答方式。
    发表于 10-12 16:05 48次下载

    Modbus-RTU协议

    Modbus-RTUModbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU
    发表于 12-20 18:48 38次下载
    <b class='flag-5'>Modbus-RTU</b><b class='flag-5'>协议</b>

    C#上位机:Modbus RTU通讯实例

    本文是对前文的补充,主要是针对上位机的串口通讯Modbus RTU协议方面的运用。在前文中有详细代码描述了如何搭建一个串口通讯上 位机模
    发表于 05-09 14:38 6次下载
    C#上位机:<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>通讯实例</b>

    Profinet转Modbus RTU网关连接PLC与多功能电表modbus通讯

    Profinet是一种工业以太网通讯协议,广泛用于工业自动化系统中。而Modbus RTU是一种串行通信协议,常用于PLC和仪表之间的
    的头像 发表于 11-23 10:13 595次阅读
    Profinet转<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>网关连接PLC与多功能电表<b class='flag-5'>modbus</b><b class='flag-5'>通讯</b>

    Modbus-RTU通讯协议是什么?

    Modbus-RTU通讯协议是一种串行通讯协议,它可以用于连接不同类型的设备,以实现远程监控和控制。Mo
    的头像 发表于 05-23 15:06 540次阅读

    Profibus PA转Modbus RTU协议网关

    捷米特JM-RTU-PA网关将Profibus PA和Modbus RTU专用通讯协议桥接的协议
    的头像 发表于 09-25 11:47 237次阅读
    Profibus PA转<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>协议</b>网关