ARTICLE DETAIL

资讯详情

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

博图WinCC HMI实时指导系统设计:状态字、文本列表与防错引导

博图WinCC HMI实时指导系统设计:状态字、文本列表与防错引导 做自动化项目这十年我见过太多这样的场景新来的操作工站在触摸屏前手里攥着厚厚一摞工艺说明书翻了半天也找不到“现在到底该按哪个按钮”。旁边的老师傅扫一眼画面就能判断下一步是开阀还是启泵因为他脑子里装着整套工艺流程——而这些逻辑HMI画面上一个字都没有。今天我想聊聊怎么给HMI加一套“实时指导”的帮助系统让操作界面不再是冷冰冰的按钮堆而是能告诉操作员“当前处于哪个工序、下一步该做什么、哪些按钮为什么不能点”的活向导。这个需求听起来不复杂真正落地时却有不少坑帮助内容放在哪、怎么触发、如何与PLC状态联动、中文显示乱码、仿真按钮点击无反应……这篇文章我会从方案设计、博图WinCC实操、常见问题排查到上线维护完完整整讲一遍。适合组态工程师、现场调试人员、设备维护工程师看也适合正在做产线标准化的朋友参考。文中示例以博图WinCC为主因为西门子生态的文本列表、画面窗口和仿真机制很有代表性把这套玩明白了换到威纶通、MCGS、昆仑通态也就是触类旁通的事。1. 先搞清楚HMI帮助系统到底在解决什么问题1.1 手册式帮助和现场实时指导是两码事很多项目里所谓的“帮助功能”就是某个角落放一个“帮助”按钮点开弹出一个大文本框把产品说明书里的段落复制进去。这种手册式帮助最大的问题是什么呢它要求操作员自己做一次“信息匹配”——先看懂当前设备状态再去文档里找对应说明。对新手来说设备状态和文字描述之间的对应关系恰恰是最难的部分结果就是帮助页面打开率高真正起到的作用却很低。现场操作员真正需要的是“实时指导”你不需要告诉我所有阀门的功能你只需要告诉我在这个状态下我应该操作哪一个那个按钮为什么现在按不动。这有点像开车用导航——导航不会给你一本交通法规它只会告诉你“前方300米右转”。HMI的帮助系统就应该是这种“路口级导航”而不是“法规汇编”。我刚入行时也犯过这类错误辛辛苦苦做了一个50页的HMI帮助文档结果现场反馈说没人看。后来驻场跟了一个星期才明白操作员在产线上根本没时间翻文档他们需要的是在自己犹豫的那几秒钟里屏幕上刚好出现一句该干嘛的提示。1.2 我把HMI帮助能力拆成三个层级这三层是递进的从“能查”到“能懂”再到“防错”。设计和实施时不建议一上来就追求第三层先把前两层做好现场反馈就会明显改善。层级名称核心能力实现方式复杂度L1静态说明按钮和参数是什么弹窗、文本列表、固定说明页低L2状态联动当前设备状态对应的建议是什么状态字文本列表/可见性控制中L3防错引导该点的按钮亮、不该点的按钮灰状态字按钮可用性/可见性表达式中高第一层解决“这是什么”第二层解决“现在怎么样”第三层解决“现在该怎么办什么不能干”。我在实际项目中体会最深的是第三层带来的价值最大但也是最容易在调试阶段被忽略的因为它的效果要到操作员真正常态使用设备时才体现得出来。你必须在设计阶段就预留好这层能力不然后期想加画面结构和变量表都得返工。1.3 帮助系统做得好不好就看这三个硬指标给设备做帮助系统不是“加个按钮、弹个框”就算完要能回答“它到底帮到了什么程度”。我一般用三个指标来评估操作员独立上手时间从“需要老师傅带着跑三天”降到“半天甚至两小时”这直接反映指导内容是否有效。误操作率尤其是顺序敏感和参数敏感性工序误操作是否明显下降。这一步主要靠L3级别的按钮可用性管理来实现。现场电话量半夜打电话问你“现在这个界面是什么意思”的次数。如果帮助系统到位这种电话应该大幅减少。这三条指标在项目验收时特别好用。你可以在验收报告里量化写出来让甲方直观看到系统集成的价值而不是只说“我们做了帮助按钮很人性化”。2. 方案选型实时指导的三种实现路径与取舍2.1 路径A纯画面组态弹窗里放说明文字最基础的做法是把说明文字直接做在弹窗画面里。在博图WinCC里新建一个画面“Help_Main”放上文本框和关闭按钮然后在主画面的某个角落放一个“帮助”按钮事件里关联到打开这个画面窗口。这个方案的优点是非常直观组态上手快不需要脚本基础维护者只要会打字就能改内容。但它的缺点也很明显内容是死的。不管设备处于什么状态点开会话框看到的都是同一段话无法根据当前工序动态变化。只适合放那些“永远不会变”的内容比如急停按钮位置说明、设备基本操作流程总览。如果你指望靠这种静态弹窗去指导操作员判断“当前能不能排料”那是不现实的。我建议把这种方案用在L1层级。具体做法是做一个全局的“帮助总览”页面里面放设备工艺流程简图、常见报警处理办法、安全注意事项这个页面内容相对稳定维护频率低值得做。但别指望它承担所有实时指导任务。2.2 路径B文本列表加状态字让提示跟着设备跑这是我最推荐的做法。核心逻辑是PLC在程序里维护一个“当前工序状态字”比如0代表待机、10代表A料进料中、20代表B料进料中HMI读取这个状态字后通过文本列表自动显示对应的指导文字。画面上的提示会随着设备状态变化自动切换操作员看一眼屏幕上那句提示就知道现在这个阶段该注意什么。为什么状态字要在PLC里算而不是在HMI脚本里算因为PLC能拿到所有传感器和阀门反馈最接近真实状态而HMI脚本依赖变量连接一旦通讯中断或脚本执行不及时状态就会卡住。PLC算好状态HMI只做显示职责分离故障率最低。我见过一个项目把状态判断全写在HMI的VBS脚本里结果通讯一抖动整个画面上的状态提示全乱了排查了三天才找到根因。要在博图WinCC里落地主要步骤是先在PLC侧建一个DB块定义一个INT变量如“StepNo”由程序按工艺步骤赋值然后在HMI侧建立一个文本列表条目ID和StepNo的取值一一对应每个ID对应的文本就是该工序的操作提示最后在画面上放一个I/O域或者文本域显示模式选择“文本列表”关联StepNo变量。这套方案最大的优点是维护方便。改提示文字时不需要动画面布局只需要在文本列表里编辑对应条目。注意文本列表的ID类型和PLC变量的类型必须一致通常用16位无符号整数。这个路径能覆盖L2层级的绝大多数需求强烈建议优先做。2.3 路径C状态机加按钮可用性不仅提示还防错L3层级的关键在于不让操作员有机会做错。实现思路是把按钮的“允许操作”属性和状态字关联起来。比如出料阀按钮只有在状态字等于60反应完成允许出料时才允许点击在其它状态下按钮呈灰色点上去没反应同时画面上提示“当前处于XX工序出料按钮已锁定”。在博图WinCC中按钮的属性里有“允许操作”选项可以绑定一个表达式例如Tag_StepNo 60。注意表达式中涉及的变量必须是HMI变量表中的标签而且数据类型比较要一致。类似地还有“可见性”选项可以做成“只有当前需要操作的按钮才显示其他完全隐藏”防错效果更强但操作员可能会因为找不到按钮而困惑所以一般用“置灰”而不是“隐藏”更好。这套机制意味着你要把设备操作顺序完全梳理清楚画一张工序-可操作按钮矩阵。这个矩阵既是组态依据也是帮助系统指导文案的素材别省掉这个步骤。我第一次做这个矩阵时把七个状态、十几个按钮的关系捋了两天看起来很慢但后面画面组态和逻辑调试快得惊人因为每个按钮的表达式都直接从矩阵里抄就好了。2.4 三条路径怎么组合我的建议是不要单独选一条路径用。完整的实时指导系统最佳组合是L1静态说明页做一个总览帮助画面谁都能随时打开看。L2动态提示区主画面固定位置放一个“当前状态提示栏”用文本列表显示设备当前工序的操作建议。L3按钮可用性把关键操作按钮阀门启停、电机启停、配方切换等用状态字锁定防止误操作。对象级帮助在关键按钮旁边放一个“?”小按钮点击弹出该按钮的详细说明。这几部分在画面布局上互不冲突但数据设计上一脉相承——都离不开状态字。你只要把状态字和操作按钮矩阵定义清楚后面所有功能都会非常顺。3. 实操案例给“三种液体混合”工艺做一套实时指导画面3.1 工艺背景与帮助需求我拿教材里最常见的“三种液体混合”工艺来做实例因为它简洁但覆盖了顺序控制、液位联锁、温度控制、搅拌启停等典型环节用来示范实时指导系统非常合适。工艺过程大致是空罐检测→A液体进料至L1液位→B液体进料至L2液位→C液体进料至L3液位→启动搅拌电机搅拌若干秒→启动加热至目标温度→保温反应→打开出料阀排料→排空后复位。很多初学者理解这套流程不困难但到了现场面对满屏的阀门和指示灯就懵了尤其是“现在到底按哪个按钮”这个问题。操作员的典型困扰是进料顺序不能错A没加完就开B阀会出错。加热过程中如果误开出料阀高温液体会喷溅很危险。搅拌电机不能空罐启动必须先确认液位到达L3。不知道当前工序处于哪一步只能靠看液位灯和阀门反馈去猜。针对这些痛点实时指导系统要做的事非常明确告诉操作员当前工序名、当前能做什么、什么不能做、下一步自动会在什么时候触发。3.2 状态字设计PLC负责算状态HMI负责显示这个案例我先在PLC侧定义好状态字以下是一张简化的映射表状态字值工序名称当前可操作按钮画面提示文本示例0待机启动按钮设备待机请确认罐体已清洗按[启动]开始配料10A料进料中急停按钮A阀已开液位到L1自动停止当前禁止开B/C阀20B料进料中急停按钮B阀已开液位到L2自动停止当前禁止开A/C阀30C料进料中急停按钮C阀已开液位到L3自动停止进料完成后进入搅拌40搅拌中急停按钮搅拌电机运行中禁止打开出料阀等待搅拌时间到50加热中急停按钮加热器运行中到达80℃后自动保温禁止出料60反应保持中出料阀、排料泵按钮保温完成确认排料口已接软管后打开出料阀70排料中急停按钮排料泵运行中低液位到后自动结束80清洗/结束启动按钮本次批次完成等待排空复位这张表的价值在于它同时是三份资料的来源PLC编程时的状态切换条件、HMI文本列表的词条内容、按钮可用性表达式。我每次做项目都会先出这样一张表评审通过后再开始写程序和组态返工率极低。3.3 在博图WinCC里落地文本列表动态提示在PLC侧把状态字变量建好后HMI侧步骤如下在HMI变量表里新建一个内部变量或连接变量StepNo数据类型选INT连接对应PLC的DB地址。建议在博图中直接拖拽PLC变量到HMI变量表让系统自动建立连接可以避免手输地址出错。打开HMI的“文本列表”编辑器新建一个文本列表命名StepGuideText。为每个状态字值添加词条ID填0、10、20……文本内容填上表中的提示文本比如ID 40的文本是“搅拌电机运行中禁止打开出料阀等待搅拌时间到”。回到主画面在底部固定位置放置一个“I/O 域”或“文本域”。如果是I/O域属性里选择“输出”模式“格式”选“文本列表”然后关联变量StepNo和文本列表StepGuideText。如果是文本域也可以把文本列表属性绑定到变量。编译下载运行HMI仿真。当StepNo的值变化时画面上的文本会自动切换到对应工序的提示。这里有个容易踩的细节给新手提醒文本列表的ID如果用了0、10、20这种间隔值那PLC状态字赋值时必须严格使用同一组数值不要出现状态字等于5的情况否则HMI会找不对词条显示空白。我建议状态字取值要么从0开始连续递增要么就按十位步进中间不要留悬空值避免手误。3.4 对象级帮助弹窗每个关键按钮旁边配一个“?”动态提示栏解决了“现在该干什么”的问题但操作员还可能想问“这个按钮到底是干什么的”。我在画面上会给每个关键操作按钮旁边放一个小号的“?”透明按钮点击弹出该按钮的对象级说明。具体实现方式是在博图WinCC中新建一个弹窗画面Help_Popup_ValveA里面放一个文本域写明“A进料阀用于向混合罐注入A液体在待机状态下允许开启。进料过程中禁止同时打开B/C阀。若进料异常按下急停按钮”。这个画面窗口的大小建议固定成320×160稍微窄一点放在屏幕右下角或者按钮旁边不要遮挡主要操作区域。然后在主画面上“?”按钮的“单击”事件里添加“显示画面窗口”动作将弹窗画面加载到指定画面窗口内。这里有几个工程注意点弹窗里必须有一个“我知道了”或“关闭”按钮事件里关联关闭动作否则操作员点开帮助后不知道怎么关只能重启画面。如果画面窗口的“显示”属性关联了一个内部Bool变量那么打开和关闭都可以通过置位、复位这个变量来控制脚本写起来更统一。触摸屏上的“?”按钮建议做到边长40像素以上太小了手指不好点。鼠标操作的PC界面可以小一点30像素也够。这个功能做起来一点也不难难的是坚持给每一个关键按钮都配置。我的习惯是列一个“按钮帮助清单”把所有操作按钮的说明文本先写好评审通过后让实习生按清单去组态这样效率高且不容易漏。3.5 按钮权限与指导联动灰色按钮也讲得出原因案例中最关键的一步是防错不能等操作员误开了出料阀再去警告要在源头上让误操作不可能发生。在博图WinCC里按钮属性中的“允许操作”可以绑定表达式比如启动按钮Tag_StepNo 0A进料阀按钮Tag_StepNo 0B进料阀按钮Tag_StepNo 10C进料阀按钮Tag_StepNo 20搅拌启动按钮Tag_StepNo 30出料阀按钮Tag_StepNo 60这样表达的意思是只有当设备运行到该按钮对应的状态下按钮才允许点击其它状态下按钮自动置灰。如果操作员想强行操作会发现点不动同时画面底部动态提示栏会告诉他“当前处于搅拌工序出料阀已锁定”这不是冷冰冰的禁止而是有指导的禁止。这里提一个我踩过的坑按钮的“允许操作”表达式里用的变量务必确认它已经连接到实际PLC变量而不是一个名称相似的内部变量。我曾经吃过亏画面里有两个变量一个叫StepNo、一个叫DB_StepNo表达式里写错了结果出料按钮永远置灰现场以为是PLC逻辑问题查了半天。3.6 仿真验证的完整步骤在博图里做仿真验证时我习惯按这个顺序先编译整个项目确认PLC程序和HMI画面没有编译错误。启动S7-PLCSIM把PLC程序下载进去并切换到RUN状态。这一步很多人都忘记HMI仿真开了但没有PLC在背后转按钮点下去当然没反应。在HMI编辑器中启动“运行系统仿真”观察HMI是否能和PLCSIM建立连接。连接成功后仿真画面上的变量监视会显示当前值。在PLC程序里手动给StepNo赋不同值可以在PLCSIM里强制写入或者在程序中临时加一个手动赋值块观察HMI画面上的动态提示文本是否跟着变。测试每个按钮的置灰逻辑特别是“允许操作”表达式是否按照工序矩阵生效。如果你在第4步发现HMI仿真画面按钮点了没反应不要急着怀疑程序先检查连接和变量地址。这个问题的具体排查我会放在下一章详细讲因为实在太常遇到了。4. 实战排查博图HMI仿真按钮无反应以及其它高频疑难4.1 仿真模式下按钮点了没反应先查连接再查事件这个现象在博图环境里太经典了几乎每个用PLCSIM仿真的工程师都遇到过。我的排查顺序是固定的建议你遇到问题也按这个顺序走不要倒着查第一查PLCSIM是否在运行。如果你只启动了HMI仿真没启动S7-PLCSIM或者PLC程序没下载那HMI连接的就是空气按钮按下后PLC侧什么都不会发生。排查方法是打开PLCSIM窗口看看有没有加载程序、是否处于RUN绿色状态。第二查HMI仿真是否选择了正确的连接。在博图项目树里HMI设备下启动仿真时注意观察连接配置里有没有提示“连接不可用”。如果是红色断开标记说明HMI和PLCSIM之间的通信没有建立按钮有动作指令也传达不到PLC。第三查按钮事件是否真正添加了动作。很多新手在按钮属性里改了文本但忘了在“事件→按下”里添加函数。仿真时鼠标点下去有视觉反馈但PLC变量一点变化都没有。选中按钮切到“事件”页签确认按下事件里至少有一个函数比如SetBit、ResetBit或画面切换指令。第四查按钮的“允许操作”和“可见性”是否被表达式误控。如果你给按钮绑定了类似Tag_StepNo 0的表达式而当前状态字不是0按钮就是灰的点着当然没反应。这个问题在复制粘贴按钮时最容易发生表达式跟着旧按钮一起过来了新按钮永远置灰。第五查是否有透明对象挡在按钮上面。画面里放了一个透明矩形盖住了按钮这种情况在鼠标操作时表现为“点了好像没点到”。可以用Tab键遍历画面对象看看当前选中的是不是最上层的对象。第六查如果是实际触摸屏而不是仿真还要检查触摸校准和按钮尺寸。按钮太小、屏幕校准偏差大现场表现为“怎么点都不准”。这种情况换个大按钮重新校准触摸屏就好。把这条排查顺序做成一个内部故障检查单给售后同事也发一份能省掉很多来回确认的时间。我自己调试现场时按这个顺序走十分钟内基本能定位。4.2 帮助弹窗关不掉、打不开多半是画面窗口属性配置问题帮助弹窗最常见的疑难是“点帮助按钮弹窗出来了但点关闭按钮没反应或者弹窗直接铺满全屏把主画面挡住了”。这类问题基本都是画面窗口的显示方式配置不对。在博图WinCC里弹窗一般用“画面窗口”对象承载。“画面窗口”可以设置为“全局画面”或局部图标两种显示方式。如果设置成全局窗口弹窗会跨画面固定显示适合做全局帮助总览如果设置成局部窗口那它只能在某个画面范围内显示翻页后可能消失。关闭按钮无反应最常见的三个原因弹窗关闭按钮的“事件”里没有添加隐藏画面窗口的动作或者只写了一句置位内部变量但该变量并没有控制画面窗口的“显示”属性。画面窗口的“显示”属性关联变量后变量名写错了导致关闭逻辑操作的变量和显示逻辑控制的变量不是同一个看起来像是关不掉。弹窗页面本身包含了一个大的透明图片或矩形覆盖在关闭按钮上按钮被挡住点击事件无法触发。我在组态时习惯用统一的内部变量HelpVisible来控制所有帮助弹窗的显示。打开帮助时置1关闭时清0画面窗口的“显示”属性统一关联HelpVisible。这样只需要维护一个变量各弹窗之间的逻辑不至于乱。4.3 中文乱码、文本列表不显示、状态字不匹配——高频维护问题文本列表做动态提示用着用着容易出现显示问题。一个常见情况是中文乱码。博图在中文系统上默认编码还能应对但从英文版项目转换过来或者从别人那里拷来的画面文本列表里的中文经常会变成问号或方块。解决方法是重新选中文本列表确认字体设置为中文字体如“宋体”或“微软雅黑”并把每个词条重新输入一遍。如果复制外部文本尽量用纯文本粘贴再把格式刷一下。另一个常见情况是“文本列表明明配了词条但画面上显示空白”。先看I/O域的“格式”是不是选成了“十进制”而不是“文本列表”再看绑定的变量类型和文本列表ID类型是否匹配。文本列表词条ID一般是无符号整数如果你绑定的PLC变量是INT且当前值是负的那永远匹配不上显示空白。还有一个通常被忽略的点文本列表词条ID从几开始。如果你在PLC里给状态字赋的初始值是1但文本列表里ID从0开始建那待机状态就会显示成空白或错配到别的工序上。设计阶段定好ID映射PLC赋值和HMI文本列表保持一致这类问题就能从根源上避免。4.4 快速速查表故障现象可能原因排查方式解决办法仿真按钮无反应PLCSIM未运行或未下载程序检查PLCSIM状态下载PLC程序并切换到RUN按钮无反应事件里没添加动作查看按钮事件页签添加SetBit/ResetBit等动作按钮永远置灰允许操作表达式不满足检查表达式和变量值修改表达式或调整状态值弹窗关不掉关闭动作和显示控制变量不一致核对变量名统一用HelpVisible控制文本显示空白变量类型与文本列表ID类型不匹配对比变量数据类型统一为无符号整数中文乱码字体/编码问题查看文本列表字体重新设置中文字体并输入这个速查表我打印出来贴在办公室工位上同事调试时遇到问题先自己对照一遍能少打断我很多次。5. 上线后怎么让帮助系统真正好用5.1 帮助内容要跟着工艺走维护责任必须明确帮助系统的最大风险不是没人做而是做完了没人管。设备工艺调了一版阀门编号改了但HMI文本列表里的提示还是老内容那这个帮助系统就成了“误导系统”。在我做过的项目里帮助内容和实际画面不一致造成的现场事故比没有帮助系统时的事故还容易引起纠纷。我的做法是在项目移交文档里单列一节“HMI帮助系统维护规程”明确一条铁律工艺变更时修改PLC程序和HMI画面的人同时必须更新文本列表、按钮帮助弹窗和对象帮助清单。这三处不更新变更就不允许提交。另外帮助信息最好集中管理。所有文本列表词条是集中的对象帮助弹窗也应该统一放一个画面分组里不要散落在各个主画面中。改版时打开一个页面就能看到全部帮助内容效率高很多。5.2 用现场反馈驱动迭代记录帮助点击数据帮助系统好不好用别自我感觉良好要看现场数据。如果HMI支持我会把“帮助按钮被点击的位置和时间”记录到报警日志里。一段时间后统计哪个画面的帮助打开率最高哪个按钮的“?”被点得最多就说明那个位置的指导文字不够清晰、需要优化。这个数据也可以用来调整文字表达方式。另外一个行之有效的办法是设备上线第一周安排一个工程师每天去现场站半小时专门看操作员在哪些画面上停留时间长。凡是操作员犹豫超过三秒的地方就说明帮助提示还没到位回去立刻改。这个方法不需要什么高端工具但对帮助系统的迭代价值非常大。我记得第一次这样蹲点发现操作员在“配方参数设置”页面上停留时间最长因为要输入的数据多达六项完全没有提示。后来加了一个“参数填写顺序”的辅助提示框填错率明显下降。5.3 被很多人忽略的小细节帮助语言要“说人话”写帮助文本时尽量不用术语堆砌。比如“当液位传感器LS101反馈值为1时允许开启XV-102”这种写法正常操作员是看不懂的。更合适的写法是“确认罐内A料已加满灯亮才能打开B进料阀”。把传感器逻辑翻译成操作员能直接对照的画面状态这是帮助文字能否生效的分水岭。还有个习惯是每条提示尽量控制在25个汉字以内一屏能扫完就不用阅读。比如“正在搅拌出料阀已锁等待搅拌时间结束”就比“搅拌电机持续运行中为防止误操作造成安全事故在不满足出料条件的情况下系统自动禁止出料阀开启”好得多。操作现场没有多余的时间去读长句。我在写帮助系统时还有一个习惯每条提示文字先念给现场的熟练操作工听一遍他问得出“这句话是什么意思”就直接改他如果听了就知道怎么操作那就过关。这个标准听起来很低但真正执行起来大多数初稿都会被推翻重来。最后分享一个个人体会HMI帮助系统集成这件事技术难度其实不高真正决定成败的是你有没有站在操作员的视角去设计每一句提示。一套好的实时指导系统做出来后现场老师傅不再需要一直守着新徒弟操作工也不会因为看不懂画面而瞎操作——这种感觉比我写完任何一个漂亮的上位机界面都有成就感。如果你正在为某个HMI项目加帮助功能建议从状态字设计和文本列表入手先跑通动态提示再逐步加上按钮防错。这套东西做完你会发现设备不仅好用了而且好教了。
返回列表