1. 项目背景与整体架构
去年接手了一个纺织厂风机群控改造项目,需要同时协调5台37kW离心风机。客户的核心诉求是:在保证车间负压稳定的前提下,实现按需调节风量。传统继电器控制柜的粗暴启停方式导致车间经常出现"过压-欠压-过压"的震荡现象,工人操作起来也极为不便。
经过现场勘测,最终敲定的方案架构如下:
- 控制核心:S7-1215C DC/DC/DC PLC
- 执行单元:5台CU250S-2 PN控制的G120变频器
- 人机界面:KTP700 Basic触摸屏
- 通讯网络:PROFINET+Modbus RTU混合组网
这个方案有几个技术亮点值得展开:
- 采用Modbus RTU实现多变频器轮询控制,比PROFINET方案节省了30%硬件成本
- 自主研发的PID控制块支持无扰切换,解决了调试期间手动/自动模式切换时的输出跳变问题
- 触摸屏的动态配方功能,使得参数调试效率提升5倍以上
2. 硬件配置与通讯实现
2.1 硬件组网细节
主控柜内元件布局遵循"强电左、弱电右"原则:
- 左侧:5组3RT2017-1AP00接触器+3RV2011-1HA10断路器
- 右侧:S7-1200 PLC+CM1241 RS485模块
- 柜门:安装6ES7193-6BP20-0BA0终端模块
关键接线要点:
- 通讯线采用2×2×0.5mm²带屏蔽双绞线,屏蔽层在PLC侧单点接地
- 每台变频器的P+、P-端子采用菊花链连接,末端接120Ω终端电阻
- 模拟量输入通道均配置了0.1μF/50V的滤波电容
2.2 Modbus RTU参数配置
变频器关键参数设置(以1号机为例):
code复制P2021 = 3 // 通讯协议选择Modbus
P2023 = 1 // 站地址设置
P2040 = 5ms // 报文超时
P2051 = 40001 // 控制字映射地址
P2052 = 40002 // 设定频率映射地址
PLC侧CM1241模块配置:
- 波特率:19200bps
- 校验方式:Even
- 数据位:8位
- 停止位:1位
- 硬件流控:None
3. 核心程序解析
3.1 Modbus轮询机制实现
采用时分复用策略管理5台变频器的通讯:
STL复制// 在OB1中调用的轮询管理程序
NETWORK 1: // 定时器环形队列
TON(IN:=NOT #T1.Q, PT:=T#50ms, Q=>#T1.Q);
TON(IN:=NOT #T2.Q, PT:=T#50ms, Q=>#T2.Q);
...
NETWORK 2: // 站号分配逻辑
IF #T1.Q THEN
#当前站号 := 1;
ELSIF #T2.Q THEN
#当前站号 := 2;
...
数据收发使用西门子标准库指令:
SCL复制MB_MASTER_DB(
REQ := #通讯使能,
MB_ADDR := #当前站号,
MODE := 0, // 读模式
DATA_ADDR := 40001,
DATA_LEN := 4,
DATA_PTR := P#DB4.DBX0.0 BYTE 10);
3.2 自定义PID算法实现
FB5000的功能框图包含:
- 偏差计算模块
- 比例项计算
- 积分项累计
- 输出限幅处理
- 模式切换逻辑
关键算法代码:
STL复制// 比例项计算
L #设定值
L #反馈值
-R
T #偏差
L #比例系数
*R
T #比例项
// 积分项抗饱和处理
L #手动开关
JC MAN
L #偏差
L #比例系数
*R
L #积分时间
TAK
/R
L #积分累计
+R
T #积分累计
JU END
MAN: NOP 0
// 手动模式积分补偿
L #手动输出值
L #比例项
-R
L #积分时间
/R
T #积分累计
END: NOP 0
4. 人机界面设计技巧
4.1 动态面板实现
触摸屏变量关联策略:
TIA复制// 定义结构体数组
"PID_Param"[0..4] : Struct
SetValue : Real;
Kp : Real;
Ti : Time;
End_Struct;
// 画面对象绑定
SetValue_Input.Tag = "PID_Param"[#CurrentIndex].SetValue
Kp_Slider.Tag = "PID_Param"[#CurrentIndex].Kp
4.2 报警管理优化
采用事件触发式报警代替轮询检测:
- 在PLC中配置报警字:
SCL复制IF #转速反馈 < #设定值 * 0.9 THEN
#报警字.%X0 := 1; // 欠速报警
END_IF;
- 触摸屏直接监控报警字地址,响应速度提升至50ms级
5. 调试经验与故障排查
5.1 典型问题处理记录
| 故障现象 | 排查步骤 | 解决方案 |
|---|---|---|
| 通讯时断时续 | 1. 用示波器查看信号波形 2. 测量终端电阻阻值 |
1. 更换带屏蔽层的通讯线 2. 末端增加120Ω电阻 |
| PID输出震荡 | 1. 检查反馈信号滤波 2. 观察设定值变化曲线 |
1. 在AI模块启用50Hz工频滤波 2. 增加设定值变化率限制 |
| 触摸屏响应慢 | 1. 监控PLC循环时间 2. 检查HMI变量更新周期 |
1. 优化程序结构 2. 将关键变量设为"循环连续"更新 |
5.2 参数整定心得
针对风机类大惯性负载的PID参数经验值:
- 比例系数Kp:0.5~1.2
- 积分时间Ti:3~10秒
- 微分时间Td:通常设为0
调试口诀:
"先比例后积分,微分时间最后加;
震荡调大比例,静差调小积分;
曲线波动大,先把滤波加"
6. 系统优化与扩展
6.1 热插拔功能实现
通过状态检测实现设备自动识别:
SCL复制IF NOT #通讯成功 THEN
#重试计数器 += 1;
IF #重试计数器 > 3 THEN
#设备在线状态 := FALSE;
END_IF;
ELSE
#设备在线状态 := TRUE;
#重试计数器 := 0;
END_IF;
6.2 能耗统计功能
在DB5中增加运行时长累计:
STL复制L "运行标志"
JC CAL
JU END
CAL: NOP 0
L "DB5".运行时长[#当前站号]
L OB1循环时间
+R
T "DB5".运行时长[#当前站号]
END: NOP 0
这套系统经过三个月的连续运行,车间压力控制精度达到±5Pa,相比原系统节能27%。最让我自豪的是那个带自学习功能的PID模块——它现在能根据负载变化自动微调参数,这可是调试期间熬了五个通宵的成果。