做水处理项目这些年,我最大的感触就是:生化段是整个系统中仪表最多、逻辑最复杂、最考验自动化功底的一环。泵和阀门的启停只是基本功,真正磨人的是曝气控制、回流比例、药剂投加这些联动逻辑,再加上现场仪表的品质参差不齐,调试周期往往比想象的翻一倍。这篇文章把我最近完成的一个滤液生化段项目完整梳理一遍——西门子1500PLC配合博途V16编程,上位机用WinCC 7.5做监控,工艺覆盖厌氧、缺氧、好氧三部分。从硬件选型、程序框架、控制策略到上位机组态,包括现场踩过的坑,都会讲到。如果你手头正好有类似项目要启动,这篇文章能帮你提前扫掉至少一半的障碍。
1. 项目背景:滤液生化段的控制难点在哪
1.1 工艺概况与自动化需求
滤液生化段处理的对象是垃圾渗滤液或高浓度工业废水预处理后的滤液,水质波动大、COD和氨氮浓度高,所以工艺路线普遍采用厌氧—缺氧—好氧的组合形式。厌氧池需要保持稳定的厌氧环境,利用厌氧菌将大分子有机物分解为小分子;缺氧池通过反硝化作用去除总氮,需要控制回流硝化液的流量和碳源投加量;好氧池则是硝化细菌将氨氮转化为硝态氮的关键场所,曝气量必须维持溶解氧在合理区间。
这意味着自动化系统要管的事非常杂:提升泵多台联动与倒泵、内外回流泵的变频调节、鼓风机曝气控制、加药泵的流量比例投加、各类电动阀门的顺序动作,以及对液位、流量、溶解氧、ORP、pH、污泥浓度等几十路模拟量信号的实时采集与监视。再加上滤液水质波动大,靠人工盯盘根本反应不过来,必须由PLC自动完成大部分调节工作,上位机负责监视、报警、趋势分析和参数下发。
从控制规模看,这个项目有数字量输入输出各几十点、模拟量二十多路,程序包括泵控、阀控、PID调节、顺序逻辑和报警处理,差不多需要一个中型PLC站。站在维护角度,选型还得考虑后期扩展:预留一定的I/O余量、通讯接口和程序空间,方便后续增加在线仪表或调整工艺段。
1.2 为什么选PLC+SCADA两层架构
有些同行问过我,这种项目用触摸屏不就行了,为什么非要上一套WinCC?我的判断标准很简单:如果只是本地单台设备操作,触摸屏完全够用;但如果涉及到多池联动、历史曲线分析、报警归档、报表打印,触摸屏的短板就暴露出来了——存储空间小、趋势分析弱、报警查询麻烦,而且后期想接厂级MES或OPC接口非常费劲。
这套系统采用PLC加SCADA的两层架构:底层S7-1500PLC负责现场设备控制和核心调节逻辑,不依赖上位机也能独立运行;上层WinCC 7.5做集中监视、操作记录、历史归档和报表。PLC和WinCC之间通过工业以太网通信。这种做法的好处是:就算上位机死机、网络中断或者交换机故障,现场工艺还能依靠PLC继续稳定运行,不会出现生产中断。对于水处理这种不允许停的工艺场景,这个独立运行能力是必须的。
2. 硬件选型与系统架构设计
2.1 S7-1500 CPU与I/O模块选型
CPU选了西门子S7-1500系列的主力型号1513-1 PN。这个型号带一个PROFINET接口,程序容量和运算速度对生化段这类中型项目绰绰有余,而且集成的诊断功能比老款S7-300强太多。选择之前我先做了IO清单,把每个信号类型、数量、备用通道都列清楚:DI约60点、DO约40点、AI约22路、AQ约6路。按余量放大15%到20%后,1513的扩展能力完全覆盖,连机架扩展都不用做,直接中央机架加本地模块就能搞定。
数字量输入模块选了16通道的6ES7521-1BH10-0AA0,带硬件滤波和通道诊断。数字量输出选16通道晶体管型,驱动中间继电器再去控制接触器和电动阀,不直接带负载。模拟量输入模块选8通道的6ES7531-7KF00-0AB0,支持4到20毫安、热电阻和热电偶,每个通道可以在博途里单独组态量程和滤波时间。模拟量输出选6ES7532-5HF00-0AB0,输出4到20毫安信号去控制变频器和计量泵。
这里有个选型心得:模拟量输入模块尽量选隔离型,虽然贵一点,但对现场干扰、地电位差导致的信号漂移抑制效果非常明显。滤液生化段现场经常有变频器、风机、搅拌机等大功率设备,电磁环境很差,模拟量模块的隔离性能直接影响数据的可信度。
2.2 分布式IO与网络规划
生化池和加药间离电气控制室有一段距离。如果所有电缆都拉到中央机架,一方面电缆敷设量大,另一方面强弱电共槽容易干扰。所以项目里用了两套ET200SP分布式IO站,通过PROFINET接入CPU:一套放在生化池现场,管液位、DO、ORP仪表和搅拌机控制;一套放在加药间,管加药泵和流量计。每台ET200SP配IM155-6 PN ST接口模块,I/O模块根据点位需求灵活组合,成本比中央机架扩展低,布线也清爽。
网络拓扑按星型结构走,一台24口工业交换机把PLC、操作员站、工程师站、两台分布式IO和变频器网段连在一起。PROFINET的IO设备名、IP地址必须在博途里组态并分配,这个步骤容易漏,后面调试章节我会细说。另外交换机建议选带网管功能的,方便以后划分VLAN隔离变频器通讯和上位机监控,调试时也能通过端口镜像抓包分析故障。
关于变频器通讯,项目里鼓风机和回流泵的变频器都支持PROFINET,有走通讯字控制的和走硬接线4到20毫安控制的。我最后定为:关键设备用硬接线启停加模拟量给定频率,保证可靠性;非关键的搅拌机用PROFINET状态监视,只读数据,不参与控制。这样既控制了风险,又减少了编程量。
2.3 上位机版本澄清:WinCC 7.5与博途V16怎么配合
很多刚接触西门子生态的工程师会把博途V16自带的WinCC Professional和独立的WinCC 7.5搞混。这里我解释清楚:博途V16里的WinCC Professional是TIA框架内的组态环境,适合做面板和单站SCADA;WinCC 7.5是独立的SCADA软件(SIMATIC WinCC V7.5),功能上更偏向大型过程监控,历史归档、报警管理、冗余方案更成熟,有自己的项目库和SQL Server数据库系统。
这个项目上位机用的是WinCC 7.5,PLC程序用博途V16开发,两者是分开的工程。它们之间靠通讯协议配合:WinCC 7.5通过S7驱动或者OPC UA访问1500PLC数据。这个组合在西门子体系里非常常见,一个典型的现场配置是:工程师站装博途V16负责PLC程序维护,操作员站装WinCC 7.5跑监控画面。条件有限时也可以一台电脑装两套软件,但我强烈不建议这么干——博途和WinCC各自依赖的运行时服务容易互相冲突,还是物理分开更省心。
3. 博途V16程序框架与核心逻辑
3.1 OB块规划与中断任务分配
程序框架是PLC工程的骨架,骨架搭得好不好直接影响后期调试和故障查找。这个项目在博途V16里按功能把组织块分得很清晰:
OB1主循环负责扫描所有设备控制块和模拟量处理块;OB35定时中断用来执行PID调节,我把周期设置为200毫秒,适配DO、流量这些慢变量的采样节奏;OB100暖启动组织块负责上电初始化,将设备控制块的运行模式统一复位到停机状态,累计量参数从掉电保持区恢复;OB10日期时间中断用来做设备定时轮换和报表数据快照。
诊断相关组织块一个都不能少:OB82设备诊断中断、OB86站故障中断、OB122 IO访问错误中断。S7-1500对这类错误处理很严格,如果IO设备掉站或者模块通道短路,没有对应OB的话CPU会直接进入STOP。实际调试中曾经因为一个ET200SP掉站导致CPU停机,连上位机数据显示直接消失,后来补上OB86并把故障信息写入报警DB,才彻底解决。博途V16里组态组织块很简单,右键选中CPU的“程序块”节点,在下拉里添加所需要的OB就可以了,不需要额外写代码。
3.2 设备控制块:泵阀FB的灵活复用法
现场设备看一眼很多,但抽象出来无非就是三类:泵、阀门、风机。与其每个设备各写一段逻辑,不如做几个通用控制功能块,然后用多重背景或实例化方式复用。项目里我封装了FB_DeviceCtrl,输入参数包括自动/手动切换、启动停止命令、连锁条件、故障复位;输出包括运行反馈、故障状态、运行时间累计。内部逻辑做了几个关键处理:
启动时序上,先检查无故障和连锁条件满足,再置位输出,同时启动200毫秒反馈监视定时器,到时间没收到反馈就报“反馈丢失”并自动断开输出。停止时序反过来,先断输出,再等反馈消失。这种处理能有效避免接触器粘连、断线等现场问题被当成正常启停。
手动自动切换采用无扰动切换:手动模式下输出跟随面板按钮,自动模式下输出由程序逻辑和连锁条件决定。切换瞬间不会改变当前输出状态,防止设备突然启停。运行时间累计用的是分钟累计,每10秒累加一次再写入保持性DB,掉电不丢失。累计时间用来做泵的定时轮换和预维护提示,对延长设备寿命很有帮助。
这功能块一共被实例化了十几次,泵、阀门、搅拌机通用,管脚映射到各自的数据块,程序量比原来一台设备一段逻辑的方式少了一半不止,而且逻辑完全一致,后期查问题也方便。
3.3 模拟量处理:从原始值到可靠工程值
模拟量是生化段最容易出鬼的地方。我在程序里写了一个通用的模拟量处理功能块,负责把AI模块的原始整数值转换成工程值,同时做断线、超量程和变化率检测。以4到20毫安信号为例,在博途里把AI模块的测量范围组态为4到20毫安后,4毫安对应整数值0,20毫安对应27648。此时工程值转换公式就是:
工程值 = 量程下限 + (原始值 / 27648) × (量程上限 - 量程下限)
断线检测我按照原始值小于553设置报警,这个值对应过零点附近的低电流状态,避免信号线被剪断或仪表掉电时假数据进入控制逻辑。对液位、压力这类关键仪表,我还会加一个变化率限制:相邻两扫描周期工程值变化超过设定阈值就判定信号异常,冻结上一周期有效值并输出报警。因为滤液生化池的液位变化不可能一秒内跳一米,出现这种数据一定是仪表或者线路出了问题。
为了防止现场干扰造成的数据抖动,我在硬件组态里设置了0.2秒的通道滤波,程序里又加了一阶惯性滤波,系数取0.3。经验上,生化段模拟量滤波不能太强,否则PID调节器看到的数值滞后太大,容易诱发震荡。这个系数可以做成上位机可调参数,调试时根据现场曲线微调。
3.4 生化段三套核心控制策略
这个项目最核心的控制逻辑集中在DO溶解氧控制、内回流比控制和碳源投加控制三块,分别对应好氧、缺氧和厌氧三段的工艺需求。
好氧池DO控制采用“前馈+反馈”复合策略。前馈部分根据进水流量按比例估算所需风量,反馈部分是PID_Compact根据DO仪表实测值与设定值偏差修正风机频率。这样既解决了纯反馈控制滞后性大的问题,又保证了稳态精度。PID_Compact在OB35里周期调用,输出限幅在30%到100%,下限限幅是为了防止风机在临界喘振区运行。整定过程我习惯先纯手动给定频率,记录当前DO稳定值,再切成自动让PID在相近工作点做自整定。
内回流比控制要求硝化液回流量跟随进水流量变化。程序里把回流比做成上位机可设定值,默认200%,PLC根据进水流量乘回流比得到回流量设定值,再用一个PID闭环调节回流泵频率。调试时需要注意回流泵频率变化对流量检测的滞后,PID参数不能太激进,否则回流管路的流量波动会反过来影响好氧池DO,造成两个回路互相干扰。
碳源投加控制采用流量比例计算加上ORP修正。基础投加量按进水流量的比例计算,缺氧池ORP作为修正信号:ORP偏高说明反硝化电子供体不足,适当增加乙酸钠投加量;ORP偏低则减少。这套策略比单纯固定比例投加适应性强很多,能有效应对滤液水质波动。药剂投加全部走加药间的隔膜计量泵,频率给定由AQ模块输出4到20毫安信号控制。
4. WinCC 7.5画面组态与联调细节
4.1 画面布局与操作层级
WinCC 7.5的画面设计遵循“总览—分站—设备”三层结构。登录后进入全厂工艺流程总览,显示水线从进水到出水的简化框图,主要设备用动态图形符号展示运行状态,仪表值实时刷新。点击具体设备或工艺段可以进入分画面,分画面按照生化池、加药间、风机房三个区域划分。
每一张分画面都遵循相同的布局规范:顶部是公共报警条,显示当前最新报警及确认按钮;中间是工艺流程图和设备操作区;底部是公共返回按钮和当前用户信息。设备操作区里泵和阀门的图标支持直接用鼠标点击弹出操作面板,面板上有手动自动切换、启动停止按钮、当前状态指示、故障复位按钮和运行时间显示。
一个实操细节:设备操作面板不要在画面切换时刷新变量初始值,否则操作员切回来时看不到设备真实状态。我的做法是面板做成弹出式窗口,运行时动态加载,关闭时释放资源。WinCC里窗口属性选“浮动窗口”,变量连接用直接连接方式,不经过中间变量,这样响应最快。
4.2 通信组态与变量映射
这是整个项目里最容易被绊倒的一步。WinCC 7.5连接1500PLC,物理层只要网络能通就很简单,但软件层的坑一个接一个。首先在WinCC变量管理里新建S7驱动连接,填入PLC的IP地址,连接参数里机架号填0、槽号填1。这个槽号让很多从S7-300转过来的老工程师翻车——S7-300习惯填2,S7-1500却是1,填错就会一直显示“设备无连接”。
更隐蔽的问题是PLC侧没有允许远程访问。默认新建的S7-1500DB块是优化访问属性,变量没有绝对地址,WinCC 7.5的S7驱动访问不了。解决方法是:在博途里选中需要上位机读取的DB块,属性里把“优化块访问”取消勾选,编译后就能看到DBD偏移地址;同时在CPU属性“防护与安全”里勾选“允许来自远程对象的PUT/GET进行通讯访问”。这两个设置缺一不可,而且DW偏置不同步也会导致数据错位,所以在WinCC变量表里映射地址时,一定要和博途DB块里的实际偏移保持一致。
还有一个容易忽略的点:WinCC 7.5的浮点数变量类型是FLOAT,对应PLC的REAL类型,两者都是32位IEEE754,直接对应没问题;但整型变量要注意字节序,WinCC里整型默认为大端序,和1500的默认一致,一般不会出问题。万一出现数据错位,优先检查变量地址和数据类型,不要在画面属性里反复折腾。
4.3 报警、趋势与报表的配置方法
报警系统是生化段操作员最依赖的功能,我把PLC里所有故障和工艺报警集中到一个报警DB里,每个报警占一个BOOL位,WinCC里用“位消息”方式组态对应报警变量。这样做的好处是PLC侧程序逻辑清晰,上位机侧只需批量导入变量,报警文本、优先级、触发值全部可在WinCC组态里维护。
报警类别分了“设备故障”“工艺报警”“系统消息”三个等级,不同等级用不同颜色和声音提示。设备故障优先级最高,需要操作员确认并处理;工艺报警次之,提示参数越限;系统消息只是记录操作行为和状态变化。报警记录里我加入了设备名称、故障类型和PLC时间戳,WinCC的报警控件可以按时间、类别、优先级过滤查询,操作员找人很快。因为WinCC 7.5的报警数据存在SQL Server里,长时间运行要定期做数据库维护,套餐里我会顺手做一份数据清理任务。
趋势画面做了实时和历史两套。实时趋势用WinCC趋势控件,显示DO、进水流量、回流流量、风机频率等关键变量最近一小时变化曲线;历史趋势支持时间范围选择,数据来自变量归档。归档周期设置为1秒,存本地硬盘并按天切割文件。如果周期太快,SQL Server压力大;太慢,曲线细节丢失。1秒对水处理生化段来说是验证过的平衡点。报表系统用WinCC的报表设计器做了日报表和月报表,统计每日进出水流量、累计运行时间、药剂消耗量,可以选择时间段导出Excel,基本能覆盖运营方的日常管理需求。
5. 调试实录:那些坑我都替你踩过了
5.1 WinCC连不上1500的经典原因
这个故障几乎每个新项目都会遇到一次,现象是WinCC变量管理里连接状态有时显示正常,但画面数值不会刷新,或者直接显示离线。我的排查顺序是这样的,你也可以直接照抄:
先确认物理链路,从工程师站Ping操作员站的PLC地址,能通再谈协议。然后打开博途,检查PLC的CPU属性里有没有勾选允许PUT/GET访问。第三看DB属性,如果DB块里变量没有偏移地址,说明还是优化访问,需要取消优化访问并重新编译。第四检查WinCC连接参数,机架号和槽号填的是否0和1,不要照搬S7-300的习惯填2。最后用WinCC变量管理里的“测试”功能强制读写一个BOOL变量,能通就说明基本OK。
之前我还遇到过一个很刁钻的问题:WinCC连接参数全部正确,但只有部分变量能读,后来发现是博途里某个DB块编译后偏移地址变了,WinCC变量表没同步更新。所以这里提醒一点:PLC程序一旦改动并重新编译,下载后务必在上位机上做一次变量地址校对,宁可多花五分钟,也别等投运了再捅娄子。
5.2 PID自整定失败现场
第一次调试好氧池DO控制时,PID_Compact自动整定跑了一半报错,提示“无法确定过程模型”和“执行器输出饱和”。当时我先手动把风量调到45%,DO稳定在1.2毫克每升,然后设定值设到1.5,理论上整定应该是能跑的。但风机频率下限限幅保持在30%,风量低不下也高不上去,过程对象的激励范围太窄,整定算法没法清楚地识别过程动态。
解决干脆利落:把PID输出下限临时改为0,让风机输出可以全范围调节,自整定结束后再恢复30%限幅。另外整定期间要把前馈旁路,否则前馈输入会把设定值的激励干扰掉,整出来的参数根本没参考意义。整定完成后我看了一下内部参数,比例增益和积分时间都落在合理范围,最终自动模式下DO波动控制在正负0.1毫克每升以内,效果相当满意。
这里要直接说一个经验:PID自整定不是万能的,它只是帮你算出初始值。不同季节水质变化后,DO回路参数经常需要手动微调。我在上位机做了个“PID参数调整”画面,把比例增益、积分时间、微分时间、输出上下限全部显示为可设置变量,现场工艺员就能微调,不用每次喊工程师抱电脑过去改程序。
5.3 博途V16使用中的几个小陷阱
版本兼容性是个老生常谈但总是踩坑的点。V16打开老版本程序需要逐级转换,V14直接跳V16虽然很多时候能成功,但碰到特殊指令或老硬件会编译不过。转换前一定先备份原版,有条件就在虚拟机里试转换,免得现场改到一半崩了,连原始程序都找不回来。
组态PROFINET IO时,设备名和IP地址必须和现场实际一致,PLC启动后发现IO设备掉站会报OB86。现场曾经出现过设备名分配错导致分布式IO站通讯不上的问题,排查了半天,最后用博途的“可访问设备”功能扫描网络发现两台ET200SP的设备名一模一样。所以调试第一步就应该给每台IO设备设置唯一、便于识别的设备名,并统一记录IP地址分配表。
我强烈建议在开发初期就把变量注释、DB结构体说明、FC输入输出注释写清楚。博途V16对注释和结构化管理支持很好,这些元信息不占多少资源,但对后期维护帮助极大。半年后自己回头看程序,注释就是最好的记忆备份,更别说交付给现场维护工程师了。
5.4 常见问题速查表
| 问题现象 | 排查要点 | 解决措施 |
|---|---|---|
| WinCC连不上1500 | PLC IP、PUT/GET开关、DB优化访问、槽号设置 | 按槽号0/1填,取消优化块访问,重新编译下载 |
| 画面数值显示空白 | 变量地址错位、数据类型不匹配 | 比对博途DB偏移与WinCC变量地址,统一REAL/FLOAT |
| 泵按钮误动作 | 画面切换时变量初始化 | 按钮用瞬时脉冲信号,PLC侧做上升沿/下降沿控制 |
| DO曲线震荡 | PID参数不合适或滤波过强 | 手动试验确认工作点,重新自整定,检查信号滤波 |
| 模拟量跳变 | 屏蔽接地不良、滤波时间太短 | 检查信号线屏蔽层单端接地,调大通道滤波时间 |
| ET200SP掉站导致CPU停机 | 缺少诊断OB | 添加OB86、OB122,记录故障设备名和站点号 |
| 开关量反馈抖动 | 接触器电弧、机械振动 | 设置DI滤波时间,PLC内增加反馈稳定延时 |
| 上位机归档越来越大 | SQL Server数据库膨胀 | 设置归档切割周期,定期执行数据库整理 |
6. 个人体会与收尾建议
项目收尾后我复盘了一下,滤液生化段这套系统的难点真的不在某一个单点上,而是工艺、仪表、程序、上位机四个系统的咬合。做DO控制必须懂硝化反硝化的基本逻辑,调回流比必须明白水质波动对工艺的扰动,而仪表数据的可信度又直接决定了PID能不能收敛。调试全程我用得最多的工具其实是博途的在线监视和WinCC的趋势曲线——把DO、风量、进水流量、回流流量几条曲线叠在同一个画面上看,工艺问题和控制问题几秒钟就能分辨出来,比抱着万用表一个个查高效得多。
如果你也要做类似的水处理生化段项目,我的建议是:先把IO表和通信方式定死,再动程序;把设备控制块和模拟量处理块做成通用模板,未来同类型项目直接复用框架,只换I/O配置和工艺参数。这套思路每次都能帮我把项目周期压缩至少四分之一,也让我有机会在调试阶段多花时间打磨控制效果,而不是赶时间应付图纸。
最后再分享一个实操小技巧:WinCC操作员站电脑上,建议把屏幕休眠和系统更新设置为“从不自动执行”,水处理项目连续运行几个月不关机很正常,系统自动重启一次就会造成监控中断。还有PLC电池和WinCC的磁盘空间要定期检查,这类基础工作往往比高深的技术更能避免生产事故。项目交付不光是程序跑通,给运营方一份清晰的操作手册和周期维护清单,才是真正负责任的收尾。