1. 项目概述:西门子S7-1200 PLC温室监控系统设计实录
去年为某农业科技园区实施的温室自动化改造项目,核心采用了西门子S7-1200 PLC作为主控制器。这个系统最让我自豪的是实现了环境参数的闭环控制——当传感器检测到温度超过28℃时,系统能在12秒内自动启动湿帘风机,将温室内温度波动控制在±0.5℃范围内。整套方案包含硬件选型、PLC编程、上位机监控三大模块,特别适合200-500平方米的中小型连栋温室。
系统架构上采用分布式设计:底层是S7-1214C DC/DC/DC PLC(6ES7 214-1AG40-0XB0)作为主站,通过RS485总线连接温湿度传感器(SHT31)、CO2传感器(MH-Z19B)和执行机构;中间层通过TP-Link工业交换机组建局域网;上层则是运行在Windows工控机上的WinCC监控系统。这种架构的优点是当某个传感器故障时,不会影响其他区域的监控功能。
关键设计指标:
- 温度控制精度:±0.5℃(实测在风机启动后3分钟内达到设定值)
- 湿度控制范围:50%-85%RH(精度±3%)
- CO2浓度调控:800-1500ppm(采用PID算法控制电磁阀开度)
- 系统响应延迟:<15秒(从传感器检测到执行机构动作)
2. 硬件系统设计与选型要点
2.1 核心控制器选型对比
选择S7-1200系列而非S7-1500主要基于三点考量:首先,项目预算控制在5万元以内,1214C PLC(约4000元)的性价比更高;其次,温室控制不需要运动控制等高级功能;最重要的是,S7-1200的TIA Portal编程环境对农业技术人员更友好。具体配置如下:
| 部件型号 | 数量 | 关键参数 | 单价 |
|---|---|---|---|
| 6ES7 214-1AG40-0XB0 | 1 | 14DI/10DO, 2AI/2AQ | 3850 |
| SM1231 AI 8x13bit | 1 | 8通道模拟量输入 | 1200 |
| CM1241 RS485 | 1 | 支持Modbus RTU协议 | 850 |
| 6ES7 972-0BB12-0XA0 | 1 | 前连接器 | 150 |
2.2 传感器网络部署方案
传感器布局采用"中心辐射"模式:在温室对角线交点安装主控箱,向外延伸4条RS485总线(最远距离<80米)。每条总线挂接:
- 温湿度传感器:每50㎡布置1个SHT31(精度±0.2℃,I2C接口转Modbus)
- CO2传感器:每100㎡布置1个MH-Z19B(NDIR原理,UART转Modbus)
- 光照传感器:每区1个BH1750(量程0-65535lux)
布线注意事项:
- RS485总线必须采用双绞屏蔽线(如BELDEN 3105A)
- 终端电阻设为120Ω,总线两端需并联
- 避免与变频器电源线平行走线(最小间距30cm)
2.3 执行机构控制电路
执行设备控制采用"PLC→中间继电器→接触器"三级隔离方案。以湿帘风机为例:
ladder复制Network 1: 风机自动控制
LD "Temp_High_Alarm" //温度超限标志
S "Fan_Run_Cmd" //置位风机启动命令
TON "Fan_Delay_Timer", 30s //延时保护
Network 2: 手动 override
LD "HMI_Fan_Manual"
O "Fan_Run_Cmd"
AN "Fan_Fault"
= "KM_Fan_Coil" //输出到继电器
关键保护措施:
- 每个动力回路加装热继电器(如LRD32)
- 电磁阀前安装水过滤器(精度100目)
- 所有电缆穿Φ20镀锌钢管埋地敷设
3. PLC程序设计核心逻辑
3.1 主程序OB1架构设计
采用模块化编程风格,在OB1中按功能调用多个FC块:
STL复制CALL "FC_Read_Sensors" //传感器数据采集
CALL "FC_Env_Control" //环境控制算法
CALL "FC_HMI_Com" //WinCC通信处理
CALL "FC_Alarm_Handle" //报警管理
每个功能块配有独立的DB数据块,例如DB2存储传感器数据:
| 变量名 | 数据类型 | 地址 | 注释 |
|---|---|---|---|
| Temp_Value1 | REAL | DB2.DBD0 | 1区温度(℃) |
| Humidity_Value1 | REAL | DB2.DBD4 | 1区湿度(%RH) |
| CO2_Value1 | INT | DB2.DBW8 | 1区CO2(ppm) |
| Sensor_Status1 | BYTE | DB2.DBB10 | 1区传感器状态字 |
3.2 模拟量处理技巧
对于SHT31的温湿度数据,需进行滤波和单位转换:
SCL复制// FC_Read_Sensors中的处理代码
#Temp_Raw := "AI1".CHANNEL; //读取模拟量输入
#Temp_Filter := (#Temp_Raw * 0.2) + (#Temp_Last * 0.8); //一阶滤波
"DB2".Temp_Value1 := (#Temp_Filter * 0.1) - 20.0; //转换为℃
#Temp_Last := #Temp_Filter; //更新历史值
实测发现的关键参数:
- 滤波系数取0.2-0.3时响应速度与稳定性最佳
- SHT31的I2C信号需加10KΩ上拉电阻
- Modbus轮询周期建议设为3秒(过快会导致总线拥堵)
3.3 环境控制PID算法实现
以温度控制为例,采用增量式PID算法:
SCL复制// 在FC_Env_Control中实现
#Error := "DB2".Temp_Setpoint - "DB2".Temp_Value1;
#Delta_P := 0.5 * (#Error - "DB4".Last_Error); //比例系数0.5
#Delta_I := 0.02 * #Error; //积分系数0.02
#Delta_D := 0.1 * (#Error - 2*"DB4".Last_Error + "DB4".Prev_Error);
"DB4".Output_PWM := LIMIT(0.0, 100.0,
"DB4".Output_PWM + #Delta_P + #Delta_I + #Delta_D);
"DB4".Last_Error := #Error;
"DB4".Prev_Error := "DB4".Last_Error;
参数整定经验:
- 先设I=D=0,增大P直到系统出现等幅振荡
- 记录振荡周期Tu,按Z-N公式计算:
- Kp=0.6Ku, Ti=0.5Tu, Td=0.125*Tu
- 对温室系统,最终采用P=0.5, I=0.02, D=0.1
4. WinCC监控系统开发
4.1 人机界面布局设计
采用"总览-分控-趋势"三级界面:
- 总览页:显示所有区域实时数据、设备状态、报警摘要
- 分控页:按温室分区显示详细参数和手动控制按钮
- 趋势页:可自定义显示任意参数的历史曲线(采样周期1分钟)
关键控件设计规范:
- 报警信息用红/黄双色闪烁(持续5秒后转静态显示)
- 所有操作按钮需二次确认(防止误触)
- 参数设置范围限制(如温度设定范围15-35℃)
4.2 数据归档配置
采用循环存储策略,在WinCC变量管理中:
xml复制<Archive name="EnvData" type="Binary">
<Cycle>60s</Cycle>
<MaxSize>100MB</MaxSize>
<Segment time="1d"/>
</Archive>
归档数据可通过VBScript导出为CSV:
vbs复制Sub Export_Click()
Dim path: path = "D:\Logs\" & FormatDateTime(Now,2) & ".csv"
Dim tagList: tagList = Array("Temp1","Humidity1","CO2_1")
SmartTags.ExportToCSV tagList, "2024-01-01 00:00:00", Now, path
End Sub
4.3 报警管理实现
在WinCC Alarm Control中配置三级报警:
| 报警编号 | 类型 | 触发条件 | 处理建议 |
|---|---|---|---|
| A001 | 紧急 | 温度>35℃持续5分钟 | 立即开启所有降温设备 |
| A002 | 警告 | CO2<800ppm持续10分钟 | 检查气瓶压力及电磁阀 |
| A003 | 提示 | 湿度>90%持续1小时 | 建议开启侧窗通风 |
报警推送通过SMTP模块实现,配置参数:
- SMTP服务器:smtp.qiye.163.com
- 端口:465(SSL加密)
- 邮件模板包含:报警时间、位置、当前值、设定值
5. 系统调试与故障排查
5.1 现场调试流程
按照以下顺序进行系统验证:
- IO测试:强制PLC点强制输出,逐路验证执行机构动作
- 示例:强制Q0.0=1,确认对应继电器吸合
- 传感器校准:
- 温度:用标准水银温度计对比,修正偏移量
- CO2:通入1000ppm标准气体,调整增益系数
- 控制回路测试:
- 设定温度突升5℃,观察风机启动延迟和调节过程
- 人为遮挡光照传感器,验证补光灯响应
5.2 典型故障处理记录
故障现象1:CO2数值跳变严重
- 排查步骤:
- 用Modbus Poll工具直接读取传感器原始值 → 仍然跳变
- 检查终端电阻 → 发现末端电阻为150Ω → 更换为120Ω
- 测量总线电压 → A-B线间2.1V(正常应>1.5V)
- 分段排查 → 发现某接头氧化导致接触电阻增大
- 解决方案:更换防水型接线端子(IP67等级)
故障现象2:WinCC画面数据刷新慢
- 可能原因:
- 网络延迟(ping测试>10ms)
- PLC扫描周期过长(监控OB1执行时间)
- WinCC变量归档负载高
- 优化措施:
- 将普通交换机更换为工业级(如赫斯曼MS30)
- 在PLC中优化程序结构,将模拟量处理移到循环中断OB35
- 调整WinCC归档周期从1秒改为5秒
5.3 系统维护建议
-
日常检查项:
- 每周清洁传感器防护罩(防止灰尘影响精度)
- 每月测试备用电源切换功能(UPS+发电机)
- 每季度校准关键传感器(使用标准源)
-
程序备份策略:
- 项目文件按日期命名(如"2024-06_温室V2.1.ap14")
- 上传至私有Git仓库(包含TIA Portal完整项目)
- PLC内部存储区备份至SD卡(通过"Online->Copy RAM to ROM")
这个项目让我深刻体会到,可靠的自动化系统=80%的规范设计+15%的细致调试+5%的应急处理。特别是在农业场景中,设备需要耐受高温高湿环境,我们在后续改进中给所有室外接线盒增加了防凝露加热带(12V/5W,温控启停),这个细节使故障率降低了70%。
