MODBUS规约报文解析
报文格式,报文全部为16进制,遥信状态需要转换为二进制:
主站发送报文 | 地址 | 功能码 | 寄存器起始地址 | 读取数据长度 | CRC校验码 | |||
01 | 03 | 01 | 00 | 00 | 02 | C5 | F7 | |
说明(读取01地址设备03功能码遥信状态) | 设备地址 | 设备的规约或点表查看 | 从设备的:0x0100H 寄存器读取遥信状态,可以在规约或寄存器点表中查看。 | 读取:0x0100H、0x0101H 两个寄存器数据,一共读取32个遥信位置。 | 可通过串口软件自动计算出 |
主站接受报文 | 地址 | 功能码 | 数据长度 | 寄存器1状态0100H | 寄存器2状态0101H | CRC校验码 | |||
01 | 03 | 04 | 03 | 43 | 00 | 00 | 0B | A3 | |
说明(读取01地址设备03功能码遥信状态) | 设备地址 | 设备的规约或点表查看 | 表示收到4个数据 | 高位状态 | 低位状态 | 高位 | 低位 | 设备自动计算出 |
MODBUS-RTU报文模型
设备地址 | 功能代码 | 数据格式 | CRC校验L | CRC校验H |
8bit | 8bit | N*8bit | 8bit | 8bit |
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。
主机对从机读数据操作
0x01 | 03 | 00 01 | 00 01 | D5 CA |
从机地址 | 功能号 | 数据地址 | 读取数据个数 | CRC校验 |
从机对主机返回内容
0x01 | 03 | 02 | 00 17 | F8 4A |
从机地址 | 功能号 | 数据字节个数 | 两个字节数据 | CRC校验 |
这样MODBUS主机就完成了一次对从机数据的读操作,实现了通讯。
MODBUS-RTU常用功能码
数据类型 | 读功能码 | 写功能码 | 对象类型 |
离散量输入 | 02 |
| 单个位 |
线圈状态 | 01 | 05,15 | 单个位 |
输入寄存器 | 04 |
| 16位字 |
保持寄存器 | 03 | 06,16 | 16位字 |
寄存器起始地址(起始数据地址)
数据类型 | 参数地址,寄存器编号 |
离散量输入 | 00001~0FFFF |
线圈状态 | 10001~1FFFF |
输入寄存器 | 30001~3FFFF |
保持寄存器 | 40001~4FFFF |
报文实例
遥控点号:开关操作=0300H 合操作
TX: 01 06 03 0000 02 08 4F //06表示遥控功能码,02表示分操作;
RX: 01 06 03 0000 02 08 4F //06表示遥控功能码,02表示分操作;
遥控点号:开关操作=0300H 分操作
TX: 01 06 03 0000 01 48 4E //06表示遥控功能码,01表示分操作;
RX: 01 06 03 0000 01 48 4E //06表示遥控功能码,01表示分操作;
遥测报文:每个遥测值占用2个字节,即1个寄存器,最大值为:0x0000H~0xFFFFH,即:0~65535。
发送数据:01 03 02 00 00 0D 85 B7 //16时27分02秒
接收数据:01 03 1A 00 00 00 00 00 00 1E AE 00 00 1EAD 1E AD 00 00 00 00 00 00 00 00 00 00 6A 96 77 67
总召换的电度
共有4个电度:
正向有功积分电度=0301H 10000.000(0x00989680),
正向无功积分电度=0302H 0.000 (0x0),
反向有功积分电度=0303H 0.000(0x0),
反向无功积分电度=0304H 0.000(0x0)。
TX:01 03 81 02 00 08 CD F0 //8102为总召唤,00 08 为数据长度
RX: 01 03 10 0098 96 80 00 00 00 00 00 00 00 00 00 00 00 00 15 64 //10为报文数据长度。
电度:( 03命令码) | 寄存器号 | 遥测报文值 | 转换 10进制值 |
正向有功积分电度 | 0301H | 00 98 96 80 | 10000000 |
正向无功积分电度 | 0302H | 00 00 00 00 | 0 |
反向有功积分电度 | 0303H | 00 00 00 00 | 0 |
反向无功积分电度 | 0304H | 00 00 00 00 | 0 |