一、通信故障概述
在现代工业自动化系统中,PLC(可编程逻辑控制器)与变频器、伺服驱动器之间的可靠通信是实现精确运动控制与过程控制的核心。通信故障将直接导致生产线停机、产品质量下降甚至设备损坏。本章节将深入剖析此类通信故障的三大核心领域:参数设置、控制字/状态字解读与通信超时处理。
典型PLC与驱动通信架构图
常见故障现象: 驱动器无响应、PLC报“通信超时”或“从站故障”、控制命令执行延迟或错误、状态反馈数据异常、网络指示灯异常(常亮/闪烁/熄灭)。
二、关键参数设置与匹配
通信参数的“一致性”是建立通信链路的基础。任何一方的参数不匹配都将导致通信失败。
2.1 通信双方必须匹配的参数
| 参数类别 | PLC侧(主站) | 驱动器侧(从站) | 检查要点 |
|---|---|---|---|
| 站地址 | 配置的从站地址 | 参数设定的本机地址(如 P918 / P8801) | 必须唯一,且在网络范围内。 |
| 波特率/速率 | 总线波特率设置 | 通信速率参数 | PROFIBUS: 9.6Kbps - 12Mbps 必须一致。 |
| 数据格式 | 数据位、停止位、奇偶校验 | 串行通信格式参数 | 通常为 8-N-1 (8数据位,无校验,1停止位)。 |
| 过程数据 (PZD) | 发送/接收字长度 | PZD长度参数(如 P2047) | 控制字/状态字、主给定/实际值的数据结构必须对应。 |
| 协议选择 | 选择的通信协议(如 USS, Modbus, PROFIdrive) | 激活的通信协议模式 | 驱动器必须工作在正确的协议模式下。 |
2.2 典型变频器通信参数示例(以西门子G120为例)
// 通过BOP-2面板或STARTER软件设置 P0010 = 30 // 进入调试过滤级 P0003 = 3 // 专家访问级 // --- 设置PROFIBUS地址 --- P918 = 3 // 设置PROFIBUS站地址为3 // --- 设置通信报文 --- P922 = 20 // 选择标准报文20 (PZD-10/10) P2047 = 500 // 设置PROFIBUS监控时间 [ms] // --- 激活通信控制 --- P0010 = 0 // 返回运行级 P0971 = 1 // 从RAM复制到ROM,保存参数
专家提示: 在修改通信参数后,必须对驱动器和PLC进行断电重启,以确保新参数生效。同时,务必检查物理连接(如DP插头终端电阻、网线线序)是否正常。
三、控制字与状态字深度解读
控制字(CW)和状态字(SW)是PLC与驱动器之间交换控制命令和运行状态的核心数据,通常位于过程数据(PZD)的第一个字。
控制字 (STW1) 位定义(以PROFIdrive为例)
3.1 关键控制字命令解析
| 命令意图 | 控制字值 (十六进制) | 位模式说明 | 备注 |
|---|---|---|---|
| 准备就绪 | 047E | 0000 0100 0111 1110 | ON位=0,脉冲使能=1 |
| 启动 (斜坡使能) | 047F | 0000 0100 0111 1111 | ON位=1,启动电机 |
| 快速停止 (OFF2) | 047B | 0000 0100 0111 1011 | 位1=0,自由停车 |
| 故障确认 | 04FE | 0000 0100 1111 1110 | 位7产生一个上升沿 |
3.2 状态字 (ZSW1) 关键位诊断
- 位0:准备就绪 - 驱动器主回路已上电,可接受命令。
- 位1:运行准备就绪 - 脉冲已使能,电机励磁建立。
- 位2:运行中 - 电机正在旋转(速度/转矩不为零)。
- 位3:故障激活 - 此位为1表示驱动器存在故障,需结合故障代码排查。
- 位4:OFF2激活 - 自由停车命令生效。
- 位5:OFF3激活 - 快速停车命令生效。
- 位6:禁止合闸 - 存在禁止上电的条件。
- 位7:警告激活 - 存在警告信息,但未停机。
- 位10:控制请求 - 驱动器期望由PLC控制。
诊断技巧: 当通信建立但电机不动作时,首先在PLC程序中监控状态字的值。例如,若状态字始终为“xxxx xxx0 xxxx xxxx”(位2为0),则表明驱动器未进入“运行中”状态,应检查控制字发送序列及驱动器使能条件(如端子使能、内部使能)。
四、通信超时故障处理流程
通信超时是PLC与驱动器通信链路中断或响应迟缓的直接表现。必须系统化排查。
- 确认物理层: 检查电缆(DP线、网线)、连接器(DP插头、水晶头)、终端电阻(总线两端必须为ON)、端口指示灯状态。
- 检查网络配置: 确认PLC硬件组态中从站地址、模块型号与实际设备一致。检查是否有IP地址或站地址冲突。
- 验证参数与数据交换:
- 确认双方通信参数(波特率、站地址、报文类型)完全匹配。
- 检查PLC程序中用于通信的指令(如SFC14/SFC15、TPDO/RPDO)是否被正确调用,数据块地址是否正确。
- 利用诊断工具:
- PLC诊断缓冲区: 读取详细的错误代码和事件信息。
- 驱动器参数: 查看驱动器内部通信错误计数器(如r2050[0]等)。
- 网络分析仪: 使用专用的总线分析工具(如Wireshark for Ethernet, PROFIBUS Sniffer)抓取数据包分析。
- 实施超时处理程序: 在PLC程序中必须编写通信超时的故障安全逻辑。
4.1 PLC超时监控程序示例(西门子TIA Portal - SCL语言)
FUNCTION_BLOCK \"FB_DriveCommMonitor\"
VAR_INPUT
// 输入:通信状态字和心跳
iStatusWord : WORD; // 从驱动器读取的状态字
iHeartbeat : BOOL; // 驱动器周期性发送的心跳信号
iTimeoutTime : TIME := T#2S; // 超时时间,默认2秒
END_VAR
VAR_OUTPUT
// 输出:通信状态和故障代码
oCommOK : BOOL; // TRUE=通信正常
oTimeoutFault : BOOL; // TRUE=发生超时故障
oFaultCode : INT; // 故障代码:0=无,1=状态字超时,2=心跳超时
END_VAR
VAR
// 内部变量
tStatusTimer : TON; // 状态字更新计时器
tHeartbeatTimer : TON; // 心跳信号计时器
lastStatusWord : WORD := 0; // 上一次状态字
END_VAR
// 监控状态字是否更新(任何位变化即认为更新)
IF iStatusWord <> lastStatusWord THEN
lastStatusWord := iStatusWord;
tStatusTimer(IN := FALSE); // 复位计时器
ELSE
tStatusTimer(IN := TRUE, PT := iTimeoutTime);
END_IF
// 监控心跳信号
tHeartbeatTimer(IN := iHeartbeat, PT := iTimeoutTime);
// 判断通信状态
oCommOK := NOT (tStatusTimer.Q OR tHeartbeatTimer.Q);
oTimeoutFault := NOT oCommOK;
// 设置故障代码
IF tStatusTimer.Q THEN
oFaultCode := 1;
ELSIF tHeartbeatTimer.Q THEN
oFaultCode := 2;
ELSE
oFaultCode := 0;
END_IF;
