3. HMI实时数据模型设计

HMI 画面上的一个数字、一根趋势曲线、一个报警灯,背后都不是“直接读 PLC 地址”这么简单。如果每个控件都各自去访问 PLC,画面一多就会造成通信拥塞、刷新抖动、报警漏报。工程上通行的做法是在 HMI 与现场设备之间建立一层实时数据模型:把物理地址抽象成有语义的标签,把标签组织成数据点,给每个值附带时标与质量戳,再按实时与历史两条路径分层存储。本节围绕这四件事展开。

一、标签管理:从物理地址到语义对象

标签(Tag)是数据模型的最小命名单元。它至少包含四类信息:名称(如 Line1.Tank101.Level_PV)、数据源(PLC 型号、站号、寄存器区与偏移,如 S7-1200 / IP 192.168.0.10 / DB10.DBD0)、数据类型(REAL、INT、BOOL)、采集属性(扫描周期、死区、是否启用)。命名建议采用“区域.设备.测点.用途”的分层结构,例如 Line1.Tank101.Level_PV 表示 1 号线 101 罐液位过程值,Line1.Tank101.Level_SP 表示对应设定值。这样在画面绑定、报警配置、历史归档时都能按前缀批量筛选,避免出现 DB10_DBD0_1 这类无法维护的名字。

标签管理还要处理采集策略。不是所有点都需要 100 ms 扫描:液位、温度这类慢变量用 500 ms~1 s 即可;急停、联锁状态用 50~100 ms;而累计产量这类只在变化时上报的点,应启用“变化上报 + 死区”以减少通信量。死区(Deadband)指变化量小于阈值时不更新,例如液位死区设为 0.5%,可过滤掉传感器噪声引起的无意义刷新。

二、数据点建模:值、时标、质量三位一体

一个数据点(Data Point)不是单个数值,而是一个结构体:{value, timestamp, quality}。三者必须同时存在,缺一不可。只传值不传时标,趋势图就无法还原真实发生顺序;只传值不传质量,操作员会把通信中断时保持的旧值当成实时值。数据点建模的关键决策是“谁产生时标”:如果由 HMI 轮询后打时间戳,时标精度受扫描周期和网络抖动影响;如果由 PLC 或边缘网关在采集瞬间打戳(如 PLC 的 RTC 或网关的硬件时钟),精度更高。工程上对报警、事件、批次追溯类数据,优先采用源端时标;对普通画面刷新,可用 HMI 接收时标。

质量戳(Quality Stamp)通常按 OPC 规范分为 Good、Bad、Uncertain 三档,并可细分原因码:Good 表示值可信;Bad/CommFailure 表示通信中断;Bad/NotConnected 表示设备未连接;Uncertain/LastUsable 表示使用最后一次有效值;Uncertain/SensorFailure 表示传感器故障。HMI 必须根据质量戳改变显示方式:Good 正常显示,Uncertain 加黄色底或斜纹,Bad 显示灰色并叠加“---”或“通信中断”提示,而不是继续显示一个看似正常的数字。

HMI 实时数据模型:采集 → 建模 → 分层存储 → 消费 现场设备层 PLC / 变频器 / 仪表 DB10.DBD0 液位 M20.1 急停状态 RTC 源端时标 标签管理 Line1.Tank101.Level_PV 类型 REAL / 扫描 500ms 死区 0.5% / 变化上报 Line1.Tank101.Level_SP 数据点结构 value = 62.4 % timestamp = 10:23:41.250 quality = Good (值·时标·质量 三位一体) 分层存储 实时层:内存/环形缓冲 历史层:时序数据库 归档层:压缩/冷存储 按时间+质量分区 数据消费层(同一数据点,不同用途走不同路径) 画面实时刷新 趋势曲线 报警与事件 报表与批次追溯 质量戳决定显示与处理方式 Good 正常显示,参与报警 Uncertain 黄底/斜纹,提示不可信 Bad 灰显/“---”,禁止误判 LastUsable 保留最后有效值

三、时标与质量戳:让数据“可追溯、可判断”

时标要区分采集时标与接收时标。采集时标是现场值真正产生的时刻,接收时标是 HMI 收到数据的时刻。两者之差反映通信延迟。若某标签接收时标持续比采集时标晚 2 s 以上,说明该链路存在拥塞或扫描周期设置过长,应检查通信负载。时标统一使用带时区的 ISO 8601 格式(如 2025-03-18T10:23:41.250+08:00),避免夏令时或跨时区部署时出现顺序错乱。

质量戳的传播规则同样重要:当通信中断时,HMI 不应把该标签的所有派生量都标为 Good。例如液位为 Bad 时,由液位计算出的“罐容体积”“剩余可用时间”也应降级为 Uncertain 或 Bad,否则操作员会基于错误数据做决策。实现上可在数据点模型中增加 sourceQuality 字段,派生点继承源点质量,取最差质量作为自身质量。

四、历史与实时数据分层存储策略

实时数据与历史数据的访问特征完全不同:实时数据要求低延迟、高频刷新、只关心“当前值”;历史数据要求高压缩比、长时间保留、支持按时间范围查询。因此应分层存储:

  • 实时层:驻留内存,采用环形缓冲保存最近 1~5 分钟数据,供画面刷新和短趋势使用,读写延迟在毫秒级。
  • 历史层:写入时序数据库(如 InfluxDB、TimescaleDB 或组态软件自带归档),按标签+时间分区,保存原始值或按死区压缩后的值,保留 1~3 年。
  • 归档层:对超过 1 年的数据做降采样(如 1 分钟均值、最大值、最小值),转存冷存储,保留 5~10 年,满足追溯与审计要求。

分层的关键参数是存储周期与压缩策略。以液位标签为例:实时层保留 5 分钟;历史层每 1 s 存一个值,启用死区 0.5%,即变化不足 0.5% 时不写入;归档层每小时存一条均值。这样单点日增记录从 86400 条降到约 2000~5000 条,显著降低存储与查询压力。查询时,画面短趋势读实时层,日报表读历史层,年度审计读归档层,各取所需。

设计检查点:每个标签是否都有明确的采集周期与死区?每个数据点是否都带时标和质量戳?通信中断时画面是否有明确的降级显示?历史存储是否按时间分区并配置了保留策略?这四点决定了 HMI 数据模型是否可靠。