摘 要: 介紹了列車通信網(wǎng)絡(luò)(TCN)和多功能車輛總線(MVB),,著重分析介紹了MVB網(wǎng)卡的硬件接口及軟件接口,并將DOS系統(tǒng)下的MVB通信成功地移植到了Linux系統(tǒng)環(huán)境下,,在實(shí)驗(yàn)室條件下,,實(shí)現(xiàn)了Linux與DOS環(huán)境下的MVB網(wǎng)絡(luò)互連,為開展不同環(huán)境下的MVB通信可行性試驗(yàn)提供了依據(jù),。
關(guān)鍵詞: DOS,;Linux;MVB,;過(guò)程數(shù)據(jù);PC/104總線
0 引言
隨著嵌入式微機(jī)控制技術(shù)以及現(xiàn)場(chǎng)總線技術(shù)的快速發(fā)展,,現(xiàn)代列車的過(guò)程控制已從集中型的直接數(shù)字控制系統(tǒng)朝著基于網(wǎng)絡(luò)的分布式系統(tǒng)發(fā)展,。應(yīng)用多種總線技術(shù),列車分布式控制系統(tǒng)把分布于各車廂內(nèi)部,、獨(dú)立完成特定功能的計(jì)算機(jī)互連為工業(yè)局域網(wǎng),,從而達(dá)到資源共享、協(xié)同工作,、分散監(jiān)測(cè)和集中操作等目的[1],。
列車通信網(wǎng)絡(luò)(TCN)就是一種建立在分布式系統(tǒng)基礎(chǔ)上的列車控制、診斷信息數(shù)據(jù)通信網(wǎng)絡(luò),。多功能車輛總線(MVB)作為TCN網(wǎng)絡(luò)的重要組成,,其作用在于聯(lián)接車輛內(nèi)部的設(shè)備和控制單元,實(shí)現(xiàn)車輛內(nèi)部的通信控制,。但是,,由于傳統(tǒng)的MVB通信網(wǎng)絡(luò)建立在DOS系統(tǒng)環(huán)境下,面對(duì)惡劣的列車運(yùn)行環(huán)境,,越來(lái)越難以滿足實(shí)際運(yùn)行的需要,。Linux以其出色的系統(tǒng)穩(wěn)定性及快速響應(yīng)性能,在軌道交通領(lǐng)域獲得青睞,。嵌入式技術(shù)的迅猛發(fā)展,,使得在Linux系統(tǒng)下建立MVB通信網(wǎng)絡(luò)的需求變得愈加迫切。
本文以實(shí)現(xiàn)Linux與DOS系統(tǒng)下的MVB網(wǎng)絡(luò)通信為目的,,對(duì)RVS系列MVB網(wǎng)卡的硬件接口及軟件接口進(jìn)行了應(yīng)用研究,,并將DOS系統(tǒng)下的MVB網(wǎng)絡(luò)通信成功移植到了Linux環(huán)境下,,最終實(shí)現(xiàn)了Linux與DOS環(huán)境下的MVB網(wǎng)絡(luò)互連。
1 MVB網(wǎng)絡(luò)簡(jiǎn)介
列車通信網(wǎng)絡(luò)(TCN)集列車控制系統(tǒng),、故障檢測(cè)與診斷系統(tǒng)以及旅客信息服務(wù)系統(tǒng)于一體,,以車載微機(jī)為主要設(shè)備,通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)列車各個(gè)系統(tǒng)之間的信息交換,,最終達(dá)到對(duì)車載設(shè)備的集散式監(jiān)視,、控制和管理等目的,是一種面向控制,、連接車載設(shè)備的數(shù)據(jù)通信系統(tǒng),,是分布式列車控制系統(tǒng)的核心[2]。
TCN由絞式列車總線WTB和多功能車輛總線MVB組成,,如圖1所示,。WTB用于聯(lián)接各個(gè)車輛,用于列車級(jí)的通信控制,;MVB用于有互操作性和互換性要求的互連設(shè)備之間的串行數(shù)據(jù)通信,。WTB與MVB之間通過(guò)網(wǎng)關(guān)來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳遞。其中,,MVB能提供最佳的響應(yīng)速度,,適合用作車輛總線。對(duì)于固定編組的列車,,MVB 也可以用作列車總線,。此外,MVB屬于總線仲裁型網(wǎng)絡(luò),,采用主幀/從幀應(yīng)答方式,,可以實(shí)現(xiàn)設(shè)備和介質(zhì)冗余,完全滿足列車對(duì)于運(yùn)行控制和安全性的要求,。
根據(jù)實(shí)際應(yīng)用的需要,,MVB網(wǎng)絡(luò)的通信數(shù)據(jù)類型分為過(guò)程數(shù)據(jù)、消息數(shù)據(jù)和監(jiān)督數(shù)據(jù),。其中,,過(guò)程數(shù)據(jù)用于反映列車的狀態(tài)、速度,、加速度,、司機(jī)指令等;消息數(shù)據(jù)是偶發(fā)數(shù)據(jù),,不頻繁發(fā)送且長(zhǎng)度不定,,如診斷、旅客信息等,;監(jiān)督數(shù)據(jù)是總線上主設(shè)備對(duì)于從設(shè)備的狀態(tài)校驗(yàn),、主權(quán)轉(zhuǎn)移,、列車初運(yùn)行等所使用的數(shù)據(jù)[1]。由于過(guò)程數(shù)據(jù)是列車運(yùn)行控制中最基本和最重要的通信數(shù)據(jù),,因此本文只針對(duì)過(guò)程數(shù)據(jù)的收發(fā)進(jìn)行研究,。
2 MVB網(wǎng)絡(luò)接口單元
為了實(shí)現(xiàn)MVB設(shè)備之間的互聯(lián),各個(gè)與MVB相連的設(shè)備都必須具有統(tǒng)一的硬件接口和軟件接口,。硬件接口主要由各個(gè)設(shè)備中的MVB網(wǎng)絡(luò)接口單元(網(wǎng)卡)實(shí)現(xiàn),,網(wǎng)卡用于實(shí)現(xiàn)物理層信號(hào)的轉(zhuǎn)換,執(zhí)行數(shù)據(jù)鏈路層的通信規(guī)程,,其基本任務(wù)有:⑴將主機(jī)或其他網(wǎng)絡(luò)設(shè)備發(fā)送的數(shù)據(jù)送入網(wǎng)絡(luò),;⑵從網(wǎng)絡(luò)中接收其他網(wǎng)絡(luò)設(shè)備發(fā)送的數(shù)據(jù)送入網(wǎng)絡(luò);⑶從網(wǎng)絡(luò)中接收其他設(shè)備發(fā)來(lái)的數(shù)據(jù)并送給主機(jī),。軟件接口在于實(shí)現(xiàn)MVB數(shù)據(jù)鏈路層的服務(wù)功能,,一方面為高層提供服務(wù)及服務(wù)訪問(wèn)接口;另一方面屏蔽底層協(xié)議,,提供透明的,、可靠的鏈路通路,方便用戶使用[3],。
2.1 硬件接口
MVB網(wǎng)絡(luò)通信性能的好壞在很大程度上取決于MVB網(wǎng)絡(luò)接口單元的品質(zhì),。本次通信研究采用的是RVS系列MVB網(wǎng)卡。該網(wǎng)卡除了支持MVB三種通信數(shù)據(jù)的傳遞外,,還支持總線管理器(BA),并具備用戶可編程功能,,通信速率高達(dá)1.5 Mb/s,,支持4 096個(gè)設(shè)備狀態(tài)掃描紀(jì)錄,并具有介質(zhì)冗余能力,,是專為MVB-1類設(shè)備使用的接口卡,。
MVB-1型接口單元的硬件結(jié)構(gòu)框圖如圖2所示。物理層通過(guò)譯碼器將MVB上的信號(hào)轉(zhuǎn)換為數(shù)字電平,,解碼器將來(lái)自于MVB的信號(hào)移至PC/104并行總線上,,檢查數(shù)據(jù)的有效性并將其傳送至雙端口通信存儲(chǔ)器(Traffic Memory),同時(shí)上位機(jī)可通過(guò)PC/104總線對(duì)雙端口通信存儲(chǔ)器進(jìn)行讀寫,。
圖2中,,PC/104并行總線接口為網(wǎng)絡(luò)接口單元和主機(jī)之間的數(shù)據(jù)通信提供了并行通道,由于RVS系列MVB網(wǎng)卡采用的是標(biāo)準(zhǔn)PC/104接口,,用戶可以將多塊網(wǎng)卡層疊使用,,在實(shí)際應(yīng)用中較為方便。板上的控制邏輯(Control Logic)采用可編程邏輯器件PLD(Programmable Logic Device),,為了適應(yīng)不同的總線接口需求,,用戶可以通過(guò)邏輯設(shè)計(jì)方便地動(dòng)態(tài)改變硬件設(shè)置,。
2.2 軟件接口
軟件接口的核心功能是屏蔽MVB網(wǎng)卡的底層協(xié)議,并為上層應(yīng)用提供接口,。
MVB網(wǎng)卡的驅(qū)動(dòng)是實(shí)現(xiàn)通信必不可少的核心部分,,它描述了MVB網(wǎng)卡通信的底層協(xié)議,并對(duì)硬件進(jìn)行了配置,,為上層應(yīng)用的操作提供接口,。MVB網(wǎng)卡的驅(qū)動(dòng)主要包括MVB初始化、配置設(shè)備地址,、配置過(guò)程數(shù)據(jù)端口,、獲取過(guò)程數(shù)據(jù)等。用戶在使用MVB網(wǎng)卡設(shè)計(jì)上層應(yīng)用時(shí),,無(wú)需對(duì)MVB的通信協(xié)議有太過(guò)深入的了解,,只需調(diào)用MVB底層的接口函數(shù),即可實(shí)現(xiàn)基于MVB網(wǎng)卡的數(shù)據(jù)傳輸操作,。
在實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)倪^(guò)程中,,采用了UART仿真方式,即以連續(xù)方式發(fā)送和接收數(shù)據(jù),。在網(wǎng)絡(luò)接口單元與主機(jī)通信之前,,首先必須對(duì)UART仿真寄存器進(jìn)行配置,包括接收數(shù)據(jù)寄存器RBR(Receiver Buffer Register),、發(fā)送器保持寄存器THR(Transmitter Holding Register),、通信線狀態(tài)寄存器LSR(Line Status Register)。主機(jī)和接口單元之間需要通過(guò)傳輸特定的字符命令來(lái)實(shí)現(xiàn)對(duì)接口單元的軟件配置,,分別為‘C’,、‘S’、‘H’,、‘I’,、‘P’、‘G’或是用其相對(duì)應(yīng)的十六進(jìn)制數(shù)43H,、53H,、48H、49H,、50H,、47H來(lái)表示,只有這樣,,才能識(shí)別所要執(zhí)行的操作[3],。
⑴‘C’命令用于將與接口單元有關(guān)的控制信息寫入網(wǎng)絡(luò)接口單元,;
?、啤甋’命令用于讀取接口單元的狀態(tài)信息,,一般用于調(diào)試時(shí)的自測(cè);
?、恰瓾’命令用于寫入與過(guò)程數(shù)據(jù)端口相關(guān)的控制信息,,包括邏輯地址、端口長(zhǎng)度及端口源宿性質(zhì),;
?、取甀’命令用于讀取與過(guò)程數(shù)據(jù)相關(guān)的狀態(tài)信息,與‘S’類似,,一般只用于自測(cè)試,;
⑸‘P’命令用于將待發(fā)送的數(shù)據(jù)寫入網(wǎng)絡(luò)接口單元,;
?、省瓽’命令用于讀取接收到的數(shù)據(jù)。
具體的配置流程如圖3所示,。在通信過(guò)程中,,首先需要對(duì)MVB接口執(zhí)行初始化操作,包括以下3個(gè)步驟:⑴通過(guò)清除UART仿真之前的內(nèi)容來(lái)確保UART進(jìn)入到正常的工作狀態(tài),;⑵停止MVB通信,,以保證不再發(fā)送錯(cuò)誤信息;⑶關(guān)閉MVB數(shù)據(jù)端口,,使其保持為失效狀態(tài),。接著,對(duì)MVB的過(guò)程數(shù)據(jù)端口及MVB設(shè)備物理地址及輸入線路(分為A線和B線)進(jìn)行配置,。配置完成之后,,通過(guò)對(duì)過(guò)程數(shù)據(jù)端口執(zhí)行寫入或讀取操作來(lái)實(shí)現(xiàn)數(shù)據(jù)的通信。
3 Linux與DOS系統(tǒng)下的MVB網(wǎng)絡(luò)互連
DOS系統(tǒng)具有良好的人機(jī)界面和豐富的系統(tǒng)資源,,在傳統(tǒng)的MVB通信中應(yīng)用十分廣泛。但是,,由于DOS是一個(gè)單任務(wù)弱實(shí)時(shí)的操作系統(tǒng),,且可靠性不高,越來(lái)越難以滿足MVB網(wǎng)絡(luò)的愈加嚴(yán)苛的通信要求,。Linux系統(tǒng)在具備DOS系統(tǒng)優(yōu)勢(shì)的同時(shí),,彌補(bǔ)了DOS系統(tǒng)的不足,能夠充分滿足實(shí)際的需要,。因此,,在Linux系統(tǒng)環(huán)境下建立MVB通信對(duì)于實(shí)際的應(yīng)用有一定的借鑒意義。
考慮到多數(shù)的MVB通信仍建立在DOS系統(tǒng)環(huán)境下,,因此,,在實(shí)現(xiàn)Linux與Linux通信的同時(shí),,還要實(shí)現(xiàn)Linux與DOS的通信互連,這首先要求能夠?qū)OS環(huán)境下設(shè)計(jì)的通信程序移植到Linux系統(tǒng)中去,。
3.1 程序移植
移植過(guò)程中最主要的問(wèn)題在于,,DOS系統(tǒng)下的部分內(nèi)置函數(shù)及頭文件,在Linux系統(tǒng)下并不適用,,需要對(duì)其進(jìn)行適當(dāng)?shù)匦薷?,甚至重新編寫。其中,,DOS系統(tǒng)下的輸入輸出函數(shù)inp()和outp(),,需要更改為inb()和outb()。與此同時(shí),,Linux使用端口訪問(wèn)設(shè)備之前必須設(shè)置端口權(quán)限的系統(tǒng)調(diào)用,,可選用iopl()或ioperm()進(jìn)行設(shè)置。除此之外,,由于Linux系統(tǒng)下沒(méi)有conio.h,,因此需要自行編寫getch()函數(shù)和kbhit()函數(shù),用于獲取鍵盤敲擊的字符和判斷鍵盤是否有按下,,以識(shí)別通信命令和控制通信的啟停,。部分代碼如下:
int kbhit(void)
{
struct timeval tv;
struct termios old_termios,new_termios;
int error;
int count = 0;
tcgetattr( 0,&old_termios );
new_termios = old_termios;
/*raw mode*/
new_termios.c_lflag &= ~ICANON;
/*disable echoing the char as it is typed*/
new_termios.c_lflag &= ~ECHO;
/*minimum chars to wait for*/
new_termios.c_cc[VMIN] = 1;
/*minimum wait time, 1 * 0.10s*/
new_termios.c_cc[VTIME]= 1;
error=tcsetattr(0,TCSANOW, &new_termios );
tv.tv_sec = 0;
tv.tv_usec = 100; /*insert a minimal delay*/
select( 1, NULL, NULL, NULL, &tv );
error += ioctl( 0, FIONREAD, &count );
error+=tcsetattr(0,TCSANOW,&old_termios );
return( error == 0 ? count : -1 );
}
需要注意的是,在移植的過(guò)程中,,要特別注意指針的使用,。若不對(duì)指針賦予初值,將會(huì)引起Segmentation Fault,,另外一些對(duì)于指針的誤操作也很有可能引發(fā)這個(gè)錯(cuò)誤,,給調(diào)試過(guò)程中的錯(cuò)誤排查帶來(lái)很多麻煩。
除了以上提到的問(wèn)題外,,還有許多兼容性問(wèn)題需要解決,,在此不再一一贅述。想要更快更精確地找到移植中存在的問(wèn)題,,可采用Linux提供的GDB調(diào)試工具,。通過(guò)設(shè)置斷點(diǎn)、打印變量等手段可以更快地找到程序的問(wèn)題所在,,并作出相應(yīng)的調(diào)整,。
最后,通過(guò)GCC編譯的方式,,將驅(qū)動(dòng)程序與應(yīng)用程序進(jìn)行聯(lián)合編譯,,就能獲得Linux下的可執(zhí)行文件。通過(guò)運(yùn)行這一可執(zhí)行文件,通信程序就能在Linux系統(tǒng)環(huán)境下實(shí)現(xiàn)數(shù)據(jù)的收發(fā)功能,。
3.2 系統(tǒng)測(cè)試
在軟硬件配置完成并移植成功之后,,接下來(lái)將對(duì)系統(tǒng)進(jìn)行測(cè)試。系統(tǒng)測(cè)試的目的在于實(shí)現(xiàn)Linux與DOS系統(tǒng)下的MVB網(wǎng)絡(luò)互連,。
測(cè)試的內(nèi)容主要分為兩個(gè)部分:一是以Linux下MVB節(jié)點(diǎn)為主節(jié)點(diǎn),,接收DOS下MVB發(fā)送的數(shù)據(jù);二是以DOS下MVB節(jié)點(diǎn)為主節(jié)點(diǎn)接收Linux下MVB發(fā)送的數(shù)據(jù),。在實(shí)驗(yàn)室條件下,,搭建了點(diǎn)對(duì)點(diǎn)MVB網(wǎng)絡(luò),通過(guò)兩個(gè)節(jié)點(diǎn)數(shù)據(jù)收發(fā)情況來(lái)驗(yàn)證不同環(huán)境下MVB通信的可行性,。實(shí)驗(yàn)結(jié)果表明:DOS系統(tǒng)與Linux系統(tǒng)下的MVB網(wǎng)絡(luò)均能實(shí)現(xiàn)收發(fā)數(shù)據(jù)的功能,,且誤碼率低,成功地實(shí)現(xiàn)了網(wǎng)絡(luò)互連,。
4 結(jié)論
隨著信息化和網(wǎng)絡(luò)技術(shù)的發(fā)展,,列車控制技術(shù)不斷更新完善。在實(shí)驗(yàn)室條件下,,根據(jù)TCN協(xié)議的要求,,對(duì)MVB網(wǎng)絡(luò)接口單元進(jìn)行了軟硬件的配置,將DOS系統(tǒng)下的MVB網(wǎng)絡(luò)通信程序移植到了Linux環(huán)境下,。通過(guò)建立由Linux環(huán)境下MVB節(jié)點(diǎn)與DOS環(huán)境下MVB節(jié)點(diǎn)組成的點(diǎn)對(duì)點(diǎn)MVB通信網(wǎng)絡(luò),,成功地實(shí)現(xiàn)了MVB網(wǎng)絡(luò)在Linux和DOS環(huán)境下的網(wǎng)絡(luò)互連,并實(shí)現(xiàn)了MVB過(guò)程數(shù)據(jù)通信,。通過(guò)本次實(shí)驗(yàn),,使得MVB通信網(wǎng)絡(luò)在可靠性和實(shí)時(shí)性方面的網(wǎng)絡(luò)性能得到了提高,有一定的應(yīng)用前景和現(xiàn)實(shí)意義,。除此之外,,還為將MVB通信網(wǎng)絡(luò)移植到不同的操作系統(tǒng)環(huán)境下的應(yīng)用研究提供了依據(jù)。
參考文獻(xiàn)
[1] 劉建偉. 軌道交通車輛MVB通信網(wǎng)絡(luò)的研究與設(shè)計(jì)實(shí)現(xiàn)[D].北京:北京交通大學(xué),,2006.
[2] 王磊,,何正友. 高速列車通信網(wǎng)絡(luò)技術(shù)特點(diǎn)及其應(yīng)用[J]. 城市軌道交通研究,2008,,11(2):57-64.
[3] 劉海新,,謝維達(dá),徐曉松. MVB網(wǎng)絡(luò)接口單元的應(yīng)用研究[J]. 工業(yè)控制計(jì)算機(jī),,2002,15(9):13-15.