
上个月帮一个老客户维护一套泳池水处理控制柜打开柜门一看还是S7-200加组态王这套老组合。很多年轻工程师可能觉得S7-200都停产多少年了怎么还在用但现实就是存量设备量非常大而且这套系统的工艺逻辑、IO分配思路、梯形图组织方式跟现在主流的S7-200 SMART、S7-1200完全相通。尤其是游泳池水处理这种典型的流程控制项目涵盖循环过滤、消毒投药、恒温加热、自动补水、砂缸反冲洗这些环节做一遍下来等于把流体处理项目的绝大部分控制逻辑都过了一遍。这篇文章我打算把这个项目从头到尾拆开讲工艺链路怎么梳理、硬件怎么选型、IO怎么分配、图纸怎么组织、梯形图每一段的设计思路、组态王画面怎么做最后再聊聊现场调试踩过的坑。项目不算复杂但胜在完整适合做PLC毕业设计、非标自动化入门或者维护现有泳池控制系统的同行参考。看完之后换成景观水循环、中水回用、养殖水处理这些同类型项目也能直接迁移这套思路。1. 泳池水处理的工艺链路先懂工艺再写程序顺序反了必返工1.1 水处理的三个核心环节做控制系统最忌讳一上来就写梯形图。PLC程序本质上是工艺逻辑的映射工艺链路搞不清楚程序写出来也是空中楼阁。游泳池水处理看着简单其实拆开是三个互相耦合的环节。第一个环节是循环过滤。泳池水通过池底的回水口进入循环管道先经过毛发收集器这一步很关键泳池里难免有头发、树叶、杂物如果不拦截直接进泵叶轮很快就废了。毛发收集器后面通常带水流指示器可以判断管路有没有水。然后循环泵加压把水送进砂缸——砂缸里面装的是石英砂滤料水从上往下穿过滤层悬浮物和胶体颗粒被截留下来清水从底部出来再经给水口送回池内。砂缸过滤一段时间后滤料表面会形成一层污垢层压差变大流量变小这时候就需要反冲洗用反向水流把滤料里的脏东西冲出去。第二个环节是消毒投药。单纯靠砂缸过滤只能去除悬浮物溶解在水里的细菌、病毒、尿素这些必须靠药剂处理。常规配置是三台计量泵絮凝剂泵把水中的微小颗粒聚集成大颗粒这样砂缸才滤得掉pH调节泵把水的酸碱度控制在7.2到7.8之间这个范围既适合人体皮肤也能保证氯的消毒效果消毒泵投加次氯酸钠或氯片维持余氯浓度在0.3到1.0mg/L。投药位置一般在砂缸出水之后让药液和过滤后的清水充分混合再进池。第三个环节是辅助系统。恒温泳池会有板式换热器或者电加热器通过水温传感器闭环控制保持26到28度另外泳池水位因为蒸发、游泳时溢出等原因会下降需要液位开关配合补水电磁阀自动补水。1.2 从工艺环节映射出控制点和采集点把工艺链路走一遍之后控制对象就自动浮出来了。需要PLC输出的主要是循环泵启停、投药泵启停、反冲洗电动阀的开闭、补水电磁阀、加热器输出这五类。需要PLC采集的包括泵的运行反馈、热继电器过载信号、阀门的开到位/关到位限位、高低液位开关、反冲洗压差开关再加上模拟量部分的水温、pH值、余氯浓度、泵出口压力。这里有一个很多新手容易忽略的点泳池水处理的安全逻辑不是靠PLC程序而是靠硬联锁打底。循环泵的热继电器常闭触点要串在接触器线圈回路里低水位开关的常闭触点也要串进去这样即使PLC程序跑飞了泵也不会在缺水或者过载状态下硬转。PLC程序里的联锁属于第二道防线负责更精细的控制逻辑比如反冲洗过程中禁止投药、循环泵停机必须停投药泵这类。硬接线解决危险程序解决逻辑两条线不能混。1.3 反冲洗流程整个程序里逻辑最复杂的一段反冲洗是泳池水处理控制里最有代表性的流程。工况是这样砂缸正常过滤时进水阀开、反冲洗阀关水流从上往下穿过滤料层反冲洗时刚好反过来进水阀关、反冲洗阀开水流从砂缸底部往上冲把截留的污物从排污口带走。实际操作中反冲洗触发条件有三个一是压差开关动作说明滤料层堵了二是定时反冲洗比如运行累计多少小时强制反洗一次三是操作人员在组态王上手动触发。完整反冲洗流程是这样走的先停循环泵停投药泵确认泵停稳然后电动阀切换到反冲洗位等开到位限位信号限位到了之后再启动循环泵泵把水反向打进砂缸反洗定时开始一般8到12分钟具体看水质定时到了停泵阀门切回过滤位等关到位限位最后重新启动循环泵恢复投药整套流程结束。这个流程在PLC里就是典型的步进控制每一步都有动作条件和完成条件不管哪一步卡住了都不能往下走。2. 硬件选型和IO分配点表排得清楚后期少改十版程序2.1 为什么这个项目还用S7-200这个项目用S7-200一是因为它是存量设备控制柜、端子接线、现场仪表都是现成的二是因为这套硬件配置对这个工艺场景完全够用。S7-200虽然停产了但它的编程软件STEP 7 Micro/WIN至今仍然是学习PLC逻辑控制最好入手的工具之一梯形图的组织方式、定时器计数器用法、中断和子程序结构跟后来的SMART系列一脉相承。如果是全新项目我的建议是直接用S7-200 SMARTCPU选SR20或者SR40价格不贵编程软件Micro/WIN SMART免费以太网口调试也方便。但如果你手头已经有S7-200的库存或者学校实验室还在用S7-200那按这篇文章的思路做完全没问题程序迁移到SMART只需要改一下地址格式和少数指令差异。2.2 IO点表完整分配这个项目的IO点规模大概在二十几个数字量、四五个模拟量。CPU可以选S7-200 CPU 224 XP CN自带14个数字量输入、10个数字量输出、2路模拟量输入、1路模拟量输出。如果模拟量点数超过2路就加一块EM231四通道模拟量输入模块。数字量输入分配表如下地址信号名称说明I0.0急停按钮常闭触点串入总联锁I0.1远程/本地切换本地柜内按钮远程模式才允许组态王控制I0.2循环泵手动启动柜门按钮检修/调试用I0.3循环泵运行反馈接触器辅助触点I0.4循环泵热继电器过载常闭信号I0.5反冲洗压差开关砂缸进出口压差超限I0.6高水位开关补水到位信号I0.7低水位开关缺水联锁信号I1.0反冲洗阀开到位电动执行器开限位I1.1反冲洗阀关到位电动执行器关限位I1.2泵房漏水报警地面积水探头数字量输出分配表地址信号名称说明Q0.0循环泵接触器驱动主泵Q0.1絮凝剂投药泵计量泵启停Q0.2pH调节投药泵计量泵启停Q0.3消毒投药泵计量泵启停Q0.4反冲洗阀开电动执行器开命令Q0.5反冲洗阀关电动执行器关命令Q0.6补水电磁阀液位补水Q0.7加热器输出接触器/固态继电器Q1.0故障指示灯柜面指示灯Q1.1运行指示灯柜面指示灯模拟量分配表地址信号名称变送器信号量程AIW0水温PT100变送器 4-20mA0-50℃AIW2pH值pH电极变送器 4-20mA0-14AIW4余氯余氯电极变送器 4-20mA0-5mg/LAIW6循环泵出口压力压力变送器 4-20mA0-1.0MPa2.3 模拟量量程换算公式S7-200的模拟量模块有一个很重要的特性必须牢记整定值0到32000对应0到20mA而变送器输出的是4到20mA所以实际有效整定范围是6400到32000。工程值与PLC内部整定值的换算关系是工程值 (整定值 - 6400) * (量程上限 - 量程下限) / (32000 - 6400) 量程下限举个实际例子水温变送器量程0到50℃如果AIW0读到的整定值是16000那实际水温就是温度 (16000 - 6400) * 50 / 25600 18.75℃这个换算我一般不在PLC里用浮点运算指令做而是在组态王的数据词典里直接设置原始值和工程值的线性转换省PLC的扫描周期资源画面上的数值也更直观。但如果你的上位机不用组态王直接在PLC里算也可以注意用浮点指令别用整数指令否则算出来全被截断了。IO分配的另一个原则是留余量。点表里我习惯把地址排满但不一定全用比如DO从Q0.0到Q1.1中间Q0.7和Q1.0之间其实隔着好几个空地址这就给以后增加设备留了空间。别把地址挤得密不透风后期加一个阀门或者加一个泵地址全乱了改程序改到你怀疑人生。3. 电气原理图与接线设计图纸不是画给自己看的是留给维护人员的3.1 主回路和控制电源的设计思路主回路的逻辑很清晰。循环泵功率一般在3到5.5kW三相380V供电回路里串联断路器QF1、接触器KM1、热继电器FR1电机外壳接地PE。投药泵是计量泵功率很小几百瓦到一千瓦可以用D10微型断路器加接触器也可以直接用PLC输出驱动中间继电器再由中间继电器驱动计量泵——计量泵本身自带插头的话直接控制它的电源即可。控制电源这块要重点说。S7-200的CPU供电是DC24V传感器变送器也要DC24V所以我习惯用两个DC24V开关电源一个给PLC本体和数字量输入输出回路一个给变送器和模拟量回路单独供电。为什么要分开因为变送器和接触器动作时会产生电源扰动如果和PLC共用一路电源模拟量读数很容易波动。模拟量传感器供电单独用一路电源相当于把干扰源的耦合途径切掉一条。两个开关电源的直流负极我建议单独挂端子排不要在柜内直接并在一起等电位干扰就小多了。3.2 PLC输入输出接线细节S7-200 CPU 224 XP的输入端子是源型/漏型可选的国内使用习惯是接成漏型输入公共端1M、2M接DC24V的负极各个输入点通过按钮或者开关触点接到DC24V正极。也就是说急停按钮的常闭触点一端接24V另一端接到I0.0这样按钮没按下时I0.0得电逻辑上就是正常状态为1PLC程序里用常开触点读取I0.0即可一旦按下急停I0.0断电变0立即触发联锁。这种接法有一个好处急停回路断线或者接触不良时PLC读到的也是0同样会联锁停机属于故障安全型设计。输出侧CPU 224 XP是晶体管输出只能接DC24V负载不能直接接220V的接触器线圈。所以我全部通过中间继电器过渡PLC输出点驱动中间继电器线圈中间继电器的触点再去控制接触器线圈。中间继电器选DC24V线圈的触点容量选5A以上。这样做除了电流隔离还有一个好处PLC输出点损坏后更换继电器比换PLC模块便宜得多现场维护也方便。输出侧每个中间继电器线圈两端要并联一个续流二极管方向是负极接二极管负极、正极接二极管正极不然继电器断电瞬间的反向电动势容易打坏PLC输出管。3.3 模拟量信号防干扰接法模拟量部分是整套系统最容易出问题的地方。pH电极、余氯电极输出的4-20mA信号和循环泵380V动力电缆在同一个桥架里走的话基本等着被干扰。我的习惯是信号电缆用屏蔽电缆屏蔽层在PLC柜侧单端接地另一端悬空。单端接地是为了避免形成地环路地环路才是模拟量波动最大的根源。信号电缆在柜内走线必须和动力线分开至少间隔20厘米实在避不开就垂直交叉不要平行走长距离。变送器供电用独立开关电源前面已经说了。模拟量模块的通道和公共端接线要检查变送器的两线制还是四线制接法完全不同。两线制的电源正极接变送器变送器-接模块通道模块通道-接电源负极四线制变送器电源单独接信号线直接接模块。接错了轻则读数不准重则烧模块。电气图纸的组织我习惯分成六页第一页图纸目录和设备清单第二页主回路原理图第三页控制电源分配图第四页PLC输入接线图第五页PLC输出接线图及中间继电器柜内接线第六页现场仪表和变送器接线图。每一页都配上IO对照表端子号、线号、电缆编号标得清清楚楚。图纸不是画给自己看的过两年设备故障换一个电工过来查线图纸看不明白你的系统口碑就砸了。4. 梯形图程序核心逻辑拆解带解释的编程是怎么组织的4.1 程序总体框架和注释习惯S7-200的STEP 7 Micro/WIN里每个程序网络都可以写网络标题和网络注释。我强烈建议养成一个习惯每个网络必须写标题说明这一网络是干什么的注释里写清楚动作条件和输出结果。带解释的梯形图程序不是给机器看的是给三个月后的你自己和接手的维护人员看的。这个项目里我按功能把程序分成九个网络段从总联锁到报警汇总逻辑清晰查错也快。整个程序的框架是这样网络段功能说明网络1总启动联锁急停未触发、模式有效时置位系统允许位网络2模式选择本地/远程、手动/自动切换网络3循环泵控制自动定时启动、手动启停、联锁保护网络4投药泵联动控制循环泵运行时按条件投药网络5反冲洗步进流程五步状态机每一步独立网络网络6加热恒温控制带回差的水温闭环网络7自动补水控制低水位开阀、高水位关阀、超时报警网络8故障汇总报警过载、漏水、限位超时网络9模拟量处理采样、滤波、超限判断4.2 循环泵控制逻辑的设计循环泵是整个系统的心脏所有投药、过滤、反冲洗都依赖于它。控制逻辑分自动和手动两种。手动模式柜门上的启动按钮I0.2按下置位Q0.0停止按钮我用的I0.3的常闭逻辑但也可以占用一个空闲DI复位。手动模式主要是调试和检修用的正常运行时不会让操作员长期用手动模式。自动模式通过组态王设置启泵时间和停泵时间比如每天8点开始循环、20点停止。这个在PLC里可以用比较指令实现读取系统实时时钟的时分秒落在启停时间区间内且联锁条件满足就输出Q0.0。S7-200有读取实时时钟的指令READ_RTC读出来的BCD码格式时分秒分别存放在VB字节里用比较指令和设定值比较。注意BCD码和十进制不一样比较之前要转换或者直接用BCD格式比较。联锁条件我用SM0.0常开触点串在自动回路的最前面吗不是我用的是一个内部位M0.0系统运行允许网络1里统一置位急停I0.0为1、热继电器I0.4为1、低水位I0.7为1低水位开关正常时触点闭合没水时断开、泵房漏水I1.2为0四个条件全满足M0.0才为1。然后循环泵的输出条件统一串联M0.0。这样做的目的是把联锁条件集中在一处后续新增联锁只要改网络1不用在每个泵的程序里到处找。4.3 投药泵联动和保护逻辑投药泵的控制原则非常简单循环泵运行才允许投药泵运行。原因是如果水泵不转药液投进管道里不流动局部浓度会严重超标等泵一开高浓度药液直接冲进泳池这是安全事故。所以絮凝剂泵Q0.1、pH调节泵Q0.2、消毒泵Q0.3的输出条件里第一项就是循环泵运行反馈I0.3为1。消毒泵还有一个特点它不需要24小时连续投更常见的做法是定时投加或者按余氯反馈投加。如果配置了余氯在线仪表可以做个简单的比例控制余氯低于下限0.3mg/L时投药泵启动高于上限1.0mg/L时停止中间回差区域保持原状态避免频繁起停。没有余氯仪表的话就用定时器运行15分钟停30分钟循环参数通过组态王设置到V区。反冲洗过程中所有投药泵都必须强制停止这个在反冲洗步进流程的开始步骤里直接复位Q0.1、Q0.2、Q0.3。还有一个细节是投药计量泵的冲程长度是机械调节的PLC只能控制启停所以投药量的精确调整得靠现场人工去调计量泵的冲程旋钮这个要在操作说明里写清楚不然操作员以为组态王上能调量怎么调都没反应就会觉得系统坏了。4.4 反冲洗步进流程用字型变量做状态机反冲洗是这个项目里最值得细讲的逻辑。我用VW0作为步进存储字每个状态用不同的整数值表示。这样做的优点是调试的时候在状态表里直接看VW0的值就知道当前反冲洗走到哪一步了非常直观。程序结构里我先看触发条件压差开关I0.5动作、或者反冲洗定时累计到、或者组态王手动触发位M1.0被置位。触发之后进行第一段置位把VW0的值改成1同时复位循环泵Q0.0、复位所有投药泵、关补水电磁阀。这个先停后转的顺序很重要绝不能先关阀再停泵那样等于憋泵。VW0等于1的状态等待循环泵停止确认。怎么确认泵停了用运行反馈I0.3变成0作为条件同时加一个3秒的定时器延时确保泵确实停稳了。满足后VW0改成2。VW0等于2的状态切换阀门到反冲洗位。输出Q0.4反洗阀开等待I1.0开到位限位变为1。这里要加一个超时保护15秒内限位没到位置位报警位M3.2阀开超时同时复位输出Q0.4VW0清零退出反冲洗。为什么必须加超时电动执行器卡住的时候如果你一直保持开阀输出执行器电机会一直堵转很快就会烧掉。超时停输出是最基本的保护。VW0等于3的状态启动循环泵进行反冲洗。这里有个细节反冲洗用的也是同一台循环泵因为它正反转无所谓砂缸的多路阀结构决定了水流方向所以输出Q0.0同时启动反洗定时器定时10分钟。定时到VW0改成4。VW0等于4的状态停泵、阀门切回过滤位。复位Q0.0输出Q0.5关阀等待I1.1关到位限位同样加15秒超时保护。到位后VW0改成5。VW0等于5的状态恢复运行。如果系统处于自动模式重新启动循环泵Q0.0恢复投药泵把VW0清零退出反冲洗状态置位M1.1反冲洗完成这个位可以让组态王弹个提示框。每一步的转换条件我都写上了网络注释比如网络12反洗状态3启动循环泵定时10分钟定时到跳转状态4。这样带解释的梯形图程序别人接手看一遍就能明白整个流程不会满头问号。4.5 加热和补水控制加热控制就是一个带回差的闭环。温度设定值存储在VW100里比如27℃回差1.5℃用比较指令水温低于25.5℃设定下限且加热允许输出Q0.7水温高于28.5℃设定上限复位Q0.7。回差的作用就是防止温度在设定点附近反复启停继电器机械触点和接触器都经不起频繁动作。加热器如果是大功率电加热输出回路一定要用接触器或者固态继电器不能直接用PLC晶体管输出点去带加热器道理和带接触器线圈一样电流等级完全不对。补水控制是标准的液位逻辑低水位开关I0.7动作没水了且系统允许输出Q0.6开补水电磁阀高水位开关I0.6动作复位Q0.6关阀。同时加一个补水超时报警连续补水超过30分钟还没到高水位置位M3.3说明要么电磁阀坏了要么管路漏水需要人工去检查。这个超时报警很实用我有一次就是靠它在半夜发现问题不然泵房里水漫金山也没人知道。5. 组态王监控画面与通讯配置上位机不做花瓶5.1 S7-200和组态王的通讯搭法组态王和S7-200通讯有三种常见方式我挨个说清楚。第一种是PPI协议直连组态王设备驱动里选西门子 S7-200PPI用USB-PPI编程电缆连电脑PPI参数波特率必须和PLC编程软件里的设置一致默认9600或者187.5k。这种方式适合就地调试距离短速度慢一点但胜在简单。第二种是组态王作为OPC客户端读取S7-200的OPC服务器。这个OPC服务器是西门子官方软件PC Access它负责和PLC通讯包括TCP、PPI等方式然后对外提供OPC接口。组态王里添加OPC服务器设备再在数据词典里关联变量。这种方式最稳定而且PC Access可以同时服务多个OPC客户端缺点是安装配置步骤多PG/PC接口设置错了就连不上。第三种是加以太网模块CP243-1组态王用S7-200 TCP驱动直接通讯速度快适合需要大量数据交换的场景。但CP243-1模块现在不太好买而且S7-200自带的Port0口只有PPI新增的以太网模块配置要占用V区存储地址稍微折腾一些。我实际项目里用的是第二种PC Access OPC。原因很简单组态王以太网驱动对S7-200的支持没有对S7-300那么成熟OPC方式多一步但稳定。连接的时候注意PC Access里的PG/PC Interface必须选择TCP/IP指向PLC的IP地址如果加了以太网模块或者选择PPI电缆指向串口。PC Access配置里需要新建一个PLC组把要读写的变量全部列进去比如I0.3、Q0.0、VW0、AIW0这些一个都不能漏。漏了的话组态王读过来就是无效值。5.2 数据词典变量定义组态王的数据词典是变量管理的核心。我建立变量的习惯是这样I/O变量里的设备选择刚才建好的OPC服务器寄存器填S7-200的地址格式数据类型要和PLC侧一致。比如组态王变量PLC地址数据类型用途循环泵运行I0.3位bit泵状态显示循环泵控制Q0.0位bit远程启停控制反冲洗步进值VW0无符号整数显示反冲洗进行到哪一步水温工程值AIW0无符号整数加线性转换显示温度反冲洗完成标志M1.1位bit弹窗提示AIW0的原始整定值和工程值的转换在组态王里怎么做数据词典里定义变量水温原始值采集AIW0再定义一个内存变量水温显示值用应用程序命令语言写一行转换公式除以256再乘以50因为6400到32000的整定范围对应0到50度换算比例就是50除以25600约等于每256个单位对应0.5度。也可以用组态王的线性转换功能在变量属性里直接填原始值下限6400、原始值上限32000、工程值下限0、工程值上限50系统自动换算这个功能很实用。5.3 画面设计和动画连接思路组态王画面我不推荐堆砌3D效果搞一堆花里胡哨的图片用处不大调试的时候还卡。好的监控画面应该一眼就能看出系统当前处于什么状态。我做的工艺主画面布局是左侧竖排循环泵、投药泵、加热器、补水阀中间是砂缸和管道走向右侧是实时参数面板。动画连接的核心是颜色变化反映状态。泵停止时图形灰色运行时绿色故障时红色闪烁。阀门图形用填充属性连接开到位/关到位状态。管道画粗一点用线色连接对应泵的运行位泵一转管道变绿整个画面看起来就有水流在动的感觉操作员很吃这一套也确实是实用的。实时参数面板上放温度、pH、余氯、压力四个数值显示框每个框下面配一个小型趋势曲线。组态王支持在画面里嵌入历史趋势曲线控件设置好变量的采样周期和历史记录运行起来就能看到过去24小时的曲线。pH和余氯的趋势曲线尤其重要水质的波动规律从曲线上一眼就能看出来比看数字报表直观得多。操作区放模式切换自动/手动、循环泵启停按钮、反冲洗手动触发按钮、参数设定框启泵时间、停泵时间、投药间隔、反冲洗定时。按钮的安全等级在组态王用户管理里设置普通操作员只能看不能动管理员才能操作这个不要省万一误操作把正在过滤的循环泵停了整池水几个小时就变浑了。5.4 报警窗口和历史记录配置组态王的报警系统要接好。我建立了这样几类报警开关量报警热继电器跳闸、漏水报警、低水位、模拟量越限报警pH超范围、余氯超范围、压力超限、流程超时报警阀门超时、补水超时。每一个报警都要在数据词典对应的变量属性里勾选允许DDE报警然后在画面上放报警窗口控件选择实时报警和历史报警两个页面。报警记录要存到Access数据库文件这样三个月后出问题还能翻出当时的报警记录和水质曲线对照分析排查效率翻倍。还有一个容易被忽略的点组态王运行系统的数据改变命令语言。比如反冲洗完成标志M1.1从0变1的时候弹出一个提示窗口反冲洗完成系统已恢复过滤模式。这个逻辑在组态王里写数据改变脚本比在PLC里做方便因为PLC只负责逻辑人机交互提示交给上位机更合理。6. 现场调试踩过的坑从信号干扰到通讯掉线6.1 模拟量信号波动排查全过程这个项目调试遇到的最头疼问题是pH值读数在组态王画面上像心电图一样上下跳。排查链路是这样的先用万用表直接在变送器的4-20mA输出端测电流万用表读数稳定得一批说明变送器本体没问题然后量PLC模拟量模块对应的AIW整定值也是跳的。那问题就出在传感器到模块这条传输路径上。我检查了信号线发现有一段和循环泵的动力电缆并排走了将近两米而且是同一个桥架没有任何隔离。这就是典型的空间感应干扰。处理办法把信号电缆那段移出桥架重新走独立的穿线管和动力线垂直交叉通过屏蔽层在PLC柜内单端接地。改完再监视AIW值波形明显平稳了。但光靠物理隔离还不够信号里还是有轻微的高频毛刺幅度不大但会影响精确性。我又在PLC程序里加了数字滤波AIW0每200ms采样一次连续采5次取平均值。S7-200没有现成的平均值指令我是用循环移位加累加的方式写的也可以用加法指令加除法指令简单实现。做了软件滤波之后读数彻底稳了。这里要提醒一句滤波时间常数不要太大pH和余氯是慢变量滤波大一点没问题但压力信号别使劲滤波因为压力变化本身可能就是异常预警你把它滤平了报警就不灵敏了。6.2 pH和余氯电极的维护教训泳池投药系统的pH电极和余氯电极安装位置很有讲究。我第一次安装是把电极直接装在不锈钢管道上结果发现读数偏高而且漂移很严重。查来查去发现是电极安装的地方离投药点太近药液还没混合均匀就把电极包围了测到的是一团浓药液不是池水的平均值。后来把电极移到投药点下游、经过管道混合之后的位置读数就正常了。电极的日常维护也得写进操作手册第一电极每隔一到两周要用清水冲洗探头泳池水里的油脂和杂质会糊在探头上造成响应变慢第二每隔一个月要用标准缓冲液校准一次pH电极用标准余氯液校准余氯电极第三长期停机时电极要泡在保护液里不能干放。这些不是PLC工程师的活但你必须把这些要求交代给运维人员不然电极坏了读数不准整个自动投药系统就变成了瞎投药水质超标了系统还自我感觉良好。6.3 组态王与PC Access通讯掉线的处理项目运行过程中出现过一次组态王画面全部变灰、数据显示通讯失败的情况。排查思路是这样的第一步看PC Access侧打开PC Access软件看客户端连接状态发现PC Access本身还能读数据说明PC Access和PLC之间的链路是通的。第二步看组态王侧打开组态王的设备驱动状态窗口发现OPC设备状态是失败。重启组态王运行系统恢复正常但过几个小时又掉。第三步怀疑是PC Access的连接数问题。PC Access作为OPC服务器默认允许的连接数是有限制的而且组态王长时间运行后OPC连接可能因为网络超时被系统释放但组态王侧没感知到导致连接状态不一致。最终的处理方案在组态王的设备配置里把通讯超时时间从默认的3秒调大到5秒尝试恢复间隔设置为30秒同时在PLC程序里把PC Access相关的通讯超时标志位处理好。另外如果是通过以太网模块通讯PLC侧和上位机之间的交换机一定要用工业级的家用交换机在长时间大数据量传输时容易丢包丢包累计多了OPC连接就断了。6.4 反冲洗流程的超时保护优化反冲洗阀门超时保护这个功能我第一次做的时候是没加的。结果有一次现场电动执行器出了机械故障阀门卡在半路开到位限位和关到位限位都不动作程序就一直停在等限位那一步循环泵一直处于停止状态泳池整个循环系统瘫痪了一个多小时直到现场人员去柜门前手动检查才发现问题。后来加了两处优化第一是每个阀位等待状态加15秒超时超时后退出反冲洗流程阀门输出复位报警提示阀开超时请检查执行器第二是如果反冲洗过程因超时异常退出系统要恢复循环泵运行别让泳池整个停循环因为反冲洗失败最多是砂缸脏一点但循环停了水质会迅速恶化。也就是说异常退出的默认动作是尽量恢复到过滤状态而不是全部停机等人来处理。这条思路同样适用于其他流程控制项目异常退出必须有一个安全的故障默认状态这个默认状态的选择要看哪个后果更严重。写在最后的实操心得这套项目从工艺梳理到画面完成前前后后大概花了两周时间程序本身不大梯形图加起来也就百来个网络但真正花时间的反而是IO分配图纸和组态王变量整理这些没什么技术含量的杂活。我做了这么多年项目最大的体会是PLC项目出问题很少是程序逻辑本身算不过来的多半是IO地址乱了、接线对不上、变量名字五花八门导致调试时人脑CPU过载。所以最后再啰嗦几句经验第一程序里的网络注释和IO分配表一定要和最终图纸同步更新管线改了第一时间改文档拖一天就是给自己埋一个坑第二组态王变量的命名规范从一开始就定好别用变量1变量2这种名字三个月后没人知道变量2到底是个啥第三模拟量干扰是水处理项目的最常见故障源信号线和动力线分开走、屏蔽单端接地、变送器独立供电这三板斧能解决九成干扰问题。这个泳池项目的逻辑稍微改改就能套到景观水、养殖水、中水回用这些同类场景里去核心的循环过滤和反冲洗步进逻辑是完全一致的。真遇到具体的程序细节卡壳了随时可以拿出来对照着看这套思路跑通了后面的路就顺了。