遲海龍,劉金偉,劉曉彤,龔傳利
(1.北京中水科水電科技開發有限公司,北京 100038;2.中廣核工程有限公司,廣東 深圳 518100;3.中國水利水電科學研究院,北京 100038)
IEC60870-5-103[1](以下簡稱為103規約)繼電保護通信規約采用FT1.2異步式字節傳輸(Asynchronous byte transmission)的幀格式。規約可以多種方式實現。通常采用的方法是在接收和發送兩個端點上分別設置兩個計算工作線程,通信過程就是兩臺設備的收發端點進行交互的過程。該方法一般可歸為同步處理的信息交互方式,對平衡的通信模式比較適用。同步模式因具有程序簡單明了的優點,被很多早期規約處理程序所采納。但這種方式有明顯的不足:①程序交互過程中為同步接受和發送的信息設置的大量等待時間導致處理程序對外界信息反應遲鈍,嚴重時可導致信息遺漏。②當通信間隔裝置在采用非平衡的一對多點輪詢拓撲結構通信模式時,由于通信主站(以下簡稱主站)要面對大量被控站(以下簡稱從站),這使得主站在跟蹤各從站的通信狀態時需要大量輔助狀態變量,程序處理比較繁雜。為此,需要采用新的方法予以解決,本文提出的可以跟蹤主站以及從站通信狀態的狀態機模型方法,是解決這一問題方法之一,可以大幅降低程序開發和維護擴展的難度。本文主要討論狀態管理模型在103通信主站側的實現。
規約的傳輸過程中的數據采集就是主站和從站之間通過若干個請求/確認或者指示/響應服務原語[2](REQ/CONF 或者IND/RESP)的周期性數據交換達到兩端數據一致的過程。采集過程按照數據的多少可分單周期或者多周期時間完成。交互過程可通過過程圖或者狀態圖表示。圖1A、1B為交互的狀態圖,圖1C為動作序列示意圖。本文主要討論主站端的有限狀態機的實現方式,文中只給出通信過程的發送端狀態圖,其他圖可以類似思路實現。

圖1 交互過程狀態圖及序列圖
103規約工作在單點對多點的主從Polling(輪詢)方式。正常工作時,主站依次輪詢從站的2級用戶數據,如果從站產生1級數據,通過上送的2級數據報文控制域中的ACD標志位[2],請求主站查詢1級數據。主站在接收到從站查詢請求后可以馬上發出再次1級數據召喚或者在下一次輪詢周期內發出再次召喚1級數據直到從站將ACD復位0后不再請求召喚為止。通常主站查詢完某個從站的1級數據后,則繼續開始對下一個從站的查詢。這是正常通信的一個基本過程。
主站在開始新一輪發送/確認服務時,改變下發報文控制域中幀計數位FCB的狀態。如超時(等待時間50 ms)未收到從站發回的確認幀或響應幀,則不改變FCB狀態重發原報文,最大重傳次數為3次。如果重發3次后仍收不到應答報文,則首先發復位幀計數位(FCB)復位命令,如果仍收不到應答報文,則復位從站(CU)。復位幀計數位(FCB)復位把FCB置0、發送緩沖區不清零。復位從站把FCB置0、發送緩沖區清零。從站上電或復位后,待收到FCB或CU復位命令后,響應確認并請求訪問1級數據。以ASDU5標識報文上送廠家名稱等設備信息,參數傳送原因項為FCB或CU。然后是時間同步(ASDU6)和總查詢(ASDU7)。初始化時對時采用SEND /CONFIRM方式,分別對每一個從站對時。
主站周期地順次對每個間隔單元召喚 2 級用戶數據,從站以ASDU03或ASDU09上送遙測數據。這個過程的全部狀態及動作序列如圖1所示 。
從站的全遙信通過主站對從站的總查詢上送。當主控或從站初始化過程中啟動總查詢,以收集帶有總查詢標志的信息。總查詢過程:主站向從站發總查詢命令(采用ASDU7),裝置以確認幀回答后,在將總查詢信息轉成1級用戶數據后,在當前上送報文里控制域的要求訪問位(ACD)[3]置1。總控收到ACD=1后,向裝置查詢 1 級數據。裝置以 ASDU 01(02)上送全遙信。運行正常以后,主站按一定時間間隔(約15 min)啟動總查詢。在兩次總查詢間隔過程中,總控輪詢各裝置2級數據,裝置一旦檢測到發生遙信變位,則把上送2級數據報文ACD置1,
通知主站查詢1級數據。裝置通過ASDU 01(01H)上送變位遙信和ASDU02(02H)上送SOE。
有兩種標準的命令傳輸過程,即:①選擇和執行命令;②直接命令。直接命令就是主站下達命令(IND原語)后,從站立刻執行并把結果通過RESP原語反饋給主站。這里重點討論前者的狀態過程。
主站給從站發送請求原語SELECT(REQ),從站接收后,如應用進程準備接收“選擇命令”,它將產生“選擇響應”,通過SELECT(RESP)選擇命令響應原語返送給主站。主站接收后通過SELECT(CON)選擇確認原語產生“選擇確認”。 選擇過程可由“撤消命令”停止執行。如選擇命令得到確認,主站再以 EXCO(REQ)請求原語向從站發“執行命令”。 從站以 EXCO(IND)指示原語傳遞給應用進程功能, 將“執行響應”返回給控制站,產生肯定或否定的確認。詳細的過程參見文獻[3]。文獻中給出了選擇和執行命令傳輸過程序列圖。本文給出主站端的命令傳輸的狀態圖(圖2)。圖中給出了命令發送端需要預置的3個相關狀態(總狀態的一個子集):①設備就緒(命令起始態),②命令選擇態度,③命令下達狀態。設備就緒態為起始態,每次命令下達都要從此處出發,完成傳輸后也要回歸此態。命令選擇態和命令下達為中間過渡態,命令選擇態主要決定命令的下達與撤銷的不同路徑,命令下達態為設備等待命令執行的中間過渡過程。

圖2 主站命令傳輸狀態轉換圖
狀態機是有限狀態自動機的簡稱,是現實事物運行規則抽象而成的一個數學模型。狀態機主要由狀態構成,可以描述為一組狀態事件集合和狀態轉換圖。
狀態集合是狀態機的重要組成部分,是SM工作當中的主要依據,對其的設計需要考慮以下幾個方面:狀態的定義和使用的便利性。通常一個工業級的SM都會有大量的狀態變量,狀態變量的管理對SM的設計有很重要的作用,決定了自動機可維護性。狀態的分組和繼承。先設計頂層狀態量然后通過繼承的機制不斷分化和細化頂層狀態的細節狀態并作為該頂層狀態的各個子狀態。按照1.2節中過程討論103規約應該設置的狀態如表1所示。

表1 狀態定義
狀態機的事件和各個槽函數如表2所示。具體過程描述參考狀態轉換圖。

表2 事件及槽函數集合
狀態轉換圖是狀態機模型的動態工作的具體體現,這里主要討論初始化過程和采集通信過程中的狀態轉換圖的細節。
在主站端上電后或者發送請求報文超過3次收不到應答的情況下,系統會跳轉到初始化階段對通信鏈路進行重置。在這一狀態下主要做復位、召喚鏈路、時鐘同步等工作。狀態圖如圖3所示。異常狀態是設備在鏈路應答超時或者遇到通信錯誤時需要設置的狀態,該狀態負責設備從錯誤中復位的工作。

圖3 初始化狀態圖
采集通信態主要負責遙測遙信采集和命令的傳輸。遙測遙信的采集過程狀態圖如圖4所示。工作態由子狀態s21至s25構成。s21為起始狀態和穩定態,其他狀態均為請求過程中的過渡狀態。過渡狀態中均有定時器負責超時后處理工作。采集主要負責規約中1級2級數據的召喚工作。

圖4 采集通信狀態圖
IEC103通信程序主要由主控端、SM狀態機模塊和接口消息處理模塊3個部分組成(圖5)。主控模塊主要負責系統上電自檢復位以及正常順序調度等工作。 SM模塊是規約的具體執行模塊,按照之前討論的方式對各種通信的報文指令作出正確的判斷及響應。消息處理作為單獨一個作業任務,主要監視通信串口發過來的信息,并將信息進行分類判斷后翻譯成SM能夠識別的事件和數據。

圖5 IEC103通信主體框架
本文采用自定義框架的開發方式,同時借鑒了商用SM的成熟經驗。從最頂層開始狀態可設置為起始狀態和中間過渡狀態。兩種狀態的最大差別在于中間過渡狀態中要加入定時器超時處理。具體做法是在狀態State 類的onEnter()和onExit() 狀態出入函數中加入定時器啟停操作和狀態在本狀態的超時次數(Repetitions)的判斷,如果在本狀態中超時重復次數超過3次則需要向SM繼續發送一條重復大于3次的事件,狀態機轉而到異常處理狀態中。起始狀態下派生出設備初始化狀態s0和設備就緒工作態s21,中間過渡態包括了除了上面兩個狀態之外的其他狀態。
狀態機的核心是狀態轉移表的定義,在程序中可以定義為如下結構數組,其中第一列對應當前狀態,第二列對應事件,第三列對應轉移后狀態,第四列為槽函數,最后為函數的參數定義。這里第一行定義了在通信采集狀態下,遇到總召事件后要跳轉到總召狀態中,對應的處理函數為發送總召命令SendNegotiateDataCmd。該狀態轉移表為狀態機工作的核心部分,狀態機在每次遇到事件到達時都要首先查找這個轉移列表來確定下一步的操作。當業務變化時只需修改這里的狀態定義表即可,從而提高程序重用性。

本文先后討論了IEC103規約主要通信過程的實現以及從SM的角度去實現規約的主要要求。通信過程一般分為多個階段,每一階段對應著不同的狀態,因而有狀態改變過程。狀態機天然屬性很好地滿足了通信過程的這種特點,采用狀態機模型主要有以下優點:
(1)面對非平衡傳輸模式傳輸的設備時,能夠很好地記錄下各個子站設備的當前工作狀態并按照實時狀態做出正確及時的響應,提高通信響應速度 。
(2)采用的狀態機框架同時也符合程序設計中的狀態模式,該模式不僅使程序更加結構化,避免大量分支語句帶來的混亂,而且大大提高了程序的擴展和維護的便利性。