王 昊,王 維
(中鐵工程設(shè)計(jì)咨詢(xún)集團(tuán)有限公司,北京 100055)
列車(chē)超速防護(hù)系統(tǒng)(Automatic Train Protection,ATP)是既有高鐵、地鐵運(yùn)行控制系統(tǒng)和處于研發(fā)階段的C1 列控系統(tǒng)、下一代列控系統(tǒng)的重要組成部分之一。其主要作用是保持列車(chē)間的安全間隔,使列車(chē)在符合限制速度的標(biāo)準(zhǔn)下安全、高效運(yùn)行。目前我國(guó)高速鐵路設(shè)備的研發(fā)已經(jīng)取得了世界領(lǐng)先的成績(jī),尤其是具有完全自主知識(shí)產(chǎn)權(quán)的列控系統(tǒng)[1]。
由于ATP 主機(jī)與外圍設(shè)備通信內(nèi)容和接口的多樣化,導(dǎo)致其硬件構(gòu)成比較復(fù)雜。一套完整的ATP 主機(jī)往往由多塊板卡構(gòu)成,比如主控板卡、無(wú)線(xiàn)通信板卡、采集板卡等;部分安全板卡上有多塊處理器。目前主流的200C、300T 等ATP 主機(jī)在軟件調(diào)試和測(cè)試過(guò)程中,需要采用串口或JTAG 等方式對(duì)不同的處理器進(jìn)行編程,以JTAG 接口對(duì)FLASH 存儲(chǔ)器編程為例,需要PC 機(jī)發(fā)送指令或數(shù)據(jù)到JTAG 兼容芯片的邊界掃描寄存器,然后將寄存器中的指令或數(shù)據(jù)通過(guò)JTAG 專(zhuān)用指令傳送給FLASH,整個(gè)過(guò)程需要有PC 機(jī)上的軟件進(jìn)行控制[2]。列車(chē)在運(yùn)營(yíng)階段,如果需要升級(jí)車(chē)載設(shè)備代碼,通常由電務(wù)人員進(jìn)行人工燒錄操作,而且由于各處理器需要燒錄的程序不一樣,繁重的工作量會(huì)導(dǎo)致人為原因出現(xiàn)差錯(cuò)的可能性,并且沒(méi)有一種有效的手段去監(jiān)測(cè)燒錄過(guò)程中人為因素或通信故障出現(xiàn)的錯(cuò)誤,會(huì)造成安全隱患;同時(shí)因?yàn)樾枰娫础⒎抡嫫鞯韧鈬O(shè)備,并且JTAG 口往往都未引出到設(shè)備面板外,經(jīng)常性的拔插操作對(duì)板卡硬件的壽命有不良影響。為解決這一問(wèn)題,提出一種基于嵌入式的多處理器系統(tǒng)程序自動(dòng)更新和監(jiān)測(cè)方法。
一套完整的ATP 主機(jī)比較復(fù)雜,一般由多塊板卡構(gòu)成,包括主控板卡和多塊用于接收和解析BTM、TCR、無(wú)線(xiàn)信息模塊等數(shù)據(jù)的通信板卡?;贏TP 主機(jī)的可靠性和復(fù)雜度,在研發(fā)階段,大部分板卡間的通信方式都設(shè)計(jì)為串行通信。因此,這些通信板卡圍繞主控板卡構(gòu)成多層次串行通信關(guān)系。本文旨在通過(guò)向主控板卡插入存儲(chǔ)有目標(biāo)程序的U 盤(pán)、TF 卡或移動(dòng)硬盤(pán)等便攜式存儲(chǔ)設(shè)備,達(dá)到ATP 主機(jī)自動(dòng)并有選擇地更新有軟件升級(jí)需求的板卡。
ATP 主機(jī)包含多塊板卡和可編程芯片,將主控板卡上的處理器定義為一級(jí)處理器,與一級(jí)處理器直接通信的通信板卡上的處理器定義為二級(jí)處理器,后續(xù)與二級(jí)處理器通信并且與一級(jí)處理器無(wú)通信接口的處理器定義為三級(jí)處理器,依次類(lèi)推,結(jié)構(gòu)如圖1 所示。受篇幅所限,本文內(nèi)容僅涉及三級(jí)通信結(jié)構(gòu)。
圖1 多級(jí)處理器結(jié)構(gòu)Fig.1 Multiprocessor architecture
ATP 系統(tǒng)啟動(dòng)時(shí),檢查外設(shè)接口狀態(tài),若未檢測(cè)到外設(shè),則進(jìn)行軟件自檢,自檢完成后進(jìn)入工作模式;若有外設(shè)接入,則進(jìn)入更新模式。為防止列車(chē)在運(yùn)行過(guò)程中進(jìn)入更新?tīng)顟B(tài)而出現(xiàn)運(yùn)營(yíng)事故,主控板卡在進(jìn)入工作模式后,關(guān)閉USB 中斷或跳過(guò)檢測(cè)相應(yīng)外設(shè)接口任務(wù)。
一級(jí)處理器在更新?tīng)顟B(tài)下,向其后級(jí)處理器發(fā)送等待指令使其后級(jí)處理器處于等待狀態(tài),同時(shí)發(fā)送從外設(shè)中獲取目標(biāo)程序的名稱(chēng)和版本號(hào)。二、三級(jí)處理器接收相關(guān)信息后,與當(dāng)前程序進(jìn)行對(duì)比,判斷是否需要更新。若無(wú)需更新,則向一級(jí)處理器發(fā)送相關(guān)指令,并對(duì)外發(fā)出表示無(wú)需更新的信號(hào);若需要更新,則向一級(jí)處理器發(fā)送需求指令并進(jìn)入更新?tīng)顟B(tài)。一級(jí)處理器接收到后級(jí)需求指令后,有選擇地獲取外設(shè)中的目標(biāo)程序。二、三級(jí)處理器接收和替換相應(yīng)程序,更新完畢后,向一級(jí)處理器發(fā)送相關(guān)指令,并對(duì)外發(fā)出更新完畢的信號(hào)。一級(jí)處理器收到所有后級(jí)指令后,各級(jí)處理器恢復(fù)工作狀態(tài),如圖2 所示。
通過(guò)各板卡對(duì)外發(fā)出提示信號(hào),工作人員可以清楚地知道系統(tǒng)當(dāng)前的更新情況,防止出現(xiàn)因外設(shè)中更新程序名稱(chēng)或版本號(hào)錯(cuò)誤導(dǎo)致的應(yīng)更新而未更新的情況。
圖2 程序文件識(shí)別流程Fig.2 Program files identification process
處理器上電后將FLASH 中的程序調(diào)入到RAM 中運(yùn)行,由于FLASH 上已經(jīng)沒(méi)有程序運(yùn)行,因此可以安全地對(duì)其進(jìn)行燒寫(xiě),而不會(huì)影響系統(tǒng)的程序運(yùn)行[3]。為保證目標(biāo)程序的正確性,在程序燒錄過(guò)程中,將RAM 作為接收目標(biāo)程序的緩沖區(qū)。在接收符合版本號(hào)的程序完畢后,對(duì)其進(jìn)行校驗(yàn),校驗(yàn)無(wú)誤后就可以把RAM 緩沖區(qū)里的目標(biāo)程序燒寫(xiě)到FLAH 中了。FLASH 燒寫(xiě)完畢后,對(duì)其內(nèi)容進(jìn)行校驗(yàn),以確保FLASH 中的程序無(wú)誤。
設(shè)備更新過(guò)程中不可避免會(huì)遇到意外斷電、通信中斷或是人為停止更新等情況[4]。在上述情況發(fā)生的前提下,必然會(huì)導(dǎo)致FLASH 中的代碼不全,從而導(dǎo)致設(shè)備上電重啟后無(wú)法正常更新或工作。為防止此類(lèi)情況發(fā)生,可以在FLASH 中開(kāi)辟一塊空間,存儲(chǔ)庫(kù)函數(shù)和用于外設(shè)接口檢測(cè)、執(zhí)行燒錄的程序等,在每次自動(dòng)更新的過(guò)程中,該區(qū)域的代碼不能被修改。以TMS320F2833X 系列DSP 為例,程序是從DSP2833x_CodeStartBranch.asm 文件中定義的codestart 處開(kāi)始,其指定位置在CMD 文件內(nèi)定義,如下:
MEMORY
{
PAGE 0 :
BEGIN :origin=0x33FFF6,length=0x000002
...}
SECTIONS
{...
codestart : > BEGIN PAGE = 0
...}
ATP 系統(tǒng)對(duì)安全性和可靠性有很高的要求,目前國(guó)內(nèi)外鐵路信號(hào)產(chǎn)品的安全計(jì)算機(jī)主要采用二乘二取二或三取二2 種結(jié)構(gòu)[5]?!岸《奔礊樵? 套系統(tǒng)上集成兩套CPU 系統(tǒng),兩套系統(tǒng)嚴(yán)格同步,實(shí)時(shí)比較,只有比較一致時(shí)才對(duì)外輸出運(yùn)算結(jié)果;“二乘”即為兩套軟硬件完全一致的“二取二”系統(tǒng)工作,分別構(gòu)成系統(tǒng)的A、B 系,兩系互為熱備[6]。三取二系統(tǒng)中,3 個(gè)處理單元獨(dú)立運(yùn)行,兩兩進(jìn)行數(shù)據(jù)比較,當(dāng)某一個(gè)單元故障或數(shù)據(jù)與其他處理單元不一致時(shí),去除該單元,系統(tǒng)降級(jí)為二取二模式[7]。
本文以一系二取二為例,一級(jí)板卡上的兩個(gè)相同一級(jí)處理器分別描述為CPU1、CPU2。兩個(gè)一級(jí)CPU 采集到外設(shè)的目標(biāo)程序文件后,存儲(chǔ)到RAM 中,并進(jìn)行校驗(yàn),此過(guò)程僅能確保兩個(gè)CPU獲取到的目標(biāo)程序文件在內(nèi)容上的正確性,并不能確定一致性。因此,CPU2 以一定的協(xié)議向CPU1發(fā)送目標(biāo)數(shù)據(jù),CPU1 將從外設(shè)采集并通過(guò)校驗(yàn)的數(shù)據(jù)與CPU2 發(fā)送的輸入數(shù)據(jù)進(jìn)行比較;如果數(shù)據(jù)比較后一致,則由CPU1 向后級(jí)處理器發(fā)送相應(yīng)的目標(biāo)程序;若數(shù)據(jù)交互比較有誤或至少一塊CPU中的更新程序未通過(guò)校驗(yàn),則一級(jí)處理器重新采集外設(shè)存儲(chǔ)的文件。
為防止因外設(shè)中程序內(nèi)容的錯(cuò)誤或交互通道的故障導(dǎo)致重復(fù)采集外設(shè)數(shù)據(jù),可對(duì)采集過(guò)程進(jìn)行計(jì)數(shù),并根據(jù)重復(fù)采集原因?qū)ν獍l(fā)出相應(yīng)提示信號(hào),以便工作人員定位故障。更新系統(tǒng)通過(guò)多個(gè)相同的一級(jí)處理器之間的數(shù)據(jù)交互比較,確保在一級(jí)板卡內(nèi)的目標(biāo)文件數(shù)據(jù)是正確的,從而提高目標(biāo)文件在傳輸過(guò)程中的安全性。
上述數(shù)據(jù)比較方法僅能確保一級(jí)處理器接收到目標(biāo)程序的正確性,而且在二取二或三取二等安全控制系統(tǒng)中,串行通信多采用一對(duì)一方式。一般由1 個(gè)CPU 進(jìn)行集中處理,其他CPU 基本無(wú)法對(duì)輸出的串行信號(hào)進(jìn)行仲裁和監(jiān)測(cè),信息的接收和發(fā)送沒(méi)有真正實(shí)現(xiàn)N 取N。當(dāng)1 個(gè)CPU 出現(xiàn)故障導(dǎo)致數(shù)據(jù)輸出異常時(shí),從數(shù)據(jù)上很難定位異常的CPU,導(dǎo)致很難判斷異常原因,給系統(tǒng)的查錯(cuò)帶來(lái)很大的困難;同時(shí)由于缺少其他CPU 的監(jiān)測(cè),在極端情況下會(huì)給系統(tǒng)帶來(lái)安全隱患[8]。
為確保向后級(jí)傳輸過(guò)程的無(wú)誤,本文采用雙通道比較方法。在數(shù)據(jù)后傳的過(guò)程中,一級(jí)CPU1通過(guò)通道1(串行總線(xiàn))向后級(jí)處理器發(fā)送目標(biāo)程序的同時(shí),通過(guò)通道2 向CPU2 發(fā)送目標(biāo)文件,如圖3 所示。CPU2 對(duì)兩個(gè)通道接收到的數(shù)據(jù)同自身數(shù)據(jù)進(jìn)行比較,若數(shù)據(jù)比較結(jié)果不同,則向CPU1 發(fā)出數(shù)據(jù)有誤的信號(hào);CPU1重新向后級(jí)處理器和CPU2 發(fā)送該數(shù)據(jù),若重新發(fā)送數(shù)據(jù)步驟多次重復(fù)出現(xiàn),則對(duì)外發(fā)出提示信號(hào),此時(shí)可定位到通信通道發(fā)生故障,如圖4 所示。二級(jí)處理器向三級(jí)處理器發(fā)送更新程序時(shí),也可采用上述方法。
CPU2 在比較雙通道和自身數(shù)據(jù)時(shí),要嚴(yán)格遵循時(shí)間戳順序,即保證兩個(gè)通道和CPU2的時(shí)間戳保持一致,避免出現(xiàn)交互比較不同時(shí)間戳的數(shù)據(jù)而產(chǎn)生對(duì)更新效率和程序正確性不利的影響。為保證程序更新的效率和安全性,在更新過(guò)程中關(guān)閉所有與更新無(wú)關(guān)的中斷,以防止在程序更新過(guò)程中被其他任務(wù)打斷或接收到非更新程序的數(shù)據(jù)。本方法的有益效果在于,通過(guò)雙通道的數(shù)據(jù)比較,確保數(shù)據(jù)的安全性和同時(shí)性,避免目標(biāo)文件在板卡內(nèi)進(jìn)行處理及傳輸時(shí)發(fā)生的錯(cuò)誤,保障了從板卡輸出的目標(biāo)文件是準(zhǔn)確的,從而提高目標(biāo)文件在系統(tǒng)內(nèi)傳輸過(guò)程中的安全性和可靠性。
圖3 安全通信結(jié)構(gòu)Fig.3 Secure communication structure
圖4 程序自動(dòng)更新和監(jiān)測(cè)流程Fig.4 Automatic program update and monitoring process
本文為解決車(chē)載ATP 主機(jī)在研發(fā)調(diào)試、測(cè)試、后期維護(hù)過(guò)程中頻繁或大批量更新程序遇到的人工失誤、數(shù)據(jù)傳輸故障等問(wèn)題,提出上述程序自識(shí)別、更新、監(jiān)測(cè)方法。該方法能夠自動(dòng)識(shí)別復(fù)雜系統(tǒng)中有軟件更新需求的處理器,同時(shí)在自動(dòng)升級(jí)過(guò)程中,對(duì)通信數(shù)據(jù)和存儲(chǔ)內(nèi)容進(jìn)行檢測(cè),從而達(dá)到減少軟件升級(jí)過(guò)程中的人工操作和風(fēng)險(xiǎn)隱患的目的。本文內(nèi)容不僅局限于鐵路信號(hào)設(shè)備和串口通信方式的應(yīng)用,在其他領(lǐng)域的多處理器復(fù)雜系統(tǒng)的程序更新均可以此為參考。