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