遲海龍,袁平路,鄧鵬程,周 文
(1.中國水利水電科學研究院自動化所,北京 100038;2.五凌電力有限公司,湖南 長沙 410029)
傳輸規約IEC 60870-5-103(以下簡稱103規約)繼電保護設備信息交換標準是在IEC 60870-5系列標準的基礎上,對物理層、鏈路層、應用層、用戶進程作了大量的具體的規定和定義。其目的是為了保障變電站或廠站中不同繼電保護設備(或間隔單元)和控制系統之間能夠順利地互換信息。標準內容可參考我國等同采用的DL/T-667[1]電力行業標準。標準描述了2種方法:①基于嚴格規定的應用服務數據單元(ASDUx,其中字母x為數據編號,以下同)和標準化報文的傳輸應用過程、方法;②通用分類服務法。本文只針對前者的通信方法進行討論。
103規約實現的模型源于開放互聯的ISO-OSI的7層參考模型。該規約實現主要涉及其中的物理層、鏈路層和應用層。本文主要針對規約的鏈路層內部及對外接口部分進行討論。本文開展的IEC 103通信主站側規約開發工作借鑒了國內其他學者和科研機構在有限狀態機(finite state machine,FSM)[2-4]的研究成果,取得了較好的效果。
本文所設定的硬件接口為RS-232或者RS-485,采用的傳輸模式為一對多的非平衡傳輸模式。同一時刻內只有一個從站使用通信鏈路。主站需要將每個從站的通信狀態信息記錄到本地的狀態信息庫中,以便作出正確的回應。
103規約鏈路層采用FT1.2幀格式[5]。傳輸過程可分為數據采集(上行)和命令(下行)2個方向。通信過程中,主站和從站之間通過若干個請求/確認或者指示/響應服務原語[6]進行數據交換,以達到兩端數據一致。
1.2.1 初始化過程
103規約開始工作后,主站順次輪詢各從站的用戶數據。如果從站產生數據,通過置位要求訪問位(access demand,ACD)標志位[5],并上送數據幀請求主站查詢數據。初始化中也要進行超時重傳、時間同步和設備信息采集等工作。
1.2.2 數據采集過程
裝置初始化后,主站周期性地順次召喚每個間隔單元召喚2級用戶數據。具體過程可參考文獻[5]、文獻[6]。
1.2.3 命令控制過程
命令傳輸過程有2種:①選擇和執行命令;②直接命令。詳細的過程參見文獻[6] 。由于控制系統對命令的時效性要求較高,所以本文后續重點討論FSM對命令中斷處理的過程。
1.2.4 異常超時處理過程
基于狀態的程序中必須要考慮中間過渡態的超時返回問題。如果中間態在通信過程中出現擾動而產生異常,可能使中間態無法復位到起始或者接收的最終狀態。所以在所有中間的過渡狀態上,必須加上超時返回處理過程。當系統處于中間過程而長時間收不到返回的消息時:系統要么進行超時重傳工作,再次發送數據請求;要么定時將系統狀態強制到系統的起始狀態或接收狀態,以便系統重新復位設備重建鏈路等工作。
FSM[7]是一個五元組,即M=(S,δ,Σ,s,A)。其中:S為有限的狀態集合,代表系統的各個狀態集合;δ為從S×Σ到S的狀態轉移函數;Σ為各個通信事件;s為初始狀態,s∈S,可表示為二維表格形式;A為消息處理槽函數集合。
狀態樹即狀態搜索樹,由狀態節點和邊構成:節點代表每個狀態;邊為每個狀態之間的從屬關系。按照SCXML[8]規范,狀態樹中狀態可以分為頂層狀態(樹根節點)、原子狀態(不可分狀態,樹葉節點)和組合狀態(中間層節點)。定義原子狀態是一個沒有子狀態的狀態。復合狀態由原子狀態、復合態或它們的組合構成。邊可分為父子關系邊、歷史狀態、初始狀態邊等信息。
FSM狀態轉移圖和狀態樹關系的關系如下:轉移圖表示狀態間的動態過渡關系;狀態樹則強調狀態間的從屬,關系便于狀態過渡前的狀態的搜索和定位。
搜索分為上行搜索和下行搜索。定義:上行搜索為每次選擇的節點距離根節點遞減方向為上行搜索;反之,為下行搜索。上行搜索主要沿著父屬性遞歸,搜索以到達根節點為終止;下行主要根據業務不同選擇子節點、歷史節點屬性遞進,搜索以到達葉子節點為終止。詳細的搜索算法及算例參見4.2節。
狀態樹設計可以自頂向下分層級設計。先設計頂層狀態然后定義狀態的細節的個子狀態。按照1.2節,狀態樹定義如表1所示。

表1 狀態樹定義Tab.1 State tree definition
事件作為狀態機的輸入,是狀態機正常運轉的的激勵和策動源。狀態機的事件集合部分主要內容參見表2。

表2 事件集合Tab.2 Events collection
狀態轉移函數可以表示行列分別為|S|×|Σ|的二維表格,具體可以反映為由<當前狀態 ,事件 ,跳轉狀態 ,動作>構成的四元組的集合。其代表當前狀態下遇到某個事件應該轉移到跳轉狀態并執行響應操作。狀態轉移可分為有條件轉移和無條件轉移。無條件轉移就是當遇到任何事件都會跳轉的到跳轉狀態。當狀態搜索樹遇到有無條件轉移的節點時,會立即轉移到該節點的下一狀態。
槽函數集合A是FSM對事件的響應,是FSM執行規約過程的最終體現,也是FSM重要組成部分。槽函數集合如表3所示。

表3 槽函數集合Tab.3 Slot fuction collection
FSM頂層工作狀態如圖1所示。

圖1 FSM頂層工作狀態圖Fig.1 FSM top-level working state diagram
圖1可分為正常工作態、異常處理態及設備初始化狀態這3個部分。
初始化狀態負責對對側設備的鏈路召喚、復位傳輸以及同步時鐘等工作。正常工作態是在主從站設備通道建立后,負責遙測遙信量的周期召喚、總召喚和命令傳輸等工作。命令傳輸有著比周期召喚更高的優先級,所以單獨分組。異常處理態負責在設備請求應答超時或者鏈路中斷等異常情況下進行恢復通信的工作。
系統初始化后就進入正常工作態。此狀態主要負責遙測遙信采集和命令的傳輸。遙測遙信采集過程的正常工作態如圖2所示。

圖2 正常工作態示意圖Fig.3 Normal working state diagram
正態工作態由子狀態s21~s23構成。s21為起始狀態和穩定態,其他狀態均為請求過程中的過渡狀態。過渡狀態中均有定時器負責超時后的狀態復位到穩定態的工作。系統每次轉移到穩定態s21后都會向控制端發送系統就緒的消息,以便其處理后續通信工作。
IEC 103規約主要由負責作業調度的主控模塊、FSM模塊和接口消息處理模塊這3個部分組成。主控模塊主要負責系統上電后自檢復位以及正常掃查召喚的常規性工作。此模塊也通過消息方式和狀態機進行互動,在向狀態機發送管理指令的同時,接收FSM反饋的異常或者工作就緒的狀態信息。FSM模塊是規約的具體執行者,按照之前討論的方式對各種通信的報文指令作出正確的判斷及響應,并不斷地將自己的工作狀態向作業調度端進行匯報。接口消息處理模塊作為單獨的作業任務,主要監視通信串口發過來的信息,將發來的信息進行分類判斷后翻譯成FSM能夠識別的消息和數據,并轉發給FSM。
FSM的實現已有很多成熟的商業軟件框架,比如文獻[3]、文獻[9] 采用的Qt自帶的狀態機[10],以及文獻[11]采用的JAVA中Spring的狀態機。本文系統由于運行在ARM嵌入式處理器上,對運行的環境和空間要求比較嚴格,所以采用C語言自定義開發框架。
FSM的構造如2.1節定義所述。狀態機為一組狀態的集合,FSM在確定的時刻里就是某一確定的狀態元素的體現。框架采用了2.1節中定義的狀態樹結構作為記錄狀態的數據庫,便于狀態節點的管理和搜索。其中,復合狀態具有歷史狀態和初始狀態屬性,可方便狀態組中斷操作中返回中斷前的某個具體狀態。定義復合狀態是為了方便狀態集合的分組管理,減少狀態成組遷移的過渡邊的個數。首先,狀態結構是一個樹形結構,所以每個節點具有父子節點屬性,并通過方法addChildState()來增加子節點同時也將子節點的父節點指針屬性指向該節點。新的狀態結構體可以通過方法createState()產生。其次,狀態具有過渡邊集合屬性,該屬性是一個集合可由數組或者鏈表給出。狀態可以通過方法addTransition()來增加圖的過渡邊,過渡邊是一個由<事件,目標狀態,槽函數>構成的結構體 。所有的狀態構成了FSM的狀態S集合(節點集合)所有狀態的過渡集合最終構成FSM的轉移δ集合,即狀態轉移表(狀態圖邊集合)。每個狀態在轉入時都會啟動超時定時器,并在定時器時間到達后向狀態機發送一個超時事件來觸發狀態的異常超時處理過程。超時處理可以使狀態機無論在哪個狀態都能最終返回設備就緒狀態,以免FSM陷入某個狀態中死鎖。FSM按照正常流程或者異常超時流程返回到s21后發送“處理完畢事件”通知總調度模塊進行后續設備的輪詢。
狀態樹結構及狀態轉移如圖3所示。

圖3 狀態樹結構及狀態轉移示意圖Fig.3 State tree structure and state transfer diagram
程序初始階段先創建s1~s4及s21~s23等狀態,之后在通過方法addChildState(sFSM,s1)…addChildState(sFSM,s4)(括號中前者代表父節點,后者代表子節點)使sFSM成為具有子狀態s1~s4的復合狀態。同樣讓s2成為具有s21至s23的復合狀態。至此就構造成了如圖3所示的狀態樹。接下來通過諸如addTransition(s21,<Σ1,s22)的方法來增加每個節點的過渡邊信息。括號中:第一個元素為過渡邊始發狀態;第二元素尖括號中依次為事件、目標狀態和對應槽函數。不斷重復該過程,直至將狀態機的所有過渡邊和狀態點添加完成。
至此,整個FSM狀態轉移圖和狀態節點樹的構造工作完畢。以上構造的是對應一個子站的狀態圖。由于需要和多個子站輪流通信,上述過程還需重復多次以構建狀態組數組。每個狀態組都與一個設備對應。最后,定義FSM框架為頂級根節點,依次遍歷數組中每個成員的sFSM。
FSM的運行其實就是按事件條件在狀態樹上找到下一步應切換的狀態和所需要的執行函數,并不斷狀態轉移過程。stateMachine的fsmRun()方法就是一個狀態輪詢處理函數。開始運行時,stateMachine通過setInitial()方法指定某個狀態為初始運行狀態(active state);當一個事件到達后,調用getTransition()方法來遍歷狀態樹找到下一步的狀態的過程。按照狀態的種類和狀態遷移的方向,可將狀態轉移分為原子狀態的上行搜索及復合狀態的上、下行搜索。
①原子狀態搜索。
原子狀態遇到事件到達時,先上行搜索是否有父狀態(復合狀態)存在。如果存在,則遞歸地搜索父(復合)狀態節點的過渡信息,一旦找到則立即執行父節點后續轉移操作;否則,在本狀態內搜索對應事件及操作并進行跳轉處理。
②復合狀態的搜索。
上行搜索時,首先將轉入的子狀態寫入history屬性中作壓棧操作,然后在本狀態內搜索對應事件并相應跳轉對應狀態。如果沒有對應事件,則再次按照原子狀態操作作上行搜索操作。復合狀態的下行搜索操作首先檢查history指定子狀態。如果子狀態還是復合狀態,則繼續轉入history對應狀態直至返回到最初的原子狀態,并執行該原子狀態后續的事件響應操作。定義歷史狀態historyState為復合狀態的偽裝態。這是以某個復合狀態為父節點的狀態。它具有getHistoryState()方法,以向下遍歷父狀態history屬性的方式找到最終的中斷轉移前的原子狀態并返回。
狀態搜索算法流程如圖4所示。

圖4 狀態樹搜索算法流程圖Fig.4 Flowchart of sate tree search algorithm
測試算例為起始狀態為s1,輸入事件序列為[Σ4,Σ1,Σ21,Σ4,Σ22,Σ21]時的狀態變化情況。為了簡化說明s2內部的狀態轉化,簡化圖如圖3(b)所示。運行時,狀態轉移情況和函數調用的測試算例如表4所示。其中,狀態轉移序列代表整個轉移過程所經歷的狀態節點路徑,最后一個狀態也為下一狀態的起始狀態。這里討論中斷事件Σ4到達的情況,如表4中第四行所示。此時狀態正處于s22狀態節點上。由圖3(a)可知,s22為原子節點,此時首先上行查找父節點s2并置s2的屬性history為s22,如圖3(a)中1號箭頭所示。然后在s2的transitions查找對應事件。由于從圖3(a)可知,沒有對應事件轉移信息,所以s2再次向上跳轉父節sFSM,并在其transitions搜索對應事件。從圖3(a)可以看到,在這里可以找到事件Σ4過渡信息并跳轉至s4,即圖3(a)中2號、3號箭頭所示。s4執行完后返回節點是sFSM的歷史狀態且是無條件轉移,故通過getHistoryState()方法反向回退至最初的s22狀態,即圖3(a)中4號、5號、6號箭頭所示。從而完成了中斷至s4并返回起點的整個操作。整個狀態轉移過程s4,s2h(s22)(括號中s22為s2h偽狀態具體內容)。搜索過程路徑如表中第4列所示。由此可見本次狀態搜索和轉移達到了預期的目的。同樣地,超時異常也是一個類似命令中斷的操作過程,只不過返回的路徑不同于去程,是從s3到s1再到s21。從以上過程可以看出,引入復合節點s2和sFSM后,s21等子狀態無需在每個狀態中增加對s4中斷轉移信息,僅對sFSM增添一個轉移信息就可使s1到s3及s21到s23所有狀態的轉移處理,從而大大減少了狀態過渡邊的數量。

表4 測試算例Tab.4 Test example
103通信系統中,子站需要按照分時順序交替地使用通信鏈路。從站上各個設備的優先級都是相同的,并且通過周期性應答輪詢的方式報告本地設備的參數信息。主控站也是按照預設的順序和步驟周期輪詢子站,如果遇到子站有數據請求則相應地發出召喚數據。為了縮小單站長時間占用昂貴的通信資源,多環節通信處理過程可以拆分成多次進行。因此,設備的初始化階段和數據采集階段可以分兩步進行。第一個周期只負責將從站設備從初始狀態召喚至設備就位狀態s21。此時,FSM的狀態數據庫(狀態樹)會為每個子站保留最近一次的工作狀態,并作為下一周期工作的依據。工作在s2狀態下的掃查工作可以放到第二個周期內進行。按照工作場景的要求,命令處理有一定的實效性需要優先安排傳輸。這里需采用4.2節中闡述的中斷狀態處理方式。該方式FSM無論處于哪個狀態都會中斷當前工作,并在保存當前狀態然后跳轉到中斷狀態處理工作。待中斷過程執行完畢后,FSM重新找到歷史狀態信息并繼續之前的工作。這樣既可以保障已有工作場景不受破壞,又可以保證高優先級的工作得以及時處理。
本文在IEC 103規約通信控制器系統開發中,引入FSM及狀態樹來管理通信狀態,方便了狀態的搜索和歷史狀態信息的管理、加強了代碼結構化、擴展性。本文設計了狀態搜索樹及算法來擴展FSM的行為表達,使原有按照過渡表單次跳轉方式轉變為按照狀態類型和實際業務連續多次的定位和跳轉方式,讓FSM的行為表達變得更加豐富和精確且滿足SCXML的規范,為后面業務優化工作奠定基礎。業務優化中改過去周期發送為中斷的命令處理方式可以使實時控制命令響應時延控制在200 ms以內。本文FSM框架具有自身輕量化、環境低依賴等特點,可以很方便地應用于IEC 104等其他相關規約的嵌入式通信開發中。用于其他通信規約時,只需修改業務狀態流程圖代碼及處理槽函數即可,從而讓業務代碼和底層代碼分離便于復用。目前,設備已應用的場景為抽水蓄能電站現地控制通信,現場性能符合預期。