文獻標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.181196
中文引用格式: 周浩尚,高照玲. VxWorks下TRDP協(xié)議棧移植[J].電子技術(shù)應(yīng)用,2018,44(10):56-59.
英文引用格式: Zhou Haoshang,Gao Zhaoling. TRDP protocol stack transplantation on VxWorks[J]. Application of Electronic Technique,2018,44(10):56-59.
0 引言
本文簡要介紹TRDP協(xié)議棧移植目標(biāo)系統(tǒng)及其所處位置、工作硬件環(huán)境,分析并解決移植之后遇到的問題,指出目前系統(tǒng)后門問題。
1 TRDP協(xié)議棧所在軟硬件環(huán)境
VxWorks操作系統(tǒng)是美國風(fēng)河(Wind River)公司在1983年開發(fā)的一款強實時嵌入式操作系統(tǒng),因具有良好的可靠性、高性能的內(nèi)核、卓越的實時性以及友好的用戶開發(fā)環(huán)境等使其在嵌入式實時操作系統(tǒng)中獨領(lǐng)風(fēng)騷。目前VxWorks廣泛應(yīng)用于高精尖技術(shù)及對實時性要求極高的領(lǐng)域中。
以太網(wǎng)技術(shù)已經(jīng)被廣泛應(yīng)用在列車通信網(wǎng)絡(luò)和車載終端設(shè)備,主要是滿足大數(shù)據(jù)量傳輸?shù)南到y(tǒng),如車載廣播系統(tǒng)、視頻系統(tǒng)、下載固件程序等,可以減少系統(tǒng)更新時間,提高工作效率。但由于以太網(wǎng)本身的鏈路層、協(xié)議棧的復(fù)雜性,其可靠性、網(wǎng)絡(luò)失效影響及Robust等都還在驗證中。國外一些大的軌道設(shè)備供貨商都已經(jīng)研制出了相關(guān)以太網(wǎng)產(chǎn)品,如龐巴迪研制的完全基于以太網(wǎng)控制的列車已經(jīng)交付到德國與荷蘭開始正式運行;EKE也已經(jīng)形成了基于EKE-Trainnet IP/Ethernet的完整解決方案;MOXA、UniControls等公司已經(jīng)研發(fā)出符合IEC新標(biāo)準(zhǔn)的ETBN交換機,正在進行調(diào)試及一致性測試;株洲機車研究所也已經(jīng)推出基于ECN與ETB的相關(guān)實驗室產(chǎn)品,2014年其新一代列車網(wǎng)絡(luò)控制系統(tǒng)(DTECS-2)產(chǎn)品代表中國在業(yè)界首次亮相,并成功通過國際專家組測試考核。
國際標(biāo)準(zhǔn)化組織(IEC)推出了基于以太網(wǎng)的列車通信網(wǎng)絡(luò)標(biāo)準(zhǔn),包括列車骨干以太網(wǎng)(Ethernet Train Backbone,ETB,由IEC61375-2-5定義)和編組以太網(wǎng)(Ethernet Consist Network,ECN,由IEC61375-3-4定義)。ETB界定了不同列車編組之間的互連接和互操作規(guī)范,而ECN界定了在每個編組內(nèi)各個終端設(shè)備構(gòu)成的以太網(wǎng)的通信規(guī)范。在2015年7月出臺了機車車輛使用的工業(yè)以太網(wǎng)標(biāo)準(zhǔn)IEC61375-2-3,Edition1.0,其為ECN與ETB的4~7層都將使用專為鐵路用途開發(fā)的自主協(xié)議列車實時數(shù)據(jù)協(xié)議(Train Real-time Data Protocol,TRDP),并通過行業(yè)團體TCNOpen以開源的形式公開,可在對應(yīng)網(wǎng)站https://sourceforge.net/projects/tcnopen/下載其源碼,截止到目前,其最新版本為1717。
TRDP協(xié)議棧在以太網(wǎng)中所處位置[1]如圖1所示。
TRDP協(xié)議棧在應(yīng)用系統(tǒng)中位置如圖2所示。
列車中央控制單元(Central Control Unit,CCU)是列車網(wǎng)絡(luò)控制系統(tǒng)的一個核心部件,負責(zé)整個車輛的網(wǎng)絡(luò)管理和車輛運行控制功能。其硬件部分采用低功耗嵌入式PC/104結(jié)構(gòu)的工業(yè)計算機104-1645CLDN-(24B)板卡,集成了AMD LX800CPU、256 MB DDR、一個PC/104擴展接口、一個10/100 Mb/s自適應(yīng)網(wǎng)口、一個IDE接口、兩個串口、USB2.0接口等[2]。
其軟件部分主要包括底層系統(tǒng)軟件和應(yīng)用層軟件,前者是后者的操作系統(tǒng)平臺,在本設(shè)計中采用基于x86硬件平臺VxWorks操作系統(tǒng),進行軟件IO映射管理、內(nèi)存管理、任務(wù)調(diào)度,通過運行相關(guān)任務(wù)的方式完成和上位機的通信、MVB數(shù)據(jù)的收發(fā)、PLC控制任務(wù)、在線監(jiān)視、運行數(shù)據(jù)記錄、故障記錄、列車級速度控制、牽引制動控制等。
由于TRDP源代碼開發(fā)環(huán)境為Wind River Workbench 3.0,對應(yīng)VxWorks版本為6.6,代碼測試硬件為PPC603,因此,不只是開發(fā)環(huán)境版本高于項目所使用的開發(fā)環(huán)境,測試硬件架構(gòu)也不同,所以當(dāng)需要改變運行環(huán)境后就必須考慮TRDP協(xié)議棧移植及其帶來的新問題。
2 TRDP組播TTL問題
把TRDP協(xié)議棧移植到VxWorks 6.5下,編譯無誤通過。下載到頭車CCU中運行,發(fā)現(xiàn)尾車CCU收不到對應(yīng)數(shù)據(jù)。經(jīng)研究代碼和反復(fù)測試及使用以太網(wǎng)工具Wireshark抓包分析發(fā)現(xiàn)組播數(shù)據(jù)報文中TTL(Time To Live)值為1,所以影響數(shù)據(jù)包通過ETBN(Ethernet Train Backbone Node)到尾車CCU中。
選中setsockopt后按F1查看官方幫助文檔[3],其中關(guān)于TTL如圖3所示。
按照說明重新設(shè)置TTL=64:
setsockopt返回錯誤代碼0x16,即非法參數(shù)。此時數(shù)據(jù)包雖然可以發(fā)出,但其TTL值仍為默認(rèn)值,即TTL=1,不符合期望以太網(wǎng)包跨2個以上交換機通信的要求。說明由于VxWorks內(nèi)核問題,設(shè)置TTL時不能安裝默認(rèn)設(shè)置方式進行設(shè)置。
繼續(xù)測試發(fā)現(xiàn)setsockopt對單播設(shè)置時可以通過sizeof(int)傳入第4個參數(shù),而組播時只能用sizeof(char)或直接寫入1來傳入第4個參數(shù)。此時,抓包顯示TTL=64,為期望值,而setsockopt返回值亦正確。
總之,當(dāng)需要跨多個交換機進行組播數(shù)據(jù),需要設(shè)置其TTL時,VxWorks 6.5系統(tǒng)底層函數(shù)實現(xiàn)有bug,和單播設(shè)置TTL時不一樣,值得開發(fā)者注意。
3 以太網(wǎng)組播數(shù)據(jù)停止發(fā)送問題
為了保證系統(tǒng)長時間運行穩(wěn)定可靠,要其連續(xù)數(shù)百小時不間斷工作,從而滿足列車長遠距離運輸?shù)男枰?。但是在測試過程中出現(xiàn)了CCU運行一段時間(長短不固定)后以太網(wǎng)組播數(shù)據(jù)停止發(fā)送的問題,此時可正常接收數(shù)據(jù)。
經(jīng)研究代碼和在代碼中增加調(diào)試輸出語句,發(fā)現(xiàn)TRDP協(xié)議棧在時間比較上采用宏定義方式,例如:
該種方式運行的結(jié)果是某個時刻后比較結(jié)果與實際計算結(jié)果相反,導(dǎo)致發(fā)送條件不能滿足,而且比較失敗后會一直都保持這種錯誤的比較結(jié)果,即使被比較的參數(shù)已經(jīng)發(fā)生變化還是返回錯誤的比較結(jié)果,從而導(dǎo)致某時刻之后數(shù)據(jù)停止發(fā)送的問題。因此可以斷定該版本的VxWorks系統(tǒng)已經(jīng)將這個比較宏定義函數(shù)修改成錯誤的比較方式。
注釋掉這些宏定義比較函數(shù),并新設(shè)計時間比較函數(shù):
在讀取本地時間時采取獲取系統(tǒng)啟動后tick個數(shù)來作為基準(zhǔn)并進行時間暫存,即:
即使出現(xiàn)當(dāng)前tick小于暫存tick時重置tick=0,從而可以保證在出問題時在兩個tick之后會自動恢復(fù),同時重新初始化TRDP協(xié)議棧。
經(jīng)過修改并進行多臺設(shè)備長時間運行測試,該方式完全可以滿足實際系統(tǒng)需要。到目前為止,運行該系統(tǒng)的CCU設(shè)備裝車幾十臺(輛),沒有再發(fā)生一起不發(fā)送過程數(shù)據(jù)的問題。
4 FTP賬戶問題
在交叉編譯環(huán)境下,設(shè)置目標(biāo)機為FTP服務(wù)器,使用電腦FTP工具登錄,并傳輸文件到目標(biāo)機進行軟件開發(fā)測試時會非常方便。VxWorks也提供該項功能,設(shè)置也比較簡單:在工程中雙擊Kernel Configuration即可打開組建配置界面,在Network Components--Network Applications--FTP Components中即可找到FTP組件,添加FTP Server后,對其進行相應(yīng)設(shè)置,保存重新編譯后即可使用了,見圖4。
若想限制FTP登錄人員,可以設(shè)置賬號密碼,設(shè)置方式為在Network Components下,Network Authentication Components組件下,IPCOM authentication configurations下有Auth configuration #1~#6,最多可以設(shè)置6個賬號密碼,見圖5。每當(dāng)需要登錄FTP時,可選擇任意一個賬號登錄。當(dāng)不設(shè)置任何賬號密碼時默認(rèn)為匿名登錄,只可查看及下載數(shù)據(jù),不可進行上傳、修改、刪除等操作。
但是在實際中,只要添加FTP組件后就會有一個管理員賬戶,其用戶名和密碼并不復(fù)雜,況且該賬號密碼并不會在組件配置界面顯示。只要知道目標(biāo)機IP(此并非難事),使用該賬號密碼均可通過FTP登錄目標(biāo)機,并可進行任何操作,危險系數(shù)較大。經(jīng)過多次測試,該賬號密碼廣泛存在于VxWorks 6.5版本中。
5 結(jié)論
本文首先闡述了TRDP協(xié)議棧所處的軟硬件系統(tǒng)環(huán)境,解決了其從VxWorks高版本、Power PC平臺移植到VxWorks低版本、X86平臺下遇到的問題;其次針對以太網(wǎng)組播數(shù)據(jù)有時發(fā)送失敗原因進行了分析與解決;最后指出并測試出VxWorks 6.5系統(tǒng)下的FTP組件確實存在后門問題。該協(xié)議棧已經(jīng)在動力集中動車組中應(yīng)用,經(jīng)過歷時兩年的考驗,在北京東郊鐵科院環(huán)鐵試驗場的環(huán)線測試及重慶北-趕水東線路試驗,到蘭州局20萬公里運用考核,該方案穩(wěn)定可靠。以上均是基于作者在課題研究中遇到的問題并在解決問題后的經(jīng)驗總結(jié),并提供一些解決問題的思路,希望對讀者有所幫助。
參考文獻
[1] IEC61375-2-3 Electronic railway equipment-Train communication network(TCN)-Part 2-3:TCN communication profile(IEC 61375-2-3 Edition 1.0)[S].2015.
[2] 任寶兵.城軌車輛中央控制單元設(shè)計[D].大連:大連理工大學(xué),2014.
[3] VxWorks OS Libraries API Reference 5.5(Edition 2)[S].2003.
作者信息:
周浩尚1,2,高照玲3
(1.中車大連電力牽引研發(fā)中心有限公司,遼寧 大連116052;
2.動車組和機車牽引與控制國家重點實驗室,遼寧 大連116052;3.大連東軟信息學(xué)院 電子工程系,遼寧 大連116023)