简介:这是基于西门子WinCC平台的水厂监控画面组态项目,面向工业自动化工程师与SCADA学习人员,定位解决两个蓄水池、六个水井的实时水位、水质、压力等关键参数的可视化监控难题。包内共470个文件,核心类型包括pdl画面文件、rpl运行记录、sav状态存储、csv数据导出,并配以mdf/ldf历史数据库和cfg配置文件,较为完整地呈现了WinCC项目从画面设计、变量归档到报警机制与PLC通信配置的整体工程结构。压缩包整体约191MB,已有1771人学习。通过该项目可直观理解蓄水池动态图表、水井抽水状态等画面设计思路,也可参考其中脚本驱动的阈值报警、自动补水等联锁逻辑的落地写法,对熟悉WinCC组态开发、从事水处理或市政供水领域HMI建设的人员具有直接参考价值。
1. 水厂WINCC画面:一个常被低估的组态项目
很多人觉得做WINCC画面就是把阀门、水泵、管道拖到画面上,连上变量就算完事。但真到水厂项目验收时,画面层级混乱、泵组操作逻辑对不上工艺、报警只响一次就再也不弹——这些状况我见过太多次。A同学第一次做某水厂的升级改造项目,花了三周把画面画完,结果业主打开一看:加药间画面找不到计量泵,中控室大屏上趋势曲线不刷新,报表导出来是空的。问题不在于不会拖图元,而在于组态之前没有把水厂工艺、点位清单和画面结构想清楚。这篇方案围绕WINCC在水厂监控场景下的完整落地路径展开,从点位梳理到画面设计、脚本联调再到验收答辩,适合做自动化课设、毕设或正在接水厂类组态项目的读者直接参考。
2. 需求与点位梳理:先把工艺图变成变量清单
2.1 水厂工艺段拆解与画面分层
水厂监控画面不是把整个工艺画在一张图里就完事。常规水厂至少包含取水泵房、加药间、混凝沉淀池、滤池、清水池、送水泵房这几个工段,每个工段的设备类型和控制逻辑差异很大。如果只做一张大总览图,设备密集到看不清,操作权限也没法分。我一般会把画面分成三层结构:
第一层是工艺总览画面,显示全流程的简化工艺图,只标注关键仪表数值和设备运行状态;第二层是分工艺段画面,比如单独的加药间画面、泵房画面,包含该工段所有设备、阀门、仪表和操作面板;第三层是设备级弹出画面,点击某个具体的泵或阀,弹出操作面板,包含启停按钮、状态指示灯、电流、频率、累计运行时间等参数。这样分层的直接好处是:中控室值班人员在大屏上看总览,巡检人员在现场操作终端上进入分画面,权限和操作路径都清晰。
画面分层确定后,紧接着要梳理的就是每层画面上放哪些元素。很多课设做不好,就是因为在总览画面上把所有变量全塞进去了,导致画面切换时加载卡顿,运行时变量刷新跟不上。通常每张画面上的动态对象数量控制在四十个以内,超出就要拆分子画面。这是经验值,不是硬标准,但用下来确实能减少画面刷新延迟。
2.2 点位清单的整理规范与数据表设计
点位清单是整个WINCC项目的根基。没有点位清单直接开画,画到一半必然返工。点位清单的核心字段包括:点号、描述、所属工段、信号类型、量程上下限、工程单位、对应PLC地址、报警级别。水厂项目里最容易漏掉的是报警级别和量程上下限这两栏,后面组态报警记录和趋势曲线时全都要用。
点位清单建议用Excel维护,每行一个点位,按工段分Sheet。下面是一个典型的加药间点位片段:
| 点号 | 描述 | 信号类型 | 量程 | 单位 | PLC地址 | 报警级别 |
|---|---|---|---|---|---|---|
| AI-1101 | 1#计量泵频率反馈 | AI | 0-50 | Hz | DB10.DBD4 | 无 |
| AI-1102 | 加药罐液位 | AI | 0-2 | m | DB10.DBD8 | 高/低 |
| DI-1101 | 1#计量泵运行状态 | DI | 0/1 | - | DB10.DBX12.0 | 无 |
| DO-1102 | 1#计量泵启动命令 | DO | 0/1 | - | DB10.DBX14.0 | 无 |
| AI-1103 | 进水流量 | AI | 0-1000 | m³/h | DB12.DBD0 | 低 |
这里有一个关键点:WINCC变量管理里建的变量名最好与点位清单的点号一一对应。比如AI-1101在WINCC里就命名成AI_1101,描述栏写完整中文。这样后续写脚本、做报表、排查通讯问题时,看名字就知道是哪个信号,不用反复翻对照表。我见过用中文拼音缩写命名变量的,当时写得爽,三个月后维护时根本猜不出含义。
点位清单整理完后,还有一个常被忽略的动作:把PLC侧的符号表导出,与点位清单逐行比对。操作步骤是先在PLC编程软件里导出符号表,然后Excel里用VLOOKUP按地址匹配,检查哪些地址两边不一致。通常翻车的地方在于模拟量通道地址偏了一位,或者开关量打包在了同一个字节里,这类问题在现场调试时最难查,提前比对能省出至少一天时间。
3. 画面结构与模块设计:主画面、泵组、加药间的三级跳转
3.1 画面层级与导航逻辑设计
画面分好层之后,接下来要解决的是画面之间怎么跳转。WINCC里画面跳转有三种常用方式:按钮直接切换画面、通过对象的事件触发切换、用脚本动态计算目标画面名。水厂项目里推荐前两种结合:总览画面到分画面用固定按钮,分画面到设备面板用对象点击事件。
导航逻辑设计上最忌讳「跳得进去、跳不回来」。每一张子画面右上角必须放「返回上级」按钮,设备级面板上同时放「关闭」和「返回工艺画面」两个按钮。这个在设计阶段就要列成规则写进项目说明里,否则画着画着就漏了。
另一个实用的设计是画面权限。水厂的中控室和现场操作站面对的是一套项目,但操作权限不同。通常做法是用WINCC的用户管理器建三个角色:观察员(只能看不能操作)、操作员(可以启停设备)、管理员(可以修改参数和画面)。在画面属性里给设备操作按钮设置授权,按钮的授权属性填上对应的操作权限级别。这样画面本身不需要做两套,一套工程文件直接部署到不同站点。
3.2 泵组画面与设备操作面板的实现
泵组是水厂里操作最频繁的对象。取水泵房和送水泵房都有多台泵并联运行,画面上要体现的是:每台泵的运行状态(运行/停止/故障)、当前频率或电流、累计运行时间。如果是恒压供水场景,还要在画面上放一个PID调节的给定值输入框。
设备操作面板做成弹出窗口是比较稳妥的做法。双击泵电机图元,弹出一个面板窗口,上面放了启动、停止按钮,指示灯,频率设定输入框和当前反馈值显示。启动按钮的鼠标动作里写一段VBS脚本,把对应的DO变量置1,同时把启动时间写到另一个变量里作为累计运行的起点。
水厂泵组有一个特有的设计问题:泵的启停顺序。多台泵不能同时启动,会有电流冲击;也不能频繁启停,会损坏设备。所以在操作面板上还要做一个「联锁保护」提示区,读取PLC侧计算出的泵运行台数和运行状态,当风量为满负荷时,面板上的启动按钮自动置灰。这个问题在很多课设里常被忽略,但业主一定会问。
3.3 趋势曲线与报警归档的组态要点
趋势曲线是水厂值班人员最依赖的功能。他们看一条进水流量曲线,就能判断当前工艺是否稳定。WINCC的趋势控件组态不算复杂,但要注意三点:趋势控件的归档变量选择、时间范围设置、曲线颜色区分。
正常情况下,进水流量、出水浊度、加药量、液位这几个关键参数要放到同一张趋势画面里。时间范围默认设置成24小时,操作员可以在画面运行时通过按钮切换成1小时或者7天。颜色上,流量用蓝色、浊度用红色、液位用绿色,这个配色规则在全项目里统一。
报警归档方面,建议使用WINCC自带的报警记录编辑器,而不是自己画报警灯。把点位清单里「报警级别」字段标为高/低的变量,逐个添加到报警记录里。每个报警绑定三个动作:画面上弹报警提示、报警记录里落一条归档、蜂鸣器响一声。报警确认(ACK)按钮放在报警提示窗口上,值班人员确认后报警闪烁状态消除,但归档记录保留。
这里有个水厂项目的特殊点:水泵的过载报警很容易在启动瞬间误报。因为电机启动电流比额定电流高好几倍,如果报警限值设得太紧,每次启动都会触发过载报警。处理办法一般有两种:一是把过载报警的延时时间设置成5秒以上,二是把报警限值放宽到额定电流的120%到150%。通常做法是在报警记录里给对应的模拟量报警设置一个「报警延时」,避开启动冲击区间,这个细节很能体现一个人是否真正做过水厂项目。
4. 核心配置与脚本实战:变量连接、画面切换与数据归档
4.1 变量管理的集中配置与PLC连接
WINCC变量管理是整个组态的神经中枢。变量管理器的结构建议按工艺段建分组:取水泵房、加药间、沉淀池、滤池、清水池、送水泵房。每个分组里建对应点位清单上的变量,变量名严格和点号对齐。
连接PLC时,通讯驱动选择取决于现场实际硬件。如果用的是S7-300/400或者S7-1200/1500,直接用SIMATIC S7-1200/1500通道或对应的S7通道;如果PLC型号较老,就要选对应的旧版驱动。连接参数里的机架号、插槽号、以太网地址如果填错,变量会全部显示通讯故障——这个错误非常常见,而且排查半天可能都找不到原因。
为了避免变量建错了再改的麻烦,我一般会在建完变量之后立即做一次通讯诊断。步骤是:在变量管理器的连接上右键打开「连接状态」,看所有变量是否都变成绿色对勾。如果某个分组显示问号,说明该分组里至少有一个变量的地址配置不对,这时就要回到点位清单逐项核对。这个动作虽然简单,但能在进画面设计之前就把通讯问题清掉,后面再也不会有「变量刷新不出来」的玄学问题。
4.2 VBS脚本实现画面参数传递
画面与画面之间的参数传递是WINCC开发中的一个关键点。比如从总览画面点击「滤池」按钮进入滤池画面,如果有多组滤池,按钮需要告诉目标画面当前点的是第几组。常用的实现方式是把当前选中的滤池编号写入一个全局内部变量,目标画面启动时读取这个变量并动态更新画面上的对象引用。
下面是一个典型的VBS脚本示例,用于画面切换时传递参数:
' 滤池按钮点击事件 ' 目标:将当前选择写入内部变量,然后切换画面 Dim objScreen Set objScreen = ScreenItems("btnFilter1") ' 写入当前选择的滤池编号 HMIRuntime.Tags("g_nFilterNo").Write 1 ' 切换到滤池操作画面 HMIRuntime.Screens("FilterRoom").LoadScreen()注释里说清楚三步:写内部变量、加载目标画面、画面打开后从内部变量取值。目标画面的画面打开事件里写读取逻辑:
' 滤池画面打开事件 ' 目标:根据编号动态设置画面标题和对象引用 Dim nFilterNo Dim objTitle nFilterNo = HMIRuntime.Tags("g_nFilterNo").Read ' 根据编号设置画面标题 Set objTitle = ScreenItems("txtTitle") If nFilterNo = 1 Then objTitle.Text = "1#滤池操作画面" ScreenItems("udcFilter1").Visible = True ScreenItems("udcFilter2").Visible = False Else objTitle.Text = "2#滤池操作画面" ScreenItems("udcFilter1").Visible = False ScreenItems("udcFilter2").Visible = True End If这里有个细节:写脚本用到的对象名必须是画面上实际存在且命名一致的对象名,OCR拼错一个字母脚本就会报错。每次写完脚本后,建议立即在WINCC的开发环境中点一次语法检查,再运行到目标画面做一次点击流程测试。脚本运行出错时,WINCC在运行状态会弹红色错误框,查看「控制中心」里的错误描述一般能快速定位到哪一行写错了。
4.3 报表与归档的周期设定
水厂值班报表是这个项目的核心交付物之一,很多课设把它漏掉了。值班报表一般包含每小时的进水流量、出水流量、浊度、余氯、pH值和累计流量,导出成Excel格式。WINCC里做报表有两种常用路线:一是用报表控件直接连接到归档数据库,二是用脚本定时把变量值写入SQL数据库,后续用外部报表工具读取。
推荐第二种方式,因为灵活度更高,用户可以按任意时间段查询历史记录。用VBS脚本定时执行采集,把每小时的数据追加到SQL Server的表格里。脚本里通常用HMIRuntime.Tags读变量,然后用ADO连接数据库写入。下面是一个数据入库的核心代码片断:
-- 创建报表存储表 CREATE TABLE DailyReport ( RecordTime DATETIME, FlowIn FLOAT, FlowOut FLOAT, Turbidity FLOAT, ResidualChlorine FLOAT, PHValue FLOAT );采集脚本的思路是:先判断当前小时是否已经写过记录,避免重复插入,然后把数据一次性写入。这里要注意时间格式,SQL Server里DATETIME类型的字段,WINCC脚本写入时要用标准格式字符串,格式不对会导致写入失败。
归档变量名称在WINCC项目里通常是「ArchiveName\变量名」的形式。脚本里要写对归档名,否则运行时报"找不到归档变量"的错误。这类问题排查比较隐蔽,通常是在归档配置里用了默认分组名,但脚本里写的是自定义名,两者对不上。提前在归档管理里统一命令方式,能少踩很多坑。
5. 避坑与排查:WINCC组态中最容易翻车的五个问题
做水厂WINCC画面,真正让人头疼的往往不是功能不会做,而是运行起来之后各种隐蔽问题。这里整理五个最容易翻车的点,按「现象 → 原因 → 解决」写清楚,基本覆盖了现场调试的大部分情况。
5.1 变量全部显示通讯故障,画面数据刷不出来
现象:打开WINCC运行系统,画面上所有实时数据都是灰色或显示"通讯故障"提示。检查PLC侧程序正常,但WINCC就是读不到数据。
原因:常见原因有三个:一是连接参数里以太网地址写错,比如PLC实际地址是192.168.1.10,WINCC里填了192.168.1.11;二是通讯驱动类型选错,S7-1200选了S7-300的通道;三是变量地址和PLC侧不一致,比如开关量地址从DB1.DBX0.0写成了DB1.DBX0.1。
解决:先在变量管理器里查看连接状态,找到报错的那个分组。再用PLC编程软件在线监控这个变量对应的实际地址,对比WINCC里填的地址,逐项排查。我一般会在工程交付前做一次「断电重启测试」:把PLC和WINCC同时断电重启,看变量是否能自动恢复连接。这个测试能发现通讯驱动是否设置了自动重连,现场断电后恢复时经常出现连不上的问题。
5.2 画面切换时闪黑屏,或者切换后控件丢失
现象:从总览画面点击进入加药间画面时,屏幕先变黑一秒再显示出来,切换过程中能明显看到闪烁。有些画面切换后,部分图形对象变成了白色方块。
原因:闪烁是因为目标画面加载了大量图元或外部图片,加载时间超过了画面切换的等待时间。白色方块通常是因为引用了外部图片但图片路径不对,或者对象字体在当前计算机上没有安装。
解决:画面里能用简单矩形、圆形表达的尽量少用高清图片;外部图片统一放在项目文件夹的Graphics目录下,不要用绝对路径引用。字体方面,画面上统一使用中文字体,并在目标电脑上预装字体文件。做完这些优化后,切换速度通常能压缩到0.5秒以内。
5.3 报警信息只弹一次,之后再也不出现
现象:某个液位高报警第一次到达限值时弹出了报警窗口,操作员确认并处理后,第二次再到达限值时报警窗口不弹了,但报警记录里能看到两条记录。
原因:这是报警确认逻辑没有配对。报警触发时如果不做复位(Reset)操作,即使过程值已经回落到正常范围,报警状态也可能一直被置位。再次触发同一报警时,系统认为报警状态还在,所以不再触发弹窗。
解决:在报警记录中设置「自动复位」功能,或者确认后的上升沿清零。通常水厂液位报警这类持续型报警,建议在PLC侧把报警条件改成「液位高于设定值保持10秒才置位」,这样既避免了瞬时波动误报,也为报警状态翻转留出时间。现场排查时查看报警记录的「确认」列,如果一直为空,说明确认逻辑根本没有被触发。
5.4 趋势曲线不刷新,数据是一条直线
现象:趋势曲线控件显示出来了,但曲线一直是一条平滑直线,数值不变化。变量的数值显示是正常的,说明通讯没有问题,问题是出在归档上。
原因:WINCC的趋势曲线是读取归档数据库中的历史数据,不是直接读取当前变量实时值。如果趋势控件没有关联到归档变量,或者归档周期设置成每天一次而不是每秒/每分钟,曲线自然就是平的。
解决:检查趋势控件的「数据连接」属性里选的是哪个归档变量,再回到变量管理器的「归档设置」里确认该变量已经勾选了「启用归档」,并且采集周期设成合理值,一般工艺参数建议1秒或5秒采集一次。归档设定修改后,必须重启运行系统才能生效,这也是一个容易漏掉的细节。
5.5 对象标题和数值显示乱码或者变方框
现象:画面上中文标题全部显示成方框或者问号,数字正常。个别中文乱码是没事的,说明是字体编码问题。
原因:WINCC默认语言的编码设置问题,或者运行电脑上缺少中文字体。还有一种情况是:项目开发时用中文系统,部署到英文系统上,默认字体不支持中文字符。
解决:项目在创建时就设置好「运行语言」为中文,并确保项目属性里的字体选项显示的是中文字体。部署时在目标电脑上安装完整的Windows中文语言包。这个看起来不起眼的问题,在现场交付时经常让项目显得很不专业,一定要提前处理。
6. 验收方法与答辩技巧:从运行演示到功能核对单
项目开发完成不代表交付完成,WINCC项目的验收有一套固定的流程。以水厂监控画面为例,验收通常分三步走。
第一步是功能演示。给业主或答辩评委演示时要按真实操作路径走:从总览画面开始,点击进入每个工艺段画面,逐个演示设备启停操作、画面切换、报警触发和确认、趋势曲线查看、报表导出。演示前必须做一次全流程预演,特别是报警触发这种需要实际条件的,如果现场条件不允许真实触发,提前用脚本写入一个模拟值来触发报警,避免现场演示翻车。
第二步是功能核对单逐项打钩。核对单表格里面每一项对应一个验收标准:
| 验收项 | 验收标准 | 结果 |
|---|---|---|
| 总览画面 | 全工艺流程完整,关键数据动态刷新 | 通过 |
| 泵组操作 | 点击启动按钮后状态反馈延时<2秒 | 通过 |
| 画面切换 | 切换时间<1秒,无黑屏闪烁 | 通过 |
| 报警功能 | 触发报警弹窗,确认后可复位 | 通过 |
| 趋势查询 | 选择时间段后曲线正常显示 | 通过 |
| 报表导出 | 导出Excel数据完整无误 | 通过 |
第三步是压力测试和断电恢复测试。把画面连续运行4小时,观察内存占用是否持续上升,看看有没有泄漏。再把整个系统断电重启,检查WINCC是否能自动启动并恢复通讯。所有测试结果记录在验收报告里。
关于答辩技巧,准备两个高频问题。第一个问题:「画面的刷新率是多少,为什么选这个值?」回答思路是:模拟量画面刷新周期设为1秒,开关量刷新周期设为100毫秒,这个配置能满足监控需求,同时CPU负载控制在合理水平。第二个问题:「如果通讯中断了,画面会怎样表现?」回答思路是:通讯中断时变量值显示保持最后一次有效读数并变灰色,操作按钮被禁用,报警记录里会产生一条通讯故障报警,这样值班人员能第一时间发现异常。
记得有一回做现场验收,业主在泵房画面上找不到流量计的累计量显示,当场觉得项目没有做完。后来加了累计量显示和清零按钮后,验收才顺利通过。从那以后,我每次交付前都会把「水厂工艺里最重要的监控指标」和「值班员每天要看的操作功能」列成清单,逐项核对一遍,确保没有一个盲点。这套流程虽然朴素,但确实是让项目少走弯路最有效的办法,希望帮到你。
本文还有配套的精品资源,点击获取