做污水处理站自控这两年我经手了不少项目从几台泵的农村小站到日处理上万吨的镇级站都碰过。接触下来最顺手的组合还是西门子S7-1200加KTP触摸屏配上博途TIA Portal统一做编程组态再挂一套远程模块和现场扩展模块基本就能把大半个厂子的设备管起来。这篇文章就把一套真实污水处理项目里用到的“S7-1200 KTP 博途 远程模块 TE20扩展模块”整套方案整理出来从选型、组态、编程、画面到现场调试的坑都聊一遍适合正在做中小型水处理项目、或者准备把污水站从继电器控制改成PLC控制的朋友参考。1. 系统总体设计与硬件选型思路1.1 污水处理工艺对自控系统的核心需求先说工艺。一个小型污水处理站常用流程大概是污水进来后先过粗格栅拦掉大杂物然后进提升泵房用潜污泵把水提升到后续构筑物接着经过细格栅、沉砂池再进生化池通过曝气和微生物降解污染物最后进二沉池泥水分离出水消毒排放。听起来环节不算复杂但对自控系统来说要管的东西可不少。设备层面格栅机要按时间或者液位差自动启停提升泵要根据集水井液位自动开泵、停泵还要考虑泵的轮换使用防止某台泵一直运行导致磨损过快生化池里的曝气风机要么用时间轮换要么根据溶解氧检测值做自动调节加药系统要根据进水量或者pH值自动调整加药泵频率还有搅拌机、回流泵、刮泥机、各类电动阀门。这些设备分散在厂区不同位置有些在室内有些在池边甚至地下。信号层面集水井液位、生化池溶解氧、pH值、进出水流量、温度、浊度这些模拟量都要采集上来供PLC做联锁和调节。再加上每一台设备的运行状态、故障信号、手自动状态一个中等规模的小站数字量输入输出点随随便便就上百点模拟量二三十路也很常见。控制方式上操作人员不可能一直盯着所以系统至少要能全自动运行同时保留手动干预手段。碰到液位超高、设备故障、通讯中断这些情况还得能就地报警并且把信息传到远程端让不在现场的人也能第一时间知道。这也是为什么现在做污水项目远程模块几乎成了标配。1.2 为什么选S7-1200 KTP TE20这套组合有没有考虑过用S7-200 SMART加配套触摸屏当然考虑过便宜做小泵站确实够用。但如果项目稍微大一点点位超过七八十个200 SMART的扩展能力就显得局促程序结构也比较简陋远程监控能力不如S7-1200灵活。也考虑过S7-1500性能强很多但中小型污水项目用1500有点浪费成本摆在那里甲方不太买账。S7-1200正好卡在这个位置上。CPU 1214C DC/DC/DC自带14个数字量输入、10个数字量输出、2路模拟量输入本体够用不够还可以加SM1231模拟量模块、SM1223数字量模块。更重要的是它天生支持以太网博途里编程、HMI组态、远程诊断都是走同一个网络这对后期维护帮助非常大。KTP700 Basic PN是西门子Basic系列里比较经典的7寸触摸屏和S7-1200通过Profinet连接组态时不需要额外通信驱动拖进去就能用性价比和显示效果都够用。TE20扩展模块在我们这个项目里承担的是远程IO站角色。为什么需要它污水处理现场有个特点设备区和控制柜往往离得不近比如集水井里的液位计、格栅机在厂区一头生化池的仪表和设备在另一头如果所有信号都硬拉回主控柜一方面电缆成本高另一方面信号长距离传输也容易受干扰。TE20这类带网口的远程IO模块直接通过以太网和PLC通信放到现场设备附近就地采集就地接线主控柜到现场只需要一根网线调试和维护都方便很多。选型的时候还专门对比过传统的分布式IO方案。以前做这种项目要么用ET200SP要么用S7-300的远程站。ET200SP好是好但一套下来成本偏高而且必须走PROFINET对现场施工人员的配置水平要求也高。TE20模块的配置相对简单支持的协议灵活价格也亲民很适合这种对实时性要求不是极端苛刻、但点位又分散的污水站场景。1.3 关键硬件清单与网络规划参考这里把这套系统的主要硬件列出来方便大家照着配置。不同项目点位差别大具体型号和数量以实际IO表为准。设备型号/规格数量备注PLCS7-1200 CPU 1214C DC/DC/DC1本体14DI/10DO/2AI工作存储区大HMIKTP700 Basic PN17寸宽屏Profinet接口远程IOTE20扩展模块16DI/16DO2分散安装在池边和设备区模拟量扩展SM1231 AI 8x13bit1采集液位、pH、流量等信号通讯模块CM1241 RS4851用于和变频器Modbus通讯远程模块4G DTU支持Modbus TCP/透传1接PLC以太网口上云平台电源24V/10A开关电源2主控柜和现场IO柜各一路变频器ABB ACS510或同类3提升泵、风机、加药泵等仪表液位计、pH计、溶解氧仪、电磁流量计若干输出4-20mA信号网络规划上我是这样安排的PLC的网口直连KTP触摸屏同时经交换机接到TE20模块、4G DTU和上位机。PLC的IP地址设为192.168.0.10触摸屏设192.168.0.20TE20模块依次设为192.168.0.31、192.168.0.32远程模块192.168.0.40。统一网段后期用博途在线访问、上传下载程序、诊断故障都能少很多麻烦。2. 博途项目组态与PLC程序架构2.1 项目创建、设备组态与通信设置博途版本我们用的是TIA Portal V16如果你的项目要兼容不同版本的软件打开的时候要注意版本转换的问题高版本可以打开低版本项目反过来不行。新建项目后从硬件目录里把CPU 1214C拖到设备视图再把KTP700 Basic PN拖进去系统会自动弹出Profinet连接提示确认后HMI就和PLC绑定了。这里有个小细节如果HMI和PLC的Profinet连接无法自动建立检查一下两个设备的IP是否在同一个网段以及是网线插在了HMI本体接口还是通过交换机连接。TE20扩展模块的组态方式取决于它的通信协议。如果模块支持Profinet设备模式需要先从设备制造商网站下载对应的GSDML文件然后在博途的“选项-管理设备描述文件”里安装安装完成后就能在硬件目录里找到这个第三方设备像普通IO设备一样拖动、分配设备名、设置IP。注意PROFINET设备名是字符串格式比如“te20-station1”现场模块上的设备名必须和组态一致否则一上电就是通信故障。如果模块只支持Modbus TCP则不需要在硬件组态里加设备直接在程序里用TCON和TSEND/TRCV指令做通信读取回来的数据放进全局DB再映射成内部点位使用。顺便说一下博途的安装。很多同行第一次装V18、V19都遇到过许可证报错比如提示“一些已安装产品需要许可证”。这种情况多数是授权文件没装全或者安装了多个试用版互相冲突。我的做法是安装前关掉杀毒软件安装过程中不要动电脑装完后单独运行授权管理器把Simulation、WinCC相关的授权一并激活。如果中途报错又不想重装系统可以用博途自带的卸载程序彻底卸载清理安装目录后再重装千万别直接在控制面板里强删残留文件很容易导致后患。2.2 PLC程序块规划与变量组织程序好不好维护看块结构就知道。这个项目我大致分了这几个块OB1主循环调用所有功能块OB100做初始化把HMI上的参数默认值写进工艺参数DBFC_MANAGE_AUTO负责整套系统的模式切换FC_ALARM_HANDLE处理报警FB_PumpCtrl和FB_ValveCtrl分别是泵和阀门的通用控制逻辑用多重背景方式调用每台泵对应一个实例DB程序复制扩展非常方便FB_AnalogScale做模拟量标准化FB_PID用于加药和曝气的PID调节。变量表的组织也要讲规矩。我把PLC变量分成几个区域设备层变量物理点、中间逻辑变量M区、HMI交互变量DB块、通讯变量Modbus收发缓冲区。建议把HMI上要读写的参数统一放到一个全局数据块里比如DB“HMI_Para”里面分几个分组泵参数、液位报警值、加药参数、时间参数。这样做的好处是HMI变量连接时只需要连这一块的数据程序里访问也集中调参数不用满程序到处找月底盘点点位也方便。这里特别想提醒一点S7-1200的数据块有两种访问方式标准访问和优化访问。优化访问下变量没有固定偏移地址HMI连接和外部系统读取会比较麻烦所以只要涉及HMI变量或Modbus通讯读写建议把这个DB改成标准访问在DB属性里取消勾选“优化的块访问”。别小看这一个勾选现场调试时因为地址对不上导致HMI数据读不到的情况太多了。2.3 核心控制逻辑的实现思路污水处理程序里面手自动切换是根所有设备都要先过这一关。我的做法是HMI画面上设置全局模式按钮操作员选择“自动模式”时PLC把自动模式标志位置位此时手动画面上的设备启停按钮被锁定设备只能按工艺逻辑自动运行选择“手动模式”时自动联锁逻辑被旁路操作员可以直接启停任意设备方便检修和单机调试。提升泵的液位联锁是最典型的逻辑。集水井液位高到设定上限时自动启动1号泵液位低到下限时停泵。这里面有几个细节为了防止液位在报警临界点来回抖动导致泵频繁启停程序里要加上滞回比较也就是启动阈值和停止阈值之间留一段间隔比如高启液位2.5米低停液位0.8米泵启动前先确认无故障、无热继电器动作两台泵要轮换启动比如上次是1号泵运行这次先启动2号泵这样能避免单台泵长期高负荷运行。模拟量处理这块现场大部分仪表输出4-20mA。PLC读到的原始值是INT类型0-27648S7-1200模拟量输入满量程对应27648需要线性转换。博途里有NORM_X和SCALE_X两条指令先归一化再标定到工程量。比如液位计量程0-5米4-20mA输出程序就可以这样处理:#RawValue : AI_Level; // 0~27648 #NormValue : NORM_X(INT, 0, 27648, #RawValue); // 0.0~1.0 #Level : SCALE_X(REAL, 0.0, 5.0, #NormValue); // 对应0.0~5.0米注意量程下限不要简单填04-20mA信号在4mA时RawValue不是0而是约5530按线性计算所以更严谨的方法是先用物理量程的下限对应4mA时的原始值做标定或者直接用仪表量程做归一化。调试时发现液位显示偏了十有八九是这里的标定没对应好。顺启逆停这个需求也常遇到比如曝气系统启动时必须先开风机、再开对应阀门停止时必须先关阀、再停风机防止憋压或者倒流。实现方式很简单在自动启动序列里做时序延时每步确认到位后再执行下一步而不是把所有指令一股脑发出去。用定时器TON加状态字实现比用延时继电器灵活太多改时间参数直接在HMI上就能调。2.4 和变频器Modbus通讯的实战要点这个项目里有三台ABB变频器分别控制提升泵、曝气风机和加药泵PLC需要通过Modbus RTU读写频率和运行状态。S7-1200这边加一块CM1241 RS485通讯模块或者用CB1241也行程序里调用MB_COMM_LOAD配置端口再用MB_MASTER指令进行轮询读写。先讲参数设置。变频器侧一般要设置站地址1、2、3、波特率9600或19200、数据格式8位数据位、无校验、1位停止位常见具体看从站支持、运行指令来源改为通讯控制、频率给定来源改为通讯给定。ABB ACS510的通讯参数在参数组里设置施耐德变频器也类似现场配置时最好把手册打印出来一项项核对不然很容易出现写频率写不进去、状态字读不到的情况。PLC侧轮询逻辑有一个经典问题如果挂了很多从站比如一个串口带32台变频器轮询周期会变长通讯响应也会变慢。工程上一般不会让一台PLC带32台变频器做Modbus RTU因为轮询周期和故障隔离都是问题真有这种需求建议拆成两三个通讯口或者改用Profinet/以太网通讯。项目里三台变频器轮询一次大概在200-300ms对污水工艺完全够用。再补一个容易忽略的坑RS485的A、B线接反终端电阻没有拨上或者通讯线和动力线穿同一根管都会导致通讯时好时坏。我在调试时遇到过一次变频器频率显示偶发跳动排查了半天最后发现是PLC侧和变频器侧的通讯地没有共地两个设备的参考电位不一致导致信号漂移。把变频器信号地、PLC通讯模块的地、24V电源的M端接在同一个接地排上后问题就消失了。3. KTP触摸屏画面组态实战3.1 画面结构怎么搭KTP700 Basic PN属于西门子Basic系列面板支持的画面元素、脚本能力和Comfort屏比相对有限但做工艺监控足够。整套画面的架构我通常这样分设备总览、工艺画面、设备操作、参数设置、报警记录、趋势曲线、用户登录。设备总览画面上放厂区工艺流程图把格栅机、提升泵、生化池、加药系统、消毒单元简化成图形用颜色区分运行/停止/故障状态。操作员一进画面整个厂子什么状态一目了然。工艺画面按水处理流程分段比如进水泵房一段、生化池一段每段画面管对应的设备和仪表。设备操作画面做成列表式每台设备一行包括手自动选择、启动停止按钮、当前状态、运行时间。参数设置画面放液位上下限、时间参数、PID参数这类需要经常调整的数值。画面之间用按钮切换按钮“全局画面”选择“跳转到画面”事件。建议在每幅画面右上角放一个“返回主画面”按钮操作员不管点到哪里都能一键回总部减少误操作。组态时有一个容易忽略的问题KTP700 Basic PN的缓存有限画面元素不宜堆得太满像工艺流程画的背景图片不要太复杂否则下载到触摸屏后运行卡顿切换画面明显变慢。3.2 变量连接与按钮交互细节HMI变量必须正确连接到PLC地址才能读写。如果PLC变量用的是符号寻址HMI组态里需要先建立连接再选择PLC变量博途里可以直接从PLC变量表拖拽到画面元素上很方便。这里建议HMI需要访问的参数统一放到一个标准访问的DB里不要一会儿用I区一会儿用DB区连接管理会变得非常乱。用标准访问的DB还有一个好处将来远程模块如果要用Modbus TCP读取这些参数直接按DB偏移地址映射就行不用一个个找符号名。按钮和指示灯这类元素有“按下”“释放”“切换”“点击”等事件可选要区分清楚。常见的陷阱是想让按钮按下时置位启动命令松开时复位命令很多人只组态了“释放”事件结果按钮要一直按着不松。正确做法是启动按钮的“按下”事件置位M点“释放”事件复位M点或者用“切换”事件配合M点取反具体看工艺需要。设备启停这类关键操作最好加一个确认对话框弹窗提示“确定要启动1号提升泵吗”防止误碰。KTP面板支持数值输入控件对于液位报警值、PID给定这些参数要在控件属性里设置上下限键盘弹出时操作员输入超限数据会被直接拒绝。还有一个细节数值输入的格式和小数位数要跟PLC变量类型匹配。比如变量是REAL型控件里就要选浮点数格式显示2位小数否则实时值和输入值经常出现对不上或者显示为0多半是类型不匹配。3.3 报警、趋势、权限一个都不能少报警是污水处理系统最重要的功能之一。博途HMI的报警分为离散量报警和模拟量报警。离散量报警可以关联PLC里的一个BOOL变量比如某台泵的故障位为1时触发“1号泵故障”模拟量报警可以设置模拟量的高限、低限和迟滞比如集水井液位超高报警。报警文本建议在组态时直接写到报警类别的“报警文本”里这样触摸屏上能直接看到中文描述而不是一串地址操作员文化水平参差不齐越直白越好。报警记录要能查看历史。KTP700 Basic内部有报警缓冲区只要触摸屏不关机掉电历史报警就能保留一段时间。如果要求报警追朔时间长可以在PLC侧把报警信息用数据块记录定期上传远程平台触摸屏只看实时和最近记录。我一般把报警级别分为“故障”和“提示”两类故障必须确认并复位提示只显示不确认避免把所有信息混在一起操作员看不过来。趋势曲线对水处理项目也很实用。液位、pH、溶解氧、流量这四类参数建议都要做趋势。KTP Basic的Trend View控件组态不算复杂把变量拖进去设置采集周期和显示范围即可。采集周期不要设太短Basic屏的点位有限设1-2秒比较合适太频繁容易出现曲线断档。趋势图能在排查工艺问题时派上大用场比如夜班反应某台泵启动太频繁翻趋势曲线就能看到液位波动和设备启停时间的对应关系。用户权限这个功能很多项目图省事会跳过但污水站操作人员流动性大我强烈建议至少设两级用户管理员和操作员。管理员能修改参数、上传下载HMI配方操作员只能启停设备和查看画面。KTP700 Basic支持用户管理和密码登录组态时在“运行系统设置—用户管理”里创建用户画面元素属性里选择需要的授权级别没权限的操作员点了按钮毫无反应这样能避免很多误操作。4. 远程模块与TE20扩展模块实战部署4.1 远程监控是污水项目的刚需污水站大多分布在城郊乡镇运维人员要管好几个站点每个站点之间可能相隔十几二十公里如果每个故障都要跑现场运维成本非常高。远程模块解决的就是这个痛点把PLC的数据实时采集到云平台或上位机手机、电脑随时能看设备状态、报警信息甚至可以远程修改部分参数、远程启停设备。有人担心远程操作的安全性这个我觉得要分场景。如果只是远程监视、查看报警、了解运行数据采用云平台透传方式完全够如果要远程操作设备就需要在平台侧设置严格的操作权限现场还要加“本地/远程”切换开关切换旋钮打到“本地”时远程操作全部失效这种硬互锁比纯软件权限更可靠。我见过的所有要求远程操作的污水项目都会在现场加一个就地/远程选择旋钮这是底线。4.2 TE20扩展模块的安装、接线与组态避坑TE20扩展模块在这套系统里的任务是把远处的IO信号拉到PLC。主控柜到集水井、生化池的距离几十米上百米不等传统做法是从主控柜拉几十根控制电缆过去成本高、施工慢而且中间如果有电磁干扰模拟量信号特别容易漂。TE20模块安装在现场的分控箱里传感器和执行器的线都接在它身上它再通过一根网线把数据传回主控柜接线量省了至少七成。接线层面TE20模块本体需要一路24V供电现场分控箱里装一个2A左右的开关电源单独给模块供电不要和电机、变频器共用电源否则干扰非常大。数字量输入公共端要注意接法和PLC一致一般有PNP和NPN两种传感器接法TE20上通常有公共端选择端子务必先看说明书把公共端接对否则所有输入点信号检测不到。输出端如果是继电器型注意触点容量控制交流接触器线圈没问题但如果是直接驱动大功率负载中间必须加接触器。组态方面如果TE20走的是PROFINET我前面说了要保证设备名和IP与博途组态一致。现场调试时最容易出现的情况是“PLC在线诊断里看不到TE20”排查顺序是这样先用博途的“可访问设备”功能扫描网段看看模块IP是否正常再用在线诊断看IO设备名称是否匹配如果还是不行把模块断电重启让它在起始阶段重新注册。我碰到过一次非常隐蔽的问题就是现场交换机对有些工业协议帧不透明导致PROFINET数据包被拆包延时换了一口非网管工业交换机后问题就消失了。所以远程IO的组网中间不要插家用路由器要么直连PLC网口要么用工业交换机。TE20这类远程IO还有一手准备要做程序里必须考虑通信中断时的安全状态。PLC和TE20的通信一旦断开输出怎么处理是保持原值还是全部清零必须在组态或程序里明确。我的做法是在程序里判断IO地址的有效状态如果在自动模式下检测到远程IO通信故障立即把相关设备的自动运行命令复位让设备停下来宁可停机也不能在失去监控的情况下继续运行尤其是曝气风机和加药泵这类长时间误动作可能造成工艺事故。4.3 4G远程模块的组网与调试记录远程模块我们选的是4G DTU支持Modbus TCP透传和S7-1200的以太网口直连。组网拓扑是PLC网口接工业交换机交换机再分别接KTP触摸屏、TE20模块、4G DTU。4G DTU通过运营商网络连接到云平台云平台再通过网页或手机App把数据呈现给运维人员。DTU配置里需要设置几个关键参数服务器地址和端口云平台提供设备序列号用于平台识别这个站点数据上报周期心跳包间隔。上报周期不要设太短一般3-10秒比较平衡实时性要求不高的污水站放10秒甚至30秒都可以省流量也减少网络拥塞。心跳包的作用是维持DTU和平台之间的连接通常60-120秒发一次。调试流程上我习惯先在本地把数据链路打通再做远程验证。第一步电脑直连PLC网口用Modbus调试助手读取PLC数据确认Modbus TCP通信正常第二步把DTU接上电脑连接到云平台观察平台能否收到数据第三步用手机4G网络访问平台确认画面和报警推送正常最后才进入现场联调把报警联动加上。按这个顺序走出问题能快速定位是PLC侧、DTU侧还是平台侧。远程模块在现场遇到过几个比较典型的问题。一是流量卡欠费或信号弱数据长时间不更新平台端还以为设备故障其实模块还活着就是上不了网二是DTU和PLC之间的网线松动或者交换机端口接触不良现场震动大导致偶发掉线三是现场网络出口有防火墙限制了DTU到平台服务器的端口导致连不上。前两个问题通过巡检和加固接头能解决第三个需要在平台侧确认端口放通我一般约定用固定端口方便防火墙配置。5. 现场调试与故障排查实录5.1 常见问题速查表把这段时间调试遇到的典型问题整理成一张表可查性比长篇大论高很多。故障现象可能原因排查方法博途在线扫描不到PLC电脑网卡IP不在同一网段PG/PC接口选错把电脑IP改为192.168.0.x选择正确的网络适配器KTP触摸屏黑屏或者连接失败HMI电源没接好HMI和PLC的Profinet连接中断IP冲突检查24V供电和网线在HMI系统设置里看通信状态TE20模块不在线设备名不匹配IP错误交换机故障模块供电异常用博途可访问设备扫描核对设备名和IP检查LED状态模拟量数值跳变或显示异常信号线屏蔽层没接地供电不共地量程标定不对检查屏蔽层单端接地核对4-20mA线芯和24V地验证NORM_X标定变频器通讯时通时断RS485极性接反终端电阻未设置波特率/校验不一致核对A/B接法拨终端电阻统一通讯参数远程平台数据不更新流量卡欠费SIM卡松动DTU和PLC断连服务器端口不通检查SIM卡状态看DTU指示灯ping服务器核对端口操作员无法修改参数用户权限不够画面元素授权级别设错登录管理员账户检查元素属性里的授权设置5.2 三个印象最深的坑第一个坑在博途软件本身。现场项目快到交付节点了我打开博途准备在线监视程序结果软件提示需要许可证无法下载程序到PLC。当时正是夏天控制柜里温度高人本来就急越急越乱。后来排查发现是电脑上装了好几个博途版本授权文件被后装的版本覆盖了重新激活对应版本的许可证后就好了。从那以后我学乖了工控电脑上只装一个博途大版本装完立即备份授权文件重要项目交付前绝不安装其他软件。第二个坑是模拟量信号的干扰问题。刚开始联调时pH计和流量计的读数在触摸屏上跳得厉害当地维修的电工师傅说是仪表坏了但我拿万用表在信号端子处量毫安值是稳定的说明仪表没问题问题出在传输环节。检查发现信号线的屏蔽层只在仪表端接地PLC这一端悬空而且现场有一段线和变频器输出电缆平行走了将近十米。处理办法是信号电缆单独走桥架屏蔽层在PLC柜端单端接地和动力电缆保持至少30公分的间距改完后模拟量显示就干净了。第三个坑是TE20远程IO的输出状态。有一次操作员反映说远程IO控制的排泥阀在屏幕上显示已关闭但现场阀门实际是开的。查了一圈才发现TE20和PLC的通信在几分钟前断过通信恢复后PLC程序里阀门状态是从远程IO的反馈点读回来的由于通信中断期间运行状态丢失程序认为阀是关的但输出模块在掉线期间保持了掉线前的状态阀门就没动作。这个案例也印证了一件事远程IO通信断开的处理逻辑必须在项目初期就设计好不能等出了问题再补否则实际状态和显示状态错位非常危险。5.3 调试工具和操作习惯调试阶段我一定会准备一把螺丝刀、一个网线测试仪、一个万用表、一台装了博途的笔记本和一个U盘拷贝项目备份。笔记本上要提前装好PLC和触摸屏的GSD文件、各仪表说明书、变频器手册现场有时候没网找不到资料真的很耽误事。在线调试时PLC程序监视和HMI画面监视同时开着改PLC逻辑后马上在触摸屏上看效果能省很多来回切换的时间。程序下载这件事也要养成习惯。在线修改时如果只是改了逻辑选择“下载到设备-仅下载程序”就行不用把硬件组态也下载一遍否则可能会把运行中的设备重启。下载前一定先把项目整体保存一次下载完再上传一次源程序做对比确认PLC里的程序和电脑里的完全一致。项目最终交付时我会把归档的项目文件、IO表、设备参数清单、图纸建好文件夹留给甲方再在HMI的系统画面里写一块“维护联系牌”对以后自己处理售后也方便。