王 健
(上海地鐵電子科技有限公司 上海 200237)
MVB(多功能車輛總線)作為列車通信網(wǎng)絡(luò)(TCN)的一部分,負責一個車廂內(nèi)設(shè)備或者一個固定的車輛組內(nèi)設(shè)備的數(shù)據(jù)通信。具有實時性強、可靠性高、傳輸數(shù)據(jù)快和傳輸距離遠等優(yōu)點,目前在高鐵和地鐵中的應(yīng)用非常廣泛[1]。
為了實現(xiàn)對多功能列車總線的狀態(tài)監(jiān)測、故障診斷和一致性測試,以及在車載設(shè)備的研發(fā)和調(diào)試過程中,模擬多功能列車總線的數(shù)據(jù)傳輸過程,設(shè)計了一套系統(tǒng),主要實現(xiàn)了以下功能:(1)MVB仿真發(fā)送功能;(2)總線波形實時采集功能;(3)數(shù)據(jù)分析功能;(4)Linux系統(tǒng)下Python控制程序設(shè)計。
在MVB數(shù)據(jù)通信中,具有以下特征:通信傳送方式采用主從幀應(yīng)答,幀發(fā)送方式采用周期性廣播,幀標識符具有幀頭和幀尾標識以識別幀的開始和結(jié)束,幀編碼采用曼徹斯特編碼,數(shù)據(jù)傳輸速率為1.5Mbit/s。為了仿真MVB總線通信,需要仿真主站發(fā)送主幀數(shù)據(jù),仿真從站發(fā)送從幀數(shù)據(jù),仿真接收主幀數(shù)據(jù)和從幀數(shù)據(jù)。通過對MVB通信總線波形的實時采集,并進行邏輯分析,分析網(wǎng)絡(luò)中的幀數(shù)據(jù)、幀響應(yīng)時間、撞幀、丟幀、位錯誤及網(wǎng)絡(luò)干擾等,從而可以實現(xiàn)對網(wǎng)絡(luò)通信質(zhì)量的判斷和網(wǎng)絡(luò)設(shè)備的一致性測試[2]。在該設(shè)計中,利用通用邏輯芯片F(xiàn)PGA實現(xiàn)MVB仿真和波形采集功能;在嵌入式Linux系統(tǒng)下,利用Python編程實現(xiàn)整體控制和數(shù)據(jù)分析;FPGA和嵌入式系統(tǒng)通過USB實現(xiàn)數(shù)據(jù)交互,系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)
設(shè)計中,仿真功能和采集功能采用Altera公司的FPGA芯片實現(xiàn);USB模塊采用CY7C68013A控制芯片,實現(xiàn)USB2.0/3.0轉(zhuǎn)并行總線的功能;嵌入式Linux系統(tǒng)采用beagleboard-black控制板,該控制板為ARM CortexTM-A8內(nèi)核,利用其擴展的USB接口,對MVB仿真與采集板進行數(shù)據(jù)交互和控制;嵌入式Linux系統(tǒng)對外的USB和Internet接口,可實現(xiàn)數(shù)據(jù)的遠程傳輸及上位機軟件的控制。
仿真功能依托FPGA芯片,實現(xiàn)的邏輯功能包括:幀數(shù)據(jù)的發(fā)送、端口地址的設(shè)置、所發(fā)送的主幀數(shù)據(jù)和從幀數(shù)據(jù)設(shè)置、總線數(shù)據(jù)接收與端口地址比較和發(fā)送狀態(tài)的反饋。仿真功能結(jié)構(gòu)如圖2所示。
圖2 仿真功能結(jié)構(gòu)
其中,接收模塊和發(fā)送模塊采用VerilogHDL語言設(shè)計。仿真發(fā)送的主幀和從幀數(shù)據(jù)以及狀態(tài)反饋數(shù)據(jù),均存儲在各自的FIFO存儲器內(nèi)(FPGA內(nèi)部)。所設(shè)置的端口地址,存儲在RAM存儲器內(nèi)(FPGA內(nèi)部)。
仿真功能工作方法如下:(1)接收模塊實時檢測MVB總線信號,當檢測到數(shù)據(jù)幀起始信號時,向發(fā)送模塊反饋總線忙,檢測到數(shù)據(jù)幀結(jié)束信號后,向發(fā)送模塊反饋總線空閑;(2)接收模塊接收到MVB總線主幀數(shù)據(jù)時,將接收到的數(shù)據(jù)與所設(shè)置的端口地址進行比較,比較相同時,觸發(fā)發(fā)送模塊發(fā)送從幀數(shù)據(jù);(3)在總線空閑時,發(fā)送模塊不斷檢測主幀數(shù)據(jù)FIFO,當有要發(fā)送的主幀數(shù)據(jù)存在時,發(fā)送模塊發(fā)送主幀數(shù)據(jù),發(fā)送結(jié)束后,向狀態(tài)反饋FIFO寫入主幀發(fā)送成功的狀態(tài);(4)在發(fā)送模塊接收到觸發(fā)發(fā)送從幀信號時,讀取從幀數(shù)據(jù)FIFO,若存在從幀數(shù)據(jù),發(fā)送模塊發(fā)送該從幀數(shù)據(jù),發(fā)送結(jié)束后,向狀態(tài)反饋FIFO寫入從幀發(fā)送成功的狀態(tài)。
接收模塊需要檢測MVB總線上的幀起始位、幀結(jié)束位和主幀數(shù)據(jù),MVB總線數(shù)據(jù)格式為:起始位+幀頭序列+幀數(shù)據(jù)(包括校驗)+結(jié)束位,總線傳輸速率為1.5 Mbit/s,每一位的數(shù)據(jù)寬度為667 ns,采用曼徹斯特編碼方式[3]。
該設(shè)計中,MVB網(wǎng)絡(luò)信號的邏輯采樣頻率設(shè)置為24 MHz,即一位MVB數(shù)據(jù)寬度為16個周期。將邏輯信號電平及其寬度所占周期數(shù),作為8位分析數(shù)據(jù)元,數(shù)據(jù)的最高位為邏輯信號的電平,低7位表示為信號寬度的周期數(shù),將編碼信號轉(zhuǎn)換為分析數(shù)據(jù)元。采用有限狀態(tài)機方式實現(xiàn)接收模塊的功能,其狀態(tài)轉(zhuǎn)移如圖3所示。
圖3 接收模塊狀態(tài)轉(zhuǎn)移
S0:接收數(shù)據(jù)幀起始位,接收到有效的幀起始位后,狀態(tài)轉(zhuǎn)移至S1,同時總線忙信號有效。接收到有效的幀結(jié)束位后,總線空閑信號有效。
S1:接收主幀幀頭序列,接收到有效的主幀幀頭后,狀態(tài)轉(zhuǎn)移至S2,否則,狀態(tài)轉(zhuǎn)移至S0。
S2:接收主幀數(shù)據(jù),成功接收主幀數(shù)據(jù)后,狀態(tài)轉(zhuǎn)移至S3,若出現(xiàn)數(shù)據(jù)位錯誤或數(shù)據(jù)校驗錯誤,狀態(tài)轉(zhuǎn)移至S0。
S3:接收幀結(jié)束位,接收到有效的幀結(jié)束位,狀態(tài)轉(zhuǎn)移至S4,同時總線空閑信號有效,否則,狀態(tài)轉(zhuǎn)移至S4。
S4:比較接收到的主幀數(shù)據(jù)與設(shè)置的端口地址數(shù)據(jù),相同則觸發(fā)發(fā)送從幀數(shù)據(jù)信號,狀態(tài)轉(zhuǎn)回S0。
發(fā)送功能實現(xiàn)的方式如下:將8位數(shù)據(jù),從最高位到最低位移位輸出,移位頻率為3 MHz。對待發(fā)送的幀數(shù)據(jù)(字節(jié)為單位),進行編碼轉(zhuǎn)換[4]。采用有限狀態(tài)機方式實現(xiàn)發(fā)送模塊的功能,其狀態(tài)轉(zhuǎn)移如圖4所示。
圖4 發(fā)送模塊狀態(tài)轉(zhuǎn)移
S0:發(fā)送模塊在MVB總線空閑時,檢測主幀F(xiàn)IFO,檢測到有效的主幀數(shù)據(jù)后,狀態(tài)轉(zhuǎn)入S1;在發(fā)送從幀信號有效的狀態(tài)下,檢測從幀F(xiàn)IFO,檢測到有效的從幀數(shù)據(jù)后,狀態(tài)轉(zhuǎn)入S3。
S1:讀取主幀F(xiàn)IFO數(shù)據(jù)并發(fā)送,結(jié)束后,轉(zhuǎn)入狀態(tài)S2。
S2:向狀態(tài)反饋FIFO寫入主幀發(fā)送成功的狀態(tài),狀態(tài)轉(zhuǎn)回S0。
S3:讀取從幀F(xiàn)IFO數(shù)據(jù)并發(fā)送,結(jié)束后,轉(zhuǎn)入狀態(tài)S4。
S4:向狀態(tài)反饋FIFO寫入從幀發(fā)送成功的狀態(tài),狀態(tài)轉(zhuǎn)回S0。
采集功能由FPGA芯片實現(xiàn),對MVB網(wǎng)絡(luò)通信波形進行數(shù)據(jù)采集,采樣頻率為24 MHz,采樣的數(shù)據(jù)以字節(jié)為單位,數(shù)據(jù)的最高位為邏輯信號的電平,低7位表示為信號寬度的周期數(shù),采集功能結(jié)構(gòu)如圖5所示。
圖5 采集功能結(jié)構(gòu)
采集功能工作方法如下:(1)系統(tǒng)工作頻率為48 MHz,采樣頻率是24 MHz。在每個采樣周期,對MVB網(wǎng)絡(luò)波形進行邏輯采樣;(2)當邏輯電平變化時,記錄前一電平狀態(tài)及所持續(xù)的周期數(shù),形成一個字節(jié)的采樣數(shù)據(jù)。同時清零計數(shù),開始新的計數(shù)周期;(3)當電平周期數(shù)達到0x7F時,記錄電平狀態(tài)及周期數(shù),形成一個字節(jié)的采樣數(shù)據(jù)。同時清零計數(shù),開始新的計數(shù)周期;(4)網(wǎng)絡(luò)采樣數(shù)據(jù)按照先入先出的原則,存入數(shù)據(jù)存儲FIFO。
系統(tǒng)控制是在嵌入式Linux系統(tǒng)中,利用Python語言編程實現(xiàn)。系統(tǒng)控制主要完成的功能如下:仿真設(shè)置設(shè)備端口地址、仿真設(shè)置發(fā)送主幀數(shù)據(jù)、仿真設(shè)置發(fā)送從幀數(shù)據(jù)、仿真幀數(shù)據(jù)發(fā)送次數(shù)設(shè)置、采集網(wǎng)絡(luò)數(shù)據(jù)分析、采集網(wǎng)絡(luò)幀數(shù)據(jù)提取、采集網(wǎng)絡(luò)質(zhì)量分析和系統(tǒng)工作狀態(tài)監(jiān)測[5]。
系統(tǒng)程序通過將仿真設(shè)備端口地址數(shù)據(jù)寫入端口地址RAM,實現(xiàn)設(shè)置端口地址功能;通過將仿真發(fā)送主幀數(shù)據(jù)寫入主幀數(shù)據(jù)FIFO,實現(xiàn)發(fā)送主幀功能;通過將仿真發(fā)送從幀數(shù)據(jù)寫入從幀數(shù)據(jù)FIFO,實現(xiàn)發(fā)送從幀功能;通過讀取狀態(tài)FIFO數(shù)據(jù),實現(xiàn)仿真幀數(shù)據(jù)發(fā)送次數(shù)控制[6]。
系統(tǒng)程序通過讀取采集數(shù)據(jù)存儲FIFO內(nèi)的波形數(shù)據(jù),可分析網(wǎng)絡(luò)幀數(shù)據(jù)、幀響應(yīng)時間、撞幀、雜波、丟幀、數(shù)據(jù)位錯誤和幀校驗錯誤等,從而可實現(xiàn)對網(wǎng)絡(luò)質(zhì)量的判斷。數(shù)據(jù)分析采用有限狀態(tài)機方式實現(xiàn)。
采集功能采用Altera公司的FPGA芯片實現(xiàn),為了驗證該功能,利用QuartusII的仿真軟件,模擬發(fā)送主幀數(shù)據(jù),觸發(fā)發(fā)送從幀數(shù)據(jù),仿真結(jié)果如圖6所示。該結(jié)果圖為采集功能所采集到的幀數(shù)據(jù)波形,第一幀數(shù)據(jù)為發(fā)送的主幀數(shù)據(jù);第二幀數(shù)據(jù)為接收到主幀數(shù)據(jù)后,觸發(fā)發(fā)送的從幀數(shù)據(jù)。
圖6 發(fā)送主從幀數(shù)據(jù)仿真波形
實際調(diào)試試驗利用開發(fā)的上位機軟件,設(shè)置發(fā)送主幀數(shù)據(jù)設(shè)備端口號和從幀數(shù)據(jù),仿真發(fā)送主幀數(shù)據(jù),設(shè)備端口號與接收到的主幀數(shù)據(jù)中端口號相同時,觸發(fā)發(fā)送從幀數(shù)據(jù)。
利用仿真功能,對上海地鐵4號線VCU控制器進行了離線測試,模擬發(fā)送主幀數(shù)據(jù)功能,對所有地址進行掃描,成功掃描到VCU系統(tǒng)設(shè)備地址,并可讀取其設(shè)備狀態(tài)。
仿真設(shè)備通過MVB通信線與VCU設(shè)備連接,上位機軟件控制發(fā)送主幀數(shù)據(jù),同時,記錄通信總線數(shù)據(jù)。對所有端口地址掃描后,分析系統(tǒng)記錄的總線數(shù)據(jù),可得到VCU設(shè)備地址及其反饋的狀態(tài)數(shù)據(jù)。
MVB網(wǎng)絡(luò)在高鐵和地鐵車輛控制領(lǐng)域應(yīng)用得非常廣泛,本文所設(shè)計的仿真與檢測系統(tǒng),為MVB網(wǎng)絡(luò)調(diào)試、網(wǎng)絡(luò)設(shè)備檢測和維修、網(wǎng)絡(luò)設(shè)備一致性測試和網(wǎng)絡(luò)質(zhì)量的判斷,提供了一種智能的方法。同時,為網(wǎng)絡(luò)協(xié)議分析和設(shè)備開發(fā)提供了手段,也為MVB網(wǎng)絡(luò)應(yīng)用的推廣提供了參考。