李佑文,褚紅健,蔡一磊
(南京國電南自軌道交通工程有限公司,江蘇 南京 210032)
電力監控系統通過對軌道交通供電系統主變電所、牽引變電所、降壓變電所等全線供電設備數據的監視和控制,以確保牽引供電和全線電力變、配電系統的安全可靠運行[1]。由于電力監控系統的復雜性和系統設備價格昂貴以及受到現場環境、安全性等限制,直接在現場的真實系統上進行學習和培訓顯得不切實際[2-3],因此,需設計一種數字化的電力監控培訓仿真系統。該系統通過模擬電力監控中各類設備的運行工況,提供電氣設備操作、系統運行方式、事故處理等場景的培訓;提高電調人員日常操作技能水平,培養其對供電系統異常和事故工況的判斷與處理能力;避免各種事故特別是人為原因引起的誤操作事故的發生,最終減少人為系統故障、降低運營公司成本,保證供電系統的連續穩定運行。
電力監控培訓仿真系統的功能經歷了從單一到綜合、從簡單到復雜的發展,其作用也由演示性轉變為指導性,已然成為電力監控自動化的一個重要產品,同時也是電力控制中心培訓操作員的得力工具[4]。
電力監控培訓仿真系統的核心內容是生成不同的培訓、仿真場景,并盡可能多地滿足各類培訓、仿真業務場景。仿真業務包括設備仿真、控制仿真、線路仿真、五防連鎖仿真、聯動仿真,培訓業務包括日常培訓、操作培訓、正常工況、異常工況、事故處理培訓等。
從系統軟件設計角度出發,場景可抽象定義為電力監控系統內特定條件、事件發生時導致的一系列數據變化的集合。在電力監控仿真培訓系統中,如何使所有培訓、仿真場景有效地聯動起來,在最大程度上模擬真實現場的聯動運行工況就十分關鍵。文章首先設計一種電力監控系統中常用的數據對象結構,然后依據數據對象與屬性進行數據組織,再設計能夠涵蓋各類場景的配置文件,最后基于多線程實現后臺場景的運行,并使各個場景的運行條件與結果有效聯動,達到仿真現場實際聯動工況的目的。
設計良好的數據對象及組織方式使系統支持各類復雜場景成為可能,同時可為場景配置、場景執行提供更好的支持。將數據對象組織成的配置文件是培訓仿真場景的核心,連接了場景執行、場景配置兩個過程。同時,如何將數據對象進行邏輯組織才能最大程度上增強場景配置的靈活性,保證能夠涵蓋并實現各類仿真、培訓場景也是最關鍵的。
任何對數據的組織都離不開數據對象的設計。電力監控系統中數據一般以對象的形式存在,常見的數據點對象包括遙信點(Double Point)、遙測點(Measured Value)、遙控點(DoubleCommand)和遙脈點(Integrated Total),每個對象點包括多個屬性,每個屬性對應一個值。以DoublePoint對象為示例給出遙信點對象設計如表1所示。

表1 Double Point對象示例
為實現場景運行的前置條件,需要對設計數據對象組織方式,定義以下兩個概念。
2.2.1 定義1:點變量Var
點變量Var包含一個alias(唯一標識)、ID(數據對象的ID)、attribute(數值類型屬性)、compareOperation(包括“>”“<”“==”“!=”“≥”“≤”)和一個value(數值類型,可以為已定義過的其他點變量的alias,如果為alias,則表示取該alias點id的attribute值)。每個點變量邏輯表達式最后運算的結果為一個Bool類型。點變量舉例如下。
{"alias" : "V3", "id" : 527972140,"attribute" : "FieldValue","compareOperation" : ">", "value" : "5"},即{V3: 527972140-> FieldValue >5},點變量V3表示數據點527972140的FieldValue屬性大于5時為true,否則為false;
{"alias" : "V4", "id" : 527972141,"attribute" : "FieldValue","compareOperation" : "!=", "value" : "V3"},即{V4: 527972141-> FieldValue != 527972140-> FieldValue },點變量V4表示數據點527972141的FieldValue屬性與527972140的FieldValue屬性不相等時為true,否則為false,即對于V4忽略V3的compareOperation和value。
2.2.2 定義2:中間變量MidVar
中間變量MidVar包含一個alias(唯一標識)、expression(表達式,連接符含“&&”或“||”等,表達式中只能出現已定義過的點變量、中間變量和連接符)、compareOperation(包括“==”“!=”)和一個value(Bool類型)。每個中間變量邏輯表達式最后運算的結果為一個Bool類型。中間變量舉例如下。
{"alias" : "M1", "expression" : "V1 && V2", "compareOperation" : "==", "value" : true,},即{M1: V1 && V2 ==true},中間變量M1表示邏輯表達式“V1 && V2 ==true”的結果,即V1和V2的值都為true時M1的值為true,否則M1為false;
{"alias" : "M2", "expression" : "M1 && V2","compareOperation" : "==", "value" : true,},即{M2: M1 || V2 ==true},中間變量M2表示邏輯表達式“M1&& V2 ==true”的結果,即M1或者V2的為true時M2的值為true,否則M2為false。
場景是包含一系列數據變化的集合,若定義每個數據變化為一個場景步驟,則一個場景將包含多個場景步驟。每個場景步驟包含一個alias(唯一標識)、ID(數據對象的ID)、attribute(數值類型屬性)、value以及一個event事件組合,event中可以包含delay(表示執行步驟前延時的毫秒時間)、condition(表示執行步驟的前提,一般配置為中間變量/點變量,當該中間變量/點變量的值為真時,這個步驟的前提條件得以滿足,若delay與condition同時存在,則先執行delay后再判斷condition)、在配置condition時還允許配置檢測周期次數conditionCycleCount以及周期檢測間隔時間conditionCyclePeriod(ms),表示在conditionCycleCount個周期內每隔conditionCyclePeriod時間檢查condition,若condition為真則該步驟的條件滿足,直至次數到后若該條件仍未滿足,則該步驟失敗。場景步驟舉例如下。
{"alias" : "S2", "id" : 518523516, "attribute" : "FieldState", "value" : "1","event" : {"condition" : "M1","conditionCycleCount":20, "conditionCyclePeriod" : 1000,"delay" : 200,}},步驟S2表示延時200ms后在20個周期(每個周期1000ms)內循環檢測中間變量M1,如果在周期內檢測到其值為true則執行該步驟,即將518523516的FieldState屬性設置為1;若一直檢測不到值為true,則該步驟失敗,場景執行失敗。
本方案使用配置文件組織場景中出現的各種數據,每個配置文件包含場景的基本信息、變量信息、場景步驟等,基于以上定義,設計如典型場景配置文件結構(見圖1),文件使用JSON(JavaScript Object Notation)數據格式進行組織。

圖1 基于數據點對象的場景配置文件設計
(1)場景的基本信息。
①scenceName:場景名稱。
②scenceDescription:場景描述。
③sceneEnabled:是否啟用場景,true啟用(表示參與到所有的場景聯動之中,在條件得以滿足均會自動執行此場景),false停用(表示不參與到所有的場景聯動之中,即使條件滿足也不會自動執行)。
④isCycledScene:是否為循環場景,true循環場景,false非循環場景。
⑤onTimeExec:定時執行場景的時間,大于當前時間為有效,否則無效。定時到達后,忽略場景執行條件直接執行。
⑥onConditionExec:條件執行場景的條件表達式,可配置為中間變量/點變量,每次在條件表達式的結果從false變位true時自動執行一次場景。
(2)點變量集合。
(3)中間變量集合。
(4)場景步驟集合,在場景運行時,依次執行各步驟(各步驟執行前按要求進行延時、周期檢測,滿足條件后執行)。
培訓仿真系統中的業務由場景進行,要培訓仿真的業務越多,配置的場景就越多,如何將所有場景協同運行起來至關重要,文章設計了一種基于多線程協同的場景實現方案,可以有效聯動所有場景。場景具有3種觸發執行的條件。
(1)定時執行:要求場景配置為啟用,定時時間到后,立即執行場景,若場景為循環場景則一直在后臺循環執行。
(2)條件執行:要求場景配置為啟用,后臺循環檢測場景的條件,在每次條件表達式的結果從false變為true時執行一次。
(3)立即執行:立即執行一次場景。
所有場景的執行都受控于教學狀態,只有教學狀態為開始時才能執行,當教學狀態設置為暫停時所有已經在執行中的場景在執行完當前步驟后暫停,等待教學狀態再變為開始后繼續執行,當教學狀態設置為結束時結束所有場景的執行。
基于多線程的后臺場景實現方式主要包括3種線程,主線程一個,定時檢測子線程一個,場景執行子線程N個(0≤N視同時執行的場景個數而定)。(1)主線程:負責場景文件的解析與加載,監聽所有場景文件是否需要立即執行,并負責啟動定時檢測子線程。(2)定時檢測子線程:每秒對定時類型的場景進行檢測,定時到后啟動子線程執行該場景,同時,對條件類型的場景條件表達式進行檢測,若其條件表達式的值從false變為true,則啟動子線程執行一次。(3)場景執行子線程:負責場景內容的具體執行,其可由主線程、定時檢測子線程啟動,各場景執行子線程相互獨立。
文章在電力監控仿真系統中引入場景設計方法,將所有培訓、仿真業務導致的一系列數據變化采用場景方式進行配置,并合理設計了對象數據結構及配置文件組織方式,通過采用簡便直觀的配置工具極大地降低了仿真場景過程的配置工作。場景執行使用多線程并行方式可仿真各類場景的全景聯動,而不是單純模擬一個場景的運行,極大地還原了真實的工況,有助于受訓學員了解最真實的現場狀況。
變量符號多者可在正文前單獨列出,少的直接在公式后解釋即可。符號與解釋之間用破折號,單位與解釋之間用逗號隔開,字母和數字使用6號Times New Roman,漢字使用6號宋體。