王錫奎,李亞楠
(1.南京鐵道職業(yè)技術(shù)學(xué)院 通信信號(hào)學(xué)院,講師,南京 210031;2.中國聯(lián)通江蘇分公司 云網(wǎng)運(yùn)營中心,工程師,南京 210008)
列車運(yùn)行控制系統(tǒng)(簡稱:列控系統(tǒng))是信號(hào)系統(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)建其圖形化模型,并在模型仿真和驗(yàn)證的基礎(chǔ)上生成軟件代碼從而提高該軟件開發(fā)效率及質(zhì)量的方法。
SCADE以圖形化模型設(shè)計(jì)為核心,包含了模型設(shè)計(jì)、模型調(diào)試仿真、形式化驗(yàn)證、代碼自動(dòng)生成、軟件設(shè)計(jì)文檔同步生成等安全苛求軟件開發(fā)標(biāo)準(zhǔn)所要求的環(huán)節(jié)?;赟CADE的模型設(shè)計(jì)流程如圖1所示。
圖1 基于SCADE的模型設(shè)計(jì)流程
SCADE在安全苛求軟件開發(fā)中的優(yōu)勢(shì)體現(xiàn)在3個(gè)方面:①SCADE的模型元素都具有嚴(yán)格的數(shù)學(xué)語義,所設(shè)計(jì)模型可精確、完整地描述軟件功能需求;②SCADE提供模型靜態(tài)檢查功能用于語法檢查,可以輕易找出模型中的語義和語法缺陷;③在代碼生成方面,SCADE能在保證安全的前提下,完成對(duì)模型的建立并自動(dòng)生成滿足EN50128、IEC61508、DO-178B∕C、IEC60880、IEC62304、ISO26262等標(biāo)準(zhǔn)的嵌入式C語言代碼。
根據(jù)列控系統(tǒng)的運(yùn)營需求,車載子系統(tǒng)設(shè)置了不同的駕駛模式,以更好地完成列車在不同運(yùn)行場景下的速度監(jiān)控。
以CTCS-3級(jí)列控系統(tǒng)為例,車載子系統(tǒng)有9種駕駛模式,分別是完全監(jiān)控模式FS(Full Supervision)、目視行車模式OS(On Sight)、引導(dǎo)模式CO(Call On)、調(diào)車模式SH(Shunting)、隔離模式IS(Isolation)、待機(jī)模式SB(Stand By)、休眠模式SL(Sleeping)、部分監(jiān)控模式PS(Part Supervision)和機(jī)車信號(hào)模式CS(Cab Signal)。其中PS和CS模式僅在列控系統(tǒng)降級(jí)至CTCS-2級(jí)時(shí)使用。
在SCADE中,利用狀態(tài)機(jī)對(duì)車載子系統(tǒng)的模式轉(zhuǎn)換功能進(jìn)行建模。將車載子系統(tǒng)不同模式定義為不同狀態(tài)機(jī),狀態(tài)機(jī)內(nèi)部包含特定算法,實(shí)現(xiàn)車載子系統(tǒng)在不同模式中的列車監(jiān)控功能。模式之間的轉(zhuǎn)換條件作為狀態(tài)機(jī)之間的轉(zhuǎn)移條件。模式轉(zhuǎn)換模型分為2層,第1層包含車載子系統(tǒng)關(guān)閉和工作2個(gè)狀態(tài),第2層為車載子系統(tǒng)工作時(shí)的狀態(tài),包含7個(gè)狀態(tài)機(jī),分別對(duì)應(yīng)車載子系統(tǒng)在CTCS-3級(jí)控制下的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ù)列車位置速度信息計(jì)算當(dāng)前允許速度(curSpd),DMIInput模塊對(duì)列車司機(jī)輸入進(jìn)行解析,獲得司機(jī)當(dāng)前操作,如上電鍵按下(powerOn)、駕駛臺(tái)關(guān)閉(conOff)、隔離開關(guān)閉合(isoSwitch)、調(diào)車鍵按下(SHKey)、目視行車鍵按下(OSKey)、司機(jī)確認(rèn)(driCon)、收到休眠信號(hào)(RecSLSig)等,這些數(shù)據(jù)將作為模型中各狀態(tài)之間轉(zhuǎn)換的條件。如從FS模式轉(zhuǎn)換到SB模式需要司機(jī)按下駕駛臺(tái)關(guān)閉按鈕,即conOff為真;從FS向OS轉(zhuǎn)換需要列車速度為零且目視行車按鈕被按下,即curSpeed為0且OSKey為真。
圖2 車載子系統(tǒng)模式轉(zhuǎn)換模型
這里采用SCADE提供的模擬仿真工具SCADE Simulator對(duì)已建立的模式轉(zhuǎn)換模型進(jìn)行功能正確性仿真驗(yàn)證。具體流程如下:對(duì)模型進(jìn)行上電操作,此時(shí)模型處于待機(jī)模式;當(dāng)接收到完全監(jiān)控行車許可,此時(shí)車載子系統(tǒng)模型從SB模式轉(zhuǎn)換到FS模式;選取如圖3所示的兩列列車在區(qū)間追蹤運(yùn)營場景進(jìn)行仿真。本場景中列車2前方有7個(gè)空閑區(qū)段,其前方目標(biāo)距離為10km,此時(shí)列車2運(yùn)行速度為250km∕h,選取CRH3動(dòng)車組制動(dòng)參數(shù)為列車2的制動(dòng)參數(shù),如表4所示。
圖3 列車追蹤場景
表4 高速鐵路CRH3動(dòng)車組技術(shù)參數(shù)
在SCADE Simulator工具中運(yùn)行模式轉(zhuǎn)換模型,待運(yùn)行結(jié)束后將所產(chǎn)生的數(shù)據(jù)保存在simuData.csv文件中。將該文件載入Matlab中,利用其繪圖工具繪制速度防護(hù)曲線和列車運(yùn)行速度曲線,如圖4所示。從圖中可以看出,模型能夠?yàn)榱熊囉?jì)算速度防護(hù)曲線,且能根據(jù)該曲線保證列車的運(yùn)行安全,使列車在目標(biāo)點(diǎn)之前停車。
圖4 列車2速度防護(hù)曲線及運(yùn)行曲線
經(jīng)過模擬仿真驗(yàn)證了模型的有效性后,使用SCADE代碼生成器(KCG)自動(dòng)將模型轉(zhuǎn)換為標(biāo)準(zhǔn)C語言代碼,部分代碼見圖5。
圖5 車載子系統(tǒng)模式轉(zhuǎn)換模型部分代碼
由圖5可知,函數(shù)ModeMng_init_ModeMng(outC_ModeMng_ModeMng*outC)為自動(dòng)生成的程序代碼中用來初始化的方法,該函數(shù)的名稱有很好的可讀性,便于代碼閱讀和代碼追蹤。ModeMng_init_ModeMng的參數(shù)outC為結(jié)構(gòu)體指針,該方法的輸入?yún)?shù)由outC引入。在SCADE模型設(shè)計(jì)過程中,每個(gè)變量在其作用域內(nèi)只能被賦值一次,且所生成代碼中不包含遞歸、死循環(huán)、動(dòng)態(tài)指針、動(dòng)態(tài)內(nèi)存分配等容易造成軟件缺陷的因素。因而,基于SCADE的模型設(shè)計(jì)不但縮短了車載子系統(tǒng)軟件的開發(fā)過程,也滿足了其高安全性的需求。
為提高車載子系統(tǒng)軟件開發(fā)效率和質(zhì)量,提出了基于SCADE的車載子系統(tǒng)模式轉(zhuǎn)換功能的模型設(shè)計(jì)、仿真和代碼自動(dòng)生成方法:利用SCADE建立滿足軟件功能需求和安全性需求的模型;利用SCADE對(duì)模型進(jìn)行仿真驗(yàn)證,可以在模型設(shè)計(jì)階段找出并解決模型缺陷;利用SCADE KCG將模型自動(dòng)轉(zhuǎn)換為高質(zhì)量代碼,可以節(jié)約大量的軟件手寫編碼時(shí)間。本方法已在面向特征的列控系統(tǒng)開發(fā)項(xiàng)目中應(yīng)用,可以有效排除傳統(tǒng)軟件開發(fā)中不易發(fā)現(xiàn)的缺陷,減少測試工作量,節(jié)約開發(fā)時(shí)間。