鄧勝江,姜 利,戴建強(qiáng),張正普
(中國鐵道科學(xué)研究院 電子計(jì)算技術(shù)研究所, 北京 100081)
鐵路客票系統(tǒng)終端設(shè)備軟件的自動(dòng)升級
鄧勝江,姜 利,戴建強(qiáng),張正普
(中國鐵道科學(xué)研究院 電子計(jì)算技術(shù)研究所, 北京 100081)
結(jié)合我國鐵路客票系統(tǒng)逐步走向自動(dòng)化的特點(diǎn),針對售票系統(tǒng)中使用的終端設(shè)備軟件不能自動(dòng)升級的現(xiàn)狀,研究了設(shè)備的軟件自動(dòng)升級技術(shù),對設(shè)備驅(qū)動(dòng)和固件兩個(gè)方面的軟件自動(dòng)升級進(jìn)行了詳細(xì)論述,并通過實(shí)驗(yàn)驗(yàn)證其可行性。該技術(shù)的實(shí)施將提高系統(tǒng)的自動(dòng)化程度,節(jié)省人力。
鐵路客票;終端設(shè)備;自動(dòng)升級
隨著我國高速鐵路的快速發(fā)展,其客運(yùn)車站的數(shù)量也在不斷增加,從而售票窗口和自助售票設(shè)備在不斷增加,同時(shí),為了提高鐵路旅客服務(wù)質(zhì)量,添加了大量站外自助售票設(shè)備。
旅客售票在旅客服務(wù)質(zhì)量上有了較大幅度的提高,但是,這些售票設(shè)備的軟件升級還是由人工完成。一旦終端設(shè)備售票某個(gè)部件的軟件(包括設(shè)備驅(qū)動(dòng)和固件程序)出現(xiàn)漏洞或者需要增加部分功能,就需要對其進(jìn)行升級,目前,主要有兩種方式:(1)由維護(hù)人員前往售票終端,對其進(jìn)行升級;(2)在終端設(shè)備上安裝遠(yuǎn)程控制服務(wù)端程序(例如VNC),維護(hù)人員通過客戶端進(jìn)行遠(yuǎn)程操作。以上兩種方式中,雖然第2種不用維護(hù)人員親臨現(xiàn)場,但是受遠(yuǎn)程控制軟件的限制,其執(zhí)行速度較慢;如果設(shè)備處于關(guān)機(jī)狀態(tài),就會(huì)造成升級遺漏。以上兩種方式均需維護(hù)人員逐臺(tái)升級,其工作量與售票終端的數(shù)量成正比,任務(wù)極其繁重。
為了解決上述問題,本文從設(shè)備驅(qū)動(dòng)和固件兩個(gè)方面,提出終端設(shè)備自動(dòng)升級的實(shí)現(xiàn)方案,并對實(shí)現(xiàn)方法進(jìn)行論述。
1.1 設(shè)備驅(qū)動(dòng)功能結(jié)構(gòu)
目前,我國售票前臺(tái)軟件均運(yùn)行在Windows環(huán)境下,各設(shè)備給售票系統(tǒng)提供其對應(yīng)動(dòng)態(tài)鏈接庫(DLL)驅(qū)動(dòng)文件,其功能結(jié)構(gòu)如圖 1所示。

圖1 動(dòng)態(tài)鏈接庫功能結(jié)構(gòu)圖
由圖 1可知,設(shè)備驅(qū)動(dòng)包括兩項(xiàng)功能:(1)對客票系統(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ù)對應(yīng)的功能轉(zhuǎn)換成與終端設(shè)備通信的通信接口,通過通信接口將指令下達(dá)到終端設(shè)備執(zhí)行,完成相關(guān)業(yè)務(wù),執(zhí)行完成后,再將執(zhí)行結(jié)果返回給客票系統(tǒng)。
1.2 動(dòng)態(tài)鏈接庫設(shè)計(jì)
設(shè)備動(dòng)態(tài)庫完全處于被動(dòng)的工作方式,只提供輸出函數(shù)給客票系統(tǒng)調(diào)用,因此,設(shè)備驅(qū)動(dòng)是否需要升級且何時(shí)升級完全由系統(tǒng)確定。由于終端設(shè)備較多,即使是某一個(gè)模塊,也由不同的廠商提供,而且同一廠商提供的該功能的模塊也存在不同的型號,以目前鐵路上使用的制票單元為例,圖 2說明了其機(jī)器類型組成。

圖2 制票單元類型結(jié)構(gòu)圖
驅(qū)動(dòng)的升級可能只針對某個(gè)廠商的一個(gè)或幾個(gè)具體的型號,因此,系統(tǒng)需要知道終端上使用的為何種型號的設(shè)備以及當(dāng)前設(shè)備的驅(qū)動(dòng)版本,即動(dòng)態(tài)庫需提供接口供系統(tǒng)查詢當(dāng)前設(shè)備的具體內(nèi)容。例如,針對制票單元需增加函數(shù):
int GetPrinterDllVersion(char *Version);
其中,字符串Version為函數(shù)返回的對應(yīng)版本信息,需包括以下信息:模塊名稱、生產(chǎn)廠商代碼、設(shè)備型號、驅(qū)動(dòng)版本等,根據(jù)需求,可將版本信息返回格式定義,如圖 3所示,其中“–”為各字段分隔符。

圖3 設(shè)備版本信息格式
圖3中,前兩個(gè)字段(部件名稱代碼和生產(chǎn)商代碼)應(yīng)由系統(tǒng)統(tǒng)一定義,以便管理,后兩個(gè)字段由各廠商自行定義。通過獲取版本信息函數(shù)后,通過分隔符分段獲取,填入圖4所示的結(jié)構(gòu)體中,即可獲取各個(gè)參數(shù),從而判斷某個(gè)窗口的設(shè)備驅(qū)動(dòng)是否需要升級。
1.3 動(dòng)態(tài)鏈接庫升級流程設(shè)計(jì)
目前,客票系統(tǒng)采用的為C/S架構(gòu),基礎(chǔ)數(shù)據(jù)均從服務(wù)器提取,因此,動(dòng)態(tài)鏈接庫升級可以利用目前的架構(gòu),將需要更新的動(dòng)態(tài)庫文件放置在客票服務(wù)器的指定路徑下,通過服務(wù)器向各個(gè)窗口下發(fā)。因此,需要設(shè)計(jì)文件傳輸函數(shù),將動(dòng)態(tài)庫文件從服務(wù)器下達(dá)到客戶端。為了實(shí)現(xiàn)靈活升級,可采用配置文件的方式設(shè)置指定窗口(包括全部窗口升級),在進(jìn)行升級前,需比較動(dòng)態(tài)庫版本,看該動(dòng)態(tài)庫是否適合對應(yīng)的窗口。根據(jù)該設(shè)計(jì)思想,其流程包括服務(wù)器和窗口客戶端兩個(gè)部分的控制,可按照圖 5進(jìn)行。

圖4 終端設(shè)備版本信息結(jié)構(gòu)體

圖5 設(shè)備驅(qū)動(dòng)升級流程
按照圖 5的流程能實(shí)現(xiàn)實(shí)時(shí)的自動(dòng)升級,但是,對于實(shí)際生產(chǎn)過程中,某些窗口可能未開啟售票程序,窗口客戶端未與服務(wù)器建立連接,因此,服務(wù)器需要記錄要進(jìn)行升級而實(shí)際未升級的窗口號。當(dāng)有窗口開班的時(shí)候,檢查該窗口是否為需要升級而未進(jìn)行升級的,若不是,則進(jìn)入正常的售票流程;若是,則按照圖 5的流程進(jìn)行升級,升級完成后再進(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)鏈接庫的更新流程相同,將需要更新的二進(jìn)制文件放置在服務(wù)器的指定路徑上,通過服務(wù)器控制自動(dòng)下載。其不同之處有兩點(diǎn):(1)窗口客戶端接收完畢后不能立即進(jìn)入售票模式,需要等待程序下載到設(shè)備的FLASH里,正常運(yùn)行起來以后再進(jìn)入售票模式;(2)固件的二進(jìn)制程序不包括版本信息,不能直接通過版本的讀取判斷是否能進(jìn)行升級。
上述兩個(gè)問題中,關(guān)鍵是要解決第2個(gè)問題。本論文設(shè)計(jì)考慮的方法是對生成的二進(jìn)制文件進(jìn)行改造,采用人工的方式將版本信息加在固件程序的前面,下載前讀取前面的字節(jié)即可獲得版本信息,通過下面的語句即可實(shí)現(xiàn):

其中,F(xiàn)IRMWARE_PATH為通過宏定義的二進(jìn)制文件路徑。

在客戶端需提供獲取終端固件程序的函數(shù):

通過上述方法獲得新固件程序的版本信息,將其與機(jī)內(nèi)程序版本信息進(jìn)行比較,判斷是否需要將新的固件程序下載到對應(yīng)窗口電腦上的指定路徑下。
2.2 固件程序的更新
固件程序的下載包括兩部分內(nèi)容:(1)設(shè)備動(dòng)態(tài)庫提供更新固件的函數(shù);(2)設(shè)備需設(shè)計(jì)更新固件的程序。
設(shè)備動(dòng)態(tài)庫需提供的函數(shù)如下:

其中,F(xiàn)ilePath為程序分發(fā)時(shí)保存的二進(jìn)制文件的路徑。該函數(shù)將二進(jìn)制文件讀出,通過終端通信協(xié)議將固件程序下載到終端設(shè)備的內(nèi)存里,設(shè)備再通過調(diào)用IAP指令將代碼寫入FLASH。因此,固件程序的升級關(guān)鍵在于機(jī)內(nèi)程序的設(shè)計(jì)。
由于應(yīng)用程序本身運(yùn)行在FLASH中,在其運(yùn)行過程中,不能對自身進(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è)備固件程序流程
按照圖 6所示方式進(jìn)行固件升級,需要對應(yīng)用區(qū)和更新區(qū)的程序入口地址進(jìn)行固定,以此實(shí)現(xiàn)兩個(gè)區(qū)域的程序互相跳轉(zhuǎn)。
在非聯(lián)網(wǎng)的條件下,該固件升級方案在采用ARM-MCU的LPC2366及LPC1766控制的制票模塊上測試成功,并得到了較好的應(yīng)用。
鐵路客票系統(tǒng)終端設(shè)備軟件自動(dòng)升級的應(yīng)用節(jié)省了人力,降低了維護(hù)人員的勞動(dòng)強(qiáng)度,且可以在較短的時(shí)間內(nèi)完成,減少了由于升級而需要暫停設(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
鄧勝江,副研究員;姜 利,副研究員。