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 | 长时间无数据点 |
三、异常报告:决定“哪些值值得写”
异常报告(Exception Reporting)是 PI 采集的核心节能机制。接口每次扫描后,将当前值与上一次归档值比较,只有满足以下任一条件才写入归档:
- 变化量超过设定的异常偏差(如 1%);
- 距上次归档时间超过异常最长时间(如 1 小时);
- 值质量码发生变化(如 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 采集的本质就是:用合适的频率读取,用异常报告筛选,用缓冲兜底,最终在归档中留下一条既完整又精简的时间序列。参数之间不是孤立的,任何一个设置过大或过小,都会在数据量、实时性和完整性之间产生连锁反应。