Modbus 常用功能码(01/02 03/04 05/06 10)用法 及常见数据类型
未来的架构师GOAT 2024-08-29 10:35:23 阅读 93
1.数据类型:
SINT,有符号短整型,1个字节;
USINT,无符号短整型,1个字节;
INT,有符号整型,2个字节;
UINT,无符号整型,2个字节;
DINT,有符号双整型,4个字节;
UDINT,无符号双整型,4个字节;
LINT,有符号长整型,8个字节;
ULINT,无符号长整型,8个字节
2.功能码使用:
(1.)01/02功能码(DI量):
发送命令: 拨码地址 + 功能码 + 寄存器起始地址 + 长度 + 校验码
读取的响应命令:拨码地址 + 功能码 + 字节数 + 数据 + 校验码
例子:
读取08 到 17 开关状态
[16:18:07.049]发→◇03 01 00 08 00 0A 3C 2D
拨码地址:03
功能码:01
起始地址:00 08
长度:00 0A
校验码:3C 2D
[16:18:07.054]收←◆03 01 02 EF 03 CC 0D
拨码地址:03
功能码:01
字节数:02(响应数据 EF 03 为两个字节)
数据:EF 03
校验码:CC 0D
响应数据解析:
十六进制: EF 03
转为2进制:11101111 00000011
例如:11101111
1 1 1 0 1 1 1 1
对应寄存器地址:15 14 13 12 11 10 09 08(开关状态)
单个字节8位(11101111 从右往左读取)
08状态:1
09状态:1
10状态:1
11状态:1
12状态:0
13状态:1
14状态:1
15状态:1
(00000011 从右往左读 16 17)
16状态:1
17状态:1
(2.)03/04 功能码(AI量):
发送命令:拨码地址 + 功能码 + 寄存器起始地址 + 长度 +校验码
响应命令:拨码地址 + 功能码 + 发送命令的字节数 *2 + 数据 + 校验码
例子:
[15:29:38.156]发→◇01 03 02 1A 00 02 E4 74
[15:29:38.161]收←◆01 03 04 4A 16 00 00 0D EF
响应命令解析:
拨码地址:01
功能码:03
发送命令长度 * 2: 04
寄存器数值:4A 16 00 00
CRC检验码:0D EF
备注:存在高低位反转情况,正常情况默认 高位在前 低位在后
[15:29:39.158]发→◇01 04 02 1A 00 02 E4 74
[15:29:40.171]收←◆01 04 04 4A 16 00 00 0D EF
(3.)05/06 功能码(控制单个寄存器):
拨码地址 + 功能码 + 寄存器地址 + 寄存器设定数值 + 校验码
例子:
[17:00:43.609]发→◇04 06 00 0B 00 C8 F9 CB
拨码地址:04
功能码:06
寄存器地址:00 0B
寄存器数值:00 C8
校验码:F9 CB
[17:00:43.611]收←◆04 06 00 0B 00 C8 F9 CB
(4.)10功能码命令(控制多个寄存器):
操作描述:报警温度阀值下限(℃)
发送:01 10 72 7B 00 01 02 00 0B BF DB
拨码地址:01(一个字节)
功能码:10(一个字节)
起始地址:72 7B(两个字节)29307
寄存器数目:00 01(两个字节)
字节数:02(一个字节)
寄存器值:00 0B(N*2字节)
CRC校验码:BF DB(两个字节)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。