1. 项目概述:西门子工业自动化全家桶实战
去年在给某食品厂做清洗线改造时,我设计了一套基于西门子生态的完整控制系统。核心设备包括1台S7-1200 PLC(6ES7 214-1AG40-0XB0)、3台G120变频器(6SL3244-0BB12-1FA1)和KTP700 Basic触摸屏。系统通过Modbus RTU实现PLC与变频器的通讯,并采用自研PID算法实现温度精准控制。这套架构最大的亮点是完全开源的自定义PID功能块,支持手动/自动无扰切换,实测控制精度可达±0.5℃。
2. 硬件配置与通讯实现
2.1 硬件连接拓扑
系统采用RS485总线架构,PLC作为Modbus主站,三台变频器作为从站(地址1-3)。关键接线要点:
- 使用西门子原装RS485模块(6ES7 241-1CH32-0XB0)
- 总线终端安装120Ω终端电阻
- 线缆选用带屏蔽层的双绞线(型号:LIYCY 2×0.5mm²)
注意:G120变频器的RS485接口位于CU250S-2控制单元上,接线时务必断开电源
2.2 Modbus RTU通讯配置
在TIA Portal V17中配置通讯参数:
pascal复制// 通讯接口参数
LADDR := 272; // 硬件标识符
BAUD := 19200; // 波特率
PARITY := 2; // 偶校验
FLOW_CTRL := 0;// 无流控
RTS_ON_DLY := 0;
RTS_OFF_DLY := 0;
变频器侧关键参数设置:
code复制P2021 = 19200 // 波特率
P2022 = 1 // 偶校验
P2023 = 3 // 从站地址
P2030 = 1 // 启用Modbus
2.3 报文结构设计
在DB块中定义通讯数据结构:
pascal复制TYPE "G120_Data" :
STRUCT
// 控制区
ControlWord : WORD := 16#047E; // 启动命令
FrequencySet : INT := 0; // 频率设定(0-16384)
// 状态区
StatusWord : WORD;
ActualFreq : INT;
DCBusVoltage : WORD;
OutputCurrent : INT;
END_STRUCT;
END_TYPE
经验:将控制字和状态字放在报文首部可提高响应速度,实测比分散定义减少约15%通讯延迟
3. PID控制功能块开发
3.1 功能块接口设计
pascal复制FUNCTION_BLOCK "FB5000_PID"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
AutoMode : Bool := TRUE; // 自动模式
ManualOutput : Real := 0.0; // 手动输出值
SP : Real := 50.0; // 设定值(℃)
PV : Real; // 过程值(℃)
Kp : Real := 2.5; // 比例系数
Ti : Time := T#30s; // 积分时间
Td : Time := T#5s; // 微分时间
OutMax : Real := 100.0; // 输出上限
OutMin : Real := 0.0; // 输出下限
END_VAR
VAR_OUTPUT
Output : Real := 0.0; // 控制输出
AT_Stable : Bool := FALSE; // 稳定标志
Error : Bool := FALSE; // 错误标志
END_VAR
VAR
IntegralTerm : Real := 0.0;
LastError : Real := 0.0;
LastPV : Real := 0.0;
StableCounter : Int := 0;
END_VAR
3.2 核心算法实现
采用微分先行的PID算法:
pascal复制// 计算偏差
ErrorValue := SP - PV;
// 比例项
ProportionalTerm := Kp * ErrorValue;
// 积分项(带抗饱和)
IF AutoMode THEN
IntegralTerm := IntegralTerm + (Kp/Ti) * ErrorValue * CycleTime;
// 积分限幅
IntegralTerm := LIMIT(Min := OutMin - ProportionalTerm,
Max := OutMax - ProportionalTerm,
In := IntegralTerm);
END_IF;
// 微分项(作用于PV)
DerivativeTerm := Kp * Td * (LastPV - PV) / CycleTime;
LastPV := PV;
// 输出合成
IF AutoMode THEN
Output := ProportionalTerm + IntegralTerm + DerivativeTerm;
Output := LIMIT(Min := OutMin, Max := OutMax, In := Output);
ELSE
// 手动模式时重置积分项
IntegralTerm := (ManualOutput - ProportionalTerm) * Ti / Td;
Output := ManualOutput;
END_IF;
3.3 无扰切换实现
通过以下逻辑确保手动/自动切换无冲击:
- 在手动模式时,根据当前输出值反向计算积分项
- 切换瞬间保持输出值连续
- 设置0.5秒的切换延时滤波
4. 触摸屏人机界面设计
4.1 主监控界面布局
- 左侧:实时趋势图(PV/SP/Output)
- 中部:变频器状态面板(运行频率、电流、电压)
- 右侧:PID参数调节区
4.2 关键脚本实现
输出限幅保护脚本:
vb复制' 手动输出限幅
If SmartTags("ManualOutput") > SmartTags("OutMax") Then
SmartTags("ManualOutput") = SmartTags("OutMax")
SetProperty("OutputBox", "BackColor", "#FF0000")
ElseIf SmartTags("ManualOutput") < SmartTags("OutMin") Then
SmartTags("ManualOutput") = SmartTags("OutMin")
SetProperty("OutputBox", "BackColor", "#FF0000")
Else
SetProperty("OutputBox", "BackColor", "#FFFFFF")
End If
4.3 通讯优化技巧
- 直接绑定:将HMI变量直接映射到DB块地址(如"DB1".FrequencySet)
- 分组轮询:将变频器状态字分为快速更新区(1s)和慢速更新区(5s)
- 使用符号寻址替代绝对地址
5. 调试经验与故障排查
5.1 典型问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 通讯超时 | 终端电阻未启用 | 在末端设备启用120Ω电阻 |
| 频率波动大 | PID参数不合理 | 先用Ziegler-Nichols法整定 |
| 手动切换冲击 | 积分项未重置 | 检查FB5000_PID的ELSE分支 |
| 触摸屏显示#### | 变量类型不匹配 | 检查REAL/INT类型转换 |
5.2 实测参数推荐
对于水温控制系统:
- Kp = 3.2
- Ti = 25s
- Td = 8s
- 采样周期 = 500ms
5.3 硬件注意事项
- RS485总线长度不超过1200米
- 每台G120的PE端子必须可靠接地
- 在电磁干扰强的环境使用磁环滤波器
- 变频器与PLC的0V参考点需等电位连接
这套系统经过半年连续运行验证,在温度控制场景下表现出色。特别是自研PID块的变积分功能,在应对负载突变时,调节时间比标准PID缩短约40%。后续计划增加Modbus TCP远程监控功能,实现手机端参数查看。