2. Variable 数据采集基础:Variable 定义、数据采集流程、采集周期与触发机制

在工业通信与自动化控制系统中,Variable(变量) 是数据采集的最小逻辑单元。理解 Variable 的定义、采集流程、周期与触发机制,是后续进行 Session 建立与性能优化的前提。本章将系统梳理这些基础概念,并揭示它们对通信性能的直接影响。

2.1 Variable 定义与属性

Variable 是对物理或逻辑数据点的抽象描述。在 OPC UA、Modbus、PROFINET 等协议中,Variable 通常包含以下核心属性:

属性 说明 示例值
NodeId 全局唯一标识符,用于定位变量 ns=2;i=1001
DataType 数据类型,决定存储与传输大小 Int32, Float, Boolean
ValueRank 值的维度(标量/数组/矩阵) -1 (标量), 1 (一维数组)
AccessLevel 访问权限(读/写/读写) CurrentRead, CurrentWrite
MinimumSamplingInterval 最小采样间隔(毫秒),限制采集频率 100 (ms)
Historizing 是否启用历史数据存储 True / False
性能提示: 在定义 Variable 时,应尽量使用最小必要数据类型(如使用 Int16 而非 Int64),并合理设置 MinimumSamplingInterval,避免无效高频采集消耗带宽与 CPU。

2.2 数据采集流程

一个完整的 Variable 数据采集流程通常包含以下 5 个阶段:

  1. 变量发现与注册: 客户端通过协议查询服务器地址空间,获取 Variable 的 NodeId 与元数据。
  2. 订阅创建: 客户端创建一个 Subscription(订阅),并将目标 Variable 添加到 MonitoredItem(监控项)列表中。
  3. 采样与缓存: 服务器按采样周期读取 Variable 值,并暂存于内部缓存队列。
  4. 发布通知: 服务器按发布周期将缓存中的数据打包成 PublishResponse,发送给客户端。
  5. 数据消费: 客户端解析响应,更新本地变量副本,并触发上层应用逻辑。
关键点: 采样周期与发布周期是独立的。采样周期决定数据读取频率,发布周期决定网络传输频率。合理解耦这两个周期是性能优化的核心手段之一。
Variable 数据采集流程 ① 变量发现与注册 ② 订阅创建 ③ 采样与缓存 ④ 发布通知 ⑤ 数据消费 持续循环 流程说明 • 采样周期:③ 内部频率 • 发布周期:④ 网络频率 • 缓存队列:③→④ 缓冲 • 解耦设计:性能关键

2.3 采集周期

采集周期是影响通信性能最直接的参数。在 OPC UA 中,主要涉及两个独立周期:

  • SamplingInterval(采样周期): 服务器读取 Variable 原始值的时间间隔。单位毫秒,最小值为 MinimumSamplingInterval。
  • PublishingInterval(发布周期): 服务器将缓存数据打包发送给客户端的时间间隔。单位毫秒,通常为采样周期的整数倍。
参数 作用域 典型值 性能影响
SamplingInterval 服务器本地 100 ms ~ 1000 ms CPU 负载、内存缓存大小
PublishingInterval 网络传输 500 ms ~ 5000 ms 网络带宽、报文数量、延迟
常见误区: 将采样周期设置得极短(如 1 ms)但发布周期很长(如 10 s),会导致服务器缓存队列急剧膨胀,引发内存溢出或数据丢弃。建议采样周期与发布周期保持 1:5 ~ 1:10 的比例。

2.4 触发机制

Variable 数据采集的触发方式决定了数据何时被采集与上报。常见的触发机制包括:

  • 定时触发(Cyclic): 按固定采样周期周期性采集。适用于温度、压力等缓变信号。
  • 变化触发(DataChange): 仅当 Variable 值变化超过死区(Deadband)时触发采集与上报。适用于开关量、状态位。
  • 事件触发(Event): 由特定系统事件(如报警、故障)触发采集。适用于异常监控。
  • 查询触发(Polling): 客户端主动发起 Read 请求,服务器响应。适用于低频、按需采集。
四种触发机制对比 定时触发 固定周期采集 适用:缓变信号 CPU 负载:中 变化触发 值变化 + 死区 适用:开关量 CPU 负载:低 事件触发 系统事件驱动 适用:报警/故障 CPU 负载:突发高 查询触发 客户端主动请求 适用:按需采集 CPU 负载:低 根据 Variable 特性选择最优触发机制 死区(Deadband):值死区 / 百分比死区 / 无死区

2.5 性能优化要点总结

核心优化原则:
  • 减少无效采样: 对缓变信号使用变化触发 + 死区,避免定时触发浪费 CPU。
  • 合理设置周期比例: 采样周期 : 发布周期 ≈ 1:5 ~ 1:10,避免缓存堆积。
  • 批量订阅: 将多个 Variable 放入同一个 Subscription,减少 Publish 报文数量。
  • 数据类型优化: 使用最小必要数据类型,减少单 Variable 传输字节数。
  • 避免过度查询: 优先使用订阅模式而非轮询模式,降低网络往返次数。