4. 基于Modbus RTU的串口电能表接入与调试
RS-485 物理层与 Modbus RTU 帧结构
Modbus RTU 电能表通过 RS-485 半双工总线接入 SCADA 采集网关。接线采用 A/B 差分对,屏蔽层单端接地;总线两端各接 120 Ω 终端电阻。SCADA 侧作为 Modbus 主站,电能表为从站,主站发起请求帧,从站返回响应帧。
RTU 帧由从站地址、功能码、数据域和 CRC16 校验组成,帧间至少 3.5 个字符时间静默。常用功能码:0x03 读保持寄存器、0x04 读输入寄存器、0x10 写多个寄存器。电能表典型寄存器(示例,需以实际设备手册为准):
| 寄存器地址 | 数据项 | 数据类型 | 单位/倍率 |
|---|---|---|---|
| 0x0000 | A 相电压 | UINT16 | 0.1 V |
| 0x0001 | A 相电流 | UINT16 | 0.01 A |
| 0x0002–0x0003 | 有功功率 | INT32(高字在前) | 0.001 kW |
| 0x0004–0x0005 | 正向有功电能 | UINT32 | 0.01 kWh |
串口参数与从站地址配置
RS-485 串口参数必须与电能表出厂设置一致,否则表现为无响应或 CRC 错误。典型配置:波特率 9600 bps、数据位 8、校验位 Even、停止位 1(即 9600-8-E-1)。部分表计支持 19200 或 None 校验,需以铭牌或说明书为准。
从站地址通过表计面板或配置软件设置,同一总线内地址不可重复。SCADA 侧在 Modbus RTU 驱动中为每块表建立独立设备节点,指定从站地址、寄存器映射和轮询周期。
配置检查顺序:
1. 确认物理接线 A→A、B→B,终端电阻已接;
2. 用串口调试工具发送 01 03 00 00 00 02 C4 0B,观察是否返回 01 03 04 …;
3. 若返回异常码 0x83,检查功能码是否被表计支持;
4. 若 CRC 错误,核对波特率与校验位;
5. 若超时,检查从站地址和 A/B 是否反接。
1. 确认物理接线 A→A、B→B,终端电阻已接;
2. 用串口调试工具发送 01 03 00 00 00 02 C4 0B,观察是否返回 01 03 04 …;
3. 若返回异常码 0x83,检查功能码是否被表计支持;
4. 若 CRC 错误,核对波特率与校验位;
5. 若超时,检查从站地址和 A/B 是否反接。
寄存器映射与数据验证
在 SCADA 实时数据库中建立测点,将寄存器原始值按倍率换算为工程值。例如 A 相电压寄存器值 0x08FC = 2300,倍率 0.1,则工程值 230.0 V。有功功率为 INT32 高字在前,需按 32 位有符号数解析。
验证方法:用标准表或钳形表测量同一回路,与 SCADA 采集值对比。电压偏差应小于 ±1%,电流偏差小于 ±2%,功率偏差小于 ±2%。若偏差过大,检查倍率、字节序和 CT/PT 变比设置。
调试记录建议包含:时间、从站地址、功能码、请求帧、响应帧、解析值、参考值、偏差、结论。该记录可直接用于后续故障追溯和验收。
常见异常与排查路径
- 无响应:A/B 反接、从站地址错误、波特率不匹配、终端电阻缺失。
- CRC 错误:校验位设置错误、线路干扰、屏蔽层未接地。
- 数据跳变:轮询周期过短、总线冲突、寄存器地址偏移。
- 数值为 0 或满量程:CT 二次侧开路/短路、倍率配置错误。
排查时先用串口调试工具在网关侧直接发帧,确认物理层和链路层正常,再回到 SCADA 驱动层检查映射和解析逻辑。