事件、报警与历史
值告诉你此刻正在发生什么;事件和历史告诉你发生过什么以及为什么。本课程涵盖 Part 9 的报警层次、只返回所需内容的事件过滤器、作为机器可读原因代码的条件类,以及服务器端聚合。
| 课时 | 10 |
|---|---|
| 时间 | 约 72 分钟 |
| 先修要求 | A4 |
| 成本 | 免费:文字课程开放,视频和实验需要免费账号 |
学完你将能够做到
- 你能够用自己编写的 select 和 where 子句订阅事件。
- 你能够把 ConditionClassId 用作可移植的停机原因代码。
- 你能读取历史而不会拉取超出需要的数据。
- 你能够向服务器请求时间加权平均值,而不是在下游自己计算。
课程大纲
-
1
订阅事件,而不是值8 分钟
事件通知器、事件类型层次,以及为什么停机原因应当以带时间戳的事件形式到达,而不是从一个采样得到的布尔量推断出来。
资料 一个从 Milo 演示服务器打印真实事件的事件订阅
-
2
编写一个 select 子句8 分钟
选择你需要的字段:Time、SourceNode、Severity、Message、ConditionClassId。默认选择很少是你真正需要的。
Asset 同样的事件分别使用默认和手写的 select 子句,两种输出都展示
-
3
编写 where 子句8 分钟
在服务器端过滤,让噪声根本不会到达你这里。操作符、操作数,以及格式错误的过滤器会产生哪些错误。
交付物 三个 where 子句,其中一个失败,并附它返回的状态码
-
4
在 Part 9 的层次结构中导航7 分钟
从 BaseEventType 往下到 ConditionType、AcknowledgeableConditionType 和 AlarmConditionType。condition 是什么而 event 不是什么。
Asset 从一台在线服务器浏览到的事件类型树,以及每一层继承的字段
-
5
处理确认与证实6 分钟
两阶段报警处理、谁被允许执行,以及状态机在这中间的行为。
资料 一条报警在 OPC UA 上被 Acknowledge 和 Confirm,并记录其状态迁移
-
6
重连之后刷新 condition6 分钟
ConditionRefresh,以及为什么不执行它就重连的客户端会以为工厂一切正常。
资料 带 ConditionRefresh 与不带 ConditionRefresh 的重连对比,展示被漏掉的活动报警
-
7
用 ConditionClassId 作为原因代码7 分钟
使停机原因能够在机器和厂商之间通用的机制,以及 MachineTool 的条件类如何接入其中。
交付物 一张把 MachineTool 状态类映射到停机原因分类体系的表格
-
8
读取原始历史数据7 分钟
HistoryReadRawModified、边界值、continuation point,以及历史数据中的缺口意味着什么。
资料 一次跨越数据缺口的原始历史读取,附返回的边界值
-
9
改为请求聚合结果8 分钟
在服务器端计算的 TimeAverage、DurationGood、PercentGood 和 Count。比把原始数据流出去再在下游聚合便宜得多。
Asset 同一个班次分别用服务器端聚合和客户端计算做汇总,并附带两者的开销
-
10
确认服务器能否做到这些7 分钟
HistoricalRawData2022 和 AggregateHistorical2022 facet,以及如何在围绕它们做设计之前先查清楚。
Asset 来自三台服务器的 ServerProfileArray,展示各自声称支持哪些历史 facet
实验
需要免费账户
在 opc.tcp://milo.digitalpetri.com:62541/milo 上订阅事件,用 where 子句只返回 severity 大于 500 的事件,然后读取某个节点一小时的历史,并请服务器给出其时间加权平均值。
解锁实验 →最后核对日期 2026 年 9 月 7 日,对照 OPC UA 1.05.07。OPC UA Connect 是教育资源,与 OPC Foundation 无隶属关系。