3. Historian数据模型
PI Historian 并不是一个“把数据塞进表里”的关系数据库,它是一套面向过程工业的时间序列数据库。理解它的数据模型,是后续做接口配置、采集调优、归档查询和故障排查的基础。本节围绕五个核心概念展开:时间序列数据、标签点(Tag)、属性(Attribute)、事件帧(Event Frame)以及压缩与存储机制。它们共同构成了 Historian 从“采集一个值”到“长期归档并可被业务查询”的完整链路。
一、核心原理:从时间序列到标签点
时间序列数据是 Historian 的最小数据单元,其本质是“某个测量对象在某个时刻的值”。一条时间序列记录通常由三要素构成:时间戳(Timestamp)、数值(Value)和质量码(Quality)。时间戳决定数据在时间轴上的位置,数值是过程量,质量码则说明该值是否可信,例如 Good、Bad、Questionable 等。质量码是 PI 数据模型区别于普通时序库的重要特征,它让上层应用能够判断“这个值能不能用”。
标签点(Tag / PI Point)是时间序列数据的载体和命名单元。一个标签点代表一个可被采集、存储和查询的测点,例如 BA:FI:101.PV 表示某台流量计的过程值。标签点不是“一行数据”,而是一个长期存在的对象,它拥有自己的属性集合,并持续接收来自接口的数值流。可以把标签点理解为“一个测点的档案袋”,时间序列数据则是不断放入档案袋的记录。
属性(Attribute)描述标签点的元数据与配置,例如描述(Descriptor)、工程单位(EngUnits)、量程上下限(Zero/Span)、点类型(PointType)、采集接口(PointSource)、扫描周期、压缩开关、异常限值等。属性决定了 Historian 如何采集、如何压缩、如何显示这个点。属性配置错误,往往表现为“数据能进来但查不到”“单位不对”“压缩后曲线失真”等典型问题。
二、事件帧:把“时间段”变成可查询对象
时间序列数据回答的是“某时刻值是多少”,而事件帧(Event Frame)回答的是“某段时间发生了什么”。事件帧是 Historian 中用于描述批次、报警、停机、检修、实验等有开始和结束的业务事件对象。它通常包含名称、模板、开始时间、结束时间、持续时间、关联标签点以及自定义属性。例如一个“反应釜批次 A”的事件帧,可以关联温度、压力、搅拌转速等标签点,从而支持“按批次查询过程曲线”。
事件帧与标签点的关系是“多对多”:一个事件帧可以关联多个标签点,一个标签点也可以被多个事件帧引用。这种模型让 Historian 不只是存储数据,还能把数据组织成业务语义,为批次分析、SPC 统计、报警复盘提供结构支撑。
三、压缩与存储机制:为什么历史数据能存很久
Historian 的核心优势之一是高效的压缩与存储。它采用“例外偏差 + 压缩”两级机制。例外偏差(Exception Deviation)决定接口是否把新值发送到服务器:当新值与上一次归档值的偏差超过设定阈值时,才认为“值得记录”。压缩(Compression)则在服务器端进一步判断:如果新值落在由前两个归档值构成的趋势带内,则丢弃该值,只保留能代表趋势的关键点。这样既保留了曲线形状,又大幅减少存储量。
存储层面,Historian 使用专有的归档文件(Archive)而非普通表。归档文件按时间顺序写入,支持在线扩展和滚动归档。每个标签点的数据在归档中按时间索引,查询时通过时间范围快速定位。归档文件的大小、数量、备份策略直接影响系统可用性,因此生产环境通常配置主归档、副归档和定期备份。
关键理解:压缩不是“丢数据”,而是“用更少的点表达同样的趋势”。压缩阈值设置过松会导致曲线失真,设置过紧则存储增长过快。工程上需要根据测点的重要性和变化速率分别配置。
四、数据模型关系图解
下图展示了 Historian 数据模型中各对象之间的关系:接口从数据源采集值,写入标签点;标签点拥有属性并产生时间序列数据;事件帧关联标签点,形成业务时间段;压缩与归档机制作用于时间序列数据,最终形成长期存储。
五、案例与场景:批次分析中的模型协作
假设某化工厂要分析“反应釜批次 A”的质量波动。工程师首先在 Historian 中建立标签点:R201.TEMP.PV、R201.PRESS.PV、R201.SPEED.PV,并配置单位、量程和压缩阈值。然后创建事件帧模板“反应釜批次”,在批次开始时写入开始时间,结束时写入结束时间,并关联上述三个标签点。查询时,用户只需选择“批次 A”,系统就能自动截取该时间段内的温度、压力、转速曲线,进行对比分析。如果没有事件帧,用户只能手动输入时间范围,效率低且容易出错。
六、常见误区与复盘
- 误区一:把标签点当成“表的一行”。标签点是长期对象,时间序列数据才是不断追加的记录。删除标签点会同时影响其历史数据和关联事件帧。
- 误区二:压缩阈值随意设置。压缩过松会导致关键峰值被过滤,压缩过紧会导致归档快速增长。建议按测点变化速率和业务精度要求分别配置。
- 误区三:忽略质量码。只关注数值而忽略质量码,可能把 Bad 值当成有效数据用于报表,造成误判。
- 误区四:事件帧只建不用。事件帧需要与业务流程(如 MES 批次号)联动,否则只是“空壳”,无法发挥业务价值。
七、核心对象速查清单
| 对象 | 作用 | 关键内容 | 典型示例 |
|---|---|---|---|
| 时间序列数据 | 记录某时刻的值 | 时间戳、数值、质量码 | 08:00:00, 125.6, Good |
| 标签点 Tag | 测点的命名与配置单元 | 点名、点类型、接口、扫描周期 | BA:FI:101.PV |
| 属性 Attribute | 描述标签点的元数据 | 单位、量程、压缩开关、异常限 | EngUnits = m³/h |
| 事件帧 Event Frame | 描述有起止时间的业务事件 | 名称、模板、开始/结束时间、关联点 | 批次 A:08:00 ~ 12:00 |
| 压缩与归档 | 减少存储并保留趋势 | 例外偏差、压缩、Archive 文件 | 压缩后保留 5 年数据 |
实践建议:在配置新测点时,先明确“这个点属于哪个业务对象、需要保留多长、精度要求多少”,再决定标签点属性、压缩阈值和是否纳入事件帧。数据模型设计得好,后续查询和分析会事半功倍。
# 典型标签点属性配置示例(PI SMT / PI Builder)
Tag Name: BA:FI:101.PV
Descriptor: 1号流量计过程值
PointSource: OPCINT
PointType: Float32
EngUnits: m3/h
Zero: 0
Span: 500
CompDev: 0.5
CompMin: 0
CompMax: 3600
ExcDev: 0.1
ExcMin: 0
ExcMax: 60
Step: ON