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 |
仿真演示:
本文标题:Modbus协议详解与案例演示 - 电脑
本文地址:www.chaonans.com/shuma/diannao/8691.html
< 上一篇
下一篇 >
唐诗咏感情过往遭扒,其现任丈夫是谁?
唐诗咏结婚了吗?此前因为余文乐结婚的消息,让余文乐的初恋唐诗咏,再次成为了大家所关注的对象。那个时候唐诗咏身边并无良人,那么现在的她结婚了吗?老公是谁呢?唐诗咏的感情也