水厂WinCC画面制作:从工艺逻辑到变量管理的工程实践
简介一套面向水厂自动化监控场景的西门子WinCC工程项目资源适合从事水处理行业的过程控制工程师、HMI组态人员及WinCC初中级学习者参考。画面围绕两座蓄水池与六口井展开覆盖水位、压力、PH值等关键参数的实时显示、报警提醒与历史记录并包含基于脚本的自动启停与阀门联锁逻辑可借鉴其画面布局、变量归档与PLC通信配置思路。压缩包共470个文件大小191.32MB以rpl项目数据文件、pdl画面文件、sav存储配置为主辅以mdf/ldf数据库、csv趋势记录、cfg配置及txt说明等完整度较高。已有1771人学习下载适合在实际组态或项目交付前拆解参考尤其能帮助理解多蓄水池、多井站的监控结构。1. 水厂WinCC画面不是画图是把工艺逻辑固化到屏幕上一个水厂的值班室十几台工控机同时开着画面上的泵转不转、液位涨不涨、余氯达不达标直接决定水能不能安安稳稳送出去。很多刚接触WinCC的工程师以为做画面就是画图拖几个泵、画几条管道、连几个变量半小时出一张示意图。真到了水厂现场才发现一幅能让人放心值班的WinCC画面难点全在工艺逻辑怎么落到屏幕上——哪个设备该常显、哪个参数要配色、报警弹窗会不会打断当前操作、操作按钮该给谁授权。这就是“水厂制作的WinCC画面”这个标题的真实含义它不是画一张漂亮的监控图而是把水厂的工艺流程、设备状态和测点数据组织成值班员扫一眼就能做出判断的界面。这篇文章写给两类人一类是刚进水厂自动化行业、准备从头搭画面的工程师另一类是已经在做但总被黑屏、红叉、卡顿折磨的集成商同行。2. 先从工艺里长出来水厂监控画面的整体架构怎么定2.1 水厂工艺段拆解画面分区背后的逻辑做水厂画面第一步不是打开WinCC而是先把水厂的工艺流程理顺。常规自来水厂大致分这么几段取水段吸水井、取水泵、加药段药剂储罐、计量泵、投加管道、絮凝与沉淀段混合池、絮凝池、沉淀池、排泥阀、过滤段滤池、反冲洗水泵、鼓风机、消毒段加氯或次氯酸钠投加、清水池与送水段清水池、送水泵、出厂管网、污泥处理段排泥水收集、浓缩池、脱水机。每个工艺段要监控的东西完全不同取水段关心泵的运行状态和吸水井液位沉淀段主要盯排泥周期和出水浊度送水段盯着出厂流量和管网压力。画面分区就顺着这个工艺顺序走。我见过的项目里最合理的方式是画面目录和工艺段一一对应一级总览放全厂工艺流程缩略图二级画面按取水、加药、沉淀、过滤、消毒、送水来分设备操作放在三级弹窗里。这样做的好处很直接——值班员在总览画面看到异常能顺着水流方向一步步点进去定位思路和工艺完全一致。有些工程喜欢把全部设备堆在一张画面上看起来“一屏全览”实际上一旦规模上来图元密密麻麻误操作概率和画面卡顿指数一起涨得不偿失。每个工艺段的核心测点也要在分区阶段就列清楚。液位、流量、压力、泵状态、阀状态、水质仪表浊度、余氯、pH、ORP、电气参数电流、频率这些点位最终都要在画面上体现。我一般会先画一张手写草图把每段的关键设备和仪表标注出来再进WinCC动鼠标。草图阶段改起来只要一分钟进了图形编辑器再改布局拖来拖去半小时就没了。2.2 工程目录与画面层级总览、分区、设备三级结构WinCC的画面管理器支持在“图形”下建子文件夹我强烈建议把画面按三级结构存放。第一级叫“总览”放一张全厂工艺流程图包含关键指标出厂流量、出厂压力、清水池液位、余氯、浊度每个指标下面挂一个数值和状态色块。第二级是各工艺段画面比如“取水泵房”“加药间”“沉淀池”“滤池”“送水泵房”每个画面展示该段所有设备、阀门、仪表和工艺管道。第三级是设备操作画面用画面窗口或弹出窗口实现只放单台泵、单个阀门的操作面板。这三级结构不是拍脑袋定的它匹配的是水厂三个层次的使用者值班员平时盯总览看趋势是否平稳遇到报警后点进二级画面确认是哪个设备出了问题真正的启停操作、手自动切换、频率给定放进三级画面里避免误碰。这个逻辑也决定了变量分组——总览画面上用到的变量集中在系统关键指标里二级画面覆盖该工艺段全部变量三级画面精确到单台设备的全部状态和控制字。画面层级定完之后还有一个容易被忽略的事画面命名。我喜欢用“编号_工艺段_功能”的方式比如“PIC02_取水泵房_主画面”“PIC03_加药间_设备操作”。WinCC画面切换脚本和报警跳转都要引用画面名命名规范化之后写脚本时能少踩很多坑——大小写、下划线、空格这三样是画面跳转失败的三大经典元凶。2.3 基准分辨率与布局规范让画面在不同工控机上不跑偏水厂现场工控机配置参差不齐有的是全新工作站有的是从仓库翻出来的老机器。做画面之前先确定基准分辨率我一般用1920×1080然后按这个尺寸设计所有画面。WinCC图形编辑器里每个画面属性都有大小和缩放模式设置如果现场机器确实是老掉牙的1366×768要么统一换机器要么把基准分辨率定在1366×768而不是依赖画面缩放。缩放功能看起来省事实际运行时会增加CPU负担画面上的文字和图形经过缩放之后也容易出现模糊和错位。我的原则是能用分辨率适配解决的问题不靠缩放硬撑。布局规范方面几个小习惯能显著提升画面质量。工具栏和导航区固定放在画面上方或左侧主工艺区居中报警信息条固定在底部这是水厂值班员最习惯的视线动线。字体统一用同一种中文字体字号不小于12号重要参数用14到16号加粗。图元对齐用网格捕捉网格间距设8像素或16像素管线统一用同一种线型和颜色设备符号要用统一标准——泵用圆形加三角箭头阀门用两个三角加横杆仪表示数用圆加边框。这些东西单看都不起眼但几十幅画面拼在一起统一性就是专业性。提示画面前先把字体、颜色、线型的“默认样式”在WinCC里统一设置好比画完再一处一处改省力十倍。血泪经验别问我怎么知道的。3. 变量与动画连接把PLC点位接到WinCC画面的三个步骤3.1 变量管理的三级分类外部变量、内部变量与脚本临时变量WinCC画面上的每个数字、颜色、动画背后都是一个变量。变量管理做得好不好直接决定画面能不能按期交付。我把变量分成三类外部变量、内部变量、脚本临时变量。外部变量连接PLC地址是画面的数据源比如泵的运行状态、液位计测量值、阀门开度反馈这类变量必须和PLC点位表一一对应。内部变量只存在于WinCC内部不连PLC常用于画面切换标志位、报警抑制开关、累计量中间计算值。脚本临时变量是在C脚本或VBS脚本里声明的变量只在脚本执行期间存在用于传值和计算。变量命名是变量管理里最容易翻车的地方。没有规范的项目里变量名叫“Tag1”“Tag2”的都有画面做到后期根本没法维护。我一般用“工艺段_设备编号_属性”的格式比如“P101_RUN”表示取水泵P101运行状态“LV201_POS”表示加药阀V201开度反馈“AI301_TURB”表示沉淀池出水浊度。命名规范配合注释列三个月后再回来看这个项目自己还能看懂更别提甲方维护人员接手时的感受了。变量数量和类型也要提前规划。一个中型水厂画面外部变量通常在800到1500个之间其中泵阀状态类用二进制变量液位流量压力用浮点数32位阀开度、频率一类用浮点数或整数。二进制变量的采集周期设500毫秒足够浮点数设1秒不要盲目拉高采集频率。WinCC的通信带宽是固定的变量刷新越快PLC和WinCC之间的负载越高最终画面反而会卡。3.2 从PLC点位表生成WinCC变量批量导入的路径手动一个个建上千个变量肯定不现实行业里常见做法是先在Excel里维护好点位表再通过WinCC的变量导入功能或编写脚本批量生成。WinCC不同版本的导入格式有差异最稳妥的做法是先从现有工程里的某一个连接上导出一份变量样例把样例文件的格式摸清楚再按那个格式去填自己的点位表。直接拿网上模板硬套大概率导入报错。点位表至少要包含这些字段变量名、数据类型、所属连接、PLC地址、采集周期、注释。下面是我常用的一份CSV格式样例字段分隔符用逗号首行是表头变量名,数据类型,连接,PLC地址,采集周期(ms),注释 FT_101_RAW_FLOW,浮点数32位,PLC1,DB10.DBD0,1000,原水进水流量 LT_102_INTAKE_LEVEL,浮点数32位,PLC1,DB10.DBD4,1000,吸水井液位 P_101_RUN,二进制变量,PLC1,DB10.DBX8.0,500,取水泵P101运行状态 P_101_FAULT,二进制变量,PLC1,DB10.DBX8.1,500,取水泵P101故障 V_201_OPEN,二进制变量,PLC1,DB20.DBX0.0,500,加药阀V201开到位 V_201_POS,浮点数32位,PLC1,DB20.DBD2,1000,加药阀V201开度反馈 AI_301_TURB,浮点数32位,PLC1,DB30.DBD0,2000,沉淀池出水浊度 AIT_301_RANGE_LOW,浮点数32位,PLC1,DB30.DBD4,2000,浊度报警下限导入完成后不要急着画画面先在变量管理器里做一遍核对。抽查几个关键变量对照PLC程序里的地址和数据类型是否一致。最容易出问题的点有两个一个是数据类型不匹配PLC侧是WORDWinCC里配成了INT另一个是DB块偏移写错DBD4写成了DBD5画面上的数值就完全不对了。PLC地址里D表示双字X表示位。二进制变量对应DBX的位地址浮点数32位对应DBD双字地址整数16位对应DBW字地址——这三个前缀弄混了数据肯定读不出来。3.3 动画连接的标准做法液位、泵、阀门怎么动态化变量连好之后画面对象要做动态化这是WinCC画面制作的核心工作量。先说液位常见做法是把液位计做成一个容器图元用“过程值填充”来动态显示液位高低同时旁边放一个I/O域直接显示数值。填充高度的动态对话框里最小值和最大值要对应液位计的量程。比如清水池液位量程0到8米填充对象属性里最小值填0最大值填8这样液位到一半填充高度就正好是容器的一半比例不会失真。量程设错了画面上液位明明只有两米填充却顶到了罐顶值班员会直接误判。泵的状态显示是水厂画面的重头戏。标准做法是运行状态用绿色表示停止用灰色故障用红色闪烁远程和本地模式用角标颜色区分。颜色的动态化用动态对话框表达式里判断变量值P101_RUN等于1时背景色返回绿色等于0时返回灰色。故障闪烁用C动作或动态对话框配合“闪烁”属性来实现。这里要提醒一句闪烁属性别滥用水厂画面里亮闪闪的东西太多真出紧急报警时反而没人注意得到。我把闪烁权限留给故障和联锁跳闸类报警普通状态变化只用颜色区分。阀门的动态化分两种。开关阀看开到位/关到位两个位变量开到位时阀门符号显示成绿色经开状态关到位时显示成灰色。调节阀看开度反馈变量可以绑颜色渐变或者旋转角度。用动态对话框时注意数据类型转换二进制变量直接用等于1判断浮点变量做范围判断时先确认变量类型统一避免整数和浮点比较时出现意料之外的偏差。更新周期方面状态类动态化用500毫秒模拟量类用1秒。周期拉得太短比如100毫秒画面上的刷新负载会成倍增加老工控机很快就会卡死。4. 报警、趋势与权限让WinCC画面从好看变成好用4.1 报警组态按工艺重要性分级与画面弹窗联动画面能看不是本事能报警、能查历史、能管操作权限才算能用。报警组态是水厂WinCC画面里最体现工程经验的部分。我给水厂项目做报警设计时习惯把报警按四个级别分一级是安全相关报警包括清水池液位过低、送水泵跳闸、出厂余氯过高或过低这类报警要求声音提示加画面弹窗必须值班员手动确认二级是设备故障报警像泵故障、阀故障声音提示加报警列表显示三级是仪表超限报警浊度超高、pH超范围只在报警列表里出现四级是通信类报警PLC断站、变量通信中断这类报警单独一个类别颜色区分开。报警触发变量有一个关键设计尽量用PLC程序里的“事件位”而不是直接用设备状态位。设备状态位在故障期间一直是1如果用上升沿触发报警故障没消除就会反复触发。PLC里做一条逻辑故障发生时置位事件位值班员确认后复位。WinCC侧报警变量就绑这个事件位配合报警记录的触发类型设置能有效避免重复报警和报警刷屏。报警弹窗的联动我一般用全局脚本监测关键报警变量触发时调用“打开画面窗口”函数把对应的设备操作面板弹出来。这里注意弹窗不要抢焦点水厂值班员正在手动操作泵的时候被弹窗打断是很危险的事。报警文本的写法也有讲究。不要写“P101故障”这种只有工程师看得懂的要写“取水泵P101故障请检查电机电流和轴承温度”让值班员不用翻图纸就知道该去看什么。报警参数里设好报警组、报警类别、报警颜色、声音文件确认逻辑在用户管理器里配好权限这套东西才算闭环。4.2 历史趋势与水厂报表归档配置决定查询范围历史趋势是水厂运营追溯的关键功能出了问题要查是几点几分开始超标的靠的就是归档数据。WinCC的变量记录器里先建归档再把要记录的变量拖进归档然后分别设置采集周期和归档周期。采集周期决定数据从PLC读上来多久存一次一般模拟量设1秒状态量设500毫秒归档周期决定存储密度1秒的采集数据直接归档的话数据量太大我一般归档周期设1分钟保留平均值、最小值和最大值。趋势查询的精度和存储时长是矛盾的这是归档配置时要权衡的核心点。存储时长按水厂运营要求来常规做法是保留90天但这个在WinCC里不是设一个天数就完事还要考虑磁盘空间。一个中型水厂每天产生的归档数据量不小我会把归档存储路径指到独立分区或专用硬盘避免系统盘被Windows更新占满导致归档写入失败。另外WinCC的归档管理里要配置自动清理策略超过保留期的数据自动删除不然归档文件越来越大趋势查询会明显变慢。画面上用Online Trend Control控件来显示曲线绑定归档变量后提供时间范围切换按钮常用8小时、24小时、7天三档。趋势控件里的曲线颜色要和画面主色调区分开每根曲线配图例。日报表我一般用Online Table Control配合VBS脚本做交接班时一键生成当天主要指标汇总导出成Excel发到工作群。这块放到第6章再给脚本。4.3 操作权限与操作记录值班、班长、工程师三级水厂对操作权限有硬性要求不是任何人点一下按钮就能启停泵的。WinCC用户管理器里先建角色值班员、班长、工程师。权限等级我用100、500、999三个档位值班员能操作设备启停和调整给定值班长能修改报警限值工程师能修改画面和组态。画面上的按钮、I/O域设置授权属性权限不足时WinCC自动弹登录框输入有权限的账号才能操作。这里有个常见问题按钮授权只做了“显示”没做“操作”导致值班员能看到按钮但点下去没反应还没有任何提示。正确做法是把按钮的“操作”授权打开同时把“显示”授权放开没有权限时点按钮会弹出登录窗口而不是无声无息。操作记录是水厂扯皮时的后悔药。谁在几点几分操作了哪台泵这必须能查。实现方式有两种一种是在按钮或脚本里调用WriteProtect或消息函数把操作事件写进报警记录另一种是PLC侧把操作指令和操作员编号一起上报WinCC记录下来。前者实现快后者追溯更准。我一般两套一起用画面操作事件走WinCC侧记录联锁跳闸事件走PLC侧上报两边一对照基本能把操作链条还原出来。5. 水厂WinCC画面常见问题排查黑屏、红叉与卡顿的根源5.1 画面打开慢、拖动卡顿图元数量与刷新周期现象画面打开要十几秒拖动过程一顿一顿值班员叫苦。原因通常有三个单幅画面上图元数量太多很多图元还带着动态属性画面里嵌了高分辨率图片或超大尺寸的背景图大量变量刷新周期被设置成100毫秒甚至更低。解决单幅画面对象数量控制在200个以内超出就拆分画面背景图压缩成JPG、尺寸压到和画面分辨率一致把模拟量刷新周期统一改到1秒或2秒。还有一个常见做法是用“画面窗口”按需加载进入某个工艺段才加载该段画面不要把所有二级画面全开着。5.2 变量显示红叉或“#####”通信状态与数据类型不匹配现象画面上的数值变成红叉I/O域里显示一串#号。原因WinCC与PLC通信中断、变量地址写错、数据类型不匹配、变量刚组态完还没激活。排查顺序我固定是先看变量管理器里对应连接的图标是不是绿色在线状态不在线就先查网线和通信设置然后打开该变量的属性核对PLC地址和数据类型特别注意DBX位地址和DBD双字地址的区别最后用WinCC的“变量状态监视”功能看变量能不能读到值。画面上单个变量红叉多半是地址或类型问题整个画面上所有变量都红叉大概率是通信断了。5.3 报警不弹窗、重复报警触发变量与确认逻辑现象设备都跳闸了报警列表里没有消息或者一条报警反复出现刷屏。原因触发变量用的是设备状态位而不是事件位故障期间变量持续为1报警不断重新触发报警组态里消息的“触发类型”没设成边沿触发确认变量和PLC侧逻辑没对上。解决把PLC程序改成“故障触发置事件位确认后复位事件位”的模式WinCC报警记录里把单个消息的触发类型设为上升沿触发确认按钮绑定PLC的确认位确保值班员点确认后事件位能复位。这一套逻辑理顺之后重复报警基本绝迹。5.4 历史趋势缺数据归档存储与磁盘空间的坑现象趋势曲线在某个时间段出现大段空白或者查询一个月前的数据什么都没有。原因归档文件所在磁盘空间满WinCC停止写入归档存储路径配置不合理系统重启后路径失效变量在一段时间内被删了又重新建归档ID变了历史数据对不上。解决把归档路径指定到独立分区不要在C盘系统分区下WinCC归档管理里配置自动删除超过保留期的数据删除变量之前先确认是否在归档里使用交接班记录里写明归档配置变更。5.5 换电脑后画面布局错乱分辨率与缩放设置现象同一套工程在办公室电脑上正常拷到现场工控机后画面多出滚动条、按钮错位、文字重叠。原因两台电脑分辨率不一致画面属性里没设缩放模式或者缩放模式设了“无缩放”。解决在WinCC画面属性里为每幅画面设置缩放模式为“按比例缩放”或“自适应缩放”同时把基准分辨率固定下来。这里有个权衡缩放模式能解决错位问题但会牺牲一点性能和显示锐度。我的做法是统一现场工控机分辨率让画面在基准分辨率下满屏运行不依赖缩放这样最稳。注意有些问题看着像玄学比如换个用户登录画面就变了、某台机器上按钮时灵时不灵其实90%都出在变量连接、用户权限和画面分辨率这三个地方。排查时先把这三样排除再考虑去查脚本。6. 把画面做成可维护的产品模板复用、脚本技巧与验收清单6.1 用面板类型封装水泵与阀门改一处全厂生效水厂里同类型的设备特别多几台同型号的取水泵十几台同型号的阀门逐个画完一遍工作量不小后期要改样式更痛苦。WinCC的面板类型Faceplate功能就是干这个用的。我把水泵面板封装成一套外观图形、状态灯、电流显示、频率给定I/O域、启停按钮、手自动切换按钮全部做进面板类型里。画面上需要用到泵的地方直接拖一个面板实例出来绑定对应变量就行。面板类型最大的好处是改模板一次所有实例一起更新。我做过的某水厂项目里二期扩建增加了四台泵从拖实例到绑完变量半天就干完了。6.2 三个值得保留的脚本技巧累计运行时间是设备维护的重要依据。下面这段C脚本放在全局脚本里每500毫秒执行一次给水泵累计运行时间计数// 每500ms执行一次的周期动作累计泵运行时间 int iRunState; int iAccSec; iRunState GetTagBit(P_101_RUN); // 取泵运行状态1表示运行 iAccSec GetTagWord(P_101_ACC_SEC); // 取当前累计秒数 if (iRunState 1) { iAccSec iAccSec 1; // 运行中则每次加1即0.5秒 SetTagWord(P_101_ACC_SEC, iAccSec); if (iAccSec 3600) // 满3600次即1小时 { SetTagWord(P_101_ACC_HOUR, GetTagWord(P_101_ACC_HOUR) 1); SetTagWord(P_101_ACC_SEC, 0); // 秒数清零重新累计 } }这段脚本读取泵的运行状态位每执行一次把内部变量P101_ACC_SEC加1满3600次转换到小时变量。要注意累计结果存在WinCC内部变量里PLC重上电不影响累计值但如果WinCC电脑重启数据会丢。要彻底保存得在PLC侧做累计画面只负责显示。日报表导出用VBS脚本更顺手放在按钮事件里 报警日报导出把当天全部报警记录写入CSV Dim objAlarm Dim strFile strFile D:\Report\Alarm_ Year(Now) Month(Now) Day(Now) .csv Set objAlarm ScreenItems(AlarmControl1) objAlarm.Export(CSV, strFile, 0) 0表示导出当天全部消息 MsgBox 报警日报已生成 strFileWinCC画面让我最受益的一个技巧是报警声音联动。报警控件属性里配置不同报警级别对应不同WAV文件一级报警用急促的连续提示音三级报警用轻缓的单声提示。值班员光听声音就知道问题严重程度这在嘈杂的泵房里非常实用。6.3 验收画面是否合格的五个检查点交付前我习惯按这五条过一遍第一通信在线状态检查所有连接图标绿色随机挑20个变量读值与现场仪表对照第二逐条触发测试报警从报警列表到声音到画面跳转全部验证不测报警就不算验收第三趋势查询测试查90天前的归档数据确认数据完整性和曲线显示正常第四权限账号实测用值班员、班长、工程师三个账号分别操作确认权限边界生效第五画面切换流畅度测试连续操作半小时看有没有卡顿和内存占用异常。做水厂画面这些年我踩过最大的跟头是前期花太多精力把画面做得漂亮结果值班员用起来不顺——不是弹窗碍事就是按钮藏太深。后来我把每一次交付都当成替值班员做的第一版先想他们几点上班、几点抄表、什么时候最紧张再想画面长什么样。这样的画面不用多惊艳但一定耐用。希望帮到你。本文还有配套的精品资源点击获取