朱衛(wèi)華 馬曉旭
朱衛(wèi)華:西門子信號(hào)有限公司 工程師 710016 西安
馬曉旭:西門子信號(hào)有限公司 工程師 710016 西安
應(yīng)答器(Balise)作為地-車信息傳輸通道中的地面信息傳輸載體,廣泛應(yīng)用在我國(guó)高鐵領(lǐng)域。我國(guó)高鐵的快速發(fā)展,鐵路線不斷調(diào)整和升級(jí),使得提供線路固定參數(shù),如線路坡度、線路允許速度、軌道電路參數(shù)、鏈接信息、列控等級(jí)切換等信息的應(yīng)答器報(bào)文也需要頻繁的修改。以京石武高速鐵路為例,該線共使用應(yīng)答器約5000臺(tái),由于前期測(cè)量誤差,拉通試驗(yàn)時(shí)修改線路原始數(shù)據(jù)17次,導(dǎo)致2600臺(tái)次應(yīng)答器報(bào)文需要修改。正式開(kāi)通后3次對(duì)線路重新調(diào)整,涉及約110臺(tái)次應(yīng)答器報(bào)文的修改。
由于報(bào)文內(nèi)容涉及行車安全,并且結(jié)構(gòu)逐漸被用戶所熟悉,越來(lái)越多的用戶在管理報(bào)文的同時(shí),希望可以對(duì)報(bào)文內(nèi)容進(jìn)行校核或者將修改前后的報(bào)文進(jìn)行比對(duì)。但報(bào)文為1023位的二進(jìn)制編碼,由830位用戶報(bào)文經(jīng)編碼后生成,必須解碼才能還原成830位用戶信息,還原后按位查找校核的方法不直觀且容易出錯(cuò),對(duì)于報(bào)文內(nèi)的漢字編碼更是無(wú)能為力。為此,借助Excel的VBA工具,編寫報(bào)文自動(dòng)解碼顯示工具,完成報(bào)文內(nèi)容的顯示,特別是對(duì)漢字的顯示,可以極大地方便用戶對(duì)報(bào)文的校核和比對(duì)。
應(yīng)答器(組),用于發(fā)送固定不變的數(shù)據(jù),提供線路固定參數(shù),同時(shí)校準(zhǔn)里程累積的定位誤差。應(yīng)答器生產(chǎn)廠家根據(jù)設(shè)計(jì)院提供的地面數(shù)據(jù)和相關(guān)標(biāo)準(zhǔn)生成830位的用戶報(bào)文,用戶報(bào)文由幀標(biāo)志、用戶信息包和信息結(jié)束3部分構(gòu)成。
幀標(biāo)志占用50位,記錄應(yīng)答器的信息傳送方向、應(yīng)答器組的數(shù)量、應(yīng)答器編號(hào)和信息類型等信息。用戶信息包,可以根據(jù)該應(yīng)答器的功能,選擇21種不同結(jié)構(gòu)和功能的信息包。文本信息包(ETCS-72)中文本信息編碼每個(gè)漢字利用2個(gè)字節(jié)表示,字庫(kù)編碼采用GB18030字庫(kù)。用戶信息包最大為772位,當(dāng)信息內(nèi)容超過(guò)772位時(shí),通常需要多個(gè)應(yīng)答器構(gòu)成一組,共同完成數(shù)據(jù)傳輸。信息結(jié)束占用8位,等于“11111111”表示信息幀結(jié)束。
830位的用戶報(bào)文經(jīng)過(guò)編碼成為1023位的應(yīng)答器報(bào)文,該報(bào)文編寫入應(yīng)答器的同時(shí),還需要發(fā)送給用戶進(jìn)行備份。
Excel是微軟公司推出的辦公工具軟件,表格的顯示方式使得在進(jìn)行數(shù)據(jù)分析、統(tǒng)計(jì)和顯示時(shí)非常方便和直觀。VBA是Visual Basic For Application的簡(jiǎn)稱,是建立在Office中的一種應(yīng)用程序開(kāi)發(fā)工具,可以通過(guò)它來(lái)擴(kuò)展Excel的功能,來(lái)完成復(fù)雜和重復(fù)的工作。
VBA是通過(guò)運(yùn)行宏(在Visual Basic中編寫的分步過(guò)程)來(lái)工作的。只需編寫單個(gè)的宏命令,就可以在Excel表格中調(diào)用宏,從而實(shí)現(xiàn)對(duì)硬盤文件和Excel表格的操作,使工作變得更加簡(jiǎn)單。
軟件在Excel中實(shí)現(xiàn)的界面如圖1。B2單元格內(nèi)存放舊報(bào)文文件的路徑,C2單元格內(nèi)存放新報(bào)文的路徑,需要在開(kāi)始解碼比對(duì)前手動(dòng)輸入。例如:舊應(yīng)答器報(bào)文存放在“E:Test1”目錄下,則需要在 B2單元格填寫“E:Test1”;新應(yīng)答器報(bào)文存放在“E:Test2”目錄下,則需要在C2單元格填寫“E:Test2”。
圖1 解碼比對(duì)軟件界面圖
填寫完畢后即可開(kāi)始運(yùn)行相應(yīng)的宏,圖1中G列為按鈕,按下相應(yīng)的按鈕后執(zhí)行對(duì)應(yīng)的VBA宏,分別完成不同的功能。各個(gè)按鈕的功能如下。
1.導(dǎo)入1。該宏主要將B2單元格描述的文件目錄下的所有報(bào)文文件名,導(dǎo)入到Excel表格B列中。需要使用VBA中的文件遍歷工具,對(duì)指定后綴的報(bào)文文件名(例如.tlg)進(jìn)行遍歷。宏執(zhí)行完畢后B列會(huì)填入相應(yīng)的報(bào)文文件名。
2.導(dǎo)入2。該宏主要將C2單元格描述的文件目錄下的所有報(bào)文文件名,導(dǎo)入到Excel表格“C”列中。宏執(zhí)行完畢后C列會(huì)填入相應(yīng)的報(bào)文文件名。
3.模糊匹配。將導(dǎo)入的B列和C列文件名以行為基準(zhǔn)進(jìn)行匹配,相同的文件名存放到一行。如果B列有該文件而C列沒(méi)有,則C列為空白,例如C13單元格。同理B31為B列沒(méi)有,但C列有。宏執(zhí)行完畢后,B列和C列的文件名一一對(duì)應(yīng)。
4.比較解碼。使用VBA的二進(jìn)制文件打開(kāi)與讀取函數(shù),打開(kāi)B列和C列的報(bào)文文件,并對(duì)讀取的1023位二進(jìn)制文件按位比較,如果1023位信息一致,則在D列顯示“Match”;如果不一致,則顯示“NO Match”。C列和B列任何一列缺少文件時(shí)顯示“No File”。
5.清除數(shù)據(jù)。清除B列至F列自動(dòng)讀取的內(nèi)容,以便重新開(kāi)始讀取。
依次點(diǎn)擊“導(dǎo)入1”、“導(dǎo)入2”、“模糊匹配”、“比較解碼”后,D列顯示為比較結(jié)果,如果希望查看詳細(xì)的報(bào)文內(nèi)容,則需要點(diǎn)擊E列的文件名。點(diǎn)擊后會(huì)將該組應(yīng)答器的報(bào)文從1023位還原為830位用戶報(bào)文,并且將用戶報(bào)文存放到新的表格中,按照指定的格式進(jìn)行顯示,如圖2。
圖2為C列和B列均有文件時(shí)宏執(zhí)行完畢后產(chǎn)生的新表單,其中B列和E列是報(bào)文變量名,C列和F列為占用位數(shù),D列和G列為報(bào)文內(nèi)實(shí)際填寫的值,并且使用Excel備注功能備注了數(shù)據(jù)含義,方便用戶查看。當(dāng)比較的報(bào)文存在差異時(shí),差異點(diǎn)顯示在I列,方便查看。例如:I24列的數(shù)據(jù)為464,表示2個(gè)報(bào)文內(nèi)的速度信息包(Packet 21)內(nèi),“到下一個(gè)坡度變化點(diǎn)的距離增量”的數(shù)值相差464。
當(dāng)圖1中C列和B列任何一列缺少文件時(shí),只對(duì)有文件的列進(jìn)行解碼。C列有文件,則解碼后顯示如圖2中的CBD列;D列有文件,則解碼后顯示如圖2中的EFG列。
圖2 報(bào)文解碼后顯示界面
表格的方式分三列顯示報(bào)文的變量名、位數(shù)和實(shí)際值,并且在實(shí)際值的備注框內(nèi)輸入了變量含義的說(shuō)明文字。實(shí)現(xiàn)了對(duì)報(bào)文內(nèi)容的查看,顯示直觀。當(dāng)遇到包含漢字編碼的用戶信息包時(shí),調(diào)用Excel的CHAR函數(shù)來(lái)直接返回漢字,如圖3。極大地方便了漢字的查看和校核。
圖3 ETCS-72包內(nèi)漢字的顯示
迅速完成新舊報(bào)文的比對(duì),比對(duì)后可以直觀、方便地看到比對(duì)結(jié)果。點(diǎn)擊文件名后可以進(jìn)一步查看數(shù)據(jù)差異點(diǎn),便于校核應(yīng)答器數(shù)據(jù)的變化。
當(dāng)2個(gè)以上的應(yīng)答器構(gòu)成應(yīng)答器組時(shí),用戶信息包根據(jù)其長(zhǎng)度可以分配到一組應(yīng)答器中的任意一個(gè)。當(dāng)比較報(bào)文時(shí),存在單個(gè)應(yīng)答器的文件比對(duì)不匹配,但是成組后又匹配的情況。軟件采用應(yīng)答器組的方式進(jìn)行報(bào)文解碼和比對(duì),杜絕了用戶信息包存放位置不同而導(dǎo)致的報(bào)文比對(duì)不一致。
應(yīng)答器報(bào)文作為列控系統(tǒng)的重要數(shù)據(jù),其在報(bào)文生產(chǎn)廠家的編寫和修改過(guò)程中經(jīng)過(guò)了嚴(yán)格的校核和模擬運(yùn)行驗(yàn)證。
利用Excel的VBA開(kāi)發(fā)的工具,用戶可以在管理報(bào)文的同時(shí),對(duì)應(yīng)答器報(bào)文進(jìn)行解碼、顯示和比對(duì),可以用表格的方式顯示出報(bào)文的變量名稱、變量值和含義,對(duì)漢字進(jìn)行顯示,使得用戶對(duì)1023位報(bào)文的校核和比對(duì)成為可能,并且較大幅度地降低人工校核的復(fù)雜度,增加用戶對(duì)報(bào)文內(nèi)容的了解,方便用戶管理報(bào)文、閱讀報(bào)文和對(duì)比報(bào)文。