前两年做了两个中型污水处理控制柜项目,一个用S7-1200加西门子触摸屏,另一个直接升级到S7-1500。项目做完之后我才真正意识到,博图V16里的程序模板和电气原理图根本不是两套独立的东西,它们是同一个工程思维的两半。很多刚入行的朋友总在问,西门子PLC和触摸屏怎么配合,程序模板怎么搭才不乱,电气图纸画到什么程度才不会被调试现场打脸。这篇文章我就把这些年在污水处理自动化项目里积累下来的东西整理一遍,重点围绕TIA Portal V16的程序结构、KTP触摸屏画面设计,以及和电气原理图对应的IO规划思路展开,希望能给正在做类似项目的同行省掉一些弯路。
1. 污水处理工艺段的自控需求拆解:先列清点位再谈程序结构
1.1 一个典型污水厂需要采集和控制哪些信号
污水处理和机械手、包装线这类离散自动化项目最大的区别在于:它是连续过程控制,涉及大量模拟量信号,并且前后工艺段强关联。拿最常见的A2O工艺来说,从进水开始就要经历粗格栅、提升泵房、细格栅、沉砂池、厌氧池、缺氧池、好氧池、二沉池、加药间、污泥脱水间,最后到出水在线监测。每个工艺段都有自己的一套设备和仪表。
以提升泵房为例,这是每个污水厂都有的标配段。4台潜污泵、2台粗格栅机、1台螺旋输送机、1个超声波液位计,再加泵出口的电磁流量计。四台泵控制逻辑看着简单——液位高了开泵,低了停泵——但实际做起来要带泵的轮换、运行时间累计、故障停机自动切换、检修模式隔离,这一套逻辑做完就需要一个独立的功能块来维护。
到了生化池部分,数据量就上来了:DO溶解氧仪、MLSS污泥浓度计、pH计、温度变送器,再加上鼓风机房的曝气调节阀或变频鼓风机。这里开始出现连续调节环节,需要PID控制,曝气量跟不上时好氧池DO会掉,丝状菌膨胀的问题一下就出来了。加药间同样如此,PAC加药泵和PAM加药泵要跟着进水流量和出水磷值走,要么比例投加要么闭环调节。
我建议大家在画电气原理图和写程序之前,先把整个污水厂所有要接入PLC的IO点列一张完整的清单,包括DI、DO、AI、AO四种类型。这张IO清单是后面所有设计工作的总纲,它决定了你要选多大的S7-1200 CPU,要配几块SM1231模拟量模块,控制柜里要放几个中间继电器,端子排要备多少位,甚至决定HMI上要建多少个变量。
1.2 从IO清单反推PLC硬件选型的基本原则
我在做第一个污水项目时用的是S7-1200 CPU 1214C DC/DC/DC。这是一款在中小型污水厂项目里出现频率非常高的CPU,本体集成了14个数字输入和10个数字输出,但模拟量信号全部需要扩展模块。如果项目再大一些,比如处理规模在每日数万吨的这种,DI点超过100个,用S7-1200就需要挂多个通讯模块和IO模块,机架扩展比较复杂,这时候我会直接考虑S7-1500系列。
硬件选型的一个实际建议是:不要把CPU的点位用得满满当当,预留20%到30%的余量。污水厂后期加设备是常态,比如二沉池要加一台刮泥机、脱泥间要加一台螺杆泵,如果IO没有余量,改起来相当被动。
对于模拟量模块,污水处理项目里有一个容易被忽略的点:热电阻。鼓风机轴承温度、电机绕组温度很多用的是PT100,这就需要配置SM1231 RTD模块,而不是普通4到20毫安模拟量输入模块。量程范围也要提前算好,如果现场变送器输出信号是4到20毫安,模块组态的时候量程上下限就要和现场仪表量程一一对应,否则程序里做工程单位换算时会乱套。S7-1200的模拟量输入模块一般直接组态为对应工程单位,不需要像老式S7-200那样做数字量到工程量的线性换算,这算博图V16相对于早期软件的一个明显便利。
通讯方面,S7-1200本体带一个PROFINET以太网口,可以连触摸屏、上位机和下层IO站。如果项目里需要连接变频器而且走Modbus RTU,就要考虑加一个CM1241 RS485通讯模块,或者用带RS485的S7-1200型号。我在项目中用CB1241 RS485板的方式比较多。
2. 博图V16程序模板的架构:从OB到FC的标准模块化拆分
2.1 程序循环组织与初始化逻辑的安排
在博图V16中新建S7-1200项目时,系统会自动生成一个OB1主循环组织块。很多人直接把所有逻辑全部堆在OB1里,项目刚开始时这样做确实省事,一旦设备数量上来,OB1能膨胀到好几千行程序,调试时找一个阀门逻辑要翻半天,改完还会出现莫名其妙的互相干扰。这种写法在线下改造项目里尤其危险,查问题查得头皮发麻。
我的习惯是让OB1只做一个“调度中心”,每一段工艺逻辑单独放到FC里,OB1按顺序调用这些FC。比如提升泵房由FC100负责,格栅机由FC101负责,生化池曝气由FC200负责,加药系统由FC300负责。每个FC相当于一个独立的程序模块,内部变量使用FC自己的局部变量和公共DB数据。
初始化逻辑放到启动组织块OB100里,例如第一次开机时把泵的轮换计数清零、把PID控制器的手动输出值预设到一个安全开度、把HMI上记录的操作次数清零。OB100在CPU由STOP切换到RUN时只执行一次,在RUN期间再按停止然后启动不会再次执行,这在做设备上电复位逻辑时要特别留意。
定时中断可以放到OB32或OB35这种循环中断组织块中,周期建议设置为100毫秒或200毫秒,当需要精确读取流量计脉冲信号或PID周期扫描时在这里做。
2.2 电机控制FC块的设计要点
我不喜欢在污水处理项目里为每一台电机单独写一套启停逻辑,因为4台提升泵的启停逻辑除了DB地址不同,其他几乎一模一样。更合理的做法是把电机控制做成标准FC块,每次在OB1中调用时传入不同的接口参数。
电机控制FC的接口设计大概包含:
- 命令输入:本地模式选择、远程启动命令、远程停止命令、故障复位命令
- 反馈输入:接触器辅助触点状态、热继电器状态、变频器运行状态
- 输出参数:综合故障信号、综合运行信号、启动脉冲、停止脉冲
- 内部使用DB的背景数据块,记录运行时间累计、启动次数、上次故障时间戳
为什么电机控制要单独做成FC而不是直接放OB1?核心原因是故障处理和联锁逻辑可以统一收口。比如当热继电器动作时,FC内部会立刻将综合故障位置位,同时记录故障发生的时间到DB中,HMI报警画面上就能直接显示“1号提升泵热过载,故障时间XXXX”。如果每个电机都单独写一套逻辑,这些状态很可能在画面上显示得五花八门。
关于电机的本地和远程切换,我一般会在现场控制箱上装一个就地/远程转换开关,并把转换开关状态接入PLC的DI点。PLC程序里这个DI点要么触发“就地模式禁止远程启动”的逻辑,要么作为HMI画面上的模式指示。这个看似简单的开关联锁,真正在调试现场能避免不少安全事故。
2.3 阀门控制与PID调节怎么做
污水处理管道上用得最多的阀门是电动蝶阀和气动蝶阀。电动蝶阀一般带开阀到位、关阀到位两个接近开关或微动开关,有些还会加一个过力矩开关输出。气动蝶阀通常配电磁阀,通过对电磁阀的得失电来控制阀门的开关。阀门控制FC的逻辑和电机控制类似,区别在于阀门关注的是全开全关状态以及开关过程中的状态指示。
PID调节在污水处理项目中主要用三个地方:好氧池溶解氧控制、加药量调节、出水pH调节。在博图V16里,S7-1200提供了PID_Compact指令,这是一个内置的PID功能块,支持手动/自动切换、反作用、抗积分饱和等功能。用起来需要配置几个关键参数:比例增益、积分时间、微分时间、采样周期。刚开始调试时可以把增益设小一些,比如0.5左右,积分时间设短一些,先看系统稳不稳,再慢慢往大了加。总之一句话,PID三个参数在现场调的时候一定要一次只改一个参数,观察足够长的时间,不然永远都调不好。
一个容易踩坑的地方:PID_Compact的采样周期和OB1的扫描周期不一致时会导致输出不稳定。建议把PID_Compact放到一个循环中断中执行,并且采样时间设置为循环中断周期的整数倍。我在曝气控制中常把PID放到OB32中,周期500毫秒,因为对于DO这种大滞后系统,采样周期太短反而会出现振荡。
2.4 故障报警数据组织与时间标签
污水处理项目对报警数量的要求很高,因为一旦出现阀门故障、泵故障、仪表超量程、液位过高这些情况,现场人员需要快速定位。在博图V16中,报警数据一般存放在一个公共的“报警DB”里,每个报警内容包括:报警编号、报警文本、触发电平、是否使能、故障发生时刻的PLC系统时间。HMI上设置的报警显示控件从这些数据中读取并显示。
报警分两级比较实用:一是普通提示报警,比如“1号提升泵电流偏高”,不参与联锁停机;二是故障报警,比如“1号提升泵过载”,在画面置红闪烁,并触发备用泵自动切换逻辑。报警信息的记录如果依赖HMI内的报警组态,前提是HMI变量和PLC变量对应起来。如果把报警全部放到PLC里统一管理,HMI只负责显示,这种方式在后期维护时逻辑更清晰,也是我比较推荐的做法。
3. 触摸屏HMI画面组态与PLC数据联动
3.1 画面结构层次和操作权限设置
污水处理现场的触摸屏一般是西门子KTP700 Basic或KTP1200 Basic这类精智面板,在博图V16的WinCC Basic或WinCC Comfort里组态画面。触摸屏上的画面结构我一般分四层:第一层是流程图总览,显示整个污水厂工艺流程,各个工艺段的设备状态用颜色区分,运行绿色、停止灰色、故障红色;第二层是各工艺段的详细操作画面,例如提升泵房画面、生化池画面、加药间画面;第三层是参数设置画面,包括PID参数、液位设定值、泵的轮换时间和运行时间上限等;第四层是报警画面和趋势曲线画面。
操作权限这一块,污水处理厂对操作员和维护工程师权限划分很敏感。我通常会在用户管理中建立管理员和操作员两个角色,操作用户只能启停设备和修改设定值,不能修改PID参数;维护工程师可以修改所有参数。在画面中的每个按钮和IO域都可以设置授权级别,这样能有效防止现场误操作。
3.2 HMI与S7-1200之间的数据映射
HMI和S7-1200连接通常走以太网,在博图V16的设备和网络视图里创建一个HMI连接,将HMI的以太网口与PLC的PROFINET接口拉到一起,系统会自动建立连接。然后需要在HMI变量表中创建与PLC变量对应的HMI变量,例如把DB1中的“1号泵运行”位变量拖到HMI变量表作为“HMI_泵1运行”变量,关联数据块地址。
关于数据块访问这块有个经验:如果使用S7-1200的DB块,需要在DB属性里取消勾选“优化的块访问”,否则HMI变量将会使用PLC的符号寻址方式访问,这在某些老版本HMI固件上会出现兼容性问题。如果不取消优化块访问,在V16中配置HMI变量时也可以直接选择该符号寻址变量,但跨项目复制或者和老设备通讯时可能遇到问题。稳妥起见,涉及HMI读取的DB一般取消优化访问。
3.3 HMI时间显示不同步的连带问题
搜到一些同行在问KTP面板改完时间后显示“不信任PLC”,其实这是HMI的“时间同步”设置没有配好。西门子触摸屏和PLC的时钟同步有两种方式:一种是以触摸屏时间为主时钟,把时间写入PLC;另一种是以PLC时间为主时钟,触摸屏读取PLC时间。如果面板和PLC都尝试作为时间主站,相互覆盖之后就会出现“不信任”的提示。
正确做法是:在触摸屏的“区域与语言”“日期/时间”设置中,将“访问PLC系统时间”选项打勾,同时把“通过PLC设置时间”关闭。这样HMI每次开机都会从PLC读取系统时间,整个系统的时间基准统一。否则报警记录的趋势,尤其是故障时间戳,会出现前后不一致、无法对上的情况。
还有一个常见问题是HMI上显示的时间总是差8小时。这是因为PLC的时区设置有问题,S7-1200读取的是RTC的本地时间,但上位系统可能默认按UTC时间读取。解决方法是把PLC的时区选择为“UTC+8,中国标准时间”,并把HMI上的时区也统一设置为同一时区即可。
3.4 常见HMI连接失败的排查顺序
HMI连不上PLC,我从现场排查的角度给出一个固定顺序:先看以太网物理连接,网线有没有松动,交换机的指示灯是否正常;再看两个设备的IP地址是否在同一网段,比如PLC是192.168.0.10,HMI就必须设置成192.168.0.20这类同网段地址,网关如果不跨网段设为0.0.0.0就行;接着看HMI连接组态里的“在线访问”是否启用了S7协议;最后看PLC在线诊断中是否有“HMI连接已达到最大数量”的情况,S7-1200同时支持的HMI连接数有限,如果开了上位机、SCADA再连触摸屏,连接数会被占满。
我做过一个项目,调度室的WinCC RT Advanced已经连了PLC,工程师站调试程序也要连,现场HMI再连一次,连接数就爆了,最后在HMI和上位机之间加了一个交换机并合理分配连接,才稳定下来。
4. 电气原理图与PLC项目IO映射:这步做扎实,调试少一半时间
4.1 用IO清单做图纸和程序的共同基准
电气原理图和PLC程序是同一个控制系统的两张脸。IO清单上的每一个点,在电气图纸上对应一个端子或一个回路,在博图V16中对应一个PLC输入输出地址和一个HMI变量。这三者的编号一致性必须严格保证。
我常用的做法是在项目的初始阶段先做一张完整的IO清单表格。表格中包括:序号、信号名称、信号类型、PLC地址、连接位置(现场设备或变送器)、端子号、电缆编号、量程范围、备注。这张表格同时提供给电气设计师和外协工程师,PLC编程时根据这张表来分配地址,画图纸时根据这张表来标注端子。如果你做完IO清单再开始编程画图,你会发现图纸和程序对号入座,极大地降低调试时对图和查线的难度。
以4到20毫安两线制变送器接入AI模块为例,IO清单中要特意标注出“两线制”还是“四线制”,因为这决定了模块通道的接线方式。S7-1200的模拟量模块有两种接线方式,两线制变送器的24V供电由PLC模块自身提供,四线制变送器则由外部供电。接线接错,仪表通道会烧保险甚至损坏模块。这块在图纸上必须画清楚。
4.2 主回路和控制回路的绘图细节
电气原理图主要包括主回路图、控制回路图、PLC输入输出接线图、端子排图、柜内布置图。主回路部分针对电机设备,包含塑壳断路器、接触器、热继电器或电机保护断路器,对于变频器驱动的泵还要画变频器主回路、输入电抗器和输出电抗器。
控制回路中最容易出错的是AC220V回路和DC24V回路的隔离。接触器线圈一般用220V交流,PLC输出DO点是DC24V,所以中间继电器是必用元件。PLC的DO输出接到中间继电器线圈,中间继电器触点再接通接触器线圈。这里要特别注意的是中间继电器的续流二极管不要接反,否则继电器释放时会产生很高的反向电动势,砸坏PLC输出点。
在污水厂这种潮湿、腐蚀性气体多的环境,控制柜的防护等级建议达到IP54以上。图纸上的柜内布置要预留出PLC模块的散热空间,S7-1200的CPU宽度不大,但模拟量模块和通讯模块会占不少导轨空间,选柜子时尽量选宽一档,别省这几百块钱,后面装端子排和走线槽时会感谢当时的决定。
4.3 模拟量信号接线和屏蔽处理
模拟量信号是污水厂自动化中最头疼的部分,因为现场变频器多、泵启停频繁,电磁干扰非常大。4到20毫安模拟量信号线必须使用屏蔽双绞线,屏蔽层要在控制柜端单端接地,另一端悬空。如果两端都接地,反而会形成接地环路,产生共模干扰。博图V16读取到的模拟量就会不断跳变。
S7-1200模拟量模块上一般都有M端和MANA端的概念。模块的测量公共端需要与变送器的负端连接,同时MANA和M也要做正确的等电位连接。接线时如果变送器是隔离型,可以不共地;如果是非隔离型,则必须把信号负端和模块的M端接在一起。这层逻辑如果理解不透,现场会出现“模拟量读数漂移得厉害”的现象,有些人会以为仪表坏了,换一个还是漂,其实问题就出在公共端上。
4.4 从图纸到博图V16的地址分配示例
举一个实际例子,一台曝气鼓风机在电气图上接在1号控制柜的QF5断路器回路,接触器线圈由KA5继电器控制,热继电器的常闭触点接入PLC的DI点I0.7。那么在IO清单上,I0.7对应的信号名是“曝气风机故障”;在博图V16中,PLC变量表里建一个名为“曝气风机故障”的变量,地址为I0.7;在HMI报警画面中,报警变量关联这个I0.7。整个链条的命名统一,后续任何一环出问题都能顺着名字找到另外两环,省去大量翻图纸时间。
5. 调试现场的真实故障与排查思路
5.1 触摸屏只能连接一分钟的通讯问题
有个同行在群里问过“西门子TCP只有每次重启的时候才能连上一分钟”,这个现象看着像偶发,其实背后原因非常典型。九十有八九是IP地址冲突或者PLC的PG/PC通信连接被某个工程站反复占用。S7-1200同时允许的活动连接数是有限的,当多个HMI、编程电脑同时连接时,连接数被占满了,新设备就抢不到连接。重启PLC或HMI后能临时连上一分钟,是因为连接表被清空了,紧接着另一个设备又重新建立了连接,把它挤掉。
排查思路是:先把所有非必要连接断开,只保留触摸屏和PLC,看连接是否稳定;然后逐个加入其他连接设备,找出是哪一个把连接占用完了。还有一种可能是HMI上组态了多个会话,明明只用一个画面,但项目复制粘贴时带了其他设备的连接组态,这种情况要打开“通讯设置”检查每个画面的连接对象。
5.2 博图V16安装HSP报错的常见原因
很多人下载了G120XA或其他新硬件的HSP文件,在V16安装时弹出错误。HSP安装失败最常见的原因是博图V16的版本太旧,HSP文件需要的V16 Update版本高于当前安装版本。解决办法是先打开博图的帮助菜单,运行在线更新,把V16升级到Update 4或更高版本,然后再尝试安装HSP。
另外,安装HSP时必须以管理员身份运行TIA Portal,安装路径不能包含中文,某些杀毒软件会拦截HSP写入系统目录,安装前最好暂时退出安全软件。如果HSP文件损坏,下载后会显示“无效的HSP文件”,一般重新下载即可。遇到HSP安装失败先不要急着重装博图,先用排除法看看这些原因。
5.3 Modbus RTU通讯变频器的参数设置
如果是西门子S7-1200通过CM1241 RS485模块连接G120XA变频器,走Modbus RTU通讯,现场常见的坑有两个。第一是通讯参数不一致,PLC侧MB_COMM_LOAD中设置的波特率、校验位、从站地址必须和变频器完全一致。G120XA侧要设置P2020为PLC设定的波特率,P2021为从站地址,P2022为数据格式,这些都设在1号CP的RS485接口上,具体参数号在变频器手册里都有。
第二个是数据格式导致通讯不上。很多变频器出厂默认是8个数据位、1个停止位、偶校验,也就是8E1。如果PLC侧配置成8N1或8O1,两个设备根本握不上手。在做MB_MASTER读取和写入时,功能码通常用03读保持寄存器、06写单个寄存器、16写多个寄存器。如果通讯总是超时,先拿串口调试工具去看报文,确认CRC校验和从站地址对不对,大多数问题都能定位出来。
5.4 模拟量信号波动和零点漂移的处理
模拟量读数在HMI上跳来跳去,先区分是信号本身波动还是采集通道的问题。方法是在PLC监视表中看这个模拟量通道的原始值,如果原始值稳定,那波动出现在HMI显示或工程量转换环节;如果原始值就在跳,那问题大概率出在信号源到模块前的整个模拟量链路。
处理对策通常有几个方向:屏蔽层单端接地、信号线远离动力电缆、检查变送器供电是否稳定、在程序里加滤波。博图的模拟量模块有组态滤波设置,可以设置平滑化等级;程序里也可以做一个滑动平均滤波器,把最近的10个采样值取平均。但这个滤波不能过度,因为如果采样周期长,又加了强滤波,仪表对现场变化的响应速度会变得特别慢,反而影响控制效果。
6. 程序模板的长期维护和后续拓展
做完一两个项目后,会积累起一套属于自己的程序模板。我个人的维护习惯是每个标准FC都记录一个修改备忘,比如某个电机控制FC在第二个项目中增加了运行时间累计功能,最后在FC块的注释里写明修改原因和时间。这个习惯一开始觉得麻烦,坚持两年后回头看,真的能救命,因为你根本记不住去年顺手改的那几行程序是为哪个设备加的。
模板的跨项目复制在博图V16中也算是常用的功能。可以把某个已经调试完成的FC块整个复制到新项目里,注意同时把相关的全局DB和HMI变量一起复制。复制之前一定要检查FC的接口参数是否引用了新项目的硬件地址,如果引用的是旧项目的I0.0这些地址,新项目里这些地址含义可能完全不同。我的做法是程序块内尽量用符号名访问而不是绝对地址,这样复制后只需在变量表中重新对应即可。
程序版本管理建议用单独的工程文件夹,每次变更后另存为一个版本号。不要直接覆盖原文件,也不要使用“最终版最终版2”这种命名方式。版本号规则可以是在项目名后加日期和序号,例如污水厂项目_20250630_v03,这样随便过多久都能追溯到某一版程序对应的调试状态。
再补充一点,污水处理自动化项目的核心不只是把逻辑跑通,更重要的是系统能在无人值守环境下稳定运行。所以程序模板里一定要预留看门狗逻辑和数据掉电保持功能。掉电保持可以设置DB的属性为“保持性”,这样系统断电重启后,泵累计运行时间、报警历史这些数据不会丢。严格来说,这些细节才是程序模板真正的价值所在——不光是代码能跑,还得经得起现场长期运行的折腾。