六、MODBUS 报文
- MODBUS功能码
- 01功能码:读单个或多个数字量输出状态
将数字量输出位强制成任意值,方便查看其状态
例一:读 “Q0.1状态 (Q0.1已经强制为1)
发送报文 | 0A | 01 | 00 | 01 | 00 | 01 | AD | 71 |
注释 | 站地址 10 | 功能码 01 | 起始地址 01 | 位个数 01 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | |||
返回报文 | 0A | 01 | 01 | 01 | 92 | 6C | ||
注释 | 站地址 10 | 功能码 01 | 返回字节个数 1 | 返回数值 1(16进制) | CRC校验码 |
返回数值“01”表示 “Q0.1”状态为1
例二:读 “Q0.0-Q0.7”状态
发送报文 | 0A | 01 | 00 | 00 | 00 | 08 | 3C | B7 |
注释 | 站地址 10 | 功能码 01 | 起始地址 00 | 位个数 8 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | |||
返回报文 | 0A | 01 | 01 | 5A | D3 | 97 | ||
注释 | 站地址 10 | 功能码 01 | 返回字节个数 1 | 返回数值 5A(16进制) | CRC校验码 |
返回数值“5A(16进制)”转化为二进制
5A= (16进制) | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
Q0.7 | Q0.6 | Q0.5 | Q0.4 | Q0.3 | Q0.2 | Q0.1 | Q0.0 |
- 02 功能码:读单个或多个数字量输入状态
将数字量输入位强制成任意值,方便查看其状态
例三:读 “I0.7状态 (I0.7已经强制为1)
发送报文 | 0A | 02 | 00 | 07 | 00 | 01 | 09 | 70 |
注释 | 站地址 10 | 功能码 02 | 起始地址 07 | 位个数 01 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | |||
返回报文 | 0A | 02 | 01 | 01 | 62 | 6C | ||
注释 | 站地址 10 | 功能码 02 | 返回字节个数 1 | 返回数值 1(16进制) | CRC校验码 |
返回数值“01”表示 “I0.7”状态为1
例四:读 “I0.0-I1.3”状态
发送报文 | 0A | 02 | 00 | 00 | 00 | 0C | 79 | 74 |
注释 | 站地址 10 | 功能码 02 | 起始地址 00 | 位个数 12 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | |||
返回报文 | 0A | 02 | 02 | 9D | 0C | 74 | EC | |
注释 | 站地址 10 | 功能码 02 | 返回字节个数 2 | 返回数值 9D 0C(16进制) | CRC校验码 |
返回数值“9D0C(16进制)”转化为二进制
9D0C= (16进制) | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
I0.7 | I0.6 | I0.5 | I0.4 | I0.3 | I0.2 | I0.1 | I0.0 | I1.3 | I1.2 | I1.1 | I1.0 |
- 04 功能码:读单个或多个模拟量
将模拟输入强制成任意值,方便查看其状态
例五:读 “AIW0-AIW8”的值
发送报文 | 0A | 04 | 00 | 00 | 00 | 05 | 31 | 72 | |||||||
注释 | 站地址 10 | 功能码 04 | 起始字地址 00 | 字个数 05 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | ||||||||||
返回报文 | 0A | 04 | 0A | 00 | 0C | 00 | 22 | 00 | 38 | 00 | 4E | 03 | 8E | DD | B2 |
注释 | 站地址 10 | 功能码 04 | 返回字节 | 第一个字值 | 第二个字值 | 第三个字值 | 第四个字值 | 第五个字值 | CRC校验码 |
- 05 功能码:写单个位
例六:写Q0.5 为 “1”
发送报文 | 0A | 05 | 00 | 05 | FF | 00 | 9D | 40 |
注释 | 站地址 10 | 功能码 05 | 起始地址 05 | 写入“1” | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | |||
返回报文 | 0A | 05 | 00 | 05 | FF | 00 | 9D | 40 |
注释 | 站地址 10 | 功能码 05 | 起始地址 05 | 写入“1” | CRC校验码 |
- 0F 功能码:写多个位
例七:写入 Q0.1-Q0.7 如下表 即QB0=35
Q0.0 | Q0.1 | Q0.2 | Q0.3 | Q0.4 | Q0.5 | Q0.6 | Q0.7 |
1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
发送报文 | 0A | 0F | 00 | 00 | 00 | 08 | 00 | 35 | 7E | A1 |
注释 | 站地址 10 | 功能码 15 | 起始地址 00 | 位个数 | 写入值35 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | ||||
返回报文 | 0A | 0F | 00 | 00 | 00 | 08 | 55 | 76 | ||
注释 | 站地址 10 | 功能码 15 | 起始地址 00 | 位个数 | CRC校验码 |
- 03 功能码:读保持寄存器
例八:读VW100-VW108值
将VW100-VW108强制成任意值,方便查看其状态
发送报文 | 0A | 03 | 00 | 00 | 00 | 05 | 84 | B2 | |||||||
注释 | 站地址 10 | 功能码 03 | 起始字地址 00 | 字个数 05 | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | ||||||||||
返回报文 | 0A | 03 | 0A | 00 | 7B | 01 | C8 | 03 | 15 | 03 | E9 | 04 | 42 | FE | 7E |
注释 | 站地址 10 | 功能码 03 | 返回字节 | 第一个字值 | 第二个字值 | 第三个字值 | 第四个字值 | 第五个字值 | CRC校验码 |
- 06 功能码:写单个寄存器
例九:写VW112=1000
发送报文 | 0A | 06 | 00 | 06 | 03 | E8 | 68 | 0E |
注释 | 站地址 10 | 功能码 06 | 起始地址 第6个字 | 写入“1000” | CRC校验码 从串口调试助手工具中可查到,注意高低字节互换 | |||
返回报文 | 0A | 06 | 00 | 06 | 03 | E8 | 68 | 0E |
注释 | 站地址 10 | 功能码 06 | 起始地址 第6个字 | 写入“1000” | CRC校验码 |
- 10 功能码:写多个寄存器
例十:写入 VW110-VW114值 如下表
VW110 | VW112 | VW114 |
1 | 2 | 3 |
发送报文 | 0A | 10 | 00 | 05 | 00 | 03 | 06 | 00 | 01 | 00 | 02 | 00 | 03 | 30 | 1A | |||
注释 | 站地址 10 | 功能码 16 | 起始地址 05 | 字个数 | 字节个数06 | 第一个字01 | 第二个字02 | 第三个字03 | CRC校验码从串口调试助手工具中可查到,注意高低字节互换 | |||||||||
返回报文 | 0A | 10 | 00 | 05 | 00 | 03 | 91 | 72 | ||||||||||
注释 | 站地址 10 | 功能码 16 | 起始地址 05 | 字个数 | CRC校验码 |
本文暂时没有评论,来添加一个吧(●'◡'●)