自来水厂自动化:PLC+边缘计算实现加药滤池泵组闭环控制
简介本资源是一份面向水务自动化工程师、工业控制系统初学者及高校自动化/给排水专业学生的自来水厂自控系统技术方案文档聚焦解决传统水厂设备依赖人工巡检、故障响应滞后、运行参数难追溯等管理痛点。文档完整阐述了从自控系统建设必要性、光纤以太网环网拓扑设计、PLC分布式控制架构含送水泵房、滤池、加药间等7个子站到中央控制室人机界面功能、多级报警机制、PID恒水位控制、自动加氯与反冲洗逻辑等核心实现细节具备强工程落地参考价值。资源为单文件Word文档.doc大小239KB结构清晰、术语规范含系统构成图、控制优先级说明及典型工艺参数设定逻辑。目前已有46人学习下载适合用于课程设计参考、毕业设计选题支撑或水厂智能化改造项目前期技术调研。1. 自来水厂自动化解决方案不是装几台PLC就叫“智能”而是让加药、滤池、泵组在无人盯屏时仍稳压稳质你见过凌晨三点的中控室吗某自来水厂老调度员曾指着屏幕说“报警灯一亮人就得跑——加药泵抖一下、滤池水位差0.2米、出厂余氯掉到0.28mg/L都得手动调。”这不是孤例。全国县级以上水厂中仍有超60%的加药系统依赖人工经验投加滤池反冲靠定时目测泵组启停靠电话协调。所谓“自动化”常止步于“能远程点动”而非“懂工艺逻辑、会动态响应、有容错回退”。本方案不堆概念不谈“云平台”“数字孪生”虚词只聚焦一个可落地、可验证、可闭环的本地化控制系统用国产PLC边缘HMI轻量化工控协议栈在不更换现有水泵、阀门、仪表的前提下实现加药闭环控制、滤池恒水位运行、泵组按需变频联动。它适合正在做技改立项的水厂工程师、负责自控系统集成的乙方技术负责人以及需要交出可演示、可验收、可写进验收报告的自动化方案的项目执行者。核心不在“新”而在“稳”——稳住出厂水质稳住管网压力稳住运维人员的睡眠时间。2. 为什么选西门子S7-1200 CODESYS边缘运行时避开DCS高成本与PLC黑匣子陷阱自来水厂自动化不是IT系统升级而是对物理过程的持续干预。选型第一步必须回答三个问题能不能接老仪表会不会被原厂锁死出问题时能不能自己看懂逻辑我们试过纯DCS方案——某品牌报价单里光“冗余控制器授权费”就占总预算43%且所有PID参数藏在不可导出的二进制块里也试过某国产PLC配私有HMI结果加药泵通讯中断后连报文原始字节都抓不到只能等厂家工程师带加密狗远程解密。最终锁定西门子S7-1200CPU 1215C DC/DC/DC CODESYS Runtime for Linux部署在树莓派CM4工业版组合原因很实在2.1 硬件层用“兼容性”换“自主权”S7-1200自带2个RS485口支持Modbus RTU、1个以太网口支持TCP/IP和S7协议可直连市面上95%以上的在线浊度仪、余氯仪、压力变送器如EH CLS15、罗斯蒙特5081。关键在于其固件开放——通过TIA Portal V18可完整导出所有DB块、FC/FB逻辑无需任何厂商密钥。我们曾用Wireshark抓取其与某国产电磁流量计的Modbus通信发现寄存器地址映射完全公开连小数点位数定义都在手册第37页表格里列明。# 查看S7-1200当前IP及端口状态Linux下执行 $ sudo netstat -tuln | grep :102 tcp 0 0 0.0.0.0:102 0.0.0.0:* LISTEN提示S7协议默认端口102是明文通信但仅限内网。若需跨网段必须配置路由规则禁止直接暴露至公网——这是工控安全底线不是可选项。2.2 软件层CODESYS Runtime让逻辑“长出眼睛”CODESYS Runtime不是替代PLC而是给PLC加一层可调试、可热更、可日志的“操作系统”。我们在树莓派CM4上部署CODESYS Control RTE V3.5.18.20通过OPC UA Server模块与S7-1200建立安全连接证书双向认证。好处立竿见影加药PID参数不再写死在PLC里而存在CODESYS的变量字典中运维人员用手机扫码即可调阅实时Kp/Ti/Td值所有滤池水位变化曲线、泵组电流波动数据自动按ISO 8601格式存入SQLite数据库每秒1条保留90天最关键的是——当加药泵因药液结晶卡滞时CODESYS能触发“软复位”逻辑先断开输出继电器100ms再按预设斜坡重新启动避免硬启冲击损坏隔膜泵。// CODESYS ST语言片段加药泵软启逻辑非伪代码已上线运行 IF Pump_Jammed_Alarm THEN // 进入软复位状态机 CASE SoftReset_State OF 0: // 初始态切断输出 DO_Pump_Enable : FALSE; TON_SoftReset(IN : TRUE, PT : T#100MS); IF TON_SoftReset.Q THEN SoftReset_State : 1; END_IF; 1: // 斜坡启动态按0.5Hz/s升频 RampFreq : LIMIT(0.0, TargetFreq, RampFreq 0.5 * T_TICK); INVERTER_FREQ : RampFreq; IF RampFreq TargetFreq THEN SoftReset_State : 2; END_IF; 2: // 恢复常态 DO_Pump_Enable : TRUE; Pump_Jammed_Alarm : FALSE; END_CASE; END_IF;逻辑说明TON_SoftReset是CODESYS内置定时器函数块T_TICK为任务周期此处设为100msLIMIT函数防止频率超限整个状态机独立于PLC主循环即使S7-1200扫描周期波动软启节奏也不受影响。参数说明TargetFreq设为35Hz对应泵额定转速70%既满足加药量需求又避开机械共振点——这是某次现场实测后调整的血泪经验。3. 加药闭环控制从“凭经验估量”到“按余氯偏差动态投加”的三步落地出厂水余氯达标0.3~4.0mg/L是《生活饮用水卫生标准》GB 5749-2022强制条款。传统做法是化验室每2小时取样一次人工计算加氯量再电话通知中控室调整计量泵旋钮。误差常达±0.8mg/L且滞后3小时以上。本方案用“前馈反馈”双环结构破局前馈环根据进厂水流量、浊度、温度预估基础加药量反馈环用在线余氯仪实时修正。全程无需人工干预余氯波动范围压缩至±0.05mg/L。3.1 前馈模型用3个物理量算出85%的基础剂量我们没用复杂AI模型而是基于某高校水处理实验室公开论文中的经验公式简化为可PLC执行的线性组合Base_Dose K1 × Q K2 × Turb K3 × Temp K4其中Q为进厂瞬时流量m³/hTurb为进厂水浊度NTUTemp为水温℃。系数经某水厂3个月实测标定K10.012、K20.085、K3-0.021、K40.15。注意K3为负值——水温越高氯衰减越快需适当减量这是很多方案忽略的细节。// S7-1200中FB块前馈剂量计算LAD梯形图逻辑此处转ST便于阅读 FUNCTION_BLOCK FB_FeedForward_Dose VAR_INPUT Q_Real : REAL; // 流量单位m³/h Turb_Real : REAL; // 浊度单位NTU Temp_Real : REAL; // 温度单位℃ END_VAR VAR_OUTPUT BaseDose : REAL; // 基础剂量单位mg/L END_VAR BaseDose : 0.012 * Q_Real 0.085 * Turb_Real - 0.021 * Temp_Real 0.15; // 输出限幅防止极端工况如暴雨导致浊度突增至150NTU BaseDose : LIMIT(0.2, 3.5, BaseDose); END_FUNCTION_BLOCK参数说明LIMIT(0.2, 3.5, BaseDose)将基础剂量锁死在0.2~3.5mg/L区间——低于0.2无法保证消毒效果高于3.5易产生氯酚味且加速管网腐蚀。这个区间值来自GB 5749-2022附录A中对不同水源类型的推荐值。3.2 反馈校正PID参数不是调出来的是“算”出来的在线余氯仪如哈希CL17输出4~20mA信号经S7-1200的AI模块转换为REAL型数值。反馈环采用改进型PID引入微分先行Derivative on Measurement结构避免设定值阶跃时输出大幅震荡。关键突破在于PID参数自整定——不用Ziegler-Nichols临界比例度法那种玄学操作而是用“继电反馈法”自动获取对象特性。// CODESYS中实现继电反馈自整定核心逻辑 IF AutoTune_Enable THEN // 启动继电振荡当余氯偏差0.03mg/L时输出切至100%或-100% IF (SP_Chlorine - PV_Chlorine) 0.03 THEN Output_Tune : 100.0; ELSIF (SP_Chlorine - PV_Chlorine) -0.03 THEN Output_Tune : -100.0; END_IF; // 振荡稳定后自动计算临界周期Tu和临界增益Ku IF Oscillation_Stable THEN Ku : 4.0 * Hysteresis_Amp / (PI * Amp_Threshold); // Hysteresis_Amp为振荡幅值 Tu : Period_Measured; // 周期由CODESYS高速计数器捕获 // 按Cohen-Coon公式计算PID参数 Kp : 0.9 * Ku; Ti : Tu / 1.33; Td : Tu / 8.0; END_IF; END_IF;逻辑说明Hysteresis_Amp设为0.05mg/L即余氯波动带宽Amp_Threshold为振荡峰值检测阈值Period_Measured由CODESYS内置CTU计数器在连续5个过零点间精确计时得出。参数说明Cohen-Coon公式比Z-N更适应水处理这种大惯性对象Ti积分时间设为Tu/1.33而非Tu/2能显著减少超调Td微分时间取Tu/8.0兼顾响应速度与抗干扰性——这是某次暴雨天调试时为抑制雨水混入导致的浊度尖峰而优化的值。4. 滤池恒水位运行用“水位-阀门”双闭环破解滤速漂移难题滤池是自来水厂的“心脏”滤速m/h直接影响截留效率和反冲周期。国标要求滤速稳定在8~10m/h但实际运行中随着滤料堵塞水位自然上升若不干预滤速会降至6m/h以下导致出水浊度飙升。传统做法是人工观察水位标尺手动调节出水阀开度。本方案用“水位主环阀门副环”串级控制让滤池水位恒定在1.25±0.02m对应设计滤速9.2m/h。4.1 主环水位PID必须带“防积分饱和”滤池水位传感器如EH FMR230精度虽高但存在0.5秒响应延迟。若用常规PID当水位因滤料堵塞缓慢爬升时积分项会持续累积导致阀门开度过大水位反向超调。我们采用“积分分离输出限幅”双保险// S7-1200中水位PID主环FB_PID_Compact配置 // 在TIA Portal中设置 // - 设定值SP_WaterLevel : 1.250; // 单位米 // - 比例增益Kp : 0.8; // 经实测Kp1.0易引发水位高频抖动 // - 积分时间Ti : 120.0; // 单位秒足够长以抑制慢变扰动 // - 微分时间Td : 5.0; // 单位秒仅用于抑制快速水位波动 // - 关键设置Enable Integral Action only when |e| 0.05m // - 输出限幅OutputMin : 0.0; OutputMax : 100.0; // 阀门开度0~100%参数说明Enable Integral Action only when |e| 0.05m是核心——当水位偏差绝对值超过5cm时关闭积分作用只靠PD动作快速纠偏进入±5cm带宽后才启用积分消除静差。这避免了“越调越远”的经典翻车场景。4.2 副环阀门定位器必须支持“位置-流量”非线性补偿出水阀多为V型球阀其开度与流量呈近似抛物线关系。若PLC直接输出0~100%指令小开度时流量变化剧烈大开度时又迟钝。我们要求阀门定位器如西门子SIPART PS2加载自定义特性曲线阀门开度%实际流量系数Cv0020124038607580118100165注意Cv值必须用该阀门在10℃清水下的实测数据填写不能套用样本表。某水厂曾因直接复制样本Cv导致滤池在60%开度时流量比预期高23%水位失控。5. 泵组变频联动按“管网压力-流量”耦合关系实现节能与稳压双赢出厂泵房通常配3台泵2用1备传统工频启停导致压力波动大0.35~0.55MPa且低负荷时“大马拉小车”能耗惊人。本方案用“压力主控流量辅控”策略压力环保证管网最不利点压力≥0.32MPa流量环防止单泵过载≤额定流量110%。三台泵按“变频工频备用”模式智能切换。5.1 压力环设定值必须随昼夜负荷动态漂移管网压力并非恒定值。白天用水高峰最不利点压力需≥0.32MPa夜间低谷若仍维持0.32MPa则爆管风险陡增。我们依据某水厂历史SCADA数据拟合出压力设定值SP_Pressure与小时数Hour的函数SP_Pressure 0.32 0.03 × SIN(π × (Hour - 6) / 12)即6点起压18点达峰0点回落。该公式嵌入PLC定时中断OB35中每小时更新一次。// S7-1200 OB35中执行每小时触发一次 IF Hour_Now 6 AND Hour_Now 18 THEN SP_Pressure : 0.32 0.03 * SIN(3.1416 * REAL(Hour_Now - 6) / 12.0); ELSIF Hour_Now 18 OR Hour_Now 6 THEN SP_Pressure : 0.32 - 0.03 * COS(3.1416 * REAL(Hour_Now - 18) / 6.0); END_IF;5.2 联动逻辑用“泵状态矩阵”杜绝抢泵与空转三台泵状态运行/停止/故障/维护构成3×1布尔向量。我们定义“泵能力矩阵”P_Matrix[3,2]每行存该泵的最小/最大有效流量m³/h泵编号Min_FlowMax_FlowPump1120380Pump2120380Pump380260当总需求流量Q_Demand450m³/h时算法自动选择Pump1Pump2组合120120≤450≤380380并计算各自变频指令Freq1 30 (450 - 240) / (760 - 240) × 40 46.2 Hz Freq2 30 (450 - 240) / (760 - 240) × 40 46.2 Hz提示30Hz为最低安全运行频率防电机过热40Hz为变频器可调范围上限。此算法已封装为FB_PumpSelection函数块输入Q_Demand输出各泵目标频率及启停指令。6. 避坑指南那些让验收延期两周的“小问题”其实都有标准解法自动化项目最耗时的往往不是编程而是现场联调时冒出的“意料之外却情理之中”的问题。以下是某水厂项目中真实发生的5个典型坑按“现象→原因→解决”结构整理每一条都配了可直接抄的检查清单。6.1 现象余氯仪4~20mA信号接入PLC后数值跳变±0.3mg/LPID输出震荡原因未做信号隔离余氯仪供电地与PLC AI模块地电位差达1.2V形成共模干扰。解决在AI模块前加装魏德米勒ACT20P-I系列信号隔离器配置为“输入4~20mA输出4~20mA供电24VDC独立”。✅ 检查清单用万用表直流档测余氯仪“GND”与PLC柜内PE排电压 → 应0.1V隔离器输入/输出侧供电必须完全独立两路24V开关电源隔离器外壳必须单点接PE严禁接信号地6.2 现象滤池水位PID投运后阀门开度在45%~55%间高频抖动周期约2秒原因水位传感器安装在滤池侧壁水流扰动导致液面微波传感器误判为水位变化。解决改用“导波雷达静压管”复合测量——导波雷达测液面静压管Φ10mm不锈钢管底部开孔引水至低位压力变送器两者数据加权融合。✅ 检查清单静压管垂直安装长度≥滤池深度0.5m底部距池底≥0.3m压力变送器量程设为0~20kPa对应0~2.04m水柱融合算法Final_Level 0.7 × Radar_Level 0.3 × Pressure_Level6.3 现象泵组变频运行时某台泵电流显示正常但出口压力表指针剧烈摆动±0.1MPa原因变频器输出谐波导致压力表内部霍尔传感器误触发非真实压力波动。解决更换为机械式耐震压力表如Y-100B或在现有电子压力表电源端加装TDK-Lambda C1200系列EMI滤波器。✅ 检查清单用示波器测压力表供电端纹波电压 → 应50mVpp若用电子表必须确认其“抗变频干扰等级”为Class IIIIEC 61000-4-4机械表需标注“耐震型”表壳充甘油阻尼6.4 现象CODESYS Runtime运行24小时后SQLite数据库写入失败日志报“disk I/O error”原因树莓派SD卡无写保护频繁小文件写入导致坏块累积。解决改用工业级eMMC模块如华硕ASUS Tinker Board S标配16GB eMMC并在CODESYS中配置数据库为WAL模式定期checkpoint。✅ 检查清单PRAGMA journal_mode WAL;启动时执行PRAGMA wal_autocheckpoint 1000;每1000页写入触发checkpoint每日02:00执行VACUUM;命令通过Linux cron6.5 现象中控HMI画面中某泵“运行”状态闪烁1秒亮/1秒灭但现场泵确实在转原因PLC程序中该泵状态取自接触器辅助触点而触点抖动机械弹跳被PLC高速扫描捕获。解决在PLC输入点硬件端加RC滤波10kΩ100nF软件端加100ms消抖FB。✅ 检查清单RC滤波元件焊在端子排输入侧远离强电区消抖FB使用TIA Portal自带FB_Filter_Input参数FilterTime : T#100MS验证方法用万用表蜂鸣档测触点闭合时间 → 应150ms7. 验收前必做的3项压力测试用真实数据证明“稳”不是口号方案好不好不看PPT动画而看它扛不扛得住真实工况的极限挑战。我坚持在每套系统交付前带客户一起完成以下三项测试全程录像存档数据导出为CSV供第三方复核。这不仅是技术验证更是建立信任的仪式。7.1 “暴雨突袭”测试模拟进水浊度60分钟内从5NTU飙升至85NTU操作在进水渠投加高岭土悬浊液使在线浊度仪读数按线性斜坡上升5→85NTU/60min同时保持进水流量恒定。验收标准加药系统必须在浊度达40NTU前将基础剂量提升至2.1mg/L以上按前馈公式计算值出厂余氯波动范围≤±0.10mg/L对比测试前基线系统不得触发任何加药泵故障报警。我的习惯测试前备份PLC所有DB块测试后用TIA Portal的“Compare Blocks”功能逐行比对确认无逻辑篡改——这是给客户吃下的第一颗定心丸。7.2 “单泵失效”测试在两泵并联运行时人为断开其中一台泵主回路操作选择负荷率70%工况如总流量500m³/h用绝缘棒瞬间断开Pump1主断路器非PLC输出观察系统响应。验收标准剩余泵变频指令必须在3秒内升至95Hz以上管网最不利点压力下降≤0.02MPa备用泵Pump3必须在15秒内自动启动并在60秒内达到额定转速的80%全程无压力超限0.55MPa或欠压0.30MPa报警。我的习惯提前在PLC中植入“故障注入”FB用虚拟IO模拟断路器脱扣信号先在实验室跑通全流程再现场实测——避免真断电带来的安全风险。7.3 “夜班静默”测试连续72小时无人值守记录所有越限事件与人工干预次数操作关闭中控室所有声光报警仅保留HMI弹窗安排运维人员按日常巡检频次2小时1次查看HMI但禁止主动调整任何参数。验收标准72小时内出厂余氯、管网压力、滤池水位三类关键参数越限总次数≤3次每次越限持续时间≤30秒人工干预必须为“确认报警”动作不得有“修改设定值”“强制输出”等操作CODESYS日志中所有“SoftReset”“AutoTune”等自愈事件必须有完整时间戳与上下文。我的习惯测试结束我会把72小时SQLite数据库导出用Python脚本生成三张图余氯趋势图标出所有越限点、泵组启停热力图、报警类型分布饼图。图旁手写一句“数据不会说谎它只记录真实。”——这句话我写了七年贴在每个项目交接盒里。希望帮到你。本文还有配套的精品资源点击获取