通訊協(xié)議016——全網(wǎng)獨(dú)有的OPC AE知識三之事件

本文簡單介紹OPC AE規(guī)范的事件概念,更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。OPC AE規(guī)范描述了OPC事件服務(wù)器應(yīng)該實(shí)現(xiàn)的對象和接口,實(shí)現(xiàn)在多個OPC客戶端間共享事件和警報條件。
事件是一種可檢測的對OPC事件服務(wù)器、設(shè)備、OPC客戶端具有重要意義的事情。事件可能與條件相關(guān),也可能不相關(guān)。例如,轉(zhuǎn)換到LevelAlarm狀態(tài)和恢復(fù)正常是與條件相關(guān)聯(lián)的事件。而操作員操作、系統(tǒng)配置更改和系統(tǒng)錯誤則是與條件無關(guān)的事件。
事件在OPC模型中沒有直接表示。通過Event Notification告知事件發(fā)生,由OPCEventNotification3類實(shí)現(xiàn)。
??? 存在以下三種事件類型:
????????1)條件事件:與OPCConditions相關(guān)的事件,表示進(jìn)入或退出由OPCConditions和OPCSubConditions表示的狀態(tài)轉(zhuǎn)換。例如:FIC101轉(zhuǎn)換為LevelAlarm狀態(tài)和HighAlarm子狀態(tài)。
????????2)跟蹤事件:不與條件相關(guān)聯(lián)的事件,表示發(fā)生的事件涉及OPC客戶端與OPC事件服務(wù)器內(nèi)的“目標(biāo)”對象的交互。例如:控制更改,操作員(OPC客戶端)更改標(biāo)簽FIC101的設(shè)定點(diǎn)(“目標(biāo)”)。
????????3)簡單事件:是除上述事件之外的所有事件。例如:由OPC事件服務(wù)器表示的系統(tǒng)/設(shè)備內(nèi)的組件故障。
?
1、 事件通知
OPCEventNotifications使用由OPC客戶端在事件訂閱中提供的連接點(diǎn)回調(diào)接口發(fā)送到訂閱客戶端。OPCEventNotifications的層級結(jié)構(gòu)如下圖所示。

? ? ? ?
2、 簡單事件通知OPCSimpleEventNotifications 屬性
OPCSimpleEventNotifications具有以下標(biāo)準(zhǔn)屬性。請注意OPCConditionEventNotifications和OPCTrackingEventNotifications也包括這些標(biāo)準(zhǔn)屬性。
Source:生成事件通知的對象的引用。例如:當(dāng)標(biāo)簽FIC101進(jìn)入LevelAlarm條件(與條件相關(guān)的事件),Source就是標(biāo)簽名FIC101;它也可以是跟蹤事件,如操作員更改FIC101的設(shè)定點(diǎn)值,Source就是標(biāo)簽名FIC101;對于簡單事件,如系統(tǒng)錯誤,Source值可能為“system”。
Time:事件發(fā)生的時間。
Type:條件事件、跟蹤事件、簡單事件。
EventCategory:事件所屬的類別。
Severity:事件的緊迫性??赡艿娜≈捣秶鸀?-1000。
Messgage:描述事件的消息文本。對于與條件相關(guān)的事件,一般包括活動子條件的描述屬性。
?
3、 跟蹤事件通知OPCTrackingEventNotifications屬性
OPCTrackingEventNotifications除了具備OPCSimpleEventNotifications的屬性,還具備以下屬性:
ActorID: 發(fā)起導(dǎo)致跟蹤相關(guān)事件的操作的OPC客戶端的標(biāo)識符。例如,如果跟蹤相關(guān)事件是FIC101的設(shè)置點(diǎn)的更改,則ActorID可能是對發(fā)起更改的客戶端應(yīng)用程序的引用,或者可能是指定更改的操作員的用戶ID。
?
4、 條件事件通知OPCConditionEventNotifications屬性
OPCConditionEventNotifications除了具備OPCSimpleEventNotifications的屬性,還具備以下屬性:
ConditionName:關(guān)聯(lián)OPCCondition名稱
SubConditionName:當(dāng)前激活的OPCSubCondition的名稱
NewState:表示條件的新狀態(tài)。表示條件的Enabled、Active和Acked屬性新值
AckRequired:是否需要確認(rèn)的標(biāo)識符。許多事件與條件相關(guān)的通知通常不需要確認(rèn),例如:接收到確認(rèn)或轉(zhuǎn)換到非活動狀態(tài)。此外可以配置一些條件,對于轉(zhuǎn)換到該狀態(tài),或子條件之間的轉(zhuǎn)換(例如轉(zhuǎn)換為LevelAlarm或轉(zhuǎn)換從HighAlarm到HighHighAlarm)不需要確認(rèn)。在這種情況下,服務(wù)器自動將條件置于已確認(rèn)狀態(tài),因此將永遠(yuǎn)不會收到確認(rèn)。
ActiveTime:轉(zhuǎn)換到事件通知的相關(guān)條件或子條件的時間。
Cookie:服務(wù)器定義的與事件通知關(guān)聯(lián)的cookie??蛻粼诖_認(rèn)時使用此值。該值對客戶端是不透明的。
ActorID:確認(rèn)條件的OPC客戶端的標(biāo)識符。
?
5、 事件類別
EventCategories定義OPC事件服務(wù)器支持的事件分組。例如:事件類別可能包括“過程事件”、“系統(tǒng)事件”或“批處理事件”。事件類別可以為所有事件類型定義,即簡單、跟蹤和條件相關(guān)。特定事件類別可以僅包括一種類型的事件。給定來源(例如“System”或“FIC101”)可以為多個事件類別生成事件。事件類別的名稱必須為在事件服務(wù)器中是唯一的。
事件類別的名稱包含在每個事件通知中。事件訂閱可以是根據(jù)事件類別篩選。
?
6、 訂閱事件通知
為了接收事件通知,OPC客戶端必須訂閱這些通知。訂閱通過后,創(chuàng)建一個OPCEventSubscription對象與OPC事件服務(wù)器進(jìn)行交互。OPC客戶端可以有一個或多個OPCEventSubscriptions對象與單個OPC事件服務(wù)器進(jìn)行交互。
OPCEventSubscriptions是“可連接對象”,因?yàn)樗鼈儗?shí)現(xiàn)DCOM連接點(diǎn)接口。這是用于向OPC客戶端發(fā)送事件通知的機(jī)制。
OPCEventSubscriptions提供了一個接口,允許OPC客戶端指定篩選器。此外它們實(shí)現(xiàn)了標(biāo)準(zhǔn)的DCOM連接點(diǎn)接口,將事件發(fā)生通知OPC客戶端。
?
7、 OPCEventSubscriptions屬性
OPCEventSubscription具備如下屬性:
Filter:用于選擇客戶端感興趣事件的結(jié)構(gòu)。空過濾器會導(dǎo)致OPC客戶端接收所有事件通知。
OPCEventSubscription只有一個篩選器。
可以使用以下標(biāo)準(zhǔn)選擇事件:
?事件類型:即簡單、條件或跟蹤。
?事件類別
?最低嚴(yán)重性,即嚴(yán)重性大于或等于指定嚴(yán)重性的所有事件。
?最高嚴(yán)重性,即嚴(yán)重性小于或等于指定嚴(yán)重性的所有事件。
?過程區(qū)域
?事件源
單個標(biāo)準(zhǔn)的值列表在邏輯上被“或”運(yùn)算在一起(例如:如果指定兩個事件類別,將接收兩個類別的事件通知)。如果指定了多個標(biāo)準(zhǔn),它們將被邏輯地“與”在一起,即僅那些滿足所有標(biāo)準(zhǔn)的事件將被選擇。例如:指定最低優(yōu)先級和最高優(yōu)先級,將導(dǎo)致事件的選擇優(yōu)先級介于兩個值之間。
例如:
Type = CONDITION
Category = PROCESS
LowSeverity = 600
Area = AREA1, AREA2
??? 以上表示選擇區(qū)域AREA1、AREA2內(nèi)具有高緊急性(大于或等于600)的“過程”類別的條件關(guān)聯(lián)事件。
????????
8、 條件狀態(tài)同步
OPC客戶端通過向每個活動的OPCEventSubscription對象請求“刷新”,獲得所有處于活動或處于非活動但未確認(rèn)的條件狀態(tài)。服務(wù)器通過事件回調(diào)機(jī)制向客戶端發(fā)送適當(dāng)?shù)氖录?。?dāng)調(diào)用客戶端的回調(diào)時,服務(wù)器將指示調(diào)用是用于刷新還是原始通知,刷新和原始事件通知將不會混合在同一個回調(diào)調(diào)用中。
此設(shè)計(jì)假設(shè)客戶端只需要條件的當(dāng)前狀態(tài)信息,因此僅將與條件相關(guān)的事件通知刷新。需要注意的是,“刷新”不是一般的重放功能,因?yàn)榉?wù)器不需要維護(hù)事件歷史記錄。
刷新事件通知可能以任意順序發(fā)送,并且可能不按順序發(fā)送。當(dāng)服務(wù)器回復(fù)刷新請求時,條件可能會更改狀態(tài),刷新事件通知可能不再反映客戶端接收到它時的當(dāng)前條件狀態(tài)。類似地,客戶端可以在接收到刷新事件通知之后接收原始事件通知??蛻舳诵枰容^時間戳,以確保其狀態(tài)正確情況。
客戶端必須顯式調(diào)用Refresh()方法才能獲得刷新事件通知。這是與OPC DA接口不同,在OPC DA接口中,激活或向組添加項(xiàng)目會導(dǎo)致隱式刷新。
?
9、 錯誤處理
OPC事件服務(wù)器可能會將內(nèi)部或源錯誤報告為標(biāo)準(zhǔn)事件,可能是簡單事件或條件相關(guān)事件。服務(wù)器錯誤的事件屬于OPC_SERVER_ERROR事件類別。
在事件源失去通信的情況下,該事件源的當(dāng)前活動條件源應(yīng)該更新其質(zhì)量屬性以表示通信丟失??梢酝ㄟ^將質(zhì)量設(shè)置為“壞”并將子狀態(tài)設(shè)置為“通信故障”來完成。這一質(zhì)量變化必須向所有訂閱者發(fā)出事件通知。
更多通信資源請登錄網(wǎng)信智匯(wangxinzhihui.com)。