張友兵,張 波
(北京全路通信信號研究設計院有限公司 列車自動控制研究所, 北京 100073)
車載ATP(Automatic Train Protection,列車超速防護系統)作為CTCS-2級列控系統的重要組成部分,影響著列車的行車安全。在將車載ATP投入應用之前,必須對其進行嚴格、完備的測試。
當前,對車載ATP進行的測試是以人工為主的測試,需要測試人員控制整個測試過程,判斷測試成功與否等。由于人工干預測試條件的控制和轉換,執行效率低下。同時,要求測試人員具有堅實的專業知識和豐富的測試經驗,特別是針對回歸測試,重復的測試工作量很大。
本文主要介紹了一種基于TCL腳本語言的針對車載ATP的自動測試平臺,說明該自動測試平臺的工作原理,并通過平臺開發和實驗室實際測試,證明該自動測試平臺是可行的、有用的和高效的。
TCL(Tool Command Language)語言是一種命令腳本化語言。它是基于字符串的解釋型命令語言,是一種簡明、高效、可移植性好的編程語言,具有可擴展、支持重用、簡單易學等特點。TCL語言作為應用的粘合劑,能夠無縫地將很多應用集成在一起,并且每一條TCL語句都可以理解成命令參數形式[1~2]。TCL提供了標準語法,并實現了許多功能,利用TCL開發測試腳本方便而簡單[3~4]。
在TCL語言中,提供了許多強大的命令,其中Expect命令尤為突出。每次Expect命令操作完成,運行結果將保存在本地環境變量 $expect_out中。這允許腳本收集這些信息給用戶以相應的反饋,同時也允許根據當前情況發送相對應的指令。Expect命令的這個功能為測試腳本和車載ATP自動交互信息提供了基礎。在下面將要介紹的測試案例腳本與車載ATP之間的“信息交互方式2”和“信息交互方式3”都使用了Expect命令。
車載ATP自動測試平臺結構如圖1所示。從圖1可以看出,除了被測設備車載ATP外,車載ATP自動測試平臺包含4個部分:測試腳本、主引擎、分引擎和測試接口。

圖1 車載ATP自動測試平臺結構圖
測試腳本又細分為TCL函數庫、測試案例腳本兩個部分。將測試案例中每一項測試內容封裝成函數,構成了TCL函數庫。編寫測試案例腳本時,只需根據文字描述的測試案例的每一項測試內容調用TCL函數庫中與之應的函數,將文字描述的測試案例腳本化,就得到了測試案例腳本。
主引擎負責依次讀取測試案例腳本的每一句腳本命令,根據protocol buf fer協議將腳本命令發送給分引擎,另外主引擎還要將分引擎的數據傳遞給腳本。主引擎是測試案例腳本與分引擎之間交互數據的橋梁。
分引擎從主引擎獲取測試案例腳本命令,根據命令內容執行相應的具體操作,并向主引擎回復車載ATP的實時信息等。在CTCS-2級車載ATP自動測試系統中,包含列車動力學分引擎、DMI分引擎和ATP接口平臺分引擎。
測試接口是各個分引擎和被測車載ATP之間交互數據的通道。
通過DMI接口,DMI分引擎可以獲取ATP發送給DMI的所有MMI包和CTCS包。還可以對DMI進行以下操縱:設置司機號、設置車次號、設置列車長度、設置載頻等。
ATP接口平臺分引擎可以對ATP進行以下操作: ATP上電、ATP斷電、激活駕駛臺、關閉駕駛臺、設置列車運行方向等。還可以獲取列車當前位置坐標、當前速度、當前加速度等。
為了對車載ATP進行自動測試,需要腳本與車載ATP自動交互信息。根據需要,設計了以下3種信息交互方式,就可以完成自動測試中腳本與車載ATP交互信息的所有需求。
信息交互方式1如圖2所示,它適用于從腳本到車載ATP的單方向的信息傳遞。通過方式1,自動測試案例腳本可以控制車載ATP上電/斷電、激活/關閉駕駛臺、設置列車運行方向、設置/取消ATP休眠、設置/取消ATP隔離、設置軌道電路低頻/載頻信息、設置應答器報文、設置列車速度/加速度、設置列車初始位置等。現在,以通過腳本控制車載ATP上電過程為例說明該機制,其步驟如下:
(1) 主引擎識別出當前一條腳本命令為“車載ATP上電”;
(2) 主引擎將“車載ATP上電”下達給對應的分引擎;
(3) 分引擎將真實的車載ATP上電命令下達給車載ATP;
(4) 車載ATP收到上電命令,執行上電命令。

圖2 信息交互方式1
信息交互方式2如圖3所示,它適用于腳本與車載ATP之間的雙方向的信息傳遞,分引擎對車載ATP的信息不做任何處理,只是透明地傳遞給腳本。通過方式2,自動測試案例腳本可以獲取列車當前位置坐標、獲取列車當前速度/加速度、獲取列車當前運行的模式/等級等。現在,以通過腳本獲取列車當前位置坐標為例,說明該機制,其步驟如下:
(1)主引擎識別出當前一條腳本命令為“判斷列車當前位置是否等于期盼位置?”;
(2)主引擎將“獲取列車位置”命令下達給對應的分引擎;
(3)分引擎實時從DMI接收車載ATP報告的列車當前位置,并將列車當前位置發送給主引擎;
(4)主引擎將列車當前位置發送給腳本,腳本判斷列車當前位置是否等于期盼位置。如果列車當前位置不等于期盼位置,則跳轉到步驟(1)。如果列車當前位置等于期盼位置,則認為期盼列車位置成功,結束此循環。

圖3 信息交互方式2
信息交互方式3如圖4所示,它適用于腳本與車載ATP之間的雙方向的信息傳遞,對于車載ATP某些功能進行測試,如果將邏輯處理完全放在腳本中,勢必會增加腳本的復雜程度。為了降低腳本的復雜程度,可以將有些邏輯處理放在分引擎中。腳本向分引擎下達命令,分引擎根據實時信息進行邏輯處理,將結果回送給腳本。通過方式3,自動測試案例腳本可以測試車尾保持功能,測試DMI沒有發出指定聲音或報警語音等。現在,以測試車尾保持功能為例,說明該機制,其步驟如下:
(1) 主引擎識別出當前一條腳本命令為“測試車尾保持命令”;
(2) 主引擎將“測試車尾保持命令”下達給對應的分引擎;
(3) 分引擎實時判斷列車是否位于測試車尾保持區域。當列車位于測試車尾保持區域,分引擎向DMI發送獲取允許速度命令,DMI向分引擎回復列車當前允許速度。DMI判斷列車當前允許速度是否等于要求的車尾保持速度。如果列車當前允許速度不等于車尾保持速度,則分引擎向主引擎報告“車尾保持失敗”,主引擎向腳本報告“車尾保持失敗”。如果列車當前允許速度等于車尾保持速度,則不做任何處理,繼續下一次循環。當列車出了測試車尾保持區域,則分引擎向主引擎報告“車尾保持成功”,主引擎向腳本報告“車尾保持成功”。

圖4 信息交互方式3
在軟件方面,需要實現主引擎、分引擎和自動測試腳本。其中,主引擎和分引擎使用C#語言開發,自動測試腳本使用TCL腳本語言開發。為了提高測試腳本的編寫效率和復用程度,可以將測試車載ATP每一項功能的TCL代碼分別封裝成函數,這些函數一起構成了TCL函數庫。在根據文字描述的測試案例編寫測試案例腳本時,根據文字描述的測試案例的每一步要測試的車載ATP功能,依次調用TCL函數庫中與之對應的函數,即可完成測試案例腳本的編寫。測試案例腳本的編寫過程,就是將文字描述的測試案例轉化成TCL腳本的測試案例。
在硬件方面,將主引擎、分引擎、TCL函數庫、測試案例腳本布置在一臺電腦上,再將該電腦通過專用的連接線連接到DMI上,并通過有線網絡或無線網絡連到ATP接口平臺。最再將ATP接口平臺和車載ATP連接起來。需要說明的是,DMI和車載ATP本來就存在連接,不需要再做連接。
至此,對車載ATP進行自動測試的軟硬件條件都具備了,啟動自動測試,通過測試案例腳本中腳本順序執行,即可完成對車載ATP的測試。
在CTCS-2級列控系統中,為了保證行車安全,在將車載ATP投入實際使用之前,必須對其進行嚴格測試。人工測試存在耗費時間、測試人員工作壓力大等缺陷。本文提出了一種基于TCL腳本的車載ATP自動測試平臺,并對該平臺的基本原理和實現方式做了介紹,通過開發和實驗室驗證,證明該車載ATP自動測試平臺能夠實現對車載ATP進行自動測試,能夠降低測試人員的工作強度,能夠實現測試結果的自動判定,具有研究和應用價值。
[1] John K. Ousterhout Ken Jones. Tcl/Tk入門經典[M]. 北京:清華大學出版社,2010.
[2]趙 利. 基于TCL腳本的自動化測試工具的研究與實現[J].信息化研究,2009,35(11).
[3]魏 玄,申 敏. 基于TCL腳本語言的AT指令自動化測試技術的研究[J]. 重慶郵電大學學報,2008,20(5).
[4]付文霞. 腳本在面向對象實時數據庫中的應用研究[J]. 科學技術與工程,2008,8(17).