1. 项目概述
在工业自动化系统中,电能数据的采集与监控是能源管理的基础环节。最近我完成了一个使用西门子Smart200 PLC与42台安科瑞多功能电度表通过Modbus RTU协议进行通讯的项目,实现了对多台电表的集中数据采集。这个方案特别适合需要对大量电表进行集中监控的场合,比如工厂配电房、商业综合体等场景。
2. 通讯原理与硬件配置
2.1 Modbus RTU协议解析
Modbus RTU是一种基于串行通信的协议,采用主从式架构。在我们的项目中,Smart200 PLC作为主站,42台安科瑞电表作为从站。协议采用二进制编码,具有以下特点:
- 采用主从问答机制,主站主动发起请求,从站被动响应
- 标准波特率范围:1200bps-115200bps
- 数据格式:1位起始位,8位数据位,1位停止位,可选奇偶校验位
- 地址范围:1-247(0为广播地址)
2.2 硬件连接方案
RS485总线采用手拉手式连接方式,具体接线要点:
- 使用双绞屏蔽电缆(建议AWG18或更粗)
- 所有设备的A端接A端,B端接B端
- 总线两端各接一个120Ω终端电阻
- 屏蔽层单端接地(通常在PLC端)
注意:实际布线时,建议使用带极性标识的端子排,避免A、B线接反。我曾在一个项目中因为接反了AB线,导致通讯时好时坏,排查了整整一天才发现问题。
3. PLC程序设计
3.1 变量定义与初始化
在Smart200 PLC中,我们使用SCL语言编写通讯程序。首先需要定义通讯相关的变量:
pascal复制VAR
// 通讯参数
MB_ADDR : BYTE; // 从站地址(1-42)
MB_FC : BYTE; // 功能码
MB_REG_ADDR : WORD; // 寄存器起始地址
MB_DATA_LEN : WORD; // 读取数据长度
MB_DATA : ARRAY[0..63] OF WORD; // 数据缓冲区
MB_STATUS : INT; // 通讯状态
// 轮询控制
Polling_Index : INT := 1; // 当前轮询的电表序号
Poll
