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(两个字节)

   



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。