1. 项目背景与系统架构
锅炉房里的自动化控制系统往往需要在恶劣环境下稳定运行,这次的项目就是典型代表。系统采用西门子S7-200 SMART PLC作为主控制器,搭配昆仑通态触摸屏实现人机交互,主要完成锅炉换热站的温度控制、水泵管理、电能计量和变频器控制等功能。
这套系统的核心挑战在于:
- 需要处理多个模拟量信号(温度、压力、流量等)
- 实现水泵的自动切换和故障保护
- 按不同时段自动调整加热温度
- 通过Modbus协议与变频器通讯
- 实时监测电能消耗
硬件配置方面,我们选用了:
- 西门子S7-200 SMART SR40 CPU(自带24DI/16DO)
- EM AM03模拟量输入模块(用于热电阻信号采集)
- 昆仑通态MCGS TPC7062K触摸屏
- 施耐德ATV312变频器
- DL/T645规约电能表(通过Modbus网关接入)
2. 模拟量采集与处理技巧
2.1 热电阻信号采集
项目中使用了Pt100热电阻测量水温,通过EM AM03模块接入PLC。这个模块支持2/3/4线制热电阻连接,我们选择了3线制接法以消除导线电阻影响。
在编程时,直接使用SCALE指令将原始模拟量值转换为工程单位(℃):
code复制SCALE
IN := AIW0, // 模拟量输入地址
HI_LIM := 100.0, // 工程量上限(℃)
LO_LIM := 0.0, // 工程量下限(℃)
BIPOLAR := FALSE, // 单极性
OUT := VD100 // 输出温度值
2.2 运算周期自适应切换
在实际运行中发现,当传感器或线路出现故障时,模拟量值会出现剧烈波动。为此设计了运算周期自适应切换逻辑:
code复制LD SM0.5 // 秒脉冲
MOVR VD200, VD204 // 保存原运算周期(1s)
AENO // 检测上条指令是否出错
MOVR VD208, VD200 // 出错时切换为5s运算周期
这个机制的关键点:
- 正常情况下使用1秒的运算周期保证响应速度
- 当检测到AI通道异常时,自动切换到5秒均值计算
- 使用AENO指令检测前一条指令执行状态
- 故障恢复后自动切回快速运算模式
提示:这种自适应算法特别适合现场干扰较大的场合,能有效防止PID控制因输入信号抖动而失控。
3. 水泵控制逻辑实现
3.1 一用一备自动切换
系统配置了两台循环水泵,采用一用一备工作方式。控制逻辑主要考虑:
- 运行泵故障时自动切换到备用泵
- 两台泵均衡运行时间
- 硬件互锁保护
程序中使用状态矩阵管理水泵运行状态:
code复制Network 1 // 泵1故障检测
LD I0.0 // 泵1运行反馈
AND M10.0 // 泵1允许运行
TON T37, 150 // 15秒故障延时(10ms单位)
Network 2 // 状态切换
LD T37 // 泵1故障计时到
MOVB 16#01, VB50 // 设置泵2运行标志
R M10.0, 1 // 复位泵1允许
3.2 硬件互锁设计
虽然程序中也做了软件互锁,但必须强调:接触器互锁必须做在硬件回路里!我们的接线方案:
- 主接触器KM1和KM2的常闭触点串联在对方线圈回路
- PLC输出Q0.0和Q0.1分别控制KM1和KM2
- 热继电器保护信号接入PLC输入
重要经验:仅靠程序互锁存在扫描周期延迟风险,硬件互锁才是真正的安全保障。曾经遇到过PLC输出点粘连导致两台泵同时运行的险情。
4. 时段温度控制方案
4.1 触摸屏界面设计
在昆仑通态屏上设计了仿手机闹钟的时间段设置界面:
- 可设置最多5个时段
- 每个时段可独立设置目标温度
- 支持复制某天设置到其他日期
数据存储使用SFC20块搬指令:
code复制MOVB 16#05, VB100 // 时段数量
BLKMOV
SRCBLK := &VB101, // 源地址(屏上设置值)
DSTBLK := &VB200, // 目标地址(PLC存储区)
LEN := 20 // 搬移长度
4.2 PLC时段判断逻辑
PLC中通过读取实时时钟并与设定时段比较,自动切换温度设定值:
code复制Network 1 // 获取当前时间
READ_RTC
T := VB10 // 时间缓冲区
Network 2 // 时段判断
LDB= VB11, VB201 // 比较当前小时与时段起始小时
LDB= VB12, VB202 // 比较当前分钟
AW // 与运算
MOVR VD203, VD300 // 符合时段则载入设定温度
实际运行中,系统实现了:
- 凌晨(0:00-6:00)保持75℃高温
- 白天(6:00-22:00)降至65℃
- 晚间(22:00-24:00)设为70℃
这种策略可充分利用低谷电价,每月节省电费约15%。
5. Modbus通讯实现
5.1 变频器控制
使用西门子自带的Modbus RTU库指令控制施耐德ATV312变频器。关键配置:
code复制MOVB 16#01, VB500 // 变频器站地址
MOVW 16#1001, VW502 // 写频率指令
MOVR 35.5, VD504 // 设定频率(Hz)
XMT VB500, 0 // 触发发送
调试中发现的问题及解决:
- 初始使用06功能码单寄存器写入,响应慢
- 改用03功能码多寄存器写入后,通讯周期从500ms降至200ms
- 必须设置3.5字符的帧间延时,否则容易丢包
5.2 电能计量处理
电能表采用DL/T645规约,通过网关转换为Modbus RTU。PLC中进行电能累计计算时需注意:
- 使用32位浮点数存储电度值
- 定期将工作寄存器值累加到累计寄存器
- 设置上电初始化时从累计寄存器恢复数据
典型电能计算逻辑:
code复制Network 1 // 读取瞬时功率
MOVR VD600, VD610 // 当前功率(kW)
Network 2 // 电能累计
MULR 0.1, VD610 // 功率×0.1h=0.1h内电量
ADDR VD610, VD620 // 累加到总电量
6. 系统调试经验总结
6.1 模拟量处理常见问题
- 信号干扰问题:
- 热电阻信号线必须使用屏蔽双绞线
- 屏蔽层单端接地(PLC侧)
- 信号线与动力线保持30cm以上距离
- 断线检测:
- 在SCALE指令前增加数值范围判断
- 对超出量程的值进行滤波处理
6.2 水泵控制注意事项
- 切换延时设置:
- 故障检测延时建议10-15秒
- 切换后延时启动建议5秒
- 避免频繁切换(每小时不超过6次)
- 运行时间均衡:
- 每月手动或自动切换主备泵
- 记录各泵累计运行时间
6.3 Modbus通讯优化
- 参数优化:
- 波特率优选9600bps
- 校验方式与从站严格一致
- 超时时间设为正常响应时间的3倍
- 错误处理:
- 增加通讯失败计数器
- 连续3次失败后触发报警
- 重要参数采用读取-验证-写入三步操作
这套系统经过半年运行,稳定性得到了验证。后期根据客户要求增加了云端监控功能,通过4G模块将关键数据上传至监控中心。自动化项目就是这样,永远有意想不到的新需求等着你。