今年上半年我完成了一套小型污水处理站的控制系统改造,工艺是典型的AAO活性污泥法,日处理量不大,但涉及的设备环环相扣:进水泵、格栅机、调节池提升泵、曝气鼓风机、回流泵、加药泵、污泥压滤机……整套控制程序基于施耐德TM218 PLC平台开发,编程环境用SoMachine。这篇就把这个过程做一个复盘,把工艺理解、程序架构、核心逻辑、现场调试全串起来,重点聊聊那些一般说明书里不会写的思路和踩坑。做环保水务项目的电气工程师、自动化调试人员、设备成套商,应该都能从里面找到点同感。
1. 项目拆解:污水处理为什么需要 TM218 这样的控制器
1.1 处理工艺与控制需求
这套污水处理站采用的是比较常见的AAO工艺,常规流程是:污水进厂先经过粗格栅拦截较大杂物,自流进入提升泵房,通过提升泵把水送到细格栅和沉砂渠,然后进调节池均衡水质水量,再由潜水泵提升到厌氧池、缺氧池、好氧池完成生物脱氮除磷,水进入二沉池做泥水分离,上清液进消毒渠,消毒后排入受纳水体。工艺看着简单,控制点位却不少,稍微梳理一下就有几十个DI、十几个DO,再加上液位、pH、溶解氧、流量、压力这些模拟量,体量不大但五脏俱全。
对这个规模的项目,控制需求是明确又具体的。进水泵要根据集水井液位自动启停,还要防止频繁动作。格栅要能根据栅前栅后液位差自动运行,也可以按时间定时循环,避免人工守着反复启停。曝气鼓风机要跟好氧池溶解氧联动,维持微生物需要的氧量,夏天和冬天、白天和晚上的需氧量都不一样,必须能自动调频。回流泵按流量或按比例运行,加药泵则跟着进水流量走,流量大多加消毒剂,流量小就少加。污泥处理环节虽然不复杂,但压滤机的顺序控制要求严格,油缸、进泥阀、空压机、输送机哪个先动、哪个后动,顺序错了就容易憋压或漏泥。
这些需求放在一起,就决定了控制系统必须满足三个基本条件:一是IO点数够用,且能灵活扩展;二是有较强的时序逻辑处理和运算能力,甚至要跑PID闭环;三是要方便接入触摸屏和上位机,让值班人员能看得明白、操作得了。整体评估下来,TM218系列在这个体量上非常合适,做这套程序的时候我心里比较有底。
1.2 选型背后的原因
很多朋友会问,污水处理项目为什么选TM218,而不选更常见的中大型PLC或者直接用单片机方案?这里面有几层考虑。第一是项目定位,这套站属于小型分散式设施,控制规模不大,用大型PLC一方面占地大,另一方面预算也会被顶上去,甲方很难接受。第二是扩展能力,TM218本体虽然紧凑,但可以挂TM3系列扩展模块,数字量、模拟量都能按需配置,这次实际用了十几个模拟量通道,靠扩展卡完全解决,无需另配远程IO站。第三是平台统一,TM218使用SoMachine进行编程,和支持M241、M251这些型号用的是同一个软件,后期如果现场升级,程序可以平移复用,对做成套设备的公司来说,维护成本低很多。
当然也不是说它没有缺点,比如以太网口不是每个型号都有,有些项目要额外加网关;数据处理能力和几十点的小型PLC比绰绰有余,但和大型运动控制场景肯定没法比。只是在这个场景下,它属于典型的“够用且好用”。再说回到编程软件,SoMachine提供了梯形图、结构化文本、功能块图多种语言,实际开发中我主要用梯形图做设备级的启停逻辑,用ST写模拟量处理和流程步序控制,这样既能快速上手,又不容易把自己绕晕。选型这件事没有最好只有最合适,把控制点数、通讯方式、维护习惯、预算都盘一遍,结论往往就出来了。
2. 程序总体设计与数据结构
2.1 I/O清单与地址规划
写程序之前,我习惯先把I/O清单拉全,这一步做得越细,后面改动越少。这套项目的点位大概是:数字量输入包括各设备的手动/自动转换开关、远程就地信号、运行反馈、故障信号、集水井高液位和超高液位浮球、格栅前液位开关等;数字量输出主要是接触器控制、继电器输出给变频器启停、指示灯、故障蜂鸣器等;模拟量输入包括集水井液位、调节池液位、好氧池溶解氧、进水流量、出水pH、CIP清洗热水温度等;模拟量输出是风机变频器给定、加药泵变频器给定。
地址规划上我采取的是“设备为主、类别连续”的原则。比如把1号进水泵的运行反馈、故障、启停输出放在连续的bit区域,程序里写成组统一处理,方便查表和修改。中间变量按功能分块:%MW开头的是系统计算和模拟量处理区,%M用于启停命令和联锁标志,%MWi做成设备累计运行时间。这样做的原因是以后的运维人员打开程序,通过地址名就能大概判断出这个变量是干嘛的,不用整段逻辑翻来翻去。关于模拟量换算,我不直接在程序里写死原始值,而是用统一的转换函数,原始值通过SoMachine的模拟量通道读取,工程量按实际量程标定,所有量程参数放到数据块区,以后现场换量程,改参数就行。
表格形式可以参考下面这样(示意部分):
| 地址区段 | 用途 | 备注 |
|---|---|---|
| %I0.0~%I0.7 | 1~8号数字量输入 | 开关、反馈、故障 |
| %Q0.0~%Q0.7 | 数字量输出 | 启停、指示灯 |
| %IW0.0~%IW0.7 | 模拟量输入 | 液位、流量、DO |
| %QW0.0~%QW0.3 | 模拟量输出 | 变频器给定 |
| %MW0~%MW199 | 系统中间变量 | 指令、状态、计算值 |
| %MW200~%MW299 | 参数设定区 | 量程、延时、液位阈值 |
这样分区的最大好处是后期查故障时,思路是线性的,先查硬件地址再查中间变量,减少了在海量逻辑中搜索的时间。
2.2 控制模式与状态字设计
设备级的控制方式是这套程序最基础的部分。每个主要设备我都设计了“就地/手动/自动”三种模式,有点类似常见的远程就地切换,但更细。就地模式直接通过现场操作柱控制,PLC只做状态监视,不输出;手动模式是操作员在触摸屏上点按钮启停;自动模式则由PLC根据工艺条件自行判断。这里有一条很重要的原则:手动模式并不是绝对的“无联锁”,必要的时候我仍然保留了低液位保护、电机过载保护、紧急停止先级,避免操作员误操作造成设备损坏。
状态字设计上,我采用16位二进制方式给每台设备定义状态,比如第0位是运行、第1位是故障、第2位是连锁停车、第3位是手动投入、第16位是累计运行时间到。所有报警逻辑和触摸屏显示直接读取这些状态位,程序里不需要再写一大堆散落的判断,维护的时候只要看懂一套编码规则就行。这套做法是从控制系统的故障诊断思路里学来的,虽然初期要多写一点赋值和解析逻辑,但对后期现场排故非常友好。
模式切换的时候,最怕的就是设备突然停车或者自动启动。所以在切换逻辑里我做了切换前封锁:自动切手动时,先保持当前输出状态,不允许直接断开接触器;手动转自动时,先检测所有条件满足后延时几秒再让自动逻辑接管,防止切换瞬间设备抖动。这套逻辑虽然代码量不大,但实际用起来稳定,操作工普遍反映“不吓人”。
3. 核心逻辑实现:从功能块到ST
3.1 液位联动与泵组轮换
进水泵房和调节池的液位联动是整个水站自动控制的地基。控制器读到液位变送器的4-20mA信号,经过量程换算得到实际水位,然后与设定阈值比较,决定开几台泵。设定逻辑上,我用了启动液位和停止液位加回差的方案。比如集水井设了三个启动梯度:液位到2.0米启动1号泵,到2.8米启动2号泵,超3.6米再启动3号泵;停止液位则统一是1.2米,但要加0.3米的回差,防止在临界点反复启停。这个回差很关键,不然液位稍微波动,泵就会频繁开停,电机寿命会明显缩短。
泵组轮换是我认为值得单独讲的部分。污水处理如果长期用同一台泵,其他泵容易因为长期不转导致轴承锈住,甚至叶轮卡死。所以在上位机参数区里设置了每台泵的累计运行时间,程序每5分钟计算一次,当需要启动下一台泵时,选择累计运行时间最少的那台投入,同时把上一次运行的泵设为优先停止对象。这个轮换算法用ST写起来很简单,核心就是“比较、排序、选中”,但在现场效果很明显,至少不至于三天两头坏泵。
还有一层保护是泵出口压力。液位正常不代表管路正常,如果管路堵塞或者阀门误关,泵还继续打水就可能憋坏机械密封。我在出水管上装了压力变送器,当启动后20秒内压力没达到设定下限,程序直接停泵并报“空转或管路异常”,操作工到现场检查就知道是阀没开还是过滤器堵了,不用盲猜。这类联锁不是投标时强制的,但绝对属于“干过现场才想得到”的内容。
3.2 曝气系统与溶解氧控制
好氧池溶解氧控制是这套程序里的技术重点。开始我想得很简单,用变频器带一台鼓风机,再加一个PID就能解决,但实际一调试就发现没那么容易:曝气池里的溶解氧变化滞后很大,进水水质波动也不小,PID参数调不好就直接振荡,溶解氧忽高忽低,微生物很受伤。
最终方案是采用“多风机轮询+单台变频调节”的组合。三台风机,正常运行为两用一备,程序根据好氧池DO实际值与设定值的关系来决定增开还是减开风机。比如当前1号2号在运行,DO仍然低于1.8mg/L,就延时10分钟把备用风机也启动;如果DO高于2.6mg/L,就先降低运行风机的频率,频率低到30Hz还降不下来,再停止一台。这样避免了靠一台风机拼命加频率硬拉,导致运行工况偏离效率区间,又省了电费。
PID闭环我用了SoMachine自带的PID功能块,采样周期设1秒,比通常的温控PID要慢得多。参数方面,比例增益我初始给1.2,积分时间给300秒,微分关闭。为什么积分时间给这么长?因为溶解氧变化滞后,积分太强容易把系统整成低频振荡,先给松一点,观察曲线再慢慢收紧。调试时我直接在触摸屏里留了PID参数修改页,不用每次改程序下载,极大方便了现场整定。另外一定要启用PID的跟踪/保持功能,否则手动切自动时,PID输出会跳变,导致风机频率瞬间飞到最大,轻则鼓风机报过载,重则把曝气管道冲出一个口子。
3.3 格栅与栅渣输送时序控制
很多人觉得格栅控制太简单,不就是一个电机接个接触器,液位差到了就启动,停了就完事。但实际上格栅机运行时会带动螺旋输送机、压榨机等后续设备,顺序反了就会堵渣,栅渣没法清理,人工拿着钩子去清槽又脏又危险。
我的做法是把格栅除污机、螺旋输送机、压榨机做成一整条链路。启动顺序是:先启动压榨机和输送机,延时10秒再启动格栅除污机,这样保证排渣口已经具备接收条件;停止顺序则反过来,先停格栅除污机,让输送机和压榨机继续运行一段时间,把残渣全部排空后再停机。每次运行时长由两部分组成:一是液位差触发,格栅前后液位差大于0.25米时立即启动,降到0.05米后停止;二是时间定时,如果液位差一直不大,则每30分钟自动运行一次,运行5分钟,防止淤泥黏在栅条上。
这套时序逻辑用梯形图写,但状态多了之后很容易漏条件。所以我定义一个整数步号,把启动过程分成0到5步,停止过程分成10到15步,在ST里用CASE语句写。好处是任何一步卡住了,触摸屏上可以直接显示“正在等待输送机”“正在排渣”“故障复位中”这样的状态文本,值班人员不用看程序就能判断进度。这个思路后来被我用到压滤机、加药系统上,整个站的控制逻辑就统一了。
3.4 模拟量处理和通讯集成
模拟量处理是PLC程序开发里绕不开的坎。4-20mA信号算工程量,我的通用做法是:原始值通过模块读回来以后,先滤波再转换。滤波我不用太复杂的算法,就是每200ms采样一次,连续取4次取平均值,对水体信号来说足够稳定,又不会像一阶低通那样让液位变化显得太迟钝。转换公式是标准的线性映射:工程量=下限工程量+(原始值-原始值下限)×(上限工程量-下限工程量)÷(原始值上限-原始值下限)。所有上下限参数放在参数区,PLC运行时可以修改,但会做数据范围校验,防止有人把下限设得比上限还高。
通讯这块,TM218本体有串口,部分地区型号带以太网口,这次用的是以太网口和触摸屏做Modbus TCP通讯。PLC作为从站,HMI直接读取%MW和%MWi地址。另外进水流量计和pH计是走Modbus RTU串口读的,PLC做为主站定时轮询仪表。写通讯前一定要先确认从站地址映射表,有的仪表寄存器是4-8,有的是0-5,偏置不对读回来的值就完全离谱。我在调试时就遇到过pH计读出来是0.51,看着像准的,实际真实值应该是7.5,后来一查是寄存器偏置差了40001的偏移。这种问题光看数据根本发现不了,要拿万用表或者手操器在侧面对比现场仪表显示值才能确定。
另外,HMI上的量程设置和PLC里的量程设置必须一致。我的建议是PLC只管控制,HMI只管显示,各自独立标定也可以,但必须留同一套标定记录表。不然现场换了一根量程不同的液位计,只改了PLC没改HMI,就会值班人员看到的液位和控制逻辑用的液位不一致,轻则误报警,重则溢流跑泥。
4. 调试实录与故障排查技巧
4.1 调试前的软硬件准备
宁可多花半天做准备工作,也好过在现场反复打补丁。我在程序下载前会做一遍完整的干点检查:先核对I/O清单和图纸,确认模块版本、拨码地址、接线位置一致;然后检查开关电源电压、模拟量模块供配电是否正常,尤其是24V电源一定要量一下,很多模拟量问题不是模块坏了,而是电源电压被压降拉低了。确认没问题后,用SoMachine的仿真器先把程序逻辑走一遍,特别是泵轮换和PID那两段,仿真能发现一些明显的数据类型错误和数组越界,省得去现场再烧U口。
现场上电后,我习惯先不接负载,只送PLC和控制电源,把输出点强制到吸合状态,用万用表测端子上的电压,确认输出回路接线从PLC端到接触器线圈都是通的。这个步骤看起来笨,但能一次性揪出端子排错误、保险丝烧断、线号标错这类低级问题。下一步再带上空载设备试转向、试正反转,确认三相电机相序没问题后才算完成单体调试。很多新手跳过了干点检查,直接拉泵,结果泵反转了还以为是接触器选型错误,折腾半天。
4.2 我踩过的坑
第一个坑是模拟量信号漂移。集水井液位计输出液位信号,控制室里读到的值始终上下跳0.2米,泵启停就比较神经质。后来排查发现超声波的4-20mA负极和PLC模拟量模块负极没有在汇流排上单点接地,导致现场存在电位差,加了一根等电位连接线后,信号立刻稳定。工业现场“单点接地”这句话说了多少遍都不为过,凡是模拟量波动异常,先查接地,再怀疑干扰源。
第二个坑是溶解氧传感器的安装位置。最初装在水池的一侧角落,附近正好有回流挡板,水流搅动剧烈,数值波动特别大。控制逻辑频繁加减频率,风机一直喘振。后来把传感器挪到距曝气盘约2米、水面以下0.8米的位置,远离搅拌旋涡区,测量值稳定多了。所以硬件安装位置从来不是小事,程序再稳也救不了错误安装的传感器数据。
第三个坑是变频器停机出现“泵倒转”。进水泵停泵后,由于出水管路高差,水会回流推动叶轮反转,运行反馈信号释放得慢,PLC会以为泵还在运行,导致泵组轮换逻辑错乱。解决办法是程序里对停机后的反馈信号增加一个延时确认,接触器断开15秒后仍检测到运行反馈,就认为“反馈故障”。同时在管路选型时让业主加装止回阀,从硬件上杜绝倒转。
第四个坑和Modbus串口有关。流量计和pH计挂在同一条RS485总线上,设备运行一段时间后,偶尔读不到流量数据,我最初怀疑波特率或者仪表地址冲突,查了半天都没结果。后来才发现变频器控制端子内部没有隔离的RS485排线受到谐波干扰,导致长时间运行后通讯出错。对策是把变频器到PLC的模拟量控制线和Modbus总线分开走线槽,并在通讯线两端加磁环,同时在PLC里做通讯超时报警和断线保持,最坏情况下按上次流量值估算,也不至于让加药泵完全失控。
4.3 现场快速排查的第一反应
程序下载完但现场状况不对的时候,我最常用的手段不是反复看程序,而是连着SoMachine的在线监视窗口,同时挂一个触摸屏的画面,观察关键的中间变量。我把所有设备状态字、PID输出值、模拟量工程量放到一页监视表里,用表格方式显示,这样能第一时间看到是“没有满足条件”还是“条件满足但没输出”还是“有输出但没动作”。绝大多数问题都能用这个办法快速缩小范围。
另外,排查液位计信号时,我习惯用信号发生器模拟4mA、12mA、20mA三个点,分别观察PLC读到的原始值和工程量对不对。如果三个点都对,那问题基本是液位计本身或者安装管道的问题;如果12mA对应出来不是50%,那就是量程标定或者模块通道配置有问题。这种“分步替换法”比拿着示波器满现场找干扰源效率高得多。还有一个小技巧:遇到冷启动后程序混乱,先强制复位所有步序状态和累加器,再观察流程是否能正常自动复位。以前遇到压滤机卡在中间步骤,不处理就一直报故障,后来在程序里加了上电复位统一置位和手动步序清零按钮,问题就少多了。
5. 程序交付后的运维建议
5.1 程序备份与版本管理
PLC程序开发完并不代表工作结束,交付阶段的版本管理同样重要。我在项目现场保留了一个备份原则:一个是程序最终版,对应实际运行状态;一个是常用参数备份,比如PID参数、液位阈值、所有量程上下限,用SoMachine的导出功能存成XML或CSV文件。每次试运行修改参数后,都让调试人员把参数导出、标注修改原因和日期,再传回工程部的服务器存档,防止过了几个月后想回滚,发现已经无据可查。
实际生产中我遇到过比较尴尬的情况:某一天调试人员现场改动了一个PID参数,第二天程序需要升级下载,结果因为参数没备份,升级完又回到了旧参数,工艺重新崩了。后来我强制要求下载程序前,必须从PLC上传当前运行程序和参数包并存档,这套流程看着繁琐,但成了团队内部的铁律,以后再没因为参数丢失背过锅。对业主来说,也应该要求PLC厂家在验收后提供一份完整的程序备份和U盘,放在值班室备查。
5.2 交底文档与现场培训
程序交付不能只甩一个源文件。工程收尾时,我给业主的是一套完整的控制逻辑说明,包括:I/O点位表、程序里所有设定阈值的含义和默认值、故障码表、手动操作流程、设备轮换策略。这份材料不需要把代码每一行贴出来,但要让电气维护人员能够读懂控制思路。污水处理站值班员普遍不是PLC高手,所以培训时我重点演示的是触摸屏上怎么切手动/自动、怎么看故障、怎么复位报警,而不是教他们改程序。
现场培训时我会刻意把操作员带到几个关键设备旁边,让他在真实环境下操作几遍。因为很多东西看起来简单,比如切换手动自动的顺序,如果不实际操作,很容易出现“手没放安全就转自动”的误操作。我还留了一份快速故障处理卡:常见警示内容、对应可能原因、建议处理措施,贴在配电柜门上。这些细碎的东西,往往比程序本身更能让业主感受到交付质量。
5.3 长期运行需要关注的点
水处理项目不像机床或者包装机,它常年24小时运转,电气环境又潮湿,甚至带有腐蚀性气体,所以长期运行有几件事值得特别关注。第一,PLC柜内要保证正压通风或加热除湿,否则端子排容易氧化,模拟量通道会时好时坏。我在这次项目中专门加了一个柜内温湿度报警,湿度超过85%就在HMI上提醒。第二,备用器件要比故障率看得稍微大一点,DO继电器模块、模拟量模块、电源模块建议各备一个,现场停产损失远比这几个钱大。第三,程序里的参数不是设完就不管的,比如格栅的运行周期、加药投加比例,需要按季节和水质变化做微调,最好每个月导出一次运行数据进行复核。
另外建议有条件的话,上一套远程监视模块,把关键报警通过4G物联网卡推到值班员手机端。不需要远程操作,只做监视和报警推送就行,这样夜里溶解氧低或集水井超高液位,至少能提前预警,避免溢流事故。这个扩展成本不高,但价值很明显。
做完整套项目,我个人最深的体会是:PLC程序开发不只是写代码,更多是在理解工艺的基础上做取舍。污水处理这种项目,控制逻辑看着不复杂,难点全在细节里——泵会不会频繁启停、风机会不会喘振、格栅会不会堵渣、通讯会不会受到干扰,每一个问题都要求开发者蹲过现场、吃过亏,才能在程序设计阶段提前规避。如果你正准备用TM218做类似的水务项目,希望上面这些分享能帮你少走几步弯路。后面如果再开发新的污水处理站,我大概率还会沿用这套框架,再把远程运维和数据分析的模块补齐,让PLC不仅仅是一个控制器,更是整个工艺运行的数据底座。