OPC UA的監控項 訂閱 和通知

2022-02-24 21:12:59 字數 2934 閱讀 6946

每個監控項均指明了要監控的專案(item)和用來傳送通知的訂閱。

item可以是乙個節點的屬性(node attribute)。

描述了資料變化和事件的資料結構,通知會被打包為notificationmessage並傳送給client。

訂閱會以客戶定義的發布間隔週期性的傳送notificationmessage。

訂閱用來向客戶端報告通知,其行為可以被總結如下:

序列號是乙個uint32,並從1開始向前滾動。

當訂閱建立後,在第乙個週期結束時,會向client傳送一條訊息,用於通知客戶端訂閱可用。如果有通知要傳送,則傳送notificationmessage,如果沒有,則傳送存活訊息,並設定序列號為1,這是唯一不需要等待到keep alive閾值的場景。

客戶端接受訊息要比發布週期更加頻繁,因乙個發布週期可能包含有多條訊息,但客戶端可以設定伺服器不快取發布通知來減輕壓力,但會增加響應的延時。

在訂閱的宣告週期中,序列號不會被重置,也即在40億訊息中不會出現重複的訊息id。

訊息序列號還可以用於訊息重發。

訂閱被設計為獨立於具體的通訊協議,短暫的連線丟失不會導致丟失資料和事件。在設計時,要確保該特性得以正確實現,也即能夠處理較長時間的通訊中斷和有計畫斷鏈。如果伺服器支援該特性,伺服器的快取區將會設計的比較大。

haseventsource引用型別是乙個具體的引用型別,並可以直接被使用,是hierarchicalreferences的子類。

這個引用型別的語義是將event source(事件源)以一種層次化的、非迴圈的方式關聯起來。該型別以及該型別的所有子類是打算用來幫助發現伺服器能夠產生的事件。但對於伺服器來說,並不需要強制的建立從事件源(eventsource,產生事件)到事件通知器的關係,例如server物件,其隱含的表示是所有事件源的通知器。

該關係的起點是乙個事件訂閱的源(乙個物件,該物件的eventnotifer屬性的subscribetoevent位有效)。

該關係的終點可以是任意nodeclass節點,只要該節點能夠通過訂閱產生事件通知,並傳遞給關係源端。

另外,從」a「點開始,沿著haseventsource或其子關係不能再回到a點,但是允許存在多條路徑都指向節點「b「。

hasnotifier引用也是乙個可以被直接使用的關係。

hasnotifier引用的語義是將作為通知器的節點與其他通知器物件節點關聯起來。該引用的目的是建立事件通知物件(event notifying object)的層次化結構,而且hasnotifer是haseventsource的子類。

該引用的起點需要是能夠作為事件訂閱源的物件或檢視,終點同樣。事件訂閱源是指eventnotifier屬性中「subscribetoevents」生效的物件。

如果hasnotifier引用的終點產生了乙個事件,那麼該引用的起點同樣可以提供這個事件。也即通過hasnotifier引用,可以建立起事件通知的層次。

告警是acknowledgeconditions的特殊化,相比condition告警增加了活動狀態,以及擱置和抑制狀態。

擱置狀態(shelved)可以由操作員通過opc ua方法設定,抑制狀態(suppressed)由伺服器出於內部原因設定,告警伺服器通常會實現抑制、擱置和停止服務特性,以避免操作員被告警風暴淹沒,而能夠專注於真正嚴重的告警

擱置、抑制和停止服務狀態與disable狀態不同,它們表明告警仍然生效,並繼續通過訂閱分發至客戶端

下圖描述了典型的告警時間線:

在值達到alarm limit時,產生了告警

condition通常會有狀態和子狀態,因此在addressspace中儲存condition的例項是有意義的。如果server選擇暴露condition,那麼condition通常是作為物件的一部分存在的,也即物件「擁有」這個條件。

如:乙個溫度感測器內建了高溫告警,則這個告警在位址空間中會以溫度感測器例項的部件(hascomponent)關係的形式作為溫度感測器的一部分,且這個告警是limitalarmtype的例項。

有些時候可以選擇不在位址空間中暴露condition,這樣就沒有辦法修改condition的狀態。

告警和狀態的審計是系統中非常重要的安全功能,當使用者呼叫方法更改condition的狀態時,會產生auditconditionacknowledgeeventtype型別的事件。

該引用的語義是關聯conditionsource和它的condition,每個conditionsource都應該是haseventsource或其子引用的目標節點。

hascondition關係可以用在variabetype或者objecttype之上,也可以用於它們的例項宣告,hascondition的目標節點則可以是conditiontype型別或者例項。

總結來說:

另外,在型別中定義的conditiontype是可以在例項中得到繼承的,如下圖所示:

haseventsource、hasnotifier有什麼區別

generatesevent、alwaysgenerateevent引用有什麼區別

SIP訂閱,通知和發布

讓我們從訂閱開始。正如您所料,訂閱用於在希望獲得服務資訊的客戶端應用程式和提供該資訊的服務之間建立訂閱。例如,sip 可能訂閱語音郵件服務,以便在訊息等待時點亮其紅色訊息等待指示符,並在讀取所有訊息後關閉該指示符。另乙個例子可能是訂閱e 911系統的第一響應者,以了解有需要的人何時撥打9 1 1。最...

iOS之建立通知 傳送通知和移除通知的坑

1 建立通知,最好在viewdidload的方法中建立 void viewdidload 接收通知並相應的方法 void tongzhi nsnotification notification 2 傳送通知 nsdictionary dic nsdictionary dictionarywithob...

Redis 的訂閱和發布

redis 的 subscribe 可以訂閱任意數量的頻道 redis 的 publish 傳送命令道頻道,然後這個訊息就會傳送道訂閱這個頻道的客戶端 舉例 現在有兩個頻道 客戶端1 開啟shell zhaoning zhaoning computer redis cli 127.0 0.1 637...