1、报文结构
通信模式是主/从方式,也即主请求、从应答的方式。无论主请求报文,还是从应答报文其结构都是如下图这样的
2、地址(Address)域
信息帧地址域(信息地址)在帧的开始部分,由8位组成,有效的从机设备地址范围0-247(十进制),各从机设备的寻址范围为1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。
地址0:广播地址,所有的从设备必须处理广播报文。
1-247:从设备地址,主设备是没有地址的,这一点需要注意。
248-255:保留地址
3、功能(Function)域
常用的功能码
代码 | 名称 | 作用 |
01 | 读取线圈状态 | 取得一组逻辑线圈的当前状态(ON/OFF) |
02 | 读取输入状态 | 取得一组开关输入的当前状态(ON/OFF) |
03 | 读取保持寄存器 | 在一个或多个保持寄存器中取得当前的二进制值 |
04 | 读取输入寄存器 | 在一个或多个输入寄存器中取得当前的二进制值 |
05 | 强置单线圈 | 强置一个逻辑线圈的通断状态 |
06 | 预置单寄存器 | 放置一个特定的二进制值到一个单寄存器中 |
07 | 读取异常状态 | 取得8个内部线圈的通断状态 |
15 | 强置多线圈 | 强置一串连续逻辑线圈的通断 |
16 | 预置多寄存器 | 放置一系列特定的二进制值到一系列多寄存器中 |
17 | 报告从机标识 | 可使主机判断编址从机的类型及该从机运行指示灯的状态 |
4、数据域(在这里我们以功能码03,06,16为例)
功能码03 数据解析
主机的命令格式为:01 03 00 04 00 02 85 CA
从机回复的数据格式为:01 03 04 00 00 00 00 FA 33
数据解析如下图
功能码06 数据解析
06功能码是用来写从机寄存器的内容的,比如主机向改写从机其中一个寄存器的数据,就可以通过06功能码来实现。
报文样例:01 06 00 00 00 0A 09 CD
01:从机地址
06:功能码
00 00:地址
00 0A:数据,因为写一个寄存器,所以不用寄存器个数
09 CD:校验码
功能码16 数据解析
报文样例:01 10 11 99 00 03 06 00 0A 00 00 00 32 79 3A
01:从机地址
10:功能码,注意10为十六进制,十进制为16
11 99:起始地址 高位在前,转化为10进制为4505
00 03:寄存器个数 3个
06:要写的数据字节个数据
00 0A 00 00 00 32:数据,一个寄存器2个字节
79 3A:校验码
5、CRC16数据校验
16位循环冗余校验(从数据开始到数据结束),作用是检测数据的完整性,相关的计算方法请访问:C# CRC16校验码计算方法
报表样例:01 10 11 99 00 03 06 00 0A 00 00 00 32 79 3A
计算的是:01 10 11 99 00 03 06 00 0A 00 00 00 32
计算的结果是:79 3A(校验码)
本文来自:www.luofenming.com