Modbus协议详解与案例演示

modbus rtu通讯协议在数据通讯上采用主从应答的方式进行。只能由主机(pc,hmi等)通过唯一从机地址发起请求,从机(终端设备)根据主机请求进行响应,即半双工通讯。该协议只允许主机发起请求,从机进行被动响应,因此从机不会主动占用通讯线路造成数据冲突。
类似modbus rtu协议的主从应答协议还有西门子的ppi、电表常用的dl/t645-2007等协议。
一、协议格式 信息传输为异步方式,使用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
仿真演示:
功能码05h:写单个线圈 例如:主机要控制从机地址为01h,线圈地址为0000h的线圈状态,主机发送:
主机发送
发送数据(hex)
地址码
01
功能码
01
线圈地址
高字节
00
低字节
00
控制方式
高字节
00(断开)、ff(闭合)
低字节
01
crc校验
低字节
xx
高字节
xx
从机返回与主机请求相同;
仿真演示:
功能码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
仿真演示:
功能码02h:读离散输入 例如:主机要读取从机地址为01h,起始离散量地址为00h的4个输入状态,主机发送:
主机发送
发送数据(hex)
地址码
01
功能码
02
起始离散量地址
高字节
00
低字节
00
读取数量
高字节
00
低字节
04
crc校验
低字节
79
高字节
c9
如果从机首地址00h开始的4离散输入全部检测到输入,从机返回:
从机返回
发送数据(hex)
地址码
01
功能码
02
字节数
01
离散输入状态
0f
crc校验码
低字节
e1
高字节
8c
仿真演示:
功能码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
仿真演示:
功能码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
仿真演示:
功能码06h:写单个保持寄存器 例如:主机写入9988h的数据给从机地址为01h,寄存器地址为0050h的寄存器,主机发送:
主机发送
发送数据(hex)
地址码
01
功能码
06
寄存器地址
高字节
00
低字节
50
写入值
高字节
99
低字节
88
crc校验
低字节
e3
高字节
ed
从机返回与主机请求相同;
功能码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
仿真演示:


蓝牙耳机品牌排行榜前十名,看有没有你喜欢的
考场手持式手机信号屏蔽器的特点简介
[图文]运算放大器漫谈
如何让CPU里面程序读不出来
曝黑鲨3将是全球首款16GB内存旗舰 并搭载骁龙865和支持双模5G
Modbus协议详解与案例演示
目前骨传导耳机哪个牌子好、质量好的骨传导耳机
自动恒压供水系统的设计与控制方式的介绍
告诉你一个秘密:别样的华为 别样的风情
设置系统:使用DPPD PROX测量虚拟网络功能(VNF)性能
推特并入X公司 马斯克还买了10000个GPU要训练大模型
富信电子致力于提升集团数字化转型提升企业的运营水平
敞篷车的情调之争,捷豹F-TYPE与奔驰SL350哪个更好?
一图读懂|AMR:无处不在
Xgig 5P8分析仪平台可为PCIe 5.0流量提供协议分析
SQL Database托管实例提供SQL Server几乎全部功能
运放失调电压自动补偿设计与实现
适用于无人驾驶的分布式仿真平台
发动机 3D 可视化系统让工业机械展示更清晰
硬盘数据快速备份怎样实现