吳小俊,李上,于洋
(南京軌道交通系統(tǒng)工程有限公司,南京 210019)
綜合監(jiān)控系統(tǒng)或電力監(jiān)控系統(tǒng)的順控多采用調(diào)度順控模式[1],是多個(gè)遙控命令的組合,調(diào)度操作員只需通過界面點(diǎn)擊1個(gè)按鈕即可以完成一系列控制的操作,操作過程簡(jiǎn)單,自動(dòng)化程度高,但某些特定情境下也可能會(huì)存在一些風(fēng)險(xiǎn)。
順控前置條件是在執(zhí)行順控遙控命令前的一系列邏輯閉鎖或特定狀態(tài)檢測(cè)的一種有效手段,實(shí)現(xiàn)遙控防誤閉鎖[2]的功能。結(jié)合中綴表達(dá)式的應(yīng)用,在執(zhí)行遙控命令前,判斷是否存在閉鎖條件或閉鎖條件是否滿足[3],可提高順控執(zhí)行的安全性,同時(shí)各前置條件的結(jié)果會(huì)直觀在界面上顯示,操作員能根據(jù)顯示結(jié)果盡量排查原因,減少人工故障檢測(cè)時(shí)間。下面針對(duì)基于中綴表達(dá)式的前置條件設(shè)計(jì)實(shí)現(xiàn)進(jìn)行介紹。
順控是一系列遙控對(duì)象的集合,即順控卡片,是電氣操作票的倒閘過程[4],用戶操作時(shí),程序會(huì)按照預(yù)先配置的步驟依次進(jìn)行命令下發(fā),自動(dòng)按照規(guī)則完成一系列遙控對(duì)象的操作[5],實(shí)現(xiàn)停送電道閘操作。
順控模塊包括順控配置模塊和順控執(zhí)行模塊2個(gè)部分。
順控配置模塊主要是按照順控卡片配置前置條件和遙控對(duì)象。順控執(zhí)行模塊是根據(jù)順控的配置檢測(cè)前置條件和執(zhí)行遙控操作命令。2個(gè)模塊與系統(tǒng)平臺(tái)的配置庫(kù)和實(shí)時(shí)庫(kù)數(shù)據(jù)交互的關(guān)系如圖1所示。
圖1 順控與系統(tǒng)平臺(tái)數(shù)據(jù)交互示意圖
順控配置模塊通過讀寫配置數(shù)據(jù)庫(kù),根據(jù)預(yù)先定義的順控卡片根據(jù)系統(tǒng)平臺(tái)的數(shù)據(jù)點(diǎn)進(jìn)行綁定和設(shè)置。
順控操作的每一步驟在配置數(shù)據(jù)庫(kù)中即1個(gè)順控對(duì)象。順控對(duì)象的配置主要包括順控序號(hào)、順控類型、順控對(duì)象和順控條件屬性等字段。各主要字段說明如下。
(1)順控序號(hào):順控執(zhí)行步驟序號(hào),由1開始,依次增加。
(2)順控類型:順控對(duì)象具有控制類型,控制類型包括條件與控制命令,用于區(qū)別順控對(duì)象是前置條件還是遙控操作。
(3)順控對(duì)象:對(duì)應(yīng)系統(tǒng)中的遙信點(diǎn)、遙測(cè)點(diǎn)或遙控點(diǎn)。其中當(dāng)順控對(duì)象是條件時(shí)配置為遙信(DI)或遙測(cè)點(diǎn)(AI);當(dāng)順控對(duì)象是遙控命令時(shí)配置遙控點(diǎn)(DO)。
(4)順控對(duì)象配置條件屬性,針對(duì)順控對(duì)象類型,配置的意義不同。
①當(dāng)順控對(duì)象類型是前置條件時(shí),條件屬性為條件算術(shù)表達(dá)式。
條件算術(shù)表達(dá)式采用比較運(yùn)算符,==、!=、>、<、>=、<=。順控對(duì)象是系統(tǒng)中的DI或AI點(diǎn),通過比較運(yùn)算符,建立每一個(gè)條件的比較結(jié)果。示例見表1。
表1 條件對(duì)象配置表
第1行表示第1個(gè)順控對(duì)象為遙信點(diǎn)1011隔離開關(guān),配置為前置條件,當(dāng)隔離開關(guān)1011的值為1時(shí)(開關(guān)狀態(tài)為分位),此順控序號(hào)條件滿足。
第2行表示第2個(gè)順控對(duì)象為遙信點(diǎn)1012隔離開關(guān),配置為前置條件,當(dāng)隔離開關(guān)1012的值為2時(shí)(開關(guān)狀態(tài)為合位),此順控序號(hào)條件滿足。
第3行和第1、2行配置類同。
采用DI遙信點(diǎn)狀態(tài)作為條件是常見的做法,也可以對(duì)AI遙測(cè)點(diǎn)建立條件,如101進(jìn)線電壓>=34.5 kV等形式,但如果使用35.5 kV>=101進(jìn)線電壓>=34.5 kV這樣條件形式,則需要將條件拆分為2個(gè)條件,35.5 kV>=101進(jìn)線電壓并且101進(jìn)線電壓>=34.5 kV,在后面配置中將2個(gè)條件使用邏輯運(yùn)算&進(jìn)行合并。
②當(dāng)順控對(duì)象類型為遙控命令時(shí),條件屬性為前置條件表達(dá)式。順控對(duì)象為遙控點(diǎn)。
前置條件表達(dá)式為邏輯表達(dá)式,采用中綴表達(dá)式形式,使用邏輯運(yùn)算符,與(&)、或(|)、非(!),操作符優(yōu)先級(jí)為?。?>|[6],并可以使用括號(hào)(),括號(hào)具有最高優(yōu)先級(jí),使用括號(hào)可以使更好理解與配置表達(dá)式邏輯,避免配置與預(yù)期結(jié)果不一致。每一個(gè)運(yùn)算分量是前置條件對(duì)應(yīng)的順控執(zhí)行順序,計(jì)算表達(dá)式的邏輯結(jié)果[7]。配置示例見表2。
表2 遙控對(duì)象前置條件配置表
第四行表示順控對(duì)象是遙控命令對(duì)象,條件屬性為1&2|3,表示第1個(gè)順控對(duì)象1011隔離開關(guān)實(shí)時(shí)狀態(tài)==1和第2個(gè)前順控對(duì)象隔離開關(guān)1012狀態(tài)==2或者第3個(gè)順控對(duì)象隔離開關(guān)1013狀態(tài)!=2時(shí),前置條件結(jié)果才為真。
順控執(zhí)行模塊首先從配置庫(kù)中讀取配置的數(shù)據(jù),按照順控序號(hào)根據(jù)獲取的實(shí)時(shí)值逐一檢測(cè)順控對(duì)象。檢測(cè)過程見表3。
表3 遙控對(duì)象前置條件執(zhí)行表
第1個(gè)順控對(duì)象為遙信點(diǎn)1011隔離開關(guān)為前置條件,執(zhí)行模塊通過實(shí)時(shí)數(shù)據(jù)庫(kù)獲取當(dāng)前配置遙信點(diǎn)的實(shí)時(shí)值[8],當(dāng)隔離開關(guān)1011的實(shí)時(shí)值為1時(shí)(開關(guān)分位),此順控序號(hào)條件滿足,否則提示不滿足。
第2個(gè)順控對(duì)象為遙信點(diǎn)1012隔離開關(guān)為前置條件,執(zhí)行模塊通過實(shí)時(shí)數(shù)據(jù)庫(kù)獲取隔離開關(guān)1012的值實(shí)時(shí)為2時(shí)(開關(guān)合位),此順控序號(hào)條件滿足,否則提示不滿足。
第3個(gè)順控對(duì)象為遙信點(diǎn)1013隔離開關(guān),也為前置條件,執(zhí)行模塊通過實(shí)時(shí)數(shù)據(jù)庫(kù)獲取隔離開關(guān)1013的實(shí)時(shí)值!=1(不是開關(guān)分位),此順控序號(hào)條件滿足,否則提示不滿足。
第4個(gè)順控對(duì)象是遙控命令對(duì)象,順控條件為1&2|3,執(zhí)行模塊在執(zhí)行遙控命令前,需要通過表達(dá)計(jì)算前置條件的邏輯結(jié)果,在當(dāng)?shù)?個(gè)順控對(duì)象1011隔離開關(guān)實(shí)時(shí)狀態(tài)==1和第2個(gè)前順控對(duì)象隔離開關(guān)1012實(shí)時(shí)狀態(tài)==2或者第3個(gè)順控對(duì)象隔離開關(guān)1013實(shí)時(shí)狀態(tài)!=1時(shí),順控對(duì)象前置條件結(jié)果才為真,可以繼續(xù)執(zhí)行斷路器101遙控命令,否則不能執(zhí)行遙控命令,并給出順控條件不滿足的提示。
順控前置條件采用中綴表達(dá)式形式,中綴表達(dá)式是一種統(tǒng)一的算術(shù)或邏輯公式表示方法,操作符以中綴形式處于操作數(shù)的中間,很容易理解與分析,可方便配置人員進(jìn)行配置。但計(jì)算機(jī)很難之間計(jì)算中綴表達(dá)式,通常需要將中綴表達(dá)式轉(zhuǎn)換為前綴表達(dá)式[9]或后綴表達(dá)式[10-11],再對(duì)前綴或后綴表達(dá)式進(jìn)行求值。
本方案采用中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方式,使用C++/Qt框架,利用Qt框架的QVector、QList、QStack等容器類實(shí)現(xiàn)。
順控前置條件判斷基本流程如圖2所示。
圖2 前置條件判斷流程圖
本方案中關(guān)鍵的流程包括以下3個(gè)步驟。
(1)使用splitExp(QString& sExp,QList<QChar>& listChar)函數(shù)將字符串性的表達(dá)式轉(zhuǎn)換成QList<QChar>字符串列表,方便后續(xù)轉(zhuǎn)換使用
(2)使用infixToSuffix(QString& sExp,QVector<QChar>& suffixExp)函數(shù)將QList<QChar>字符串列表的中綴表達(dá)式轉(zhuǎn)換成QVector<QChar>后綴表達(dá)式
(3)使用calulateSuffix(QString sExp,QMap<int,bool>& conditionMap)函數(shù)將各順控條件的邏輯結(jié)果值代入后綴表達(dá)式數(shù)組,計(jì)算最終前置表達(dá)式的結(jié)果。
工程應(yīng)用中,調(diào)試人員根據(jù)預(yù)先設(shè)計(jì)的順控卡片配置順控對(duì)象,包括順控序號(hào)、順控對(duì)象、順控類型、順控動(dòng)作(只針對(duì)遙控對(duì)象)、順控前置條件和執(zhí)行次數(shù)等。配置示例如圖3所示。
圖3 配置示例圖
在進(jìn)行電氣倒閘操作時(shí),調(diào)度操作員在點(diǎn)擊執(zhí)行按鈕后,順控執(zhí)行模塊依次檢測(cè)各條件是否滿足,再根據(jù)中綴表達(dá)式計(jì)算最終前置條件結(jié)果,如不滿足則不執(zhí)行,并顯示錯(cuò)誤提示信息,如滿足則正常執(zhí)行下一步遙控操作,下發(fā)遙控命令,執(zhí)行界面效果示例展示如圖4所示。
圖4 執(zhí)行示例圖
采用中綴算術(shù)表達(dá)式作為順控前置條件,工程調(diào)試人員可自由配置各類順控執(zhí)行條件,配置方式簡(jiǎn)單明了,方便實(shí)現(xiàn)不同順控應(yīng)用場(chǎng)景,同時(shí),使用前置條件方式的順控方案可防止運(yùn)營(yíng)調(diào)度人員誤操作,執(zhí)行前檢測(cè)先決條件,提前告知順控卡片可否執(zhí)行,提高工作效率。適用于城市軌道交通和電氣化鐵路綜合監(jiān)控系統(tǒng)和電力監(jiān)控系統(tǒng),并可應(yīng)用類似邏輯順控判斷如聯(lián)動(dòng)功能[12]等的工業(yè)控制領(lǐng)域。本設(shè)計(jì)方案已在城市軌道交通綜合監(jiān)控系統(tǒng)等多個(gè)類似系統(tǒng)中應(yīng)用和實(shí)施,得到了很好的驗(yàn)證。