楊 森,秦曉光,王 飛,王斐武
列車運(yùn)行控制系統(tǒng)作為整個高鐵系統(tǒng)的“大腦”,是保證高速鐵路列車安全且高效運(yùn)行的核心控制系統(tǒng)[1-2],對于包括車載ATP 設(shè)備在內(nèi)的系統(tǒng)關(guān)鍵設(shè)備的測試是必不可少的。目前國內(nèi)各個車載ATP 設(shè)備廠家及第三方測試機(jī)構(gòu)都形成了完善的測試規(guī)范化流程,但在測試腳本的編寫上大多依托某個典型線路的工程數(shù)據(jù)進(jìn)行人工篩查編寫,每輪全功能測試均采用同一套腳本來實(shí)現(xiàn)。這一方面導(dǎo)致腳本編寫過程效率低下,另一方面容易產(chǎn)生對某個固定線路模板的依賴,可能出現(xiàn)對現(xiàn)場復(fù)雜情況遍歷不足的問題。此外,實(shí)驗(yàn)室測試要完成對現(xiàn)場問題的復(fù)現(xiàn)工作,現(xiàn)有方法常常是根據(jù)ATP 的記錄數(shù)據(jù)反向推導(dǎo)出測試腳本,而不是根據(jù)問題發(fā)生地點(diǎn)的線路情況正向生成,這可能導(dǎo)致對現(xiàn)場情況還原得不夠準(zhǔn)確。因此,研究從工程數(shù)據(jù)到測試腳本的自動轉(zhuǎn)化非常必要。
目前,對于列控系統(tǒng)自動化測試已有多人研究,如李子豪等[3]提出了基于Teststand 的列控車載系統(tǒng)測試方案,陳曉軒[4]提出了基于需求規(guī)約的ATP 系統(tǒng)自動測試與結(jié)果分析方案,但其重點(diǎn)都在于測試執(zhí)行的自動化和測試結(jié)果的自動分析方面。王嗣策[5]提出了車載ATP 測試平臺的測試腳本自動生成方案,設(shè)計(jì)了以關(guān)鍵字驅(qū)動的測試腳本結(jié)構(gòu),但針對的是既有測試腳本格式文件。張勇[6]研究了測試序列的生成方法,提出了將測試案例自動串聯(lián)成測試序列的方案,但沒有落實(shí)在實(shí)際的腳本數(shù)據(jù)上。魏國棟等[7-12]提出了不同的列控設(shè)備測試腳本自動生成方法,其研究的重點(diǎn)在于測試場景的模擬、報(bào)文數(shù)據(jù)的自動生成等,而不是貼合線路實(shí)際工程數(shù)據(jù)生成的測試腳本。
本文通過對線路工程數(shù)據(jù)中的要素進(jìn)行自動提取和整合,實(shí)現(xiàn)從工程數(shù)據(jù)到測試腳本的自動轉(zhuǎn)化,并可依據(jù)進(jìn)路選擇自由生成不同進(jìn)路類型的測試腳本。
車載ATP 設(shè)備測試腳本本質(zhì)上就是將列車運(yùn)行過程中的外部接口信息,按照距離或時間等條件依次排列的組合。仿真測試環(huán)境將測試腳本作為輸入文件,在列車運(yùn)行過程中,當(dāng)滿足接口數(shù)據(jù)發(fā)送條件時,仿真測試設(shè)備將相應(yīng)的測試數(shù)據(jù),如軌道電路信號、應(yīng)答器報(bào)文等以實(shí)際物理信號的形式發(fā)送給被測設(shè)備。以北京華鐵信息技術(shù)有限公司的CTCS3-300H 型車載設(shè)備CTCS-2 級測試腳本為例,腳本內(nèi)容主要包含軌道電路載頻、軌道電路低頻和應(yīng)答器編號等,以距離為主要觸發(fā)條件,在測試過程中,根據(jù)列車的位置判斷是否向被測ATP設(shè)備發(fā)送新的數(shù)據(jù)。因此,本文研究的核心是按照進(jìn)路選擇的情況,自動生成與列車實(shí)際運(yùn)行相同的軌道區(qū)段與應(yīng)答器的組合。
本文提出的測試腳本自動生成方案主要由數(shù)據(jù)提取、元素匹配、組合排列3 部分組成,見圖1。其中,數(shù)據(jù)提取是對線路工程數(shù)據(jù)進(jìn)行初步提取,獲取與測試腳本相關(guān)的信息;元素匹配是根據(jù)進(jìn)路選擇的情況,篩選出腳本中應(yīng)有的元素;組合排列是將已篩選好的元素按照里程信息進(jìn)行順序排列,并根據(jù)腳本規(guī)則進(jìn)行編寫,最終形成測試腳本。
圖1 測試腳本自動生成方案
高速鐵路的線路工程數(shù)據(jù)通常包括車站信息表、線路坡度表、線路數(shù)據(jù)表、道岔信息表、應(yīng)答器信息表、進(jìn)路信息表、坐標(biāo)系轉(zhuǎn)換表等多個文件,覆蓋了工務(wù)、電務(wù)、車務(wù)等多個專業(yè)范疇。本文主要從車站信息表、線路數(shù)據(jù)表、應(yīng)答器信息表、進(jìn)路信息表、坐標(biāo)系轉(zhuǎn)換表等文件中篩選出對于生成車載ATP測試腳本有用的數(shù)據(jù),然后對多種信息重新統(tǒng)合,得出整個線路中所有的應(yīng)答器集合、軌道區(qū)段集合、進(jìn)路集合和區(qū)間集合。其中,進(jìn)路集合和區(qū)間集合中的元素用于與所選交路匹配,應(yīng)答器集合和軌道區(qū)段集合應(yīng)根據(jù)線路類別分為多個子集合。由于線路數(shù)據(jù)表只包含正線的區(qū)段信息,經(jīng)過數(shù)據(jù)提取后的軌道區(qū)段集合并不包括側(cè)線的軌道區(qū)段元素,后續(xù)需要根據(jù)所選交路的進(jìn)路信息進(jìn)行補(bǔ)全。
元素匹配是先從區(qū)間集合和進(jìn)路集合中篩選出所選交路覆蓋的區(qū)間和進(jìn)路元素,再根據(jù)進(jìn)路和區(qū)間篩選軌道區(qū)段和應(yīng)答器元素。在匹配區(qū)間和進(jìn)路元素的過程中,需對所選交路進(jìn)行合理性判斷,以防出現(xiàn)接車進(jìn)路與發(fā)車進(jìn)路不匹配、區(qū)間類別與進(jìn)路不匹配等情況;并根據(jù)交路的情況,計(jì)算出整個腳本的起點(diǎn)位置、運(yùn)行方向等全局信息。
將篩選出來的元素分別存儲在相應(yīng)的軌道區(qū)段輸出列表和應(yīng)答器輸出列表中,并最終合并為元素輸出列表,用于最后的腳本生成。在該過程中注意:①里程信息應(yīng)在同一坐標(biāo)系下;②側(cè)線應(yīng)答器不應(yīng)出現(xiàn)在區(qū)間里;③應(yīng)找出進(jìn)路信息中應(yīng)答器組內(nèi)所有的應(yīng)答器等。元素匹配原理見圖2。
圖2 元素匹配原理
參考列車運(yùn)行方向,以里程數(shù)據(jù)作為排序條件,對元素輸出列表中的元素進(jìn)行重新排列,從而模擬實(shí)際列車運(yùn)行過程中車載ATP設(shè)備先后接收到各類信息的過程,從數(shù)據(jù)上完全貼合現(xiàn)場的真實(shí)運(yùn)行情況。將已排好順序的元素輸出列表依據(jù)測試腳本的編寫格式,自動編寫成標(biāo)準(zhǔn)的腳本文檔格式,即可完成測試腳本的自動生成。在此基礎(chǔ)上,可根據(jù)測試案例要求,進(jìn)行延時發(fā)送、報(bào)文更改等操作。
組合排列的過程應(yīng)注意排列條件的判斷,上行線正向和下行線反向的情況下里程應(yīng)遞減,下行線正向和上行線反向的情況下里程應(yīng)遞增。若出現(xiàn)類似于東郊環(huán)線等環(huán)行線路時,應(yīng)根據(jù)交路起點(diǎn)的位置,判斷交路是否越過環(huán)路的里程終點(diǎn),若越過則終點(diǎn)后的所有元素均應(yīng)將里程加上環(huán)線的周長后再進(jìn)行排列,避免出現(xiàn)亂序。
依托.NET框架編寫軟件,通過輸入線路工程數(shù)據(jù)文件夾,以及測試人員的進(jìn)路選擇操作,即可生成最終的測試腳本文件。
軟件采用遞歸搜索算法,對整個工程數(shù)據(jù)文件夾進(jìn)行初步篩選。首先提取文件名中的關(guān)鍵字,包括車站信息表、進(jìn)路信息表、應(yīng)答器信息表、線路數(shù)據(jù)表等,若沒有找到某個關(guān)鍵字對應(yīng)的文件,則停止進(jìn)程,并提示編寫人員檢查工程數(shù)據(jù)文件夾中的內(nèi)容,進(jìn)行文件添加或文件名稱規(guī)范化修改。然后對多種信息進(jìn)行統(tǒng)合,即鎖定區(qū)間、進(jìn)路、軌道區(qū)段和應(yīng)答器等元素的關(guān)鍵屬性。
1)通過線路數(shù)據(jù)表的頁名判斷線路類別;通過相鄰車站的排列組合,確定出區(qū)間元素的起始車站、終點(diǎn)車站和線路類別。
2)遍歷進(jìn)路信息表中的進(jìn)路信息,確定進(jìn)路元素的車站名稱、聯(lián)鎖編號、所包含軌道電路、所包含應(yīng)答器、起始信號機(jī)和終點(diǎn)信號機(jī)。
3)遍歷線路數(shù)據(jù)表中的區(qū)段信息、進(jìn)路信息表中的進(jìn)路區(qū)段信息,以及所在車站的進(jìn)站信號機(jī)、出站口的里程信息,確定出軌道區(qū)段元素的區(qū)段名稱、起始坐標(biāo)、終點(diǎn)坐標(biāo)、載頻、所屬車站和信號機(jī)類別等。
4)遍歷應(yīng)答器信息表中的應(yīng)答器信息,確定出應(yīng)答器元素的編號、里程和所屬車站。
最終得出整條線路的區(qū)間集合、進(jìn)路集合、軌道區(qū)段集合和應(yīng)答器集合等,各集合以結(jié)構(gòu)體形式分別存儲各類信息。信息存儲形式示意見圖3。
圖3 信息存儲形式示意
腳本編寫人員可以選擇圖形化或者表格化操作界面來完成進(jìn)路選擇工作。軟件根據(jù)各個車站的進(jìn)路選擇計(jì)算出整個腳本的實(shí)際交路情況,并判斷進(jìn)路選擇是否合理,以防出現(xiàn)交路中途中斷、接車進(jìn)路與發(fā)車進(jìn)路不在同一股道、區(qū)間方向與接發(fā)車進(jìn)路不符等情況。
元素匹配采用遍歷篩選的方式。對于軌道區(qū)段和應(yīng)答器的元素匹配,應(yīng)分別對歸屬于區(qū)間的元素和歸屬于進(jìn)路的元素進(jìn)行匹配。
1)對于區(qū)間中的軌道區(qū)段元素和應(yīng)答器元素,根據(jù)里程信息,在相應(yīng)的子集合中進(jìn)行篩選,即里程在該區(qū)間的起點(diǎn)和終點(diǎn)之間的元素均應(yīng)被篩選出來。
2)對于進(jìn)路中的應(yīng)答器元素,根據(jù)編號信息直接篩選即可;對于進(jìn)路中的軌道區(qū)段元素,則需要根據(jù)進(jìn)路信息的描述補(bǔ)充到軌道區(qū)段輸出列表中,軌道區(qū)段里程信息則根據(jù)所在車站的出站口或進(jìn)站信號機(jī)位置進(jìn)行推算。
軌道區(qū)段和應(yīng)答器元素篩選流程見圖4。
圖4 軌道區(qū)段和應(yīng)答器元素篩選流程
以圖5 所示兩站一區(qū)間的交路情況為例,列車以下行線正向由A站3G發(fā)車,至B站3G接車。軟件先對區(qū)間和進(jìn)路元素進(jìn)行篩選。區(qū)間的篩選條件為:起始車站為A站、終點(diǎn)車站為B站、線路類別為下行線正向。進(jìn)路的篩選條件為:車站名稱為A站、起始信號機(jī)為X3、終點(diǎn)信號機(jī)為SN、聯(lián)鎖編號為x,車站名稱為B 站、起始信號機(jī)為X、終點(diǎn)信號機(jī)為X3、聯(lián)鎖編號為y。
圖5 兩站一區(qū)間進(jìn)路和區(qū)間篩選示意
確定好區(qū)間和進(jìn)路元素之后,再將應(yīng)包含的應(yīng)答器和軌道區(qū)段元素確定出來,導(dǎo)入元素輸出列表。此時元素輸出列表是亂序的,需根據(jù)各元素的里程信息排序,示例中的運(yùn)行方向?yàn)橄滦?,則按照里程遞增的順序?qū)敵隽斜碇匦屡判颉?/p>
測試腳本自動生成采用填寫模板的方式,即根據(jù)文檔編輯要求準(zhǔn)備空模板,并將其嵌入到應(yīng)用程序后臺;然后將輸出列表中的元素逐條填寫到空模板中,即可完成測試腳本的自動生成。此時該線路的進(jìn)路集合、區(qū)間集合、軌道區(qū)段集合、應(yīng)答器集合已經(jīng)存儲在程序后臺,操作人員可以隨時更改交路,快速生成其他進(jìn)路測試腳本。
軟件運(yùn)算主要基于對線路工程數(shù)據(jù)的提取,判斷依據(jù)來自于工程數(shù)據(jù)表格中的文字描述。在軟件調(diào)試過程中發(fā)現(xiàn)多處需要特殊處理的地方。
1)車站名稱中經(jīng)常出現(xiàn)“東南西北”這樣的方位詞,但在表格中車站命名中是否加“站”字并沒有統(tǒng)一,因此需要在此處引入邏輯判斷運(yùn)算,以防在進(jìn)行元素匹配運(yùn)算時找錯車站。
2)在進(jìn)路邏輯檢查運(yùn)算中,由于大型樞紐車站的信號機(jī)命名更為復(fù)雜,因此不能簡單地以信號機(jī)名稱中的“N”“F”等字符來判斷進(jìn)路的指示方向,應(yīng)根據(jù)“S”“X”“N”“F”等在字符串中的位置,來判斷其真正的含義。
3)在進(jìn)路完整性判斷中應(yīng)判斷關(guān)鍵字“線路所”,途徑線路所的進(jìn)路并不存在接車與發(fā)車進(jìn)路完整性和一致性的檢查。
4)在對車站順序進(jìn)行遍歷的運(yùn)算中,應(yīng)判斷關(guān)鍵字“中繼”,僅將該區(qū)段的所屬車站存儲為相應(yīng)的中繼站,不對車站信息列表進(jìn)行更新。
總之,由于工程數(shù)據(jù)表中存在語言表達(dá)的不確定性,需要對相應(yīng)的關(guān)鍵字進(jìn)行搜索判斷,綜合考慮是否存在關(guān)鍵字及關(guān)鍵字在整個字符串中的位置來判斷其真正含義。由于工程數(shù)據(jù)表描述缺乏嚴(yán)格的統(tǒng)一性,當(dāng)出現(xiàn)軟件難以判斷的情況時,仍需要人工將工程數(shù)據(jù)表中的相應(yīng)字段統(tǒng)一為軟件規(guī)定的格式。
采用.NET 架構(gòu)提供的WinForm 控件集作為界面開發(fā)的API,操作界面示意見圖6。根據(jù)編寫人員的實(shí)際需要分為總體控制區(qū)、過程記錄區(qū)、交路預(yù)覽區(qū)等操作區(qū)域。同時,可以通過交路預(yù)覽清楚地觀察當(dāng)前所設(shè)定的交路形式,并可直接操作預(yù)覽界面中的車站、區(qū)間控件等對交路進(jìn)行更改。除主界面外,軟件附帶錯誤提醒、進(jìn)路選擇等子界面,供編寫人員更方便地操作。
圖6 操作界面示意
通過多個試驗(yàn)樣本對軟件進(jìn)行驗(yàn)證。試驗(yàn)的樣本主要包括津秦正線、廣深港客專、京沈客專(遼寧段)、京滬等的列控工程數(shù)據(jù)表,以及北京東郊環(huán)行道環(huán)行1 線工程數(shù)據(jù)表,抽取其中多個車站組合情況,分別生成上行正向、上行反向、下行正向、下行反向、上下行線交替等多種形式的測試腳本文件。對生成結(jié)果進(jìn)行人工驗(yàn)證,腳本中的軌道區(qū)段、應(yīng)答器位置均正確,可以應(yīng)用于仿真測試平臺。測試腳本生成結(jié)果示例見圖7。
圖7 測試腳本生成結(jié)果示例
列控系統(tǒng)仿真測試自動化是當(dāng)前的發(fā)展趨勢,基于線路工程數(shù)據(jù)的測試腳本自動化編寫是自動化仿真測試的重要組成部分,可以大幅度減少測試人員的工作量,提高仿真測試與現(xiàn)場的貼合度。本文的研究實(shí)現(xiàn)了從工程數(shù)據(jù)到測試腳本的自動轉(zhuǎn)化,以此為基礎(chǔ)可進(jìn)一步研究測試序列的自動生成、測試結(jié)果的自動分析等,對整個列控系統(tǒng)的自動化測試有積極作用。