鄧勝江,姜 利,戴建強(qiáng),張正普
(中國(guó)鐵道科學(xué)研究院 電子計(jì)算技術(shù)研究所, 北京 100081)
鐵路客票系統(tǒng)終端設(shè)備軟件的自動(dòng)升級(jí)
鄧勝江,姜 利,戴建強(qiáng),張正普
(中國(guó)鐵道科學(xué)研究院 電子計(jì)算技術(shù)研究所, 北京 100081)
結(jié)合我國(guó)鐵路客票系統(tǒng)逐步走向自動(dòng)化的特點(diǎn),針對(duì)售票系統(tǒng)中使用的終端設(shè)備軟件不能自動(dòng)升級(jí)的現(xiàn)狀,研究了設(shè)備的軟件自動(dòng)升級(jí)技術(shù),對(duì)設(shè)備驅(qū)動(dòng)和固件兩個(gè)方面的軟件自動(dòng)升級(jí)進(jìn)行了詳細(xì)論述,并通過(guò)實(shí)驗(yàn)驗(yàn)證其可行性。該技術(shù)的實(shí)施將提高系統(tǒng)的自動(dòng)化程度,節(jié)省人力。
鐵路客票;終端設(shè)備;自動(dòng)升級(jí)
隨著我國(guó)高速鐵路的快速發(fā)展,其客運(yùn)車站的數(shù)量也在不斷增加,從而售票窗口和自助售票設(shè)備在不斷增加,同時(shí),為了提高鐵路旅客服務(wù)質(zhì)量,添加了大量站外自助售票設(shè)備。
旅客售票在旅客服務(wù)質(zhì)量上有了較大幅度的提高,但是,這些售票設(shè)備的軟件升級(jí)還是由人工完成。一旦終端設(shè)備售票某個(gè)部件的軟件(包括設(shè)備驅(qū)動(dòng)和固件程序)出現(xiàn)漏洞或者需要增加部分功能,就需要對(duì)其進(jìn)行升級(jí),目前,主要有兩種方式:(1)由維護(hù)人員前往售票終端,對(duì)其進(jìn)行升級(jí);(2)在終端設(shè)備上安裝遠(yuǎn)程控制服務(wù)端程序(例如VNC),維護(hù)人員通過(guò)客戶端進(jìn)行遠(yuǎn)程操作。以上兩種方式中,雖然第2種不用維護(hù)人員親臨現(xiàn)場(chǎng),但是受遠(yuǎn)程控制軟件的限制,其執(zhí)行速度較慢;如果設(shè)備處于關(guān)機(jī)狀態(tài),就會(huì)造成升級(jí)遺漏。以上兩種方式均需維護(hù)人員逐臺(tái)升級(jí),其工作量與售票終端的數(shù)量成正比,任務(wù)極其繁重。
為了解決上述問(wèn)題,本文從設(shè)備驅(qū)動(dòng)和固件兩個(gè)方面,提出終端設(shè)備自動(dòng)升級(jí)的實(shí)現(xiàn)方案,并對(duì)實(shí)現(xiàn)方法進(jìn)行論述。
1.1 設(shè)備驅(qū)動(dòng)功能結(jié)構(gòu)
目前,我國(guó)售票前臺(tái)軟件均運(yùn)行在Windows環(huán)境下,各設(shè)備給售票系統(tǒng)提供其對(duì)應(yīng)動(dòng)態(tài)鏈接庫(kù)(DLL)驅(qū)動(dòng)文件,其功能結(jié)構(gòu)如圖 1所示。
圖1 動(dòng)態(tài)鏈接庫(kù)功能結(jié)構(gòu)圖
由圖 1可知,設(shè)備驅(qū)動(dòng)包括兩項(xiàng)功能:(1)對(duì)客票系統(tǒng)輸出所需的標(biāo)準(zhǔn)接口;(2)與終端設(shè)備進(jìn)行通信。它起著承上啟下的作用,當(dāng)客票系統(tǒng)調(diào)用設(shè)備驅(qū)動(dòng)的接口函數(shù)時(shí),設(shè)備驅(qū)動(dòng)將接口函數(shù)對(duì)應(yīng)的功能轉(zhuǎn)換成與終端設(shè)備通信的通信接口,通過(guò)通信接口將指令下達(dá)到終端設(shè)備執(zhí)行,完成相關(guān)業(yè)務(wù),執(zhí)行完成后,再將執(zhí)行結(jié)果返回給客票系統(tǒng)。
1.2 動(dòng)態(tài)鏈接庫(kù)設(shè)計(jì)
設(shè)備動(dòng)態(tài)庫(kù)完全處于被動(dòng)的工作方式,只提供輸出函數(shù)給客票系統(tǒng)調(diào)用,因此,設(shè)備驅(qū)動(dòng)是否需要升級(jí)且何時(shí)升級(jí)完全由系統(tǒng)確定。由于終端設(shè)備較多,即使是某一個(gè)模塊,也由不同的廠商提供,而且同一廠商提供的該功能的模塊也存在不同的型號(hào),以目前鐵路上使用的制票單元為例,圖 2說(shuō)明了其機(jī)器類型組成。
圖2 制票單元類型結(jié)構(gòu)圖
驅(qū)動(dòng)的升級(jí)可能只針對(duì)某個(gè)廠商的一個(gè)或幾個(gè)具體的型號(hào),因此,系統(tǒng)需要知道終端上使用的為何種型號(hào)的設(shè)備以及當(dāng)前設(shè)備的驅(qū)動(dòng)版本,即動(dòng)態(tài)庫(kù)需提供接口供系統(tǒng)查詢當(dāng)前設(shè)備的具體內(nèi)容。例如,針對(duì)制票單元需增加函數(shù):
int GetPrinterDllVersion(char *Version);
其中,字符串Version為函數(shù)返回的對(duì)應(yīng)版本信息,需包括以下信息:模塊名稱、生產(chǎn)廠商代碼、設(shè)備型號(hào)、驅(qū)動(dòng)版本等,根據(jù)需求,可將版本信息返回格式定義,如圖 3所示,其中“–”為各字段分隔符。
圖3 設(shè)備版本信息格式
圖3中,前兩個(gè)字段(部件名稱代碼和生產(chǎn)商代碼)應(yīng)由系統(tǒng)統(tǒng)一定義,以便管理,后兩個(gè)字段由各廠商自行定義。通過(guò)獲取版本信息函數(shù)后,通過(guò)分隔符分段獲取,填入圖4所示的結(jié)構(gòu)體中,即可獲取各個(gè)參數(shù),從而判斷某個(gè)窗口的設(shè)備驅(qū)動(dòng)是否需要升級(jí)。
1.3 動(dòng)態(tài)鏈接庫(kù)升級(jí)流程設(shè)計(jì)
目前,客票系統(tǒng)采用的為C/S架構(gòu),基礎(chǔ)數(shù)據(jù)均從服務(wù)器提取,因此,動(dòng)態(tài)鏈接庫(kù)升級(jí)可以利用目前的架構(gòu),將需要更新的動(dòng)態(tài)庫(kù)文件放置在客票服務(wù)器的指定路徑下,通過(guò)服務(wù)器向各個(gè)窗口下發(fā)。因此,需要設(shè)計(jì)文件傳輸函數(shù),將動(dòng)態(tài)庫(kù)文件從服務(wù)器下達(dá)到客戶端。為了實(shí)現(xiàn)靈活升級(jí),可采用配置文件的方式設(shè)置指定窗口(包括全部窗口升級(jí)),在進(jìn)行升級(jí)前,需比較動(dòng)態(tài)庫(kù)版本,看該動(dòng)態(tài)庫(kù)是否適合對(duì)應(yīng)的窗口。根據(jù)該設(shè)計(jì)思想,其流程包括服務(wù)器和窗口客戶端兩個(gè)部分的控制,可按照?qǐng)D 5進(jìn)行。
圖4 終端設(shè)備版本信息結(jié)構(gòu)體
圖5 設(shè)備驅(qū)動(dòng)升級(jí)流程
按照?qǐng)D 5的流程能實(shí)現(xiàn)實(shí)時(shí)的自動(dòng)升級(jí),但是,對(duì)于實(shí)際生產(chǎn)過(guò)程中,某些窗口可能未開啟售票程序,窗口客戶端未與服務(wù)器建立連接,因此,服務(wù)器需要記錄要進(jìn)行升級(jí)而實(shí)際未升級(jí)的窗口號(hào)。當(dāng)有窗口開班的時(shí)候,檢查該窗口是否為需要升級(jí)而未進(jìn)行升級(jí)的,若不是,則進(jìn)入正常的售票流程;若是,則按照?qǐng)D 5的流程進(jìn)行升級(jí),升級(jí)完成后再進(jìn)入正常的售票流程。
設(shè)備固件存儲(chǔ)在設(shè)備內(nèi)的程序存儲(chǔ)器內(nèi),供設(shè)備控制MCU運(yùn)行,其存儲(chǔ)介質(zhì)一般為ROM。
2.1 新版本固件程序分發(fā)
新版本固件程序的分發(fā)與動(dòng)態(tài)鏈接庫(kù)的更新流程相同,將需要更新的二進(jìn)制文件放置在服務(wù)器的指定路徑上,通過(guò)服務(wù)器控制自動(dòng)下載。其不同之處有兩點(diǎn):(1)窗口客戶端接收完畢后不能立即進(jìn)入售票模式,需要等待程序下載到設(shè)備的FLASH里,正常運(yùn)行起來(lái)以后再進(jìn)入售票模式;(2)固件的二進(jìn)制程序不包括版本信息,不能直接通過(guò)版本的讀取判斷是否能進(jìn)行升級(jí)。
上述兩個(gè)問(wèn)題中,關(guān)鍵是要解決第2個(gè)問(wèn)題。本論文設(shè)計(jì)考慮的方法是對(duì)生成的二進(jìn)制文件進(jìn)行改造,采用人工的方式將版本信息加在固件程序的前面,下載前讀取前面的字節(jié)即可獲得版本信息,通過(guò)下面的語(yǔ)句即可實(shí)現(xiàn):
其中,F(xiàn)IRMWARE_PATH為通過(guò)宏定義的二進(jìn)制文件路徑。
在客戶端需提供獲取終端固件程序的函數(shù):
通過(guò)上述方法獲得新固件程序的版本信息,將其與機(jī)內(nèi)程序版本信息進(jìn)行比較,判斷是否需要將新的固件程序下載到對(duì)應(yīng)窗口電腦上的指定路徑下。
2.2 固件程序的更新
固件程序的下載包括兩部分內(nèi)容:(1)設(shè)備動(dòng)態(tài)庫(kù)提供更新固件的函數(shù);(2)設(shè)備需設(shè)計(jì)更新固件的程序。
設(shè)備動(dòng)態(tài)庫(kù)需提供的函數(shù)如下:
其中,F(xiàn)ilePath為程序分發(fā)時(shí)保存的二進(jìn)制文件的路徑。該函數(shù)將二進(jìn)制文件讀出,通過(guò)終端通信協(xié)議將固件程序下載到終端設(shè)備的內(nèi)存里,設(shè)備再通過(guò)調(diào)用IAP指令將代碼寫入FLASH。因此,固件程序的升級(jí)關(guān)鍵在于機(jī)內(nèi)程序的設(shè)計(jì)。
由于應(yīng)用程序本身運(yùn)行在FLASH中,在其運(yùn)行過(guò)程中,不能對(duì)自身進(jìn)行更改,因此,固件程序需分為兩個(gè)區(qū)域,即應(yīng)用程序區(qū)和更新區(qū),一般情況下,程序運(yùn)行在應(yīng)用區(qū),當(dāng)接收到更新固件指令后跳轉(zhuǎn)到更新區(qū),更新區(qū)接收完固件程序收據(jù)后再將數(shù)據(jù)寫入應(yīng)用區(qū),寫入完成后再跳轉(zhuǎn)到運(yùn)行區(qū)運(yùn)行新的程序。其流程如圖 6所示。
圖6 終端設(shè)備固件程序流程
按照?qǐng)D 6所示方式進(jìn)行固件升級(jí),需要對(duì)應(yīng)用區(qū)和更新區(qū)的程序入口地址進(jìn)行固定,以此實(shí)現(xiàn)兩個(gè)區(qū)域的程序互相跳轉(zhuǎn)。
在非聯(lián)網(wǎng)的條件下,該固件升級(jí)方案在采用ARM-MCU的LPC2366及LPC1766控制的制票模塊上測(cè)試成功,并得到了較好的應(yīng)用。
鐵路客票系統(tǒng)終端設(shè)備軟件自動(dòng)升級(jí)的應(yīng)用節(jié)省了人力,降低了維護(hù)人員的勞動(dòng)強(qiáng)度,且可以在較短的時(shí)間內(nèi)完成,減少了由于升級(jí)而需要暫停設(shè)備工作的時(shí)間,提高了執(zhí)行效率。
責(zé)任編輯 楊琍明
Automatic upgrade of TRS terminal software
DENG Shengjiang,JIANG Li,DAI Jianqiang,ZHANG Zhengpu
( Institute of Computing Technologies,China Academy of Railway Sciences,Beijing 100081,China)
Considering the fact that Railway Ticketing and Reservation System(TRS) was toward fully automatic,and due to the problems that the software system of TRS terminal could not automatically upgrade,this article explored the software automatic update technique on device driver and frmware.Experiment results proved the relative feasibility.This technique could be used to enhance the automaticity of the TRS and reduce manpower.
Railway Ticketing and Reservation System;terminal;automatic upgrade
U293.221∶TP39
A
1005-8451(2016)01-0027-03
2015-04-16
鄧勝江,副研究員;姜 利,副研究員。