接到一个小区泳池的自动化改造项目,第一反应就是S7-200加组态王的经典搭配。这套组合在中小型水处理项目里出现频率极高,资料好找、上手快、维护也方便。这篇把整个项目的完整思路整理出来,从工艺分解到I/O分配,从电气图纸到带注释的梯形图程序,再到组态王上位机画面,全部串起来讲。打算做毕业设计、搞课程设计,或者刚入行想接水处理项目的工程师,这篇可以直接当参考框架用。
先交代一下项目背景:泳池大概400立方米,要求24小时循环过滤,加药消毒,水温恒定在26到28摄氏度。系统配一套西门子S7-200 PLC,上位机用组态王,操作员在中控室电脑上就能看到设备状态、水位、温度,也能远程启停设备。整套控制的核心就一个字:稳。水处理设备不像产线设备那么复杂,但泵空转、加药失控、过滤器堵塞这类问题一旦出现,轻则停摆,重则烧设备,所以梯形图程序里大量做了联锁和保护。
1. 项目整体设计与控制思路
1.1 游泳池水处理的工艺流程
先把水处理的流程搞清楚,再谈控制才有意义。标准的游泳池水循环处理流程大概是这样的:泳池回水经过毛发收集器拦截头发和杂物,进入循环泵加压,然后送入砂缸过滤器,通过石英砂滤层去除悬浮物和胶体,出水经过加热器升温,再投加消毒剂和絮凝剂,最后通过布水口回到池内。这套循环是不断运行的,一般24小时保持运转,让整个池水每天至少循环4到6次才算合格。
这里面的关键设备就是循环泵、砂缸、加药泵和加热器。循环泵负责推动水流,水位低了或者泵故障了必须立刻停,否则空转烧泵。砂缸用久了滤层会堵塞,进出口压差变大,这时候需要反冲洗,把砂层里的脏东西冲走。加药泵负责把次氯酸钠、絮凝剂等药液按比例连续投加到管路里,消毒量过大池水刺眼,过小细菌超标,所以加药泵必须和循环泵联动,循环泵停着加药泵绝对不能工作。加热器则要把水温稳定在设定值附近,一般用换热器配温度传感器,由PLC控制热水阀或者电加热通断。
流程理清楚之后,控制需求自然就浮出来了。
1.2 控制系统的架构与选型理由
为什么用S7-200而不用别的小型PLC?首先是存量项目多,很多园区机房、泳池设备间十年前用的就是S7-200,现在做改造、做维护,这套知识完全用得上。其次是它的指令系统简单直接,梯形图写起来直观,定时器、计数器、比较指令足够覆盖水处理的控制需求。CPU224自带14个数字量输入、10个数字量输出,小规模的泵阀控制刚刚好。扩展一个模拟量模块就能搞定温度采集。虽然这款CPU现在已经停产,但学习价值一点没打折,掌握了S7-200的逻辑,迁移到S7-200 SMART或者别的品牌PLC都很快。
组态王这边,它的中文工程组态、变量词典和报警功能都很成熟,工程师不用花太多时间在画面上就能做出一个专业的监控界面。池水温度、设备运行状态、故障报警、电流曲线这些都能在电脑上看。组态王通过PPI协议和S7-200通讯,升级方便,成本也低。如果说PLC是设备的神经系统,那组态王就是中控室的眼睛和手。
现在很多新项目会直接上以太网通讯或者用触摸屏,但组态王加PPI这套方案仍然大量存在于中小型水处理站,因为成本可控、稳定可靠,而且现场维护工程师普遍熟悉。
1.3 需要实现的控制功能清单
给项目列一个明确的功能清单,照着做就不会漏项,也方便后面查进度:
- 手动/自动两种运行模式切换,手动模式下可以在柜门上单独操作每台设备,自动模式下按工艺逻辑自动运行
- 循环泵启停控制,支持按钮启动、组态王远程启动,停止按钮优先
- 低水位保护,泳池回水不足时自动停循环泵,防止空转
- 水流开关检测,管路里没有水流时禁止启动加热器和加药泵
- 压差高报警,砂缸进出口压差超过设定值后报警,提醒操作员反冲洗
- 加药泵与循环泵联动,循环泵运行时按间歇周期投加药剂
- 温度采集与控制,稳定池水温度,超上限报警并切断加热器
- 故障汇总报警,热继电器等保护动作后声光报警,报警灯闪烁
- 组态王上位机监控,显示运行状态、实时温度、工艺画面、历史趋势
功能清单确定后,紧接着就是硬件侧最关键的一步——把每个输入输出信号落到具体的I/O地址上。
2. I/O分配与硬件选型
2.1 输入信号规划
I/O分配是整个项目最枯燥但最不能含糊的环节。多了点少点都头疼,分配不合理后面改程序改到哭。我这次按“先列信号、再定地址、最后检查余量”的顺序来做。
数字量输入信号主要有这些:手自动旋钮、启动按钮、停止按钮、急停按钮、低水位开关、水流开关、热继电器故障汇总、砂缸压差开关。这8个信号用CPU224自带的输入点就能解决。如果要再加一个“远程反冲洗请求”或者“补水泵运行状态”,就要规划和预留。
这里有一个细节要特别提醒:急停按钮和热继电器触点这类安全相关的信号,在硬件接线时建议用常闭触点接入PLC。正常运行时输入点是闭合的,一旦按下急停或者热继动作,输入点断开,程序里的逻辑立刻响应,即使断线这种故障状态也能被发现。用常开触点的话,线断了反而和正常状态一样,安全隐患很大。
2.2 输出信号规划
数字量输出方面,这项目需要控制循环泵接触器、加药泵接触器、加热器接触器、报警电铃、运行指示灯和故障指示灯,六个输出点,CPU224的Q0.0到Q0.5完全够用,还富余几个点做备用。
做主回路的时候,PLC输出点不要直接驱动交流接触器线圈,这是很多新手容易踩的坑。S7-200的输出继电器触点容量有限,而接触器线圈在吸合瞬间的冲击电流很大,直接带容易粘触点。规范做法是PLC数字量输出先带动24V中间继电器,再由中间继电器触点去通断接触器线圈,功率匹配、电气隔离都解决了,维修时拔继电器也比查PLC输出点方便。
2.3 硬件选型心得
把关键硬件列成一份清单,采购时照着买就行:
| 用途 | 选型建议 | 备注 |
|---|---|---|
| PLC主机 | 西门子S7-200 CPU224 AC/DC/继电器 | 14DI/10DO,自带PPI口 |
| 温度采集 | EM231 RTD模块或EM231 AI模块 | 接PT100热电阻,AIW0读取 |
| 开关电源 | 明纬或同等品牌 24V/5A | 给PLC和中间继电器供电 |
| 中间继电器 | 欧姆龙MY2NJ或者国产同类 | 线圈24V,触点250V/10A |
| 循环泵 | 根据流量扬程选型,配接触器热继 | 接触器选比泵额定电流大一个规格 |
| 加药泵 | 计量泵,配中间继电器控制 | 带流量调节旋钮 |
| 液位开关 | 浮球式液位开关,二线制 | 装回水口附近的补水水箱 |
| 水流开关 | 靶式水流开关,接DI输入 | 装在泵出口管路 |
2.4 I/O分配背后的分配原则
I/O地址的分配思路值得单独说。我接触过不少项目,程序写到一半发现某类信号交叉错乱,改地址改得头大。分配的时候要留意几点:
- 数字量输入和输出分别集中排列。输入从I0.0开始排,输出从Q0.0开始排,中间不要预留大段空地址,方便看程序时快速对应。
- 安全信号集中放在低地址段。急停、热继这类信号放I0.2、I0.3这样的靠前位置,逻辑上容易形成“先保安全再谈逻辑”的编程习惯。
- 模拟量和数字量严格分开,温度模拟量走AIW通道,不要和数字量混淆。
- 给后续扩展留出余地。CPU224输入最多14点,输出最多10点,如果预估以后要加电动阀、加压力变送器,就别把地址排满,宁可多买一个模块备用。
按照这个原则,具体分配可以做表如下:
| 地址 | 信号名称 | 说明 |
|---|---|---|
| I0.0 | 手自动选择 | 1=自动,0=手动 |
| I0.1 | 启动按钮 | 上升沿有效 |
| I0.2 | 停止按钮 | 常开触点,按下断开输出 |
| I0.3 | 急停按钮 | 常闭触点,断开表示急停 |
| I0.4 | 低水位开关 | 水满闭合,缺水断开 |
| I0.5 | 水流开关 | 有水流闭合,无水流断开 |
| I0.6 | 热继电器汇总 | 常闭,故障时断开 |
| I0.7 | 砂缸压差高 | 常开,压差大时闭合 |
| Q0.0 | 循环泵接触器 | 中间继电器驱动 |
| Q0.1 | 加药泵接触器 | 中间继电器驱动 |
| Q0.2 | 加热器接触器 | 需水流信号联锁 |
| Q0.3 | 报警电铃 | 故障时鸣响 |
| Q0.4 | 运行指示灯 | 循环泵运行时点亮 |
| Q0.5 | 故障指示灯 | 故障时闪烁 |
3. 电气接线与图纸要点
3.1 主回路设计
很多人画主回路图喜欢简化,实际上主回路才是电气的命脉。三相380V电源进线,经过总断路器后分三路,分别给循环泵、加药泵和加热器供电。每路是典型的“断路器加接触器加热继电器”组合,热继电器的常闭触点再引到PLC输入点做故障报警。
有一点要特别注意,循环泵电机的启动需要短时大电流,选断路器时不要只看额定电流,要适当放大,避免启动瞬间误跳闸。接触器选型也要比电机额定电流大一个到两个规格,水处理泵往往带负载启动,启动电流持续时间比空载长,选小了触点容易发热烧蚀。
接地方面,柜内所有铁构件都要可靠接地,PLC的24V电源负极建议做浮空处理,不要直接和大地短接。保护地线要足够粗,至少和相线等径。泳池环境湿度大,电气柜尽量选防水型,防护等级在IP54以上,柜内还要考虑散热。
3.2 控制回路与PLC接线
控制回路用24V直流供电,由开关电源提供。急停按钮的常闭触点串接在PLC的24V供电回路里,按下急停直接给PLC断大电,优先级最高,比程序里做保护可靠得多。这是一个非常实用的经验:急停不能只依赖程序,硬件回路必须硬切。
PLC输入端的接法要看开关类型。二线制浮球液位开关直接串接24V电源和输入点,通断状态对应有水无水。水流开关也是二线制,同样接法。急停和热继常闭触点串接到输入点后,正常时为ON状态,程序里用常开指令取反使用,逻辑上一旦掉线或者触点动作,设备就停。中间继电器线圈接PLC输出点,公共端接24V电源负极,一个输出点对一个继电器,不要并联多个。
3.3 图纸目录与交付习惯
正规项目交付时图纸要成体系,我建议按四类来整理。第一类是系统工艺流程图,画清水泵、过滤器、加热器、投药点在管路中的位置,让人一眼看懂水流经过哪些设备。第二类是主回路图,把所有动力回路画清楚。第三类是PLC控制回路图,包含电源、输入输出接线、端子号标注。第四类是柜内布置图和端子接线图,现场接线时就是按端子图一根一根对线的。
图纸上每个信号都要做点位标签,比如“XS-01泵故障”“DS-02低水位”,端子上也贴同样的标签,这样现场排查问题的时候,一个人拿万用表顺着端子查就能定位,不用反复问设计人员。这个习惯修设备时能省几个晚上。
4. 梯形图程序设计与解释
4.1 程序框架与常用软元件分配
S7-200的编程环境是STEP 7-Micro/WIN,程序按主程序、子程序、中断程序组织。这个项目不大,我仍然建议分块编写。主程序里做整体扫描,泵控制、加药控制、报警逻辑各放一个子程序,在手动和自动模式下分别调用。这样看起来清爽,改动某一个功能也不影响其他模块。
程序里的中间继电器软元件需要提前规划,不能随手用。M0.0定义成自动运行总标志,M0.1手动模式标志,M0.5加药启动标志,M1.0报警汇总标志。定时器方面,T37做加药周期计时,T38做加药投加计时,T39做压差确认延时。分配好这些软元件,后续调试的时候看变量表就能快速判断程序跑到了哪一步。
4.2 启停与保护逻辑
先看最关键的一段,循环泵控制。自动模式下,操作员在组态王上点启动,或者现场按启动按钮,循环泵开始运行。停止按钮、急停、低水位、热继故障,任何一个条件不满足,循环泵立即停止。用指令表写出来是这样:
// Network 1 循环泵启动条件 LD I0.0 // 自动模式 A I0.1 // 启动按钮 O M0.2 // 组态王远程启动标志 O Q0.0 // 泵已运行,自保持 AN I0.2 // 停止按钮 AN I0.3 // 急停,断开有效 A I0.4 // 低水位,有水才闭合 AN I0.6 // 热继故障,常闭点 = M0.2 // 循环泵运行标志这里用到“AN”取反指令,是因为急停和热继在硬件上是常闭触点接入。程序里直接“AN”表示正常闭合时条件成立,触点一旦断开,输出就断开。这也呼应了I/O分配时的设计——安全信号常闭接入是行业里的普遍做法。
4.3 加药泵与循环泵联动逻辑
加药泵不需要连续运行,大多数项目按“循环泵运行期间每隔30分钟投加5分钟”来控制。这个逻辑不需要复杂的PID,用两个定时器就能实现。循环泵运行标志M0.2为ON时,启动T37周期定时。T37到达30分钟时,置位加药泵标志M0.5,同时启动T38投加定时。T38到达5分钟后,复位加药泵标志和T38,同时复位T37,重新开始下一轮周期。指令表大致是这样:
// Network 2 加药周期计时 LD M0.2 // 循环泵运行 AN M0.5 // 不在投加窗口 TON T37, 18000 // 30分钟周期 // Network 3 加药投加窗口 LD T37 // 周期到 S M0.5, 1 // 启动投加 TON T38, 3000 // 投加5分钟 // Network 4 加药泵输出 LD M0.5 AN I0.5 // 必须有水流 = Q0.1S7-200定时器的基数是0.1秒,所以18000是30分钟,3000是5分钟。这个换算关系很多人第一次写会搞错,直接拿分钟数填进去,结果定时形同虚设。T37到达后要用S指令置位,T38到后用R指令复位M0.5,再复位T37,保证下一个周期能重新计时。
加药泵必须在循环泵已经建立起水流之后才能动作,所以输出条件里加了“AN I0.5”,水流开关没有闭合就禁止投加,防止药液聚集在管路里。
4.4 压差反冲洗与阀组切换
砂缸过滤器的压差是判断是否需要反冲洗的重要依据。砂缸进出口各装一块压力表或者压差开关,当压差超过设定值比如0.05兆帕时,压差开关触点闭合。这个信号不能直接触发报警,因为水泵刚启动的瞬间管路压力波动,容易误报。程序里加了T39延时,压差信号持续10秒后才确认,置位M1.2压差高报警标志。
有电动的砂缸多路阀的话,PLC可以自动完成“过滤—反冲—正洗—过滤”的阀位切换。这需要至少两个电动阀输出点,程序逻辑按顺序置位和复位各输出点即可。如果现场用的是手动多路阀,PLC只需要在人为切换阀位时停止循环泵或者发出提示,避免在反冲洗状态下过滤仍继续,造成砂料流失。我的经验是,大部分中小泳池用多路阀的比较多,自动阀位切换反而让系统复杂化,设计之前一定要问清楚现场配置。
4.5 温度控制与模拟量处理
温度采集用EM231 RTD模块接PT100热电阻,地址对应AIW0。工程上温度工程量换算有个标准公式:实际值等于量程下限加上模拟量原始值按比例折算的温度。如果量程是0到50摄氏度,AIW0的原始值是0到32000,那么温度等于AIW0乘以50除以32000。映射到组态王变量时,也可以直接在组态王里做线性换算,但PLC程序里最好也保留一份原始值,方便现场用软件监控排查模拟量通路。
加热控制的判断逻辑:温度低于设定值减0.5摄氏度时,打开加热器;温度高于设定值加0.5摄氏度时,关闭加热器。用比较指令就能写,不需要PID。如果要求水温控制精度很高,再考虑增加PID控制块,但泳池水体巨大、热惯性很强,实际运行中开关量控制加上去回差已经够用,PID参数调得不好反而容易让热水阀频繁动作。
温度上限联锁是要重点保护的。水温超过32度直接关加热器电源,同时触发高温报警,防止游泳者烫伤风险。程序里把高温报警串在加热器接触器的输出回路之前,用常闭比较保证超温切断。
5. 组态王监控画面的实现要点
5.1 组态王与S7-200的通讯配置
组态王连S7-200,走的是PPI协议,通过PC/PPI编程电缆把PLC的PPI口和电脑的RS-232串口或者USB口连起来。在组态王工程里新建设备时选“西门子S7-200系列”,设置通讯串口COM1,波特率9600,PLC地址设为1。S7-200默认站号通常是2,这里要确认PLC系统块里的站号设置,两边不一致就通讯失败。
一个很容易遇到的坑是COM口被占用。笔记本电脑插了USB转串口线,系统分配的COM口是COM3,但组态王里设备配置写的是COM1,自然连不上。解决办法是在设备管理器里把USB转串口改成COM1,或者组态王里通讯参数就填实际分配到的COM3。组态王里设备定义完成后可以做一次通讯测试,在线状态能通就说明串口、电缆、波特率、站号都没问题。
5.2 建立变量词典与动画连接
变量词典是组态王和PLC之间的桥梁。每个PLC变量对应一个内存寄存器,比如循环泵运行状态对应Q0.0,组态王里定义成离散量变量,数据类型选Bit;温度对应AIW0,定义成整型变量。变量定义完之后,画面里的图形元素通过动画连接绑定变量才能动起来。
画工艺画面的时候,先放一张泳池工艺流程图,用图库里的泵、阀门、罐子表示设备。循环泵运行时,泵的图形换成另一种颜色,同时旁边指示灯变量显示绿色。液位用水箱图形的高度来动态反映,组态王里液位和动画连接的垂直百分比对应起来。按钮方面,启停按钮用“按下时置位”和“弹起时复位”的动作类型,如果不想让操作员误操作,还可以设置操作权限口令。
5.3 报警与历史曲线的设置
水处理系统报警要清晰直观。循环泵故障、高温、压差高、低水位这四类信号必须在组态王里配置成实时报警窗口。在变量词典里勾选“进行报警记录”,定义报警优先级和报警文本。运行系统里没人的时候,报警记录会写到历史数据库里,值班员第二天还能翻前一天晚上几点发生的报警。
历史曲线这里多说一句。很多人上来就搞温度趋势,但我觉得更实用的是记录泵的运行电流或者设备的启停变化。拿温度来说,水温是个缓慢变化的过程,看实时值就够了;反而是设备起停频率和故障时间轴,对判断系统状态更有效。组态王历史趋势控件绑定变量后会自动存储数据,留存时长按项目要求设置即可。
5.4 下载运行与调试步骤
组态王开发系统和运行系统是两个环境。开发系统里做画面和变量,调试时切到运行系统。首次进入运行系统可能需要注册信息和授权,没有授权的话会弹出窗口或者运行一段时间自动退出。测试阶段建议用演示模式,正式交付时再插加密锁。
我在调试时习惯先在PLC上用软件监控程序状态,确认输出点动作没问题,再去组态王里看变量值。不要一上来就改画面。顺序反了的话,遇到问题很难分清是程序逻辑的问题还是上位机变量绑定的问题。画面上的每个开关按钮,我都要来回点好几遍,确认组态王下发到PLC的信号确实被PLC正确接收。
6. 联调与常见问题排查实录
6.1 组态王创建协议组件失败的处理
很多人在安装组态王后第一次运行就遇到“创建协议组件失败”这个报错,尤其是老版本在Win7以上的系统里频繁出现。这个报错多数是因为组态王的设备驱动组件没有正确注册。原因要么是安装时杀毒软件拦截了驱动注册,要么是把绿色版拷贝过来缺少注册表信息,要么是权限不够。
我处理过几次,通常按这个顺序排查:右键组态王图标用管理员身份启动,排除权限问题;打开“运行”输入“regsvr32”加对应驱动DLL的完整路径,手动注册协议组件;如果还不行,就卸载后重新安装,安装时关闭杀毒软件。新版本组态王基本不会再有这个问题,但老项目的维护机上仍然经常遇到。
6.2 与PLC通讯不上的排查步骤
通讯不上是调试试机的重灾区。现象可能是组态王里所有变量显示“通讯失败”,或者设备状态灰显。排查分四步走:第一步确认PLC是否处于运行状态,把STEP 7-Micro/WIN监控软件打开,能在线就证明PLC本身没问题。第二步确认PC/PPI电缆类型,原装电缆和兼容电缆的拨码开关要对应PPI协议模式。第三步检查波特率和站号,两边参数必须一致。第四步检查串口是否被占,如果PLC编程软件还开着监控窗口,通常会把COM口占住,先关掉编程软件再启动组态王运行系统就好。
6.3 浮球信号抖动导致泵频繁启停
浮球液位开关在池水波动大的场合会产生连续的接通断开抖动,反映到PLC上就是泵刚启动就停、刚停又启动,对接触器和电机伤害很大。我在项目里就遇到过,循环泵十分钟内启停了十几次。解决办法是给液位信号做延时确认。比如低水位信号断开后,要持续2秒以上,程序才判定确实缺水,这样就能滤掉液面波动造成的瞬间断合。
与此类似的还有水流开关,泵刚启动那几秒水流不稳定,如果程序马上判断无水流并报警,就会出现启动误报警。处理方式是启动水泵后在程序里给水流开关一个5秒的确认窗口,无论开关状态如何,都在启动后的5秒内不判断水流故障,过了窗口再正常判断,误报警概率大幅降低。
6.4 输出继电器粘触点与IO点烧毁
输出点烧毁的原因通常不是过载,而是感性负载的电流冲击。接触器线圈断电瞬间会产生反电动势,直接断开感性负载会在PLC输出触点处拉弧,时间长了触点烧蚀或者粘连。解决方案就是加装中间继电器,把触点的切换电流控制在额定值内,同时可以在继电器线圈两端反向并联一个续流二极管,吸收断电瞬间的感生电压。续流二极管接反的话会把电源短路,安装时务必注意极性。
另外一个容易让人忽略的点是PLC输出公共端的接法。很多输出模块的公共端需要分组接24V电源,有些项目把多组输出点共用一个公共端,导致电流超过回路容量,长期发热松动接线端子,最终烧点。所有输出公共端留足余量,一根公共线能承受的电流不够时,分开接多根线到电源负极是更好的选择。
6.5 常见问题速查表
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 组态王运行系统打不开 | 授权未注册或组件缺失 | 管理员身份运行、修复授权或重装 |
| 通讯失败,全部变量灰显 | 串口占用/波特率不一致/站号错误 | 关闭编程软件监控、检查参数 |
| 泵启动后立即停止 | 水流开关误判,启动窗口太短 | 程序增加5秒启动确认窗口 |
| 泵频繁启停 | 浮球信号受波动影响抖动 | 加2秒延时确认滤除抖动 |
| 集热继电器频繁跳闸 | 接触器选型偏小或负载堵转 | 核对电流、更换接触器规格 |
| 组态王温度显示不对 | 模拟量工程量换算错误 | 检查AIW0原始值及线性换算公式 |
| 加药泵不投加 | 水流开关未闭合或定时器未复位 | 查水流信号,检查T37/T38复位逻辑 |
一个做水处理项目最深的体会
做这类项目,程序难度其实不大,真正的难点在于把每个环节的边界条件想清楚。水泵什么时候能开、什么时候必须停、加药泵和循环泵怎么联动、报警怎么才不误报,这些逻辑都要一条一条在图纸和程序里落实下来。我个人在实际操作中最看重两件事,一是硬件层面的保护回路,急停、热继这些必须硬件直切,不能只靠程序;二是程序里的注释,每隔几条网络就写清这段的作用和依赖条件,现场调试过了三个月再翻开,照样能一眼看懂。像这种泳池水处理项目,后续加一个pH在线检测、换一套变频循环泵,都是很自然的扩展方向,但只要当初的程序框架清晰、I/O分配留有余量,改起来就不会伤筋动骨。