C系列Modbus-Rtu协议开发文档

波特率9600,所有指令均需进行CRC校验

1. 基础通信规则

2. 功能码与寄存器定义

2.1 线圈寄存器(开关量输出)

功能码:01H(读)、05H(写单个)、0FH(写多个)

寄存器宏定义 寄存器地址 说明
REG_D01 0x0000 继电器1
REG_D02 0x0001 继电器2
REG_D03 0x0002 继电器3
REG_D04 0x0003 继电器4
REG_D05 0x0004 继电器5
REG_D06 0x0005 继电器6
REG_D07 0x0006 继电器7
REG_D08 0x0007 继电器8

2.2 离散输入寄存器(开关量输入)

功能码:02H(读)

寄存器宏定义 寄存器地址 说明
REG_T01 0x0000 开关传感器1
REG_T02 0x0001 开关传感器2

2.3 输入寄存器(模拟量输入)

功能码:04H(读)

2.3.1 旧款寄存器(兼容版本)

寄存器宏定义 寄存器地址 说明 数据转换规则
REG_A01 0x0000 温度 数值 ÷ 10 (℃)
REG_A02 0x0001 湿度 数值 ÷ 10 (%RH)
REG_A03 0x0002 电压 数值 ÷ 10 (V)
REG_A04 0x0003 总电流 数值 ÷ 10 (A)
REG_A05 0x0004 功率 直接使用 (W)
REG_A06 0x0005 频率 数值 ÷ 10 (Hz)
REG_A07 0x0006 电量寄存器高16位 ((高16位 << 16) | 低16位) ÷ 3200 (Kwh)
REG_A08 0x0007 电量寄存器低16位
REG_A09 0x0008 电流1 数值 ÷ 10 (A)
REG_A10 0x0009 电流2 数值 ÷ 10 (A)
REG_A11 0x000A 电流3 数值 ÷ 10 (A)
REG_A12 0x000B 电流4 数值 ÷ 10 (A)
REG_A13 0x000C 电流5 数值 ÷ 10 (A)
REG_A14 0x000D 电流6 数值 ÷ 10 (A)
REG_A15 0x000E 电流7 数值 ÷ 10 (A)
REG_A16 0x000F 电流8 数值 ÷ 10 (A)

2.3.2 新款寄存器

寄存器宏定义 寄存器地址 说明 数据转换规则
REG_A21 0x0014 温度 数值 ÷ 10 (℃)
REG_A22 0x0015 湿度 数值 ÷ 10 (%RH)
REG_A23 0x0016 电压 数值 ÷ 10 (V)
REG_A24 0x0017 总电流 数值 ÷ 10 (A)
REG_A25 0x0018 功率 数值 ÷ 10 (W)
REG_A26 0x0019 频率 数值 ÷ 10 (Hz)
REG_A27 0x001A 总功率因数 数值 ÷ 10 (%)
REG_A28 0x001B 电量寄存器高16位 ((高16位 << 16) | 低16位) ÷ 10 (Kwh)
REG_A29 0x001C 电量寄存器低16位
REG_A30 0x001D 电流1 数值 ÷ 10 (A)
REG_A31 0x001E 电流2 数值 ÷ 10 (A)
REG_A32 0x001F 电流3 数值 ÷ 10 (A)
REG_A33 0x0020 电流4 数值 ÷ 10 (A)
REG_A34 0x0021 电流5 数值 ÷ 10 (A)
REG_A35 0x0022 电流6 数值 ÷ 10 (A)
REG_A36 0x0023 电流7 数值 ÷ 10 (A)
REG_A37 0x0024 电流8 数值 ÷ 10 (A)
REG_A38 0x0025 功率1 数值 ÷ 10 (W)
REG_A39 0x0026 功率2 数值 ÷ 10 (W)
REG_A40 0x0027 功率3 数值 ÷ 10 (W)
REG_A41 0x0028 功率4 数值 ÷ 10 (W)
REG_A42 0x0029 功率5 数值 ÷ 10 (W)
REG_A43 0x002A 功率6 数值 ÷ 10 (W)
REG_A44 0x002B 功率7 数值 ÷ 10 (W)
REG_A45 0x002C 功率8 数值 ÷ 10 (W)
REG_A46 0x002D 功率因数1 数值 ÷ 10 (%)
REG_A47 0x002E 功率因数2 数值 ÷ 10 (%)
REG_A48 0x002F 功率因数3 数值 ÷ 10 (%)
REG_A49 0x0030 功率因数4 数值 ÷ 10 (%)
REG_A50 0x0031 功率因数5 数值 ÷ 10 (%)
REG_A51 0x0032 功率因数6 数值 ÷ 10 (%)
REG_A52 0x0033 功率因数7 数值 ÷ 10 (%)
REG_A53 0x0034 功率因数8 数值 ÷ 10 (%)

3. 指令示例

3.1 读取插座输出状态(功能码0x01)

发送指令

01 01 00 00 00 04 3D C9

接收响应

01 01 01 FF 11 C8

数据解析

0xFF    1 1 1 1 1 1 1 1
插座序号    8 7 6 5 4 3 2 1

如接收到数据0x01 即第一个继电器打开,其他关闭。

3.2 单独控制继电器开关(功能码0x05)

操作 发送指令 接收响应
打开继电器1 01 05 00 00 FF 00 8C 3A 01 05 00 00 FF 00 8C 3A
关闭继电器1 01 05 00 00 00 00 CD CA 01 05 00 00 00 00 CD CA
打开继电器2 01 05 00 01 FF 00 DD FA 01 05 00 01 FF 00 DD FA
关闭继电器2 01 05 00 01 00 00 9C 0A 01 05 00 01 00 00 9C 0A
打开继电器3 01 05 00 02 FF 00 2D FA 01 05 00 02 FF 00 2D FA
关闭继电器3 01 05 00 02 00 00 6C 0A 01 05 00 02 00 00 6C 0A
打开继电器4 01 05 00 03 FF 00 7C 3A 01 05 00 03 FF 00 7C 3A
关闭继电器4 01 05 00 03 00 00 3D CA 01 05 00 03 00 00 3D CA
打开继电器5 01 05 00 04 FF 00 CD FB 01 05 00 04 FF 00 CD FB
关闭继电器5 01 05 00 04 00 00 8C 0B 01 05 00 04 00 00 8C 0B
打开继电器6 01 05 00 05 FF 00 9C 3B 01 05 00 05 FF 00 9C 3B
关闭继电器6 01 05 00 05 00 00 DD CB 01 05 00 05 00 00 DD CB
打开继电器7 01 05 00 06 FF 00 6C 3B 01 05 00 06 FF 00 6C 3B
关闭继电器7 01 05 00 06 00 00 2D CB 01 05 00 06 00 00 2D CB
打开继电器8 01 05 00 07 FF 00 3D FB 01 05 00 07 FF 00 3D FB
关闭继电器8 01 05 00 07 00 00 7C 0B 01 05 00 07 00 00 7C 0B

3.3 全开/全关继电器(功能码0x0F)

操作 发送指令 接收响应
全开继电器 01 0F 00 00 00 08 01 FF BE D5 01 0F 00 00 00 08 54 0D
全关继电器 01 0F 00 00 00 08 01 00 FE 95 01 0F 00 00 00 08 54 0D

3.4 读取模拟量数据(功能码0x04)

3.4.1 读取旧款寄存器数据

注意:所有返回数据均为16位无符号数,高字节在前,低字节在后
读取温度
发送:01 04 00 00 00 01 31 CA
接收:01 04 02 00 CB F8 A7 

解析:0x00CB = 203 → 203 ÷ 10 = 20.3℃
读取湿度
发送:01 04 00 01 00 01 60 0A
接收:01 04 02 03 4D 79 F5 

解析:0x034D = 845 → 845 ÷ 10 = 84.5%RH
读取电压
发送:01 04 00 02 00 01 90 0A
接收:01 04 02 08 C0 BE A0

解析:0x08C0 = 2240 → 2240 ÷ 10 = 224.0V
读取总电流
发送:01 04 00 03 00 01 C1 CA
接收:01 04 02 00 31 78 E4  

解析:0x0031 = 49 → 49 ÷ 10 = 4.9A
读取功率
发送:01 04 00 04 00 01 70 0B
接收:01 04 02 04 49 7A 06

解析:0x0449 = 1097 → 1097W(直接使用)
读取频率
发送:01 04 00 05 00 01 21 CB
接收:01 04 02 01 F4 B9 27   

解析:0x01F4 = 500 → 500 ÷ 10 = 50.0Hz
读取电能
发送:01 04 00 06 00 02 91 CA
接收:01 04 04 00 06 2A C0 04 B5

解析:0x00062AC0 = 404160 → 404160 ÷ 3200 = 126.3Kwh
批量读取所有旧款寄存器数据
发送:01 04 00 00 00 10 F1 C6
接收:01 04 20 00 CB 03 4D 08 C0 00 31 04 49 01 F4 00 06 2A C0 
      00 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 85

解析:
温度:0x00CB = 203 → 20.3℃
湿度:0x034D = 845 → 84.5%RH
电压:0x08C0 = 2240 → 224.0V
总电流:0x0031 = 49 → 4.9A
功率:0x0449 = 1097 → 1097W
频率:0x01F4 = 500 → 50.0Hz
电能:0x00062AC0 = 404160 → 126.3Kwh
电流1:0x0031 = 49 → 4.9A
电流2-8:均为0.0A

3.4.2 读取新款寄存器数据

读取温度
发送:01 04 00 14 00 01 71 CE 
接收:01 04 02 00 CB F8 A7 

解析:0x00CB = 203 → 203 ÷ 10 = 20.3℃
读取功率(新款,精确到小数点后1位)
发送:01 04 00 18 00 01 B1 CD
接收:01 04 02 2A E0 A7 D8

解析:0x2AE0 = 10976 → 10976 ÷ 10 = 1097.6W
读取总功率因数
发送:01 04 00 1A 00 01 10 0D
接收:01 04 02 03 E3 F8 49   

解析:0x03E3 = 995 → 995 ÷ 10 = 99.5%
批量读取所有新款寄存器数据
发送:01 04 00 14 00 21 70 16
接收:01 04 42 00 CB 03 4D 08 C0 00 31 2A E0 01 F4 03 E3 00 00 04 EF 
      00 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
      2A E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
      03 E3 00 00 00 00 00 00 00 00 00 00 00 00 00 00

解析:
温度:0x00CB = 203 → 20.3℃
湿度:0x034D = 845 → 84.5%RH
电压:0x08C0 = 2240 → 224.0V
总电流:0x0031 = 49 → 4.9A
功率:0x2AE0 = 10976 → 1097.6W
频率:0x01F4 = 500 → 50.0Hz
总功率因数:0x03E3 = 995 → 99.5%
电能:0x000004EF = 1263 → 126.3Kwh
电流1:0x0031 = 49 → 4.9A
电流2-8:均为0.0A
功率1:0x2AE0 = 10976 → 1097.6W
功率2-8:均为0.0W
功率因数1:0x03E3 = 995 → 99.5%
功率因数2-8:均为0.0%

3.5 读取开关传感器状态(功能码0x02)

读取开关传感器1
发送:01 02 00 00 00 01 B9 CA
接收(正常状态):01 02 01 00 A1 88  → 0x00 = 断开/正常
接收(触发状态):01 02 01 01 60 48  → 0x01 = 闭合/触发
读取开关传感器2
发送:01 02 00 01 00 01 E8 0A
接收(正常状态):01 02 01 00 A1 88  → 0x00 = 断开/正常
接收(触发状态):01 02 01 01 60 48  → 0x01 = 闭合/触发

4. 数据转换规则总结

数据转换规则

  • 温度/湿度/电压/电流/频率/功率因数:接收数值 ÷ 10 得到实际值
  • 旧款功率:直接使用接收数值(单位:W)
  • 新款功率:接收数值 ÷ 10 得到实际值(单位:W)
  • 旧款电量:((高16位 << 16) | 低16位) ÷ 3200(单位:Kwh)
  • 新款电量:((高16位 << 16) | 低16位) ÷ 10(单位:Kwh)
  • 开关状态:0x00=正常/断开,0x01=触发/闭合