搞工控的人对 WinCC 应该都不陌生画面里用得最多的无外乎趋势图、报表、仪表和棒图。可不少人一开始都看不上条形图觉得它就是个填充高度的矩形结果真到项目里一用不是棒图不刷新就是满量程杵在那儿再不然就是颜色死活不变怎么调都调不过来。这篇文章就把 WinCC 条形图的用法从头到尾捋一遍从最基本的创建、绑变量、设量程到用脚本控制颜色、做动态报警提示再到实际项目里踩过的坑和排查方法尽量一次讲清楚。无论你是刚接手 WinCC 项目的调试工程师还是想把画面做得更直观的老手都能在里面找到可以直接上手的东西。1. 条形图到底能做什么为什么要用它先花点时间说清楚定位。条形图在 WinCC 画面里本质上是把某个过程值映射成一个填充区域的高度或者长度操作员看到的就是一根根竖着或者横着的条。它的核心价值是“对比”是把抽象的数字变成一眼能看懂的视觉长度。1.1 条形图和趋势图、报表的分工经常有人问已经有趋势图了为什么还要条形图其实这两者的逻辑完全不一样。趋势图的核心是“历史过程”主要看某个值在一段时间内怎么变化操作员要判断的是趋势、走向、波动幅度报表的核心是“数据的留存和汇总”更多是事后查证、做交接班记录、做生产统计用的。而条形图的核心是“当下状态”和“相对大小”它不强调时间维度强调的是此刻多个点位或一条产线上不同设备之间的差异。比如一个车间里有八个反应釜每个釜都有液位变送器。你给每个釜都画一条趋势曲线操作员一眼望过去满屏的折线看半天才知道谁高谁低但如果用八个条形图排成一排谁高谁低立刻就能看出来。条形图的优势就是把数值变成了直觉化的视觉长度人脑处理长度差异的速度远快于辨认一串串数字。把它和纯数字显示做对比数字当然更精确但操作员巡检时不可能一个个去盯小数点条形图能在更短的时间内把异常信息传递出来。1.2 实际用得最多的几种场景根据我接触过的项目条形图最常出现在下面几个地方。液位、料位对比比如化工反应釜、储罐、水池的液位显示。一个画面上多个罐体同时显示用条形图非常直观操作员交接班时扫一眼就知道哪些罐快满了、哪些罐快空了。产量、计数对比包装线、装配线的班产量或日产量用水平条形图做对比哪个班次效率高一目了然。压力、温度指示面板有些现场不适合用圆形仪表条形图占空间小适合做成仪表矩阵密集监控一大片测点。离散状态显示条形图不只能显示模拟量也能显示开关量或离散等级比如把阀门开度分成“全关、半开、全开”几个状态用不同填充比例表达。这些场景里条形图往往不是主角但它承担着一个重要职责让操作工人在最短时间内抓取到异常信息。画面设计得好不好很多时候就看这些细节够不够人性化。2. 从零开始在画面里创建一个条形图条形图的创建过程并不复杂但很多人第一次操作时连对象都找不到。下面按步骤说明尽量照顾到不熟悉图形编辑器的读者。2.1 在 WinCC 图形编辑器里找到棒图对象打开 WinCC 的图形编辑器进入要编辑的画面后在左侧或右侧的对象选项板里一般可以在“基本对象”这一组里找到“棒图”或者“Bar”字样的对象。不同版本的 WinCC 菜单位置会有差异有的直接叫“棒图”有的英文版叫“Bar”有的版本把它归类在“控制对象”里。找不到的时候直接在对象选项板里搜 Bar 关键字也是个办法。找到之后在画布上拖拽或者单击放置棒图对象就会出现。第一次放出来的时候通常是一个默认尺寸的灰色框中间有一条数据条。建议先把对象尺寸拉大特别是初始调试阶段拉大一点方便观察刻度、颜色和刷新效果。画面做精细排版时再缩小完全不迟。2.2 条形图对象的结构和默认行为条形图对象不是简单画一个矩形框就完事它内部一般包含两个部分一是用来显示刻度线的背景框架二是根据变量值改变填充高度或长度的数据条。框架边缘可以显示标尺刻度也可以在属性里关掉。默认情况下这个数据条会按你绑定的数值上下浮动。但要想让它真正好用必须设置清楚下面几件事数据从哪个变量来、量程上限下限怎么定、多久刷新一次、显示方向是垂直还是水平、填充颜色怎么随状态变化。这些本质上都是属性配置看懂属性就等于入门了。动手之前我的建议是先在变量管理里准备好要测试的变量。不要一开始就连真实的外部工业变量先用一个内部变量赋值把条形图的动作逻辑调通再接现场信号。这样做的好处是排查问题快因为画面层和数据源层可以分开验证。2.3 先做一个 5 分钟的最小测试如果你是第一次接触这个对象建议按下面的流程快速验证一遍。在变量管理里新建一个内部变量类型选浮点数名字随意比如“测试值”。把“测试值”的初始值设为 50。在画面上放一个条形图把它的过程值连接指向“测试值”。将最大值设为 100最小值设为 0。运行画面正常情况下条的高度应该显示在一半的位置。停掉运行把“测试值”改成 80再运行条应该明显升高。这个最小测试能在五分钟内确认对象本身没问题。接下来所有花哨的功能都是在这个基础上叠加的。3. 核心属性一次讲透变量、量程、刷新、方向条形图的属性看起来不少但真正必须理解的就那么几个。把下面这些弄明白大部分问题就已经解决一大半了。3.1 绑定过程值让条跟着数据走条形图和变量绑定是第一步。在对象属性窗口中找到“过程值”相关属性一般来说会有一个叫“Process Tag”或者“变量连接”的配置项点击后面的浏览按钮在弹出的变量列表里选择要绑定的变量。如果没有现成变量要先创建变量。项目调试阶段用内部变量最方便比如建一个名为“模拟液位”的实数变量给它赋一个固定值条形图马上就能显示对应高度。测试没问题后再换成外部变量连接比如关联到某个模拟量输入地址数据类型、字节顺序、线性标定都要和 PLC 程序里一致。这里有一个常见坑变量类型是 WORD 或 INT而显示值却想看到浮点数结果发现数据条跳动特别生硬或者跳变幅度很大。这时候需要在 PLC 侧先把工程量算成浮点数或者在 WinCC 里做线性换算不要直接拿原始数字去驱动图形。整型数据不是不能用但显示精度和连续性都不如浮点数。3.2 设置量程上下限最大值最小值决定条的位置条形图的另一个核心属性是量程。通常属性里会有最大值和最小值它们决定条形图满量程时的位置。比如一个储罐液位变送器量程是 0 到 5 米你在 WinCC 里把最大值设为 5、最小值设为 0那么当液位是 2.5 米时条的高度就会正好到达整个显示区的一半。这里要提醒一句上下限不要设反。我见过有人图省事把最大值和最小值写成 5000 和 0而 PLC 里换算后的工程量是 0 到 5.00 米结果条形图永远显示得很“矮”或者动不动触顶。量程数值不仅要正确单位也要和现场仪表保持一致。另一个实际经验是当测量值有可能短时间超过正常量程时比如液位偶尔因为波动能冲到 5.2 米如果不希望条到顶后就不动可以把上限稍微放宽到 6 米超出部分在条形图上还能看到“越限”的效果。但要注意现场如果有联锁逻辑显示量程和报警量程应该是两回事。显示量程可以放大报警上下限应按实际工艺定两者不要混在一起。属性典型设置示例说明最小值0对应条形图起始位置的过程值最大值5对应条形图满量程的过程值过程值连接液位_1驱动数据条的变量刷新周期1 秒读取变量并更新显示的间隔3.3 刷新周期太快烧 CPU太慢看着卡WinCC 的棒图默认会按画面的更新周期去刷新变量。刷新周期太快CPU 消耗大太慢画面看着卡顿。我的做法是普通液位、压力显示刷新周期设 1 到 2 秒足够如果是快速变化的流量、转速建议 500 毫秒以内但如果不是特别需要不建议低于 250 毫秒。整个项目变量一多刷新风暴会拖累运行系统。调试期间可以把刷新周期临时缩短比如 250 毫秒这样能立刻看到数据变化效果。确认没问题后再调回正常的周期。别忘了画面本身的运行周期有些画面窗口默认的更新周期也不一样两者要配合起来看。3.4 比例因子和线性换算比例因子是经常被忽略但非常重要的属性。有的变送器输出 0 到 100%但工艺上要显示 0 到 3.5 兆帕如果不想在 PLC 里再转换一次就可以在 WinCC 端设置比例因子让原始百分比数值乘以一个系数后再和量程对应。这时务必确认比例因子和最大值最小值是协同工作的否则很容易出现条跑到一半就满量程的怪现象。我个人的习惯是把线性换算放在 PLC 里做WinCC 只负责读取工程量。这样逻辑更清晰排查问题的时候少一层换算。如果项目没有 PLC或者现场仪表直接走通讯协议那就只能在 WinCC 侧做标定了这时比例因子的计算一定要写在文档里方便后来的人维护。4. 颜色控制让条形图变得会说话条形图最容易被做成“死板绿条”或者“死板红条”。其实颜色是它最有价值的表现手段用好颜色操作员不需要读数字就能判断状态。4.1 静态颜色和基础样式条形图刚放出来的时候填充颜色一般是一个固定的颜色。如果你只想要一个朴素的过程值指示器那直接用静态颜色就够了。在属性窗口里找到“填充颜色”之类的属性选一个适合画面对比度、看起来舒服的颜色。要注意画面背景色和数据条颜色的对比。常见的问题是背景和条的颜色太接近运行时远看根本看不清条到哪个位置。深色背景下用亮绿色、亮黄色比较醒目浅色背景下用深蓝色、深绿色更清晰。边框颜色和刻度颜色也不要忽略它们影响整个画面协调性。4.2 按数值分段的变色逻辑实话说静态颜色只能算及格。更推荐的做法是让条形图自己会变色液位低于 20% 用红色代表危险20% 到 80% 用绿色代表正常高于 80% 再变成黄色甚至闪烁这样操作员凭颜色就能判断当前状态。实现方式有几种。一种是利用 WinCC 对象提供的颜色切换属性部分版本支持用变量或脚本控制对象的显示颜色另一种是直接用脚本在运行时判断 Tag 值再改对象的 FillColor 属性。下面给一个典型的 VBS 脚本思路一般放在画面对象的“变量变化”事件里触发Dim objBar Set objBar ScreenItems(Bar1) Dim val val HMIRuntime.Tags(TagProcessValue).Read If val 20 Then objBar.FillColor RGB(255, 0, 0) 红色表示低于下限 ElseIf val 80 Then objBar.FillColor RGB(0, 192, 0) 绿色表示正常 Else objBar.FillColor RGB(255, 255, 0) 黄色表示偏高 End If以上只是示例具体对象名称、属性名要以实际使用的 WinCC 版本为准。用脚本的好处是灵活坏处是需要额外维护。另一种更工程化的做法是把变色阈值判断放到报警或画面动态属性里让报警状态去驱动颜色。两种方式可以混用但不要把同一件事拆到太多地方。这里有一个很常见的坑脚本里判断的是 80但量程上限是 1000条已经在 800 的位置上正常显示了颜色却迟迟不变因为判断阈值和量程单位不一致。写脚本之前先确认判断数值和过程值用的是同一套量纲。4.3 报警状态下的闪烁效果如果想让异常状态更突出可以给条形图加闪烁效果。比如液位超过高报值填充颜色变成红色同时让条本身闪烁。闪烁在 WinCC 里通常可以通过对象的闪烁属性或动态属性实现也可以通过脚本切换可见性或颜色来模拟。闪烁频率不宜太快否则视觉疲劳一般 1 到 2 赫兹就可以了。实际操作中我建议把报警判断和颜色逻辑分离开报警判断在 PLC 或 WinCC 报警系统中做画面里的条形图只管根据一个“状态值”去显示颜色。这样画面脚本不会因为报警变量太多而变得臃肿后续维护也更清晰。提示颜色状态和数值显示不要互相干扰。有些同事在颜色脚本里跳转太多导致其他脚本执行被阻塞。尽量让颜色脚本短小精悍只做颜色判断不做复杂运算。5. 刻度、单位、对齐这些容易被忽略的细节条形图的可用性很大程度取决于刻度、单位和对齐这些“边角料”做得怎么样。技术没问题不代表画面好用操作员看着舒服才是关键。5.1 让刻度更有效主刻度、次刻度和数字标签条形图建好后如果不显示刻度那它就是一根光秃秃的条只能大概看个高低没法精准读值。一般属性里会有控制刻度是否可见的选项建议在调试阶段打开把主刻度、次刻度、数字标签都显示出来。主刻度的间距要根据量程来定。比如量程 0 到 5 米主刻度间隔 1 米就比较合适太密了数字会挤在一起看不清太疏了又起不到参考作用。数字标签的小数位数液位、温度这类数值保留一位小数就够压力、流量可以保留两位。画面的数字要尽量整齐统一不要有的显示 3.4有的显示 3.45观感会差很多。5.2 单位标注和标题说明条形图本身一般不带单位显示所以画面上要另外用静态文本对象把单位标出来比如“m”“MPa”“t/h”。单位标注最忌讳的是只标在某个角落画面一缩放就错位。我常用的做法是把单位、标题和条形图对象做在一个画面窗口里复用起来单位永远跟着图走。做批量设备时这个习惯能省下大量重复劳动。另外如果一组条形图代表不同设备最好在每个条的下方或上方标上设备位号。设备位号的字体不用太大但要清晰颜色和背景要有对比。操作员在紧急情况下要找某个罐如果设备位号看不清画面再漂亮也没用。5.3 多个条形图的批量对齐与统一尺寸一排条形图做对比时最怕高低错落、粗细不一看起来非常不专业。WinCC 图形编辑器里提供对齐和等尺寸分布工具。先选中多个条形图再执行对齐、均分、等宽操作很快就能排整齐。这里有一个小技巧如果几个条形图的量程都一样最好把它们的数据条起始线对齐到同一条水平线上比较起来才公平如果量程不同画的尺寸再整齐对比也没有意义。要么在组态时把量程统一要么在视觉上用底色区域明确区分不同设备的量程范围。比如量程不同的设备给条形图配上不同的背景色块让操作员知道这些图不是一个量纲。6. 常见问题与排查实录这部分是全文含金量最高的地方。条形图出问题的原因就那么几类但现场表现五花八门这里把最常见的现象和排查思路整理成一套组合拳。6.1 条形图不动或者一直满量程这是最常碰到的问题。不动先看变量是否正确地绑到了条形图上。右键对象打开属性找到过程值连接确认选择的是对的变量名。如果变量没连上运行画面后条会一直停留在初始位置怎么赋值都不动。再看变量刷新周期。如果刷新周期设成了 1 小时测试时当然感觉它不动。建议调试期间把刷新周期临时改短比如 250 毫秒测完再改回来。一直满量程最常见的原因是量程设反或者设太小。比如量程最大值设成 10实际过程值到了 100条当然触顶。还有一种情况是外部变量读到的是原始值而不是工程量。PLC 侧是 0 到 27648 的数字量WinCC 侧没有做线性转换满量程就成了常态。这时候要么在 PLC 里算好工程量再送进 WinCC要么在 WinCC 里做一次线性标定。6.2 条能上去但降不下来有一种非常隐蔽的坑条形图能正常上升但变量变小后条停留在原来的高度不下来。这种情况多半不是画面对象的问题而是数据源头的问题。比如外部变量用的是保持型寄存器或者 PLC 程序里对数值做了取大值处理再或者 WinCC 与 PLC 的通信变量被重复写入。排查时先断开画面连接直接看 WinCC 变量管理里的实时值。如果变量管理里的值已经变化了那问题在画面层如果变量管理里的值也是旧值那就是通信或 PLC 程序的问题。这样可以快速缩小范围。另外一个容易忽略的点是字节顺序。用 Modbus 或 S7 通信时如果字的高低位顺序不匹配读出来的数据可能表现出“只能增不能减”或者“跳变”的现象。外部通信协议里的数据格式必须在 WinCC 变量属性里仔细核对。6.3 颜色不随状态变化脚本写好了颜色却不生效通常有几种原因。第一脚本里的对象名不对。WinCC 运行时对象名和编辑态对象名必须一致如果你复制粘贴过对象很可能脚本里的名字和实际名字对不上。写脚本前先确认对象的“对象名称”属性。第二阈值单位不一致。前面已经提过脚本里判断的数值和量程、工程量的单位如果不一致颜色自然永远不触发。第三对象属性被静态值覆盖。如果 FillColor 属性在属性窗口中被设置成了固定值并且运行时属性优先级高于脚本赋值那脚本怎么改都可能不生效。必要时把属性的静态赋值清掉改由脚本统一控制。第四VBS 脚本的权限问题。WinCC 项目脚本运行时需要确认运行系统的事件权限已经开启否则事件不触发脚本内容根本不会执行。现象可能原因优先检查项条不动变量未绑定或刷新周期过长过程值连接、刷新周期一直满量程量程设置错误或未做线性换算最大最小值、PLC 工程量条降不下来数据源保持或字节顺序错位变量管理实时值、通讯格式颜色不变对象名/阈值/静态属性/脚本权限对象名、单位、属性优先级6.4 多个条形图导致画面卡顿一个画面上几十个条形图每个都绑定独立的外部变量并且刷新周期都设成 250 毫秒运行系统 CPU 很容易飙升。我的经验是尽量减少外部变量的直接刷新次数。多个仪表位号可以先在 PLC 侧打包到数据块WinCC 通过驱动通道读取数据块比一个一个读变量高效得多。画面上如果只需要展示几条不同设备的条形图可以用画面窗口切换不同设备组而不是把所有变量都实时刷新。条形图、趋势、报表这些对象别一股脑全放在同一个画面里能拆到分画面的就拆到分画面。图形对象的数量本身也是 WinCC 运行性能的重要影响因素。普通操作画面里放几十个对象无关痛痒但如果做全厂级总貌几百个带动态属性的对象同时刷新卡顿是必然的。合理的画面分层非常关键。我处理过一个大项目总貌画面里放了三百多个带动态填充的对象后来把大部分改成按需刷新的子画面窗口运行内存立刻降下来一大截。6.5 关于不同版本之间的差异WinCC 经典版本和 WinCC Unified 之间条形图对象的名称和属性路径有区别。经典版本里习惯叫“棒图”Unified 环境里的控件体系改动不小但核心逻辑一样一个对象绑定变量配置量程上下限再通过属性或脚本控制样式。如果你以前用的是经典版刚切到 Unified 时找不到对象是很正常的。我的建议是打开对象库搜索关键词比如 Bar、Progress、Level看看哪种控件最接近原来的行为。不要死盯着“棒图”这个名字找。另外Unified 里很多动态功能需要通过“属性动画”或“事件脚本”实现思路和经典版不完全一样但万变不离其宗。7. 现场调试里最实用的几条经验第七部分聊聊我自己的调试习惯都是在实际项目里磨出来的。第一先模拟后真值。每次接到新的画面任务我都会先建一个内部变量给个固定值把画面逻辑调通再接真实信号。这样做能最快区分画面问题还是数据源问题。如果画面没调通就接真实变量一旦数据出问题很难判断是画面配置错了还是外部信号错了现场容易陷入盲目查线。第二量程和单位写进组态说明。条形图的量程上下限、比例因子、单位这些信息最好在项目文档里写清楚。很多项目过了几年会被人接手新同事面对一个没有注释的条形图只能靠猜。调试时多写两行注释后面能省下几小时。第三颜色逻辑要集中管理。如果项目里有一批条形图不要每个图单独写一套颜色脚本那样维护量太大。我建议做一个公共的画面窗口模板把条形图、单位、标题、颜色逻辑都封装进去每个设备只用一个实例替换绑定的变量即可。这样规则改了只改模板一处所有画面都跟着更新。第四关注运行性能而不是炫技。条形图本身就擅长做直观展示不要让它承担太多“动画效果”。闪烁、渐变、实时刷新叠加太多操作员看着累系统运行也累。简单、清晰、稳定才是工控画面的第一原则。第五调试时多看变量管理器的实时值。很多人遇到条形图问题就翻来覆去调画面属性其实最快的方法是打开变量管理看目标变量的实时值是否在变。如果变量值没问题再回到画面找原因。画面和变量分开排查是我用过最省时间的思路。条形图确实是个小对象但越是这种基础对象越值得下功夫做细。它直接影响操作员的日常体验也直接影响一个项目的交付印象。希望这些经验能帮你少走弯路也欢迎按照你自己的项目特点去调整这些方法。