王錫奎,李亞楠
(1.南京鐵道職業(yè)技術(shù)學(xué)院 通信信號學(xué)院,講師,南京 210031;2.中國聯(lián)通江蘇分公司 云網(wǎng)運營中心,工程師,南京 210008)
列車運行控制系統(tǒng)(簡稱:列控系統(tǒng))是信號系統(tǒng)中的安全苛求系統(tǒng)。當(dāng)前列控系統(tǒng)車載子系統(tǒng)軟件主要采用傳統(tǒng)的以軟件編碼為核心的“V”型軟件開發(fā)方法。該方法采用手工編碼,編碼工作量大,而且容易因人為因素造成軟件缺陷而又極難在軟件開發(fā)階段發(fā)現(xiàn),因而軟件開發(fā)效率低下且軟件質(zhì)量不高。為解決此問題,深入分析車載子系統(tǒng)軟件的模式轉(zhuǎn)換功能需求,提出了利用安全苛求應(yīng)用開發(fā)環(huán)境(SCADE)構(gòu)建其圖形化模型,并在模型仿真和驗證的基礎(chǔ)上生成軟件代碼從而提高該軟件開發(fā)效率及質(zhì)量的方法。
SCADE以圖形化模型設(shè)計為核心,包含了模型設(shè)計、模型調(diào)試仿真、形式化驗證、代碼自動生成、軟件設(shè)計文檔同步生成等安全苛求軟件開發(fā)標(biāo)準(zhǔn)所要求的環(huán)節(jié)。基于SCADE的模型設(shè)計流程如圖1所示。

圖1 基于SCADE的模型設(shè)計流程
SCADE在安全苛求軟件開發(fā)中的優(yōu)勢體現(xiàn)在3個方面:①SCADE的模型元素都具有嚴(yán)格的數(shù)學(xué)語義,所設(shè)計模型可精確、完整地描述軟件功能需求;②SCADE提供模型靜態(tài)檢查功能用于語法檢查,可以輕易找出模型中的語義和語法缺陷;③在代碼生成方面,SCADE能在保證安全的前提下,完成對模型的建立并自動生成滿足EN50128、IEC61508、DO-178B∕C、IEC60880、IEC62304、ISO26262等標(biāo)準(zhǔn)的嵌入式C語言代碼。
根據(jù)列控系統(tǒng)的運營需求,車載子系統(tǒng)設(shè)置了不同的駕駛模式,以更好地完成列車在不同運行場景下的速度監(jiān)控。
以CTCS-3級列控系統(tǒng)為例,車載子系統(tǒng)有9種駕駛模式,分別是完全監(jiān)控模式FS(Full Supervision)、目視行車模式OS(On Sight)、引導(dǎo)模式CO(Call On)、調(diào)車模式SH(Shunting)、隔離模式IS(Isolation)、待機模式SB(Stand By)、休眠模式SL(Sleeping)、部分監(jiān)控模式PS(Part Supervision)和機車信號模式CS(Cab Signal)。其中PS和CS模式僅在列控系統(tǒng)降級至CTCS-2級時使用。
在SCADE中,利用狀態(tài)機對車載子系統(tǒng)的模式轉(zhuǎn)換功能進(jìn)行建模。將車載子系統(tǒng)不同模式定義為不同狀態(tài)機,狀態(tài)機內(nèi)部包含特定算法,實現(xiàn)車載子系統(tǒng)在不同模式中的列車監(jiān)控功能。模式之間的轉(zhuǎn)換條件作為狀態(tài)機之間的轉(zhuǎn)移條件。模式轉(zhuǎn)換模型分為2層,第1層包含車載子系統(tǒng)關(guān)閉和工作2個狀態(tài),第2層為車載子系統(tǒng)工作時的狀態(tài),包含7個狀態(tài)機,分別對應(yīng)車載子系統(tǒng)在CTCS-3級控制下的7種工作模式,見表1。

表1 模式轉(zhuǎn)換模型狀態(tài)說明
表2所示為模式轉(zhuǎn)換模型的輸入?yún)?shù),表示模式轉(zhuǎn)換的條件或事件。表3所示為模型的輸出參數(shù),表示當(dāng)前駕駛模式。

表2 模式轉(zhuǎn)換模型輸入?yún)?shù)

表3 模型的輸出參數(shù)
利用SCADE所建立的車載子系統(tǒng)模式轉(zhuǎn)換模型見圖2所示。該模型中curSpd模塊根據(jù)列車位置速度信息計算當(dāng)前允許速度(curSpd),DMIInput模塊對列車司機輸入進(jìn)行解析,獲得司機當(dāng)前操作,如上電鍵按下(powerOn)、駕駛臺關(guān)閉(conOff)、隔離開關(guān)閉合(isoSwitch)、調(diào)車鍵按下(SHKey)、目視行車鍵按下(OSKey)、司機確認(rèn)(driCon)、收到休眠信號(RecSLSig)等,這些數(shù)據(jù)將作為模型中各狀態(tài)之間轉(zhuǎn)換的條件。如從FS模式轉(zhuǎn)換到SB模式需要司機按下駕駛臺關(guān)閉按鈕,即conOff為真;從FS向OS轉(zhuǎn)換需要列車速度為零且目視行車按鈕被按下,即curSpeed為0且OSKey為真。

圖2 車載子系統(tǒng)模式轉(zhuǎn)換模型
這里采用SCADE提供的模擬仿真工具SCADE Simulator對已建立的模式轉(zhuǎn)換模型進(jìn)行功能正確性仿真驗證。具體流程如下:對模型進(jìn)行上電操作,此時模型處于待機模式;當(dāng)接收到完全監(jiān)控行車許可,此時車載子系統(tǒng)模型從SB模式轉(zhuǎn)換到FS模式;選取如圖3所示的兩列列車在區(qū)間追蹤運營場景進(jìn)行仿真。本場景中列車2前方有7個空閑區(qū)段,其前方目標(biāo)距離為10km,此時列車2運行速度為250km∕h,選取CRH3動車組制動參數(shù)為列車2的制動參數(shù),如表4所示。

圖3 列車追蹤場景

表4 高速鐵路CRH3動車組技術(shù)參數(shù)
在SCADE Simulator工具中運行模式轉(zhuǎn)換模型,待運行結(jié)束后將所產(chǎn)生的數(shù)據(jù)保存在simuData.csv文件中。將該文件載入Matlab中,利用其繪圖工具繪制速度防護(hù)曲線和列車運行速度曲線,如圖4所示。從圖中可以看出,模型能夠為列車計算速度防護(hù)曲線,且能根據(jù)該曲線保證列車的運行安全,使列車在目標(biāo)點之前停車。

圖4 列車2速度防護(hù)曲線及運行曲線
經(jīng)過模擬仿真驗證了模型的有效性后,使用SCADE代碼生成器(KCG)自動將模型轉(zhuǎn)換為標(biāo)準(zhǔn)C語言代碼,部分代碼見圖5。

圖5 車載子系統(tǒng)模式轉(zhuǎn)換模型部分代碼
由圖5可知,函數(shù)ModeMng_init_ModeMng(outC_ModeMng_ModeMng*outC)為自動生成的程序代碼中用來初始化的方法,該函數(shù)的名稱有很好的可讀性,便于代碼閱讀和代碼追蹤。ModeMng_init_ModeMng的參數(shù)outC為結(jié)構(gòu)體指針,該方法的輸入?yún)?shù)由outC引入。在SCADE模型設(shè)計過程中,每個變量在其作用域內(nèi)只能被賦值一次,且所生成代碼中不包含遞歸、死循環(huán)、動態(tài)指針、動態(tài)內(nèi)存分配等容易造成軟件缺陷的因素。因而,基于SCADE的模型設(shè)計不但縮短了車載子系統(tǒng)軟件的開發(fā)過程,也滿足了其高安全性的需求。
為提高車載子系統(tǒng)軟件開發(fā)效率和質(zhì)量,提出了基于SCADE的車載子系統(tǒng)模式轉(zhuǎn)換功能的模型設(shè)計、仿真和代碼自動生成方法:利用SCADE建立滿足軟件功能需求和安全性需求的模型;利用SCADE對模型進(jìn)行仿真驗證,可以在模型設(shè)計階段找出并解決模型缺陷;利用SCADE KCG將模型自動轉(zhuǎn)換為高質(zhì)量代碼,可以節(jié)約大量的軟件手寫編碼時間。本方法已在面向特征的列控系統(tǒng)開發(fā)項目中應(yīng)用,可以有效排除傳統(tǒng)軟件開發(fā)中不易發(fā)現(xiàn)的缺陷,減少測試工作量,節(jié)約開發(fā)時間。