南京鐵信科技股份有限公司 湯連橋
計算機聯鎖軟件中的邏輯關系是使用規(guī)則進行描述的。產生式系統是一種基于規(guī)則的推理技術,聯鎖軟件可采用產生式系統的技術進行開發(fā)。描述了產生式系統中三個部分(規(guī)則庫定義、總數據庫設計、控制策略設計)在開發(fā)聯鎖軟件過程中的實現,其中在定義規(guī)則庫時提出了一些新的概念和實施細則。本文以聯鎖軟件中的排列進路功能為例,闡述了方法的執(zhí)行流程。
計算機聯鎖系統由冗余配置的安全計算機和聯鎖軟件構成,其中聯鎖軟件執(zhí)行聯鎖邏輯,是整個系統的主要組成部分。傳統的軟件開發(fā)以功能為單位進行模塊劃分進行設計,聯鎖軟件中各關聯元素的邏輯關系是一個整體,無法簡單地按照“功能、模塊”的方式將其拆分。鑒于這個特點,可以分析功能梳理出內部邏輯關系,然后對邏輯關系進行整體設計和實現,即使用規(guī)則來描述邏輯關系。規(guī)則的形式為A→B,A為條件,B為動作,當條件A滿足時,觸發(fā)動作B。
將聯鎖軟件中的所有邏輯關系定義成一個規(guī)則庫,聯鎖功能就可以通過規(guī)則的執(zhí)行來實現。采用產生式系統(production system)技術并結合形式化語言開發(fā)聯鎖軟件是一次新的嘗試和探索。
產生式系統是一種基于規(guī)則的推理技術,屬于人工智能的范疇。由三部分組成:總數據庫、產生式規(guī)則和控制策略??倲祿煊脕泶娣攀聦?。產生式規(guī)則是一個規(guī)則庫。當總數據庫中的某些事實和某條規(guī)則的條件相匹配時,該規(guī)則將被激活執(zhí)行,并把其結論作為新的事實存入總數據庫中??刂撇呗詾橐粋€推理機構,由一組程序組成,用來決定問題求解過程的推理線路,實現問題的求解。
問題求解過程分為3步:匹配、沖突解決和操作。該過程也稱為推理過程,按照搜索方向可分為正向推理、逆向推理和雙向推理。正向推理又稱為事實(或數據)驅動推理,逆向推理又稱為目標驅動推理。其中正向推理的策略是:先提供一批事實(或數據)到總數據庫中,系統將這些事實(或數據)與規(guī)則的條件進行匹配,如果匹配成功則觸發(fā)規(guī)則,并把結果作為新的事實(或數據)添加到總數據庫中。繼續(xù)上述過程,直到沒有可匹配的新規(guī)則為止。當有多條規(guī)則的條件和總數據庫的事實(或數據)相匹配時,控制策略決定優(yōu)先使用哪一條規(guī)則,這稱為沖突解決。
按照產生式系統的原理,聯鎖軟件的開發(fā)分為3個部分:定義規(guī)則庫、設計總數據庫和設計控制策略。
聯鎖軟件中的元素包括進路、信號機、軌道區(qū)段和道岔等。每種元素定義了不同用途的屬性,如進路有方向屬性,鎖閉屬性等。在定義規(guī)則庫時將規(guī)則中的條件定義為“對一組元素屬性值的預期”,將規(guī)則中的動作定義為“改變一組元素屬性值的行為集合”。有些元素屬性值可以立即改變,有些元素屬性值需要等待一定時間后才能改變,故將行為分為“馬上改變”和“稍后改變”兩種。
規(guī)則中的動作分為主要動作和輔助動作:主要動作指完成某個具體功能,該動作執(zhí)行成功意味著功能完成,也就是一個功能最多只能由一個主要動作來實現;輔助動作是主要動作中部分行為的補充。先定義主要動作,然后根據主要動作中的行為確定是否需要定義輔助動作。定義輔助動作遵循下面的原則:
(1)主要動作中的行為如果存在先后關系,則需要將這些行為提取出來作為輔助動作,直到行為之間沒有先后關系。如排列進路時必須先征用進路中元素,然后才能調整進路中位置不正確的道岔,因此把“設置元素的狀態(tài)屬性為征用”的行為定義為輔助動作。
(2)主要動作中如果存在“稍后改變”的行為,也定義為輔助動作。如排列進路時需要將進路中位置不符合的道岔轉換到正確位置,道岔的轉換需要一定時間,因此將“將道岔的位置屬性設為正確位置”的行為定義為輔助動作。
聯鎖軟件的總數據庫要包含所有元素的屬性信息。有些元素的屬性是靜態(tài)的,稱為“靜態(tài)數據”,如進路編號、進路方向;有些是動態(tài)的,稱為“動態(tài)數據”,如進路的狀態(tài)?!办o態(tài)數據”因為沒法修改,只能出現在規(guī)則的條件中。為了便于查找,可以按關鍵字建索引,例如進路元素可按進路ID號建立索引,這樣就可以通過進路ID號查找某條進路元素的相關信息。“動態(tài)數據”存在修改和查找的操作,為了提高查找效率,可以借用前面的索引。
聯鎖系統是故障安全系統,在定義“動態(tài)數據”的賦值范圍時除了正常值外,還要有故障值,可防止設備出現故障時不產生危及安全的錯誤邏輯。
聯鎖總數據庫采用“結構體+數組”的組織方式,“結構體”中存放每個元素的屬性信息,相同類別的元素用“數組”存放。總數據庫的信息都存放在內存中,因為不管是“靜態(tài)數據”還是“動態(tài)數據”,在程序運行期間都會被使用。
需要設計相應的控制策略(即推理過程)來觸發(fā)和執(zhí)行聯鎖規(guī)則庫中的規(guī)則。聯鎖軟件通過推理來不斷更新元素的屬性信息?;谶@個特點,在設計控制策略時通常采用正向推理。
外部設備對聯鎖系統的影響主要是控制命令的輸入和設備狀態(tài)的采集,例如ATS下發(fā)控制命令,聯鎖系統采集道岔、信號機設備的狀態(tài)等。這兩種外部接口均能觸發(fā)規(guī)則的執(zhí)行,因此控制策略的程序分兩部分:功能執(zhí)行監(jiān)控和設備采集觸發(fā)規(guī)則。
(1)功能執(zhí)行監(jiān)控的流程為:某個新功能被要求執(zhí)行時,將該功能放入執(zhí)行列表,并開始對該功能的執(zhí)行時間進行監(jiān)控。聯鎖功能如果沒有在規(guī)定時間內完成,則其對應的動作中有些需要進行回退操作。這取決于該動作是否會對其他功能產生影響,例如對進路元素已經征用但進路因某種原因無法排列成功,可能會導致其他進路無法建立,此時則需要進行回退操作,取消進路元素的征用屬性。如圖1所示。
圖1 功能執(zhí)行監(jiān)控流程圖
(2)設備采集觸發(fā)規(guī)則的流程為:周期性采集設備狀態(tài)后,遍歷規(guī)則庫,將所有可以觸發(fā)的規(guī)則放入沖突集合中。根據沖突解決策略從沖突集合中取出一條規(guī)則執(zhí)行,該規(guī)則執(zhí)行后,重新遍歷一遍規(guī)則庫,將所有可以觸發(fā)的規(guī)則繼續(xù)放入沖突集合。如此往復,直至沒有可以觸發(fā)的規(guī)則。
圖2 設備采集觸發(fā)規(guī)則流程圖
其中沖突解決策略是根據規(guī)則中動作所屬的類別進行設計,優(yōu)先執(zhí)行主要動作其次執(zhí)行輔助動作。當動作的類別相同時,根據放入沖突集合的先后順序執(zhí)行。
因總數據庫涉及到的信息較多,限于篇幅這里不描述。下面以排列進路為例,詳細介紹規(guī)則庫的定義和控制策略執(zhí)行流程。
首先,定義排列進路的主要動作,列出所有行為,如表1所示。
表1中將“稍后改變”的行為標注為。根據2.1節(jié)規(guī)則需要將部分行為定義成輔助動作,如表2所示。
表1 主要動作
表2 主要動作和輔助動作
在表2中標注(I)的為主要動作,標注①-④的為輔助動作。
聯鎖軟件啟動,初始化聯鎖總數據庫中所有元素的屬性信息。
假設聯鎖系統收到排列進路號為R的排路命令,此時該進路的狀態(tài)屬性為空閑,進路中元素的狀態(tài)屬性為空閑,其中有一組道岔的位置不正確,側防元素的狀態(tài)為空閑,同樣有一組道岔位置不正確。
處理流程如下:
(1)收到排路命令,對排列進路R執(zhí)行監(jiān)控。
(2)設備狀態(tài)屬性的采集在不斷進行,每次采集后,檢查一遍規(guī)則庫。此時,發(fā)現“①進路征用”規(guī)則可以執(zhí)行。將其放入沖突集合,因為此時沖突集合中只有一個規(guī)則,便將其取出執(zhí)行。
(3)繼續(xù)檢查規(guī)則庫,發(fā)現“②進路道岔位置調整”、“③側防道岔位置調整”2個規(guī)則可以執(zhí)行,便將它們放入沖突集合。從沖突集合中取出一個規(guī)則,根據放入的先后順序取出執(zhí)行。一般控制策略設計成優(yōu)先取出“②進路道岔位置調整”規(guī)則。
(4)該規(guī)則執(zhí)行后,繼續(xù)檢查規(guī)則庫,沒找到可以執(zhí)行的規(guī)則。從沖突集合中取出“③側防道岔位置調整”規(guī)則執(zhí)行。
(5)經過一定時間后,進路中的道岔和側防中的道岔轉換到位。這時,設備狀態(tài)采集之后,檢查規(guī)則庫,發(fā)現“④進路鎖閉”規(guī)則可以繼續(xù)執(zhí)行。
(6)接著執(zhí)行“⑤開放信號機”規(guī)則。
(7)經過一定時間信號機被點亮,遍歷規(guī)則庫“(I)排列進路”規(guī)則被執(zhí)行,此時結束對排列進路R的監(jiān)控,返回執(zhí)行結果。
產生式系統具有自然直觀,便于推理,格式清晰,設計和檢測方便等優(yōu)點。采用該技術開發(fā)計算機聯鎖軟件,可以在開發(fā)前期將邏輯關系制定出來,便于早期評審確定,有利于問題早發(fā)現早解決;一旦邏輯關系確定,設計和開發(fā)聯鎖總數據庫和控制策略也會相對容易,從而提高了開發(fā)效率,縮短了開發(fā)周期。