4. 数据采集原理

PI Historian 的数据采集并不是“把值读进来存起来”这么简单。它是一条从现场设备到归档存储的完整链路:接口负责通信,扫描周期决定何时读,采集频率决定归档密度,异常报告决定哪些值值得写,缓冲与断点续传则保证网络中断后数据不丢。理解这五个环节的配合关系,才能设计出既准确又高效的采集方案。

一、接口类型:决定“怎么读”

PI 接口(Interface)是采集链路的起点,按通信方式可分为几类:

  • OPC DA / OPC UA 接口:最常见,通过 OPC 服务器读取 DCS、PLC 的实时值,适合中大型控制系统。
  • 专用驱动接口:如 PI Modbus、PI Siemens S7、PI Allen-Bradley 等,直接与 PLC 通信,不依赖中间 OPC 层,延迟更低。
  • API / 文件接口:通过 REST、CSV、数据库表等方式采集第三方系统数据,适合实验室、计量、ERP 等非实时源。
  • PI-to-PI 接口:用于多个 PI 系统之间的数据同步与级联。

接口选型要看三点:数据源协议、实时性要求、是否需要写回控制。接口本身不决定采集频率,它只提供“可读通道”,频率由扫描周期参数控制。

二、扫描周期与采集频率:决定“多久读一次、存多密”

这两个概念最容易混淆。扫描周期(Scan Period)是接口向数据源发起读取的时间间隔;采集频率(Collection Frequency)是归档中允许写入的最小时间间隔。前者是“读”,后者是“存”。

例如扫描周期设为 1 秒,接口每秒读一次值;但如果采集频率设为 10 秒,只有距上次归档超过 10 秒的值才会被写入归档。若值变化剧烈,异常报告会突破这个限制。

参数作用典型值设置过大后果
扫描周期接口读取数据源的间隔1s / 5s / 30s丢失快速变化过程
采集频率归档允许写入的最小间隔5s / 15s / 60s归档点过密,存储膨胀
异常偏差触发异常报告的变化阈值0.5% / 1% / 2%小波动被忽略
异常最长时间无变化时强制归档的间隔300s / 3600s长时间无数据点
经验法则:扫描周期应小于过程最快变化周期的 1/3;采集频率可等于或大于扫描周期,但异常报告必须开启,否则稳态过程会形成大量无意义数据点。

三、异常报告:决定“哪些值值得写”

异常报告(Exception Reporting)是 PI 采集的核心节能机制。接口每次扫描后,将当前值与上一次归档值比较,只有满足以下任一条件才写入归档:

  1. 变化量超过设定的异常偏差(如 1%);
  2. 距上次归档时间超过异常最长时间(如 1 小时);
  3. 值质量码发生变化(如 Good 变 Bad)。

这样既保留了过程变化的关键拐点,又避免了稳态下每秒写一个相同值。异常报告关闭时,归档会按采集频率机械写入,数据量可能增加数十倍。

四、缓冲与断点续传:决定“断了怎么办”

现场网络抖动、OPC 服务器重启、接口进程崩溃都会造成采集中断。PI 接口通过两级缓冲保证数据不丢:

  • 接口内存缓冲:接口进程内维护一个队列,网络中断时先写入内存,恢复后按时间顺序补发。
  • PI 缓冲子系统(PI Buffer Subsystem):独立服务,将数据写入本地磁盘队列文件,即使接口进程崩溃或服务器重启,数据仍保留在磁盘上,恢复后自动续传。

断点续传的关键是时间戳。接口补发时携带原始采集时间戳,PI 归档按时间顺序插入,不会把旧数据当成新数据。若缓冲队列写满,接口会丢弃最旧数据并记录日志,因此需要监控缓冲深度。

# 查看 PI 缓冲队列状态(示例)
pibufss -status
# 输出关键字段:
# Queue File Size : 2048 MB
# Queued Events   : 152340
# Oldest Event    : 2024-06-01 08:12:33
# Buffer Status   : ONLINE

五、案例:某化工厂反应釜温度采集优化

某反应釜温度原设置:扫描周期 1s,采集频率 1s,异常报告关闭。结果每天产生 86400 个点,但其中 90% 是重复值。优化后:扫描周期保持 1s,采集频率改为 30s,异常偏差设为 0.5%,异常最长时间 600s。数据量下降约 85%,而升温、恒温、降温三个阶段的拐点全部保留。一次网络中断 12 分钟后,PI 缓冲子系统自动补发 720 个点,时间戳与现场记录完全对齐。

常见误区:把采集频率设得比扫描周期还小,以为“存得越密越准”。实际上接口根本读不到那么快,归档只会写入重复值,既浪费存储又掩盖真实变化。另一个误区是只开异常报告却不设异常最长时间,导致长时间稳态过程完全没有数据点,趋势图出现断线。

六、复盘:五个参数的联动检查清单

  • 接口类型是否匹配数据源协议,是否支持所需读写方向;
  • 扫描周期是否小于过程最快变化周期的 1/3;
  • 采集频率是否与扫描周期协调,避免无效重复写入;
  • 异常偏差与异常最长时间是否同时设置,兼顾灵敏与连续;
  • PI 缓冲子系统是否启用,队列深度是否有监控与告警。
PI 数据采集链路:接口 → 扫描 → 异常报告 → 缓冲 → 归档 现场设备 DCS / PLC / 仪表 PI 接口 OPC UA / Modbus S7 / API 扫描周期 1s / 5s / 30s 读取间隔 异常报告 偏差 / 最长时间 质量码变化 PI 归档 时间序列 PI 缓冲子系统(PI Buffer Subsystem) 磁盘队列 · 断点续传 · 时间戳保序 队列深度监控 · 写满丢弃最旧 · 自动补发 网络中断 / 接口重启 数据先入内存队列 → 再落磁盘队列 恢复后按原始时间戳顺序补发,不丢点 关键参数联动: 扫描周期(读) ≤ 采集频率(存) | 异常偏差触发写入 | 异常最长时间保证稳态有数据点 缓冲队列深度需监控,写满时丢弃最旧数据并告警 | 断点续传依赖原始时间戳保序

把接口、扫描周期、采集频率、异常报告、缓冲续传这五个环节串起来看,PI 采集的本质就是:用合适的频率读取,用异常报告筛选,用缓冲兜底,最终在归档中留下一条既完整又精简的时间序列。参数之间不是孤立的,任何一个设置过大或过小,都会在数据量、实时性和完整性之间产生连锁反应。