0 引言
隨著網(wǎng)絡(luò)技術(shù)和控制技術(shù)的發(fā)展,機(jī)車信息化控制技術(shù)向著更高的方向發(fā)展。為此,IEC制定出新的列車通信網(wǎng)路國際標(biāo)準(zhǔn)TCN(機(jī)車通信
網(wǎng)絡(luò)),以滿足列車微機(jī)控制系統(tǒng)中對車載數(shù)據(jù)通信網(wǎng)提出的新要求。
按照TCN標(biāo)準(zhǔn),列車通信網(wǎng)可分為兩級:第一級是WTB絞線式列車總線(Wired Train Bus),可實(shí)現(xiàn)車輛間的數(shù)據(jù)通信;第二級是MVB(Mul-
tifunction Vehicle bus)多功能車輛總線,主要實(shí)現(xiàn)同一個(gè)車輛內(nèi)各個(gè)功能控制單元之間的數(shù)據(jù)通信。
多功能車輛總線(MVB)是主要用于有互操作性和互換性要求的互連設(shè)備之間進(jìn)行串行數(shù)據(jù)通信的一種總線,MVB以其高實(shí)時(shí)性、高可靠性及可管理性等多方面的優(yōu)勢而廣泛的應(yīng)用在列車總線控制當(dāng)中。
控制器局部網(wǎng)(CAN-CONTROLLER AREANETWORK)是BOSCH公司為現(xiàn)代汽車應(yīng)用推出的一種多主機(jī)局部網(wǎng)。由于該網(wǎng)的卓越性能,現(xiàn)已廣泛應(yīng)用于工業(yè)自動化、多種控制設(shè)備、交通工具、醫(yī)療儀器以及建筑、環(huán)境控制等眾多領(lǐng)域。
對于現(xiàn)在的機(jī)車總線通信,MVB總線主要應(yīng)用在單臺機(jī)車內(nèi)的車載設(shè)備間的通訊,而CAN總線則用于車載設(shè)備內(nèi)部模塊間的數(shù)據(jù)通訊。因
此,實(shí)現(xiàn)CAN總線與MVB總線之間的通信就成為工程實(shí)踐中一個(gè)必須解決的問題。
1 報(bào)文
1.1 CAN報(bào)文
CAN報(bào)文主要包括數(shù)據(jù)幀、遠(yuǎn)程幀、出錯(cuò)幀、超載幀等四種幀。
在總線中傳送的報(bào)文,每幀一般由7部分組成。CAN協(xié)議支持兩種報(bào)文格式,它們之間唯一的不同是標(biāo)識符(ID)長度不同。它們的標(biāo)準(zhǔn)格
式為11位,擴(kuò)展格式為29位。
在標(biāo)準(zhǔn)格式中,報(bào)文的起始位通常也稱為幀起始(SOF),之后,一般是由11位標(biāo)識符和遠(yuǎn)程發(fā)送請求位(RTR)組成的仲裁場。RTR位用于標(biāo)明是數(shù)據(jù)幀還是請求幀,請求幀中沒有數(shù)據(jù)字節(jié)??刂茍龅陌ǖ臉?biāo)識符擴(kuò)展位(IDE)用于指出是標(biāo)準(zhǔn)格式還是擴(kuò)展格式。此外,它還包括一個(gè)保留位,以便為將來擴(kuò)展使用。它的最后四個(gè)字節(jié)用來指明數(shù)據(jù)場中數(shù)據(jù)的長度(DLC)。數(shù)據(jù)場范圍為0~8個(gè)字節(jié),其后有一個(gè)檢測數(shù)據(jù)錯(cuò)誤的循環(huán)冗余檢查(CRC)。CAN的標(biāo)準(zhǔn)幀格式如圖1所示。
應(yīng)答場通常(ACK)包括應(yīng)答位和應(yīng)答分隔符。發(fā)送站發(fā)送的這兩位均為隱性電平(邏輯1),這時(shí),正確接收報(bào)文的接收站會發(fā)送主控電平(邏輯0)覆蓋它。用這種方法,發(fā)送站可以保證網(wǎng)絡(luò)中至少有一個(gè)站能正確接收到報(bào)文。報(bào)文的尾部應(yīng)由幀結(jié)束標(biāo)出。在相鄰的兩條報(bào)文間有一很短的間隔位,如果這時(shí)沒有站進(jìn)行總線存取,則總線將處于空閑狀態(tài)。
1.2 MVB報(bào)文
MVB報(bào)文主要包括兩種幀:主幀和從幀。其中主幀只能由總線主設(shè)備發(fā)送,而從幀則為響應(yīng)主幀而由從設(shè)備發(fā)送。
主幀應(yīng)傳送16位數(shù)據(jù)字,發(fā)送的數(shù)據(jù)字的第一位應(yīng)為它的最高有效位,用bit0來表示,其內(nèi)容為16位字中的最高前四位,應(yīng)為FCODE。次有效的后12位用于表示Focde所指定的地址或參數(shù)。因此,主幀有固定的格式,為34 bit(9 bit主幀分界符+16 bit數(shù)據(jù)位+8 bit校驗(yàn)位+1bit終止分界符)。一個(gè)主幀應(yīng)以主起始分界符開始,其后為16位幀數(shù)據(jù),接著為8位校驗(yàn)序列。MVB的主幀格式如圖2所示。
一個(gè)從幀應(yīng)以從幀起始分界符開始,接著為16、32、64、128或256位幀數(shù)據(jù),在每64個(gè)數(shù)據(jù)位后還包含一個(gè)8位的校驗(yàn)序列或當(dāng)幀數(shù)據(jù)只有16或32位時(shí)將一個(gè)8位的校驗(yàn)序列附在其后,其MVB的從幀格式如圖3所示。
2 CAN總線與MVB總線協(xié)議轉(zhuǎn)換
CAN總線和MVB總線都屬于現(xiàn)場總線范疇,因此,它們都有自己的網(wǎng)絡(luò)分層結(jié)構(gòu)。對于大多數(shù)現(xiàn)場總線,它們都包括物理層,數(shù)據(jù)鏈路層和應(yīng)用層。
MVB有過程數(shù)據(jù)和消息數(shù)據(jù)之分?;谶^程數(shù)據(jù)的網(wǎng)絡(luò)分層是三層(物理層、數(shù)據(jù)鏈路層、應(yīng)用層),而基于消息數(shù)據(jù)的網(wǎng)絡(luò)分層則有7層。由于消息數(shù)據(jù)比較復(fù)雜且應(yīng)用場合較少,因此,本文只討論過程數(shù)據(jù)。但實(shí)際上,有時(shí)也可以將MVB視為一個(gè)三層協(xié)議的網(wǎng)絡(luò)。
CAN網(wǎng)絡(luò)分層結(jié)構(gòu)按照CAN總線協(xié)議來說,就只有兩層即物理層和數(shù)據(jù)鏈路層。但是涉及到具體的應(yīng)用,它實(shí)際上也包括應(yīng)用層。
為了實(shí)現(xiàn)兩種總線問的協(xié)議轉(zhuǎn)換,通常需要首先對他們的幀格式進(jìn)行轉(zhuǎn)換,其主要原因是幀字節(jié)數(shù)大小不同,而幀的編碼解碼部分是由網(wǎng)卡硬件完成的;其次是對應(yīng)用層的轉(zhuǎn)換,即通過一定的形式將CAN總線中表示過11位標(biāo)志符的數(shù)據(jù)含義和MVB總線中過程變量的數(shù)據(jù)集對應(yīng)起來,以實(shí)現(xiàn)數(shù)據(jù)之間的傳輸。
3 MVB-CAN網(wǎng)關(guān)的硬件實(shí)現(xiàn)
為了設(shè)計(jì)方便,本設(shè)計(jì)的CAN側(cè)采用三星公司生產(chǎn)的S3C4480微控制器,MVB側(cè)則采用MVBC01 ASIC專用芯片。
MVB通信控制器選用的MVBC01 ASIC專用芯片采用的是16 bit數(shù)據(jù)總線,該芯片同時(shí)可提供豐富的接口控制信號(如RDY、TMRDY等待信號),因此,可用于簡化與各種宿主CPU以及通信存儲器的接口設(shè)計(jì)。此外,MVBC01還內(nèi)嵌有完整的MVB1類設(shè)備協(xié)議,其中,MVB物理層接口采用電氣短距離介質(zhì)ESD+接口,系統(tǒng)信號通道則使用光耦來實(shí)現(xiàn)主系統(tǒng)與外界的電隔離,從而提高了系統(tǒng)的可靠性。另外,系統(tǒng)還使用RS 485芯片作為收發(fā)器,并使用過壓保護(hù)模塊來防止瞬間過壓對器件造成的損壞。MVB側(cè)的接口單元如圖4所示。
MVBC01端口ICA (MVB Input Data ChannelA)和ICB(MVB Input Data Channel B)分別為MVB輸入數(shù)據(jù)通道A和輸入數(shù)據(jù)通道B,來自物理層收發(fā)器的MVB信號可由此端口送入MVBC01中。MVBC01的端口OC (MVB Output Data Channel)是MVB的數(shù)據(jù)輸出端口,數(shù)據(jù)經(jīng)此端口可發(fā)送至物理層收發(fā)器。MVBC端口SF(Send Frame)的輸出信號可作為物理層的使能信號,該信號有效時(shí),表示一個(gè)報(bào)文正在通過MVBC端口OC(MVB Output Data Channel)輸出。
本系統(tǒng)CAN側(cè)采用的是三星公司生產(chǎn)的S3C44BOX微控制器,S3C44BOX是韓國三星公司推出的一款基于ARM7TDMI核的16/32位RISC高性價(jià)比、低功耗的嵌入式微處理器。該芯片的片上資源非常豐富,因?yàn)樗旧韼в锌蓾M足CAN2.0B協(xié)議的CAN控制器,故可省去CAN控制器和單片機(jī)之間的硬件連接。
CAN收發(fā)器采用PHILIPS公司的PCA82C250。主要提供對總線的差動發(fā)送能力和對CAN控制器的差動接收能力。當(dāng)微處理器對CAN控制器進(jìn)行
相應(yīng)配置后,收發(fā)器即可自動完成相應(yīng)的CAN總線動作。
MVBC01的引腳除在MVBC01復(fù)位時(shí)作為復(fù)位完成信號外,還可作為MVBC01接收到網(wǎng)絡(luò)數(shù)據(jù)時(shí)的通知信號。它的狀態(tài)通過s3c44b0x的傳送給S3C44BOX。S3C44BOX輪詢檢測,若檢測到跳變發(fā)生且MVBC01判斷此信號為網(wǎng)絡(luò)控制數(shù)據(jù)接收事件,則通過I2C接口讀取MVBC01的數(shù)據(jù)。MVBC01的復(fù)位可通過微控制器的PA0端口觸發(fā)。當(dāng)MVBC01復(fù)位完成后,再通過/INT通知微控制器。MVBC01的控制口配置成串行方式的I2C接口,S3C44BOX通過該接口對MVBC01的寄存器進(jìn)行初始化和其它控制操作。其網(wǎng)關(guān)硬件連接圖如圖5所示。
4 軟件實(shí)現(xiàn)
由于MVB-CAN網(wǎng)關(guān)兩側(cè)連接的是兩個(gè)現(xiàn)場總線,因此,它們實(shí)際的工作就是通過對信息的重新封裝以使MVB總線和CAN總線能夠讀取和傳
輸。
由于CAN數(shù)據(jù)幀包含8個(gè)字節(jié)的數(shù)據(jù),而MVB從幀最多包含256個(gè)字節(jié)的數(shù)據(jù),因此,從CAN側(cè)接收到的數(shù)據(jù)要通過MVB傳輸,就需要按照一定的格式把CAN幀中的數(shù)據(jù)組合成MVB幀的數(shù)據(jù)格式;同樣,從MVB側(cè)接收到的數(shù)據(jù)要通過CAN傳輸,也需要按照一定的格式對MVB幀中的數(shù)據(jù)進(jìn)行分幀處理。另外,為了實(shí)現(xiàn)透明傳輸,還需要把MVB側(cè)的過程數(shù)據(jù)的數(shù)據(jù)集與CAN側(cè)11位標(biāo)志符對應(yīng)起來。
本文采用的方案是建立一種規(guī)范的方式來定義MVB端的MVB各種變量的含義,如所在端的端口地址、長度、以及變量在數(shù)據(jù)集中的偏移量
等。而后再將這些信息按照一定的規(guī)則和CAN總線側(cè)的幀的標(biāo)識符等信息對應(yīng)成一個(gè)表格,這樣,在CAN側(cè)的數(shù)據(jù)接收就可以借助這個(gè)表格來
完成。這樣做的優(yōu)點(diǎn)在于把一些必要的信息(位偏移、長度等)按照約定的形式來實(shí)現(xiàn)共享,因而不再需要在數(shù)據(jù)集中分出空間來傳輸一些(包
括長度和偏移等)信息。本文把表格定義為應(yīng)用層轉(zhuǎn)換表(inbus-to-outbus或者out-to-inhus)。這里的端口指的是一種既可以被總線訪問,又可以被應(yīng)用處理器訪問的存儲器,它在MVB中是用來尋址的,數(shù)據(jù)的發(fā)送是通過應(yīng)用將數(shù)據(jù)放入端口,數(shù)據(jù)的接收則是從端口中取數(shù)據(jù)放到應(yīng)用中去。至于端口與端口間的數(shù)據(jù)拷貝,則是通過主輪詢方式來實(shí)現(xiàn)的。當(dāng)主節(jié)點(diǎn)輪詢到需要發(fā)送數(shù)據(jù)的端口(源端口)時(shí),便會產(chǎn)生從源端口到宿端口(數(shù)據(jù)接收端口)的數(shù)據(jù)拷貝。數(shù)據(jù)集在MVB中其實(shí)就是一般的純數(shù)據(jù),之所以稱它為集,主要是因?yàn)镸VB中一幀的數(shù)據(jù)較長,通常我們把多個(gè)變量的信息放在一個(gè)集中(一個(gè)幀中1來傳輸,這樣做較為經(jīng)濟(jì)。
本系統(tǒng)的軟件模塊主要有CAN模塊、MVB控制模塊、總?cè)蝿?wù)處理模塊、以及數(shù)據(jù)緩沖模塊。其中CAN控制模塊主要負(fù)責(zé)從CAN數(shù)據(jù)包中解析
出完整的CAN協(xié)議報(bào)文,并存入數(shù)據(jù)緩沖區(qū)2,同時(shí)將數(shù)據(jù)緩沖區(qū)A中的CAN數(shù)據(jù)封裝成完整的CAN協(xié)議報(bào)文后發(fā)送到CAN總線上;MVB控制模塊主要負(fù)責(zé)從MVB數(shù)據(jù)包中解析出完整的MVB協(xié)議報(bào)文,并將其存人數(shù)據(jù)緩沖區(qū)1,同時(shí)再將數(shù)據(jù)緩沖NB中的MVB數(shù)據(jù)封裝成完整的MVB協(xié)議報(bào)文后發(fā)送到MVB上;總?cè)蝿?wù)處理模塊主要起綜合調(diào)度和監(jiān)控作用,同時(shí),它還用于整個(gè)傳輸過程中的中斷響應(yīng);緩沖區(qū)模塊主要負(fù)責(zé)將CAN側(cè)和MVB側(cè)接收的數(shù)據(jù)存儲到緩沖區(qū)中。
網(wǎng)關(guān)程序的整體設(shè)計(jì)思路是當(dāng)CAN側(cè)數(shù)據(jù)發(fā)往MVB側(cè)時(shí),首先使CAN側(cè)檢測到有數(shù)據(jù)傳過來,總處理模塊通過調(diào)用CAN模塊處理函數(shù)來接收數(shù)據(jù),并通過對CAN幀的解碼來獲取CAN標(biāo)志符,然后調(diào)用應(yīng)用層轉(zhuǎn)換表(inbus-to-outbus)以查詢出相應(yīng)的MVB端口的相關(guān)變量,接著再把相
應(yīng)的數(shù)據(jù)發(fā)送到數(shù)據(jù)緩沖區(qū)2中,最后由總?cè)蝿?wù)處理模塊通知MVB控制模塊將緩沖區(qū)2中數(shù)據(jù)取走,并對數(shù)據(jù)進(jìn)行MVB幀格式的編碼,再發(fā)送到
MVB總線上后釋放緩沖區(qū)。
同樣,當(dāng)MVB側(cè)數(shù)據(jù)發(fā)往CAN側(cè)時(shí),首先將數(shù)據(jù)發(fā)送到MVB上,然后由總?cè)蝿?wù)處理模塊檢測MVB上是否有數(shù)據(jù)傳輸,并通知MVB控制模塊接收數(shù)據(jù),同時(shí)對信息進(jìn)行解碼分析,從中獲取端口相關(guān)變量,依據(jù)端口相關(guān)變量查詢應(yīng)用層轉(zhuǎn)換表(out-to-inbus),找出對應(yīng)CAN標(biāo)識符,同時(shí)將數(shù)據(jù)發(fā)送到數(shù)據(jù)緩沖區(qū)1。此時(shí),總?cè)蝿?wù)處理模塊可通過CAN控制模塊從緩沖區(qū)1中提取數(shù)據(jù)并進(jìn)行完整的CAN報(bào)文封裝,再發(fā)送到CAN總線上并釋放緩沖區(qū)A。其中,MVB側(cè)發(fā)往CAN側(cè)的主程序流程如圖6所示。
5 結(jié)束語
本文主要介紹了MVB-CAN網(wǎng)關(guān)的硬件和軟件實(shí)現(xiàn)方法。其中,應(yīng)用層協(xié)議的轉(zhuǎn)換是整個(gè)網(wǎng)關(guān)的主要工作所在,所以,設(shè)計(jì)時(shí)必須建立盡量完善的關(guān)系對應(yīng)列表,同時(shí)應(yīng)提供友好的用戶接口函數(shù)。
通過MVB-CAN網(wǎng)關(guān)的設(shè)計(jì)可以實(shí)現(xiàn)機(jī)車內(nèi)車載設(shè)備間不同接口單元之間的通訊,從而為列車通信網(wǎng)絡(luò)的多元化發(fā)展提供有力的支持。