2. WinCC历史数据体系总览
建设生产历史数据平台,第一步不是写接口、建库表,而是把 WinCC 内部“数据从哪里来、以什么形式存在、能保留多久、如何被读出”这件事彻底摸清。WinCC 的历史数据并非集中在一个文件里,而是由归档系统统一管理、由多个归档类型分别承载:过程值归档(变量记录)保存连续变化的模拟量与离散量,报警记录保存报警的产生、确认、消失等事件,用户归档则用于保存批次、配方、质检等结构化业务数据。三者共用“归档”这一底层机制,但数据模型、写入方式和访问接口差异很大。若把它们混为一谈,后续平台就会出现“变量能读、报警读不全”“用户归档查不到历史批次”等典型问题。
一、WinCC 归档系统的底层结构
WinCC 的归档系统由归档管理器(Archive Manager)统一调度,其核心概念是“分段(Segment)”。每个归档不是单个文件,而是一组按时间切分的分段文件,默认按天或按大小滚动。分段文件通常位于项目路径下的 ArchiveManager 目录,过程值归档为 *.bin(快速归档)或 *.emf(慢速归档),报警记录同样以分段形式存储。理解分段机制对平台建设至关重要:读取历史数据时,必须按时间范围定位到对应分段,而不是直接扫描整个归档目录。
归档的存储位置、分段大小、备份策略由归档组态决定。常见做法是将在线归档放在高速磁盘,通过“归档备份”功能定期转存到历史服务器。平台若直接读取在线分段,需注意分段切换瞬间的文件占用问题;若读取备份归档,则要保证备份完整性与时间连续性。
二、变量记录:过程值归档
变量记录(Tag Logging)负责过程值归档,是平台数据量最大的来源。组态时需为每个归档变量指定采集周期、归档周期和归档类型。采集周期决定变量值多久被采样一次,归档周期决定采样值多久写入归档一次。两者可以不同:例如采集周期 500 ms、归档周期 1 s,则归档中每秒保留一个值。归档类型分为过程值归档(连续模拟量)、周期归档(按固定周期写入)和事件驱动归档(由触发变量控制)。
平台读取变量记录时,最常用的是 WinCC 的 Connectivity Pack 或 WinCC OLE DB Provider,通过 SQL 风格查询访问归档。典型查询需要指定归档名、变量名和时间范围。例如查询某温度变量在指定时间段的值,返回的是“时间戳 + 值 + 质量码”三元组。质量码用于判断该值是否有效,平台入库时必须保留,不能只存数值。
-- 示例:通过 WinCC OLE DB 查询过程值归档(示意)
SELECT ValueID, TimeStamp, RealValue, QualityCode
FROM ProcessValueArchive_01
WHERE VariableName = 'TIC101_PV'
AND TimeStamp BETWEEN '2024-06-01 08:00:00' AND '2024-06-01 09:00:00'
ORDER BY TimeStamp;
需要特别注意的是,变量记录的归档周期与平台采集周期不是一回事。平台若以 1 分钟粒度做趋势展示,而归档周期是 1 秒,则需要在读取后做降采样或聚合,否则单次查询可能返回数万条记录,拖垮接口。
三、报警记录:事件型数据源
报警记录(Alarm Logging)保存的是报警事件,而非连续值。每条报警包含报警号、报警文本、到达时间、确认时间、消失时间、报警类别和优先级等字段。与变量记录不同,报警记录是“事件驱动”的:只有报警状态发生变化时才产生记录。平台读取报警记录时,通常关注三类时间:到达时间(Alarm In)、确认时间(Acknowledged)、消失时间(Alarm Out)。
报警记录同样通过 OLE DB 或 Connectivity Pack 访问,但其表结构与过程值归档不同,字段更多、关联更复杂。平台数据地图中应明确报警记录的归档名、报警类别过滤条件以及是否需要关联变量记录做“报警前后趋势回放”。例如,某压力高高报警发生后,平台需要自动关联该压力变量前后 5 分钟的趋势数据,这就要求报警记录与变量记录在时间轴上对齐。
四、用户归档:结构化业务数据
用户归档(User Archive)是 WinCC 中用于保存批次、配方、质检结果等结构化数据的归档类型。与变量记录和报警记录不同,用户归档的数据结构由用户自定义,可以包含多个字段(如批次号、产品型号、开始时间、结束时间、操作员、质检结论)。用户归档通过 WinCC 的 User Archive 控件或 UA 接口读写,平台通常通过 OLE DB 访问其底层表。
用户归档的价值在于它把“生产事件”与“过程数据”关联起来。例如,一个批次对应一条用户归档记录,平台可以用批次号作为外键,把该批次时间段内的变量记录和报警记录串联起来,形成完整的批次追溯视图。因此,用户归档是平台数据地图中的“索引层”,而不是简单的数据表。
五、建立平台数据地图
把上述四类数据源梳理成一张数据地图,是平台设计的关键交付物。数据地图至少应包含:数据源名称、归档类型、存储位置、分段周期、保留时长、访问接口、关键字段、时间字段、质量码字段、关联关系。下表给出一个示例结构,实际项目中应按现场组态逐项填写。
| 数据源 | 归档类型 | 访问接口 | 关键字段 | 时间字段 | 关联关系 |
|---|---|---|---|---|---|
| 过程值归档 | 变量记录 | OLE DB / Connectivity Pack | 变量名、值、质量码 | TimeStamp | 按变量名与时间关联报警 |
| 报警记录 | 报警归档 | OLE DB / Connectivity Pack | 报警号、文本、类别 | In / Ack / Out | 按时间关联过程值 |
| 用户归档 | 用户归档 | OLE DB / UA 接口 | 批次号、产品、结论 | 开始/结束时间 | 批次号关联过程值与报警 |
数据地图不是一次性文档,而应随组态变更同步更新。平台开发前,建议先用 WinCC 自带的归档查询工具或 OLE DB 测试连接,确认每个归档可读、字段可识别、时间范围可定位。只有数据地图清晰,后续的采集、存储、查询和展示才有可靠依据。
从这张数据地图出发,平台后续的采集任务就可以按“归档类型 + 时间范围 + 关联键”三个维度拆分:变量记录按变量名和时间段批量读取,报警记录按报警类别和时间段增量读取,用户归档按批次号读取并作为关联入口。三者最终在平台侧按时间戳和批次号完成对齐,形成可追溯、可查询、可分析的生产历史数据底座。