4. 可视化对象与图元设计
在AVEVA的可视化体系中,图元是画面与数据之间的“最后一公里”。设备图元库解决“画什么”,状态颜色与动画规则解决“怎么变”,属性绑定解决“变什么”,动态数据驱动解决“何时变”,模板化解决“如何批量复用”。这五件事构成一条从资产模型到操作画面的完整设计链,任何一环脱节,画面都会退化成静态示意图。
一、设备图元库:按资产类型分层组织
图元库不是一堆零散图形的集合,而应按资产分类树组织。建议采用“类型—子类型—变体”三级结构:第一级对应设备大类,如泵、阀、罐、换热器、电机;第二级对应结构差异,如离心泵、往复泵、齿轮泵;第三级对应状态变体,如运行、停止、故障、检修。每个图元应包含几何轮廓、连接点(锚点)、状态图层和属性占位符四部分。
以离心泵为例,其图元至少需要:入口锚点、出口锚点、轴功率显示位、运行状态色块、故障角标。锚点决定了管道能否自动吸附连接,属性占位符决定了后续能否绑定位号、流量、转速等资产属性。图元命名建议采用“类型_子类型_变体”格式,例如 Pump_Centrifugal_Run,便于在模板中按规则检索和替换。
二、状态颜色与动画规则:让状态可读而非炫技
状态颜色应遵循“语义优先、色盲友好、层级分明”三条原则。推荐一套基础色板:运行/正常用青绿色(#2E9E7B),停止/待机用中性灰(#8A94A6),报警/故障用橙红(#E05A3A),检修/锁定用紫色(#7B61C9),离线/失联用深灰虚线边框。颜色只承担状态语义,不承担设备类型区分,否则画面会因颜色过多而失去可读性。
动画规则要克制。旋转动画只用于旋转设备(泵、风机、压缩机),且转速应与实际转速成比例映射,例如 0–3000 rpm 映射为 0–1.5 圈/秒;闪烁只用于未确认的高优先级报警,频率建议 1 Hz,避免高频闪烁引发视觉疲劳;流动动画用于管道介质方向,箭头密度可随流量变化。所有动画都应提供“静态降级”选项,在低性能终端或打印视图中自动关闭。
三、图元与资产属性绑定:从图形到数据的映射
绑定的本质是建立“图元属性—资产属性”的映射表。在AVEVA中,通常通过图元的自定义属性(Custom Properties)挂接资产模型中的属性路径。例如,将泵图元的 FillColor 绑定到 Asset.Status,将 Tooltip 绑定到 Asset.TagName + Asset.Description,将 RotationSpeed 绑定到 Asset.Speed。
绑定方式有两种:直接绑定和表达式绑定。直接绑定适合一一对应,表达式绑定适合需要转换的场景,例如 IF(Asset.Status="Running", #2E9E7B, IF(Asset.Status="Fault", #E05A3A, #8A94A6))。建议在绑定前先定义一份“属性映射清单”,明确图元属性名、资产属性路径、数据类型、默认值和转换规则,避免后期出现“图元变色但数据未更新”的隐性错误。
四、动态数据驱动图元变化:从数据到视觉的链路
动态数据驱动图元变化,需要打通“数据源—绑定—渲染”三段链路。数据源可以是实时历史数据库、OPC UA 接口或资产模型服务;绑定层负责将数据值映射为图元可识别的状态码或数值;渲染层根据状态码切换颜色、动画或可见性。
以泵出口压力为例:数据源每 1 秒推送一次压力值,绑定层将压力值映射为“正常/偏高/超限”三档状态码,渲染层根据状态码切换出口管道的颜色和报警角标。这里的关键是“状态码”作为中间层,而不是让图元直接读取原始数值,这样可以在不修改图元的情况下调整阈值。建议在画面中增加一个“数据质量”指示,当数据源断线或质量戳为 Bad 时,图元应显示为灰色虚线并标注“数据不可用”,而不是保持上一次的绿色。
五、图元复用与模板化:从单点设计到批量交付
模板化是图元库规模化的关键。一个泵模板应包含:图元实例、属性绑定、状态规则、动画规则、报警角标和默认尺寸。使用时只需替换资产实例的位号,模板会自动完成绑定和状态映射。模板应支持“继承—覆盖”机制:子模板继承父模板的通用规则,只覆盖差异部分,例如某台泵需要额外的振动监测角标,只需在子模板中增加该角标,而不必重建整个模板。
建议建立模板版本管理,每次修改模板后记录版本号和变更说明,避免已发布画面因模板更新而出现意外变化。模板的复用粒度可以按“设备类型”或“工艺单元”划分,前者适合标准化设备,后者适合成套装置。
六、一个可落地的配置示例
假设某化工厂需要为 12 台离心泵建立可视化画面。首先在资产模型中确认每台泵的位号、状态、转速、出口压力四个属性。然后创建泵模板 Pump_Centrifugal_Template,在模板中完成以下绑定:
FillColor = IF(Status="Running", #2E9E7B,
IF(Status="Fault", #E05A3A,
IF(Status="Maintenance", #7B61C9, #8A94A6)))
RotationSpeed = IF(Status="Running", Speed * 0.0005, 0)
Tooltip = TagName + " | " + Description + " | 压力: " + Pressure + " MPa"
AlarmBadge.Visible = IF(Pressure > 1.6, True, False)
模板发布后,在画面中拖入 12 个实例,分别替换位号即可。运行后观察:正常泵显示青绿色并旋转,故障泵显示橙红色并停止旋转,出口压力超过 1.6 MPa 的泵出现报警角标。若某台泵数据源断线,图元应变为灰色虚线并显示“数据不可用”,而不是保持绿色。通过这一套流程,图元库、状态规则、属性绑定、动态驱动和模板化五者形成闭环,画面才真正具备工程可用性。