在山东某大型养鸡场的供水系统改造项目中,我们采用西门子S7-200 SMART PLC和海为云触摸屏构建了一套集成反渗透净水与恒压供水的智能控制系统。这套系统完美解决了养殖场长期面临的三大痛点:原水杂质多影响设备寿命、水压不稳定导致饮水不均、人工操作频繁增加管理成本。
系统核心由四个功能模块组成:
选择西门子S7-200 SMART PLC主要基于三点考虑:
ABB ACS550变频器的关键优势:
现场控制柜采用分区布局:
特别注意事项:
程序架构采用状态机模式,通过#运行模式变量切换工作状态:
st复制MAIN:
CASE #运行模式 OF
0: //待机模式
停所有泵;
关闭所有阀门;
1: //制水模式
IF 原水箱水位>30% THEN
启动预处理泵;
延时5秒开高压泵;
END_IF
2: //反洗模式
开排污阀;
启动气洗泵(脉冲模式);
计时30分钟后自动退出;
3: //恒压模式
IF 清水箱水位>50% THEN
执行泵组轮换逻辑;
PID调节变频器输出;
END_IF
END_CASE;
一拖三水泵的轮换策略包含三个维度:
核心代码实现:
st复制// 泵组轮换逻辑
IF #运行时间_泵1 >= 28800 THEN //8小时换算秒数
#主力泵 := (#主力泵 MOD 3) +1; //取模实现1-2-3循环
RESET_TIMER(运行时间_泵1);
END_IF
// 故障检测与转移
IF #泵2故障 THEN
#备用泵 := 3;
SET_ALARM(2, "泵2故障已切换备用泵");
SEND_WEIXIN_ALARM();
END_IF
海为云屏的界面设计遵循"一屏可见"原则:
为防止现场人员频繁调整参数导致系统震荡,在触摸屏脚本中植入二阶滤波算法:
lua复制-- 海为屏脚本预处理压力设定值
local alpha = 0.2 -- 滤波系数
local delta_limit = 0.3 -- 最大允许突变值
local raw_pressure = getTag("压力设定原始值")
local pressure_diff = raw_pressure - last_pressure
if math.abs(pressure_diff) > delta_limit then
postAlarm("压力设定突变警告")
smooth_pressure = last_pressure + sign(pressure_diff)*delta_limit
else
smooth_pressure = alpha*raw_pressure + (1-alpha)*last_pressure
end
setTag("压力设定生效值", smooth_pressure)
last_pressure = smooth_pressure
| 参数编号 | 参数名称 | 设定值 | 说明 |
|---|---|---|---|
| 0101 | 外部命令1 | DI1控制 | 启停信号来源 |
| 0103 | 外部给定1选择 | AI1 | 频率给定信号源 |
| 1102 | PID给定值 | 40% | 对应0.4MPa |
| 1103 | PID反馈值 | AI2 | 压力变送器信号 |
| 2008 | 睡眠频率 | 25Hz | 低于此值进入休眠 |
| 2201 | 加速时间 | 15s | 防止水锤效应 |
传统方案直接启停水泵容易造成压力波动,改进后的休眠策略:
st复制IF #实际压力 < (#设定压力*0.8) THEN
#变频器频率 := PID_Output;
RESET_TIMER(休眠计时);
ELSIF #实际压力 > (#设定压力*1.5) THEN
IF 休眠计时 >= 10000 THEN
IF #变频器频率 > 25 THEN
#变频器频率 := 25; //缓降至最低频率
ELSE
关闭变频器;
END_IF
ELSE
START_TIMER(休眠计时);
END_IF
END_IF
初期调试发现反洗切换时压力波动达±0.1MPa,通过三项改进实现稳定:
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 压力波动大 | PID参数不合适 | 逐步调整比例带和积分时间 |
| 变频器频繁报警 | 电机电缆过长 | 加装输出电抗器 |
| 触摸屏通信中断 | 终端电阻未接 | 在最后设备接入120Ω终端电阻 |
| 水泵切换时压力突变 | 阀门响应延迟 | 调整PLC程序中的阀门动作时序 |
通过海为云平台的HTTP API接口,将报警信息推送至企业微信:
在触摸屏配置Webhook地址:
lua复制function sendWeixinAlert(msg)
local url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"
local data = '{"msgtype":"text","text":{"content":"'..msg..'"}}'
http.post(url, data)
end
PLC触发报警时调用:
st复制IF #泵故障 THEN
#报警信息 := CONCAT("泵", INT_TO_STRING(#故障泵号), "轴承过热");
SET_TAG("报警消息", #报警信息);
END_IF
利用海为云屏的数据记录功能,自动生成日/周能耗报表:
lua复制-- 每日0点自动生成报表
if os.date("%H:%M") == "00:00" then
local yesterday = os.date("%Y-%m-%d", os.time()-86400)
local sql = "SELECT * FROM energy_data WHERE date='"..yesterday.."'"
local data = queryDatabase(sql)
generatePDFReport(data)
end
系统投入运行三个月后的实测数据:
| 指标项 | 改造前 | 改造后 | 改善幅度 |
|---|---|---|---|
| 压力波动范围 | ±0.15MPa | ±0.02MPa | 86%↓ |
| 吨水电耗 | 2.8kWh/m³ | 2.1kWh/m³ | 25%↓ |
| 故障响应时间 | 30-60分钟 | 即时报警 | 100%↑ |
| 人工操作频次 | 8次/天 | 1次/天 | 87%↓ |
养鸡场实际获益: