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