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