3 OPC 接口基本知识
3.5 OPC 统一架构
3.5.2 OPC UA 接口
3.5.2.5 如何监视 UA 数据和事件?
术语定义
术语 含义
订阅 订阅用于从 OPC UA 服务器到客户端传输数据。 订阅包含 一组以通知形式传送给客户端的 MonitoredItem。
MonitoredItem 客户端定义 MonitoredItem 以获取数据和事件。
MonitoredItem 标识要监视的数据项、与其对应的订阅和通 过订阅传输数据的通知。
数据项 数据项可以是任意节点属性。
通知 描述数据值或事件变化的数据结构。 此数据结构以
MonitoredItem 的数据填充。
通知消息 通知由订阅封装在 NotificationMessage 中传送给客户端。
发布请求 客户端发给服务器的数据传输请求
属性 OPC UA 规范定义的简单节点特性。
节点/ NodeID
节点是名称空间的基本组成部分。 每个节点都由其 NodeID 标识。
3.5 OPC 统一架构
MonitoredItem 模型
MonitoredItem 模型描述以下属性或对象的监视:
● 属性
监视属性值是否更改。 属性的每次更改都会生成一条通知(不使用过滤器,见下 文)。
不要将属性与变量的值属性互相混淆。
● 变量
变量可以更改值或状态。 与上面提到的“属性”不同,对于变量,监视变量的“值属性”
(状态)。
● 节点
节点可以提供值和事件。 事件只能由节点构成(“SubscribeToEvents”位已在
“EventNotifier attribute”中置位)。 可使用对象和视图监视事件。
图 3-27 MonitoredItem 模型
使用 MonitoredItem 模型监视数据概述
监视数据时,信息按以下步骤通过 OPC UA 服务器从设备传送到 OPC UA 客户端:
1. UA 客户端为每个要监视的数据项定义一个 MonitoredItem。
2. 对采样设备的数据项监视属性、变量或节点以及存储在 MonitoredItem 中的当前数 据。
3. 每个 MonitoredItem 生成一条通知(如果这由 MonitoredItem 的监视模式启用,请参 见 MonitoredItem 的属性)。
4. 订阅将通知封装在 NotificationMessage 中。
5. 订阅将 NotificationMessage 传送到客户端。
6. 客户端确认接收 NotificationMessage。
MonitoredItem 的属性
MonitoredItem 有四种属性,各具以下功能:
● 采样间隔
订阅具有一个或多个由客户端分配的 MonitoredItem。 MonitoredItem 生成由订阅集成到 NotificationMessage 的通知。 订阅将一条或多条 NotificationMessage 传输到客户端。
使用“CreateSubscription”服务创建订阅。 这具有下列特性:
3.5 OPC 统一架构
● 发布间隔
订阅具有决定订阅变为激活状态的周期的发布间隔。 在此发布周期内,订阅尝试将 NotificationMessage 发送至客户端。
NotificationMessage 包含尚未发送至客户端的通知。
● 对“发布请求”的回答
将 NotificationMessage 作为对发布请求的响应发送至客户端。 在从服务器接收发布 请求后,即会在会话的队列中输入此发布请求。
● NotificationMessage 的序列号(丢失的消息)
每条 NotificationMessage 都具有消息丢失时允许客户端识别的单独序列号。
● 保持激活状态的计数器
订阅具有保持激活状态的计数器,可对没有可供传输的通知的连续周期进行计数。 达 到计数器的最大可选值时,发布请求将从队列中移除并用于发送保持激活状态的消 息。 保持激活状态的消息将告知客户端服务器仍处于激活状态。
保持激活状态的消息是对发布请求的响应,其中 NotificationMessage 不包含通知,而 是包含下次将要发送的 NotificationMessage 的序列号。
● 启用“发布”服务
创建订阅时,客户端可启用或禁用订阅的“发布”服务。 或者,也可使用
“SetPublishingMode”服务启用/禁用“发布”。
禁用“发布”后,订阅不会向客户端发送任何 NotificationMessage,不过,它会周期性 地变为激活状态并将保持激活状态的消息发送至客户端。
● 有效期计数器
订阅具有有效期计数器,而该计数器对没有客户端发布请求的连续发布周期进行计 数。 当计数器达到根据“创建订阅”服务的“MaxKeepAliveCount”参数为订阅有效期所计 算的值时,订阅将会关闭。
如果关闭订阅,则会删除其 MonitoredItem。 服务器还会发送具有“代码 Bad_Timeout”
状态的通知消息“StatusChangeNotification”。
● 确认 NotificationMessage 和通知缓冲区
订阅具有用于 NotificationMessage 重复传输的缓冲区。 NotificationMessage 将保留 在此缓冲区中,直到客户端对其进行确认,但至少持续 1 个保持激活状态的间隔。
“发布”服务
“发布”服务的用途共有两个:
● 请求服务器发送 NotificationMessage 或保持激活状态的消息
● 确认一个或多个订阅的 NotificationMessage 的接收
因为发布请求并非针对特定的订阅,所以任何订阅都可使用它们。