ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HMI内置实时指导系统:从WinCC组态到三层帮助体系全解析

HMI内置实时指导系统:从WinCC组态到三层帮助体系全解析 1. 整体设计思路为什么HMI里要内置实时指导1.1 一个让我印象深刻的现场前几年我去一个食品配料车间做调试设备装好了画面也组态完了PLC程序跑得顺顺利利。结果到了试生产那天操作员按错了一个按钮把A罐的料打到了B罐里整批原料报废车间主任脸黑得像锅底。问题出在哪不是程序逻辑有问题而是操作员根本不知道“什么时候该按哪个按钮”。HMI画面上密密麻麻的阀门、泵、液位、配方参数对于工程师来说是家常便饭对一线的操作工来说就是天书。工艺卡贴在控制柜旁边可真正到了紧急情况没人有时间去翻那本没页数的纸。从那以后我养成了一个习惯凡是我经手的HMI项目必须集成一套“内置实时指导”帮助系统。不是那种十天半个月才看一次的PDF手册链接而是在操作界面上随时呼得出、看得懂、指得准的活文档。这套东西说难不难说简单也不简单关键在于组态思路。我用西门子博图TIA Portal配合WinCC做过好几套也用过国产组态软件实现过功能几乎一样的方案。这篇文章就把从画面结构、变量规划、脚本触发到仿真调试踩过的坑一次性掰开揉碎说清楚。1.2 三层帮助体系的设计思路我会把HMI内的帮助系统分成三个层级不同层级解决不同场景的问题这也是我做了几个项目之后总结出来的结构。如果你一开始就把所有帮助内容堆在一个角落里那等于没做。画面级帮助解决“我现在在这个界面上该干什么”的问题。比如配方画面新来的操作员不知道先填参数还是先选配方这时候需要一个“本画面操作说明”按钮呼出当前画面的完整流程指导。对象级帮助解决“这个按钮/阀门/泵是什么意思”的问题。比如画面上有个“回料阀”新手可能误以为是把料送回储罐实际上可能是回流到调配罐。鼠标悬停或按下帮助模式后点击对象就能看到具体说明。动态联动帮助解决“当前状态异常我该怎么办”的问题。比如液位到上限、温度超限、阀门反馈丢失帮助面板能联动显示对应故障的排查步骤不必翻报警手册。这三个层级不是互相替代的关系而是层层递进。画面级帮你知道大方向对象级帮你搞清楚单个元件动态联动帮你在异常状态下快速反应。在实际组态中我通常把这三种方案揉进同一个工程画面级用“帮助”按钮切屏对象级用悬停提示和属性文本动态联动用PLC状态字触发帮助画面内容切换。1.3 设计时必须遵守的三条铁律先说结论再展开解释。这三条规则是我踩了无数次坑才总结出来的希望你从第一天就记住。第一条帮助内容必须能在三秒内呼出三分钟内读完。操作员是来解决生产问题的不是来上课的。帮助按钮要放在画面固定位置最好右上角或左上角不管切到哪个画面都能找到。内容要精炼按步骤编号写每步不超过一行最好带状态条件说明。比如“按下启动按钮之前确认出料阀X4处于关闭状态”这句话就比“注意系统状态”有用得多。第二条帮助信息必须和实际状态联动不能是孤立的静态文本。我在一个水处理项目里吃过亏帮助文本写的是“当1号泵运行指示灯亮起时”结果后来程序改了把1号泵的启停逻辑改成变频器控制指示灯的含义变了帮助文本却没改操作员照着帮助操作反而出了错。后来我把所有需要跟状态绑定的帮助文本全部做成动态文本由PLC传给HMI组态画面里只放模板内容跟着变量走改逻辑的时候只改PLC文本块不再去翻HMI画面上几十个文本对象。第三条帮助系统不能干扰正常操作流程。不能在操作员输到一半参数的时候突然弹个帮助窗口把输入框挡住了。我的做法是帮助画面和操作画面分开帮助用独立窗口或独立画面组调用时以浮窗形式出现在侧边或者直接切走当前画面操作员看完帮助点击返回回到原画面且数据不丢失。博图WinCC里可以用“画面窗口”嵌套来实现这种效果主画面不关闭只切换画面窗口的内容。2. 核心实现基于TIA Portal WinCC的组态细节2.1 页面结构与变量分配是地基在博图里做HMI工程第一件事不是画画面而是把页面层级结构搭出来。我习惯把帮助系统相关的画面全部集中在一个画面组里名字统一加“HLP_”前缀和操作画面明显区分开。这样做有两个好处一是项目树里一眼能看到帮助系统的完整文件二是编译下载时可以单独对画面组做管理排查问题不用翻来翻去。变量分配要提前规划。帮助系统涉及到的变量一般分三类静态文本变量存放固定说明文字比如“本画面用于手动控制调配罐进料过程”这类变量用字符串型由HMI侧定义就行不占PLC资源。动态状态字从PLC读取通过“状态字”的位来切换帮助面板中的不同内容块。比如状态字第0位代表“系统运行中”第1位代表“设备故障”帮助面板根据状态字的位组合切换显示对应的处理建议。内部触发变量帮助按钮按下后置位的内部变量用于控制帮助窗口的显示与隐藏这类变量用HMI内部变量即可不需要占用I/O地址。我用的比较多的是一个INT型“HelpIndex”变量由帮助按钮的脚本写入不同的值帮助面板画面的文本区根据HelpIndex的值决定显示哪一段说明。比如HelpIndex0显示画面概述1显示启动步骤2显示停车步骤3显示报警处理。这样比每个帮助按钮做一个单独画面要节省几十个画面对象后期维护也只是改文本块内容省事得多。2.2 用模板画面统一所有帮助界面这里要说一个非常关键的技巧不要每个操作画面都去做一个独立的帮助画面而是做好一个“帮助模板画面”所有画面共用它。我在WinCC里建了一个名为“HLP_Main”的画面窗口挂在主画面右上角宽度固定500像素高度自适应。这个画面窗口本身不是固定内容它内部放一个多状态文本区和一个多状态图形区。文本区和图形区分别绑定“HelpIndex”和“HelpStatus”两个变量。具体实现逻辑是这样的每个操作画面右上角都有一个圆形的“”按钮。操作员按下后按钮的点击事件里写一行脚本把当前画面的编号赋值给HelpIndex变量同时把画面窗口中绑定的“显示开关”置1帮助画面窗口立即切到与该画面对应的说明内容。这样做最大的好处是整套系统里帮助画面的布局、字体、配色、关闭按钮只需要维护一次。如果甲方要求改字体或者加logo我只改一个模板所有画面的帮助界面同步更新不用一个画面一个画面去调。省下来的时间够你多出好几轮现场调试。模板画面内部还可以叠加“当前位置指示”和“上一步/下一步”导航按钮。操作员如果按步骤一步步操作就可以像翻说明书一样上下翻页。翻页的脚本更简单点击事件里对HelpIndex做加减操作就行了。2.3 脚本触发和联动内容的完整写法有些朋友可能不太熟悉博图WinCC里的脚本写法我贴一段我实际在用的一组代码。这是帮助按钮的点击事件用的是WinCC的C脚本语法// 设置当前画面编号HelpIndex为内部变量 SetTagWord(HelpIndex, 5); // 将帮助窗口显示标记置1 SetTagBit(HelpShowFlag, 1);对应地关闭按钮的脚本SetTagBit(HelpShowFlag, 0);画面窗口的“可见性”属性直接关联到HelpShowFlag这个位变量值为1时显示为0时隐藏。这是最基础的“显隐控制”零基础也能照着写。接下来是动态联动部分。我在PLC里建了一个INT类型的“HelpStatusWord”它的每一位分别代表不同的设备状态。HMI侧的帮助面板中有几个文本对象它们的“可见性”属性分别写成这样的表达式(HelpStatusWord 1) ! 0 (HelpStatusWord 2) ! 0 (HelpStatusWord 4) ! 0这样当PLC检测到某个设备故障时把对应的位置1帮助面板上对应的“可能原因和处理建议”文本就自动显示出来。操作员不需要自己去找故障代码画面上会直接告诉他“检查3号泵是否过载复位后重新启动”。还有一种是文本内容随状态切换适合做“当前状态引导”。我在配方管理界面里放了一个文本对象内容绑定到一个字符串变量“HelpDynamicText”PLC根据当前配方切换阶段把这个变量赋值成不同的文本。比如配方阶段为1时显示“请确认A罐液位在50%以上再启动搅拌”阶段为2时显示“搅拌完成后等待30秒再打开出料阀”。操作员看到的永远是当前阶段最需要知道的那句话。3. 三种可落地的帮助交互方案对比3.1 悬停提示最轻量的控件级方案悬停提示就是鼠标放到对象上停1秒左右旁边弹出一行小字说明。WinCC里每个对象都有一个“Tooltip”属性直接填文字就行。这个方案我用得最多的地方是按钮和指示灯。比如画面上有几十个阀门按钮操作员鼠标一放上去就看到“进A液阀”“进B液阀”“蒸汽阀”比看旁边的小标签快得多也不占用画面空间。悬停提示有两个坑要注意。第一悬停提示的字数有实际限制太长会截断或者直接不显示所以每条提示控制在20个汉字以内比较稳妥。第二触摸屏上鼠标悬停是不存在的手指头放上去不会弹提示。如果项目用的是触摸屏悬停方案完全失效这个时候要改成按钮长按触发提示或者直接用我后面说的侧边面板方案。我现在的习惯是只要是触摸屏项目一律不做悬停提示因为做了也白做甲方验收的时候手指一放没反应就问怎么回事。3.2 侧边帮助面板流程引导的主力方案侧边面板就是我前面说的画面窗口方案挂在主画面右侧或左侧不遮挡核心操作区域。它适合承载“步骤型”帮助内容比如开机流程、切换配方流程、清洗流程。我用的比较顺手的结构是这样的侧边面板上部分固定显示“当前画面名称”和“适用工段”中间是一个滚动文本区显示步骤内容底部放“上一步”“下一步”“关闭”三个按钮。文本区的滚动通过WinCC的“文本列表”实现预设一个文本列表列表项从0到99每项对应一条帮助文本HelpIndex直接作为读列表的索引值显示出来的内容就是对应的帮助说明。这个方案的优势在于可承载的信息量远超悬停提示而且可以图文混排。我在文本区里还会嵌入从PLC读取的实时状态显示比如“当前液位45%”让操作员对照着实物和数字去理解操作比单纯看文字印象深得多。3.3 覆盖式弹窗故障排查专用当系统发生报警时帮助需求往往最紧迫。这时候操作员最需要知道的是“现在报警到底怎么回事我怎么处理才能恢复生产”。我的做法是做一个全屏覆盖的报警帮助画面尺寸和主画面一样大透明背景中央区域显示从PLC读取的当前报警代码和处理步骤。这个画面的出现条件由报警变量控制任何一个“报警触发”位置位画面就自动弹出同时弹出一个高亮的“处理步骤”按钮点击后显示完整排查流程。排查流程文本不是静态的而是按报警类型从文本列表中读取。比如报警码10对应“A罐液位过高”处理步骤是“1.检查进A液阀X1是否完全关闭2.检查液位传感器L1是否漂移3.打开排空阀X5待液位低于60%后关闭”。报警码20对应“B罐温度超限”处理步骤完全是另一套。通过文本列表按报警码索引代码不用写很多但覆盖的场景可以很多。这个覆盖式弹窗我在三个掺混罐项目里用了之后现场操作员反馈是“以前报警了我们只能找班长班长再打电话问你们厂家现在看一眼屏幕就知道该干嘛了”这是我对这套系统最有成就感的一次评价。3.4 三种方案怎么选一张表说清楚方案适合场景信息承载量实现难度触摸屏适配我的建议悬停提示控件级短说明低20字内极低填属性即可不支持仅用于鼠标操作的工程师站侧边面板画面级流程引导高支持图文滚动中需画面窗口和文本列表支持触摸屏项目的首选方案覆盖式弹窗报警/故障排查中高按需显示中高需报警联动支持与报警系统结合使用绝大多数项目不是只用其中一种而是组合拳悬停提示给工程师调试时用侧边面板给操作员日常操作用覆盖式弹窗专门在异常状态下跳出来。三种方案共用同一套HelpIndex索引规则互不冲突。4. 实战拆解HMI“三种液体混合”工艺的完整帮助系统4.1 工艺对象与帮助需求梳理为了把这套方法讲透我拿一个典型的“三种液体混合”工艺做完整案例。这个工艺在化工配料、日化生产、涂料行业非常常见也是搜索引擎里被问得最多的场景之一。工艺过程大概是这样三个原料罐分别储存A液、B液、C液。混合罐接收到配方指令后依次按设定量进料先开进A液阀X1进料到设定值后关阀再开进B液阀X2同样到设定值后关闭最后开进C液阀X3。三种液体都进完后启动搅拌电机M1搅拌一定时间完成后打开出料阀X4把混合液送入下一段工序。这个工艺虽然逻辑简单但对操作员的误操作容忍度很低。如果A液阀和B液阀开错了顺序整个配方就废了。所以我在帮助系统里针对每个阶段都写了操作约束说明。画面布局上我把混合罐的液位显示放在中央三个进料阀分布在罐顶部对应位置搅拌电机和出料阀在罐底部。每个对象的帮助内容都绑定到HelpIndex的不同值。4.2 帮助内容设计的完整拆解以启动阶段为例我一共设计了5条帮助步骤第1步确认三个原料罐液位均高于30%否则补充原料。对应操作观察画面顶部三组液位棒图任一低于30%需先进行补料操作。第2步确认出料阀X4处于关闭状态。对应操作查看X4的状态灯若为绿色常亮说明阀门打开需按下关闭按钮。第3步选择配方编号。对应操作在配方选择区下拉框选择配方1/2/3确认右侧显示的设定值无需逐项输入。第4步按下“启动混合”按钮。对应操作观察按钮指示灯变为黄色闪烁说明系统进入自动进料流程。第5步进料过程中不要手动操作任何阀门。对应操作阀门自动切换由PLC程序控制手动干预将导致配方失败。每条步骤我控制在30个字以内的正文加上状态判断条件操作员照着做基本不会出差错。运行过程中帮助面板会自动切换到“运行监视”内容如果当前正在进A液面板显示“正在进A液目标重量120kg当前重量88kg预计剩余时间约2分钟进料完成后X1阀自动关闭”。如果搅拌阶段面板显示“搅拌剩余时间5分30秒搅拌速度45rpm结束后自动打开出料阀”。4.3 完整组态操作步骤清单这里按我实际组态的流程列出完整步骤如果你是第一次做照着走就能搭出一套能用的帮助系统在变量表里新增内部变量HelpIndexINT、HelpShowFlagBOOL、HelpStatusWordINT。新建画面“HLP_Main”设置大小为常规画面的一半比如800x480画面属性里取消“显示标题栏”背景半透明。在“HLP_Main”里放置文本区内容绑定到文本列表“HelpTextList”索引来自HelpIndex。新建文本列表“HelpTextList”逐条录入帮助文本条目编号从0开始最好按操作画面编号顺序排列方便记忆和排查。在每个操作画面的右上角放置“帮助”按钮点击事件写脚本SetTagWord(“HelpIndex”, 对应编号); SetTagBit(“HelpShowFlag”, 1);在操作画面放置画面窗口关联“HLP_Main”可见性关联HelpShowFlag。PLC侧编写状态字将设备状态位赋值给HelpStatusWord。在“HLP_Main”里添加联动文本可见性关联HelpStatusWord的位表达式。编译下载进入仿真模式验证按钮、索引、显隐是否正常。这套流程我在博图V15、V16、V17上都实施过步骤完全通用唯一的区别是脚本编辑器的入口位置稍微有变化不影响整体结构。5. 博图仿真与常见问题排查实录5.1 博图HMI仿真按钮无反应的经典排查“博图HMI仿真按钮无反应”这个话题被问过无数次我把排查思路按优先级列出来照着顺序检查80%的问题能当场解决第一步检查是否启动了运行系统仿真。博图里HMI仿真有两个层面一个是在组态界面里看静态画面另一个是点击“开始仿真”按钮运行WinCC Runtime。很多初学者是在组态界面里点按钮觉得画面没反应其实压根没进运行环境。第二步检查按钮的“模式”是否为“按下”或“切换”。在WinCC里按钮对象有三种常见模式文本按钮、图形按钮和IO域按钮。如果用的是图形按钮要确认图形列表配置正确否则看不出按下的视觉反馈。第三步检查按钮事件是否绑定到了正确的函数或脚本。右键按钮打开“事件”选项卡查看“点击”事件下是否有内容。空白说明根本没有绑定当然没反应。第四步确认关联变量未被PLC端或脚本死循环锁住。我碰过一次很诡异的现象按钮按下后HelpShowFlag置1了画面窗口弹出来了但立刻又消失。最后查出来是PLC程序里有一个OB100启动组织块一直在复位这个变量每次HMI置位后100毫秒内就被PLC复位回去。把PLC里对该变量的写访问删掉就好了。第五步仿真模式下确认PLC连接正常。如果使用PLCSIM仿真HMI仿真无法直接连接PLCSIM需要设置PLCSIM与WinCC Runtime之间的连接为“仿真连接”或直接不连接PLC测试按钮逻辑。这五步走下来按钮无反应的问题基本都能定位。如果还是不行关掉博图重新打开项目再仿真一次——这个行业里所有人都遇到过玄学问题重启能解决一半。5.2 帮助画面空白或数据不刷新的处理帮助面板能弹出来但文本区一片空白或者显示的内容和当前画面对不上这通常是三个原因文本列表的索引值和脚本赋的编号对不上。比如HelpIndex赋的是5但文本列表里5号条目是空的。检查时可以在HMI运行画面上做一个临时IO域直接监视HelpIndex的当前值对照文本列表逐条核对。文本区的数据格式设置错误。WinCC文本区的显示格式有“十进制”“十六进制”“文本”等选项如果格式设成十六进制HelpIndex10的时候显示的不是列表第10项而是十六进制的16内容自然就乱了。字符串变量未刷新。动态联动文本绑定的是字符串变量如果PLC侧文本块没有及时更新画面就显示旧内容。排查方法是在HMI里放一个诊断显示区直接把字符串变量的原始值打出来看确认是不是PLC确实没更新。我还有一个习惯所有帮助面板里的文本对象字体、字号、颜色统一做成模板。这样就算某个文本内容错了改的时候也只需要换文字不用担心格式错乱。5.3 变量连接与脚本执行异常的经验教训最后说几个变量连接和脚本执行方面容易踩的坑都是真金白银换来的经验变量地址重复。我在一个项目里把HelpIndex顺手定义成了外部变量地址又和PLC里的某个DB块地址撞了结果帮助按钮一按整个配方画面数据全乱了。后来所有HMI内部逻辑变量一律用“内部变量”地址冲突这个坑从根上杜绝。脚本里写字符串拼接要小心编码。博图WinCC的C脚本里中文文本直接写在代码里有时会出现乱码我一般把中文内容全部放在文本列表和变量里脚本里只传数字索引不直接写中文彻底规避编码问题。画面窗口嵌套层数不要太多。我曾经在主画面里嵌了一个画面窗口画面窗口里又嵌了一个第三层嵌套时运行卡顿非常明显触摸屏上尤其严重。现在我的原则是帮助面板最多两级画面窗口第二级用于展示图片或回路图足够了。仿真正常但现场触摸屏有问题。仿真能跑下载到真机却出现问题最常见的是触摸屏固件版本和博图版本不匹配。我建议下载程序之前先更新HMI固件到项目要求的最低版本别用出厂老固件硬跑新组态。我现场被这个坑耽误过一整天更新固件后所有问题集体消失。最后再分享一个个人习惯做帮助系统这件事最考验的其实不是技术而是耐心和细心。帮本文本内容要跟着工艺变化持续维护不是项目交付那天写完就完事了。我现在的做法是每次PLC程序有逻辑变更顺手把HMI帮助文本里的相关内容一起改掉哪怕只是阀门名称变了也同步更新。这样做的回报是半年后设备故障现场操作员不打电话找你而是自己照着屏幕把问题解决了那种省心感值得你前期多花几个小时。另外一个建议是帮助文本最好单独建一个Excel文档做索引条目编号、对应画面、对应工艺步骤、维护日期全记下来。HMI里的文本列表只负责显示真正的“源头文件”在Excel里后续操作员反馈哪条看不懂我改Excel、改PLC文本、再更新HMI三次对齐之后整个系统一直是活着的文档而不是交付当天拍张照片就再也不管的死文档。
返回列表