文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.08.017
中文引用格式: 仲康正,徐惠勇. MVB總線故障注入方法研究與實現(xiàn)[J].電子技術(shù)應(yīng)用,,2016,,42(8):74-76,83.
英文引用格式: Zhong Kangzheng,,Xu Huiyong. Research and implementation of MVB bus fault injection method[J].Application of Electronic Technique,,2016,42(8):74-76,,83.
0 引言
多功能車輛總線(Multifunction Vehicle Bus,,MVB)是針對車輛環(huán)境下,車輛內(nèi)部功能設(shè)備數(shù)據(jù)通信的現(xiàn)場總線,,是列車通信網(wǎng)絡(luò)系統(tǒng)(Train Communication Network,,TCN)的核心部分之一,。隨著微電子技術(shù)和分布式現(xiàn)場總線技術(shù)的發(fā)展,MVB的應(yīng)用日益廣泛,,此類列車可通過網(wǎng)絡(luò)實現(xiàn)對車載設(shè)備的集散式監(jiān)控和管理,,逐步實現(xiàn)了列車控制系統(tǒng)的智能化、網(wǎng)絡(luò)化與信息化[1],。
MVB介質(zhì)訪問控制的優(yōu)點在于,,它將總線上的時間分為固定大小的基本周期,每個基本周期又由周期相和偶發(fā)相組成,,這樣既可傳送對時間有確切要求的數(shù)據(jù),,同時也可以處理偶發(fā)緊急數(shù)據(jù)[2]。為了保證總線系統(tǒng)的高可靠性,,總線測試必不可少,,然而由于國外對MVB技術(shù)的壟斷,國內(nèi)尚沒有統(tǒng)一高效的測試方案,。本文基于故障注入技術(shù),,提出了一種總線測試方案,并通過軟件注入的方式,,進行試驗驗證,。
1 故障注入技術(shù)
故障注入是進行產(chǎn)品測試性實驗的重要技術(shù)手段,在產(chǎn)品檢測中,,通過故障注入可以驗證被測產(chǎn)品的機內(nèi)測試,、外部測試的診斷能力[3]。與傳統(tǒng)的測評方法相比,,故障注入技術(shù)具有應(yīng)用范圍廣,、結(jié)果精確度高、節(jié)省時間等優(yōu)點[4],。特別是在有關(guān)國防安全的航空航天系統(tǒng)中,,最為關(guān)鍵的系統(tǒng)都采用高可靠性的容錯計算機系統(tǒng)。在過去近20年中,,故障注入的研究對容錯系統(tǒng)的設(shè)計和應(yīng)用起到了重要作用[5],。
故障注入主要分為硬件注入和軟件注入兩種。與硬件注入相比,,軟件故障注入具有易于控制,、成本低、方便靈活等優(yōu)點,,逐漸成為故障注入技術(shù)的發(fā)展方向和研究熱點,。
2 故障注入方法
本文通過掛接在總線系統(tǒng)中的故障注入設(shè)備,在不改變設(shè)備激勵以及被測信號的前提下,,從MVB故障注入板卡底層寄存器,、內(nèi)存開始,,通過軟件實現(xiàn)對板卡內(nèi)寄存器、存儲器值的修改,,模擬輸入信號的故障情況,,從而實現(xiàn)相應(yīng)的故障注入。故障注入過程中,,利用分析軟件Wireshark抓取以太網(wǎng)報文,,檢測設(shè)備的故障注入情況,從而驗證系統(tǒng)的容錯性能,。
MVB故障注入設(shè)備包含核心板寄存器配置和2個MVB通信節(jié)點寄存器配置,,寄存器地址共32 bit,由8 bit保留位(R),、3 bit板卡地址CardAddr,、5 bit通道地址port_
num和16 bit偏移地址OffsetAddr組成,寄存器地址=R+CardAddr+port_num+OffsetAddr,。
在故障注入時,,考慮到系統(tǒng)的合理性及高效性,將MVB板卡內(nèi)寄存器定義為核心板全局配置寄存器,、子版全局配置寄存器,、通道級寄存器3種類型。結(jié)合其他總線的相關(guān)經(jīng)驗和理論,,將MVB總線的故障概括為3個層面:電氣層,、物理層與協(xié)議層。
2.1 電氣層
電氣層故障配置項包括斷路故障,、短路故障,、串行、并行阻抗等,,F(xiàn)PGA接收軟件的指令,處理采樣所得的信號,,控制繼電器矩陣和電阻網(wǎng)路,,以實現(xiàn)對應(yīng)故障注入。以斷路故障項為例說明,。斷路故障Memory偏移地址為0x0200,,port_number為0x00,故障參數(shù)bit位說明見表1,。
根據(jù)表1中內(nèi)容,,在程序中定義斷路故障參數(shù)結(jié)構(gòu)體和對應(yīng)的位域結(jié)構(gòu)體。斷路故障寄存器位域結(jié)構(gòu)體如下:
typedef struct _reg_cut_fault
{
int periodValue :15
int periodCut :1;
int cutTime :14;
int negLineCut :1;
int posiLineCut :1;
}TY_REG_CUT_FAULT_CONF;
typedef union
{
TY_CUT_FAULT_CONF stCutConf;
int cutConfValue;
}TY_CUT_FAULT_UNION
2.2 物理層
物理層故障配置項包括幅值調(diào)節(jié)故障項配置,、占空比調(diào)節(jié),、總線延時故障等8項,。幅值故障寄存器偏移地址為0x0218,portnumber為0x00,。故障配置參數(shù)見表2,。
根據(jù)表中內(nèi)容定義類似電氣層的結(jié)構(gòu)體,在驅(qū)動開發(fā)時以實現(xiàn)相關(guān)故障參數(shù)的配置及賦值實現(xiàn),。
2.3 協(xié)議層
協(xié)議層故障項參數(shù)配置包括2個內(nèi)容:匹配策略信息Memory,、故障策略信息Memory。MVB總線傳輸數(shù)據(jù)幀的兩種類型具有不同的幀結(jié)構(gòu)和幀標識符,。協(xié)議層故障由客戶端根據(jù)需要選擇主幀還是從幀故障相關(guān)參數(shù)配置,。
匹配策略信息配置參數(shù)主從幀一致,位域結(jié)構(gòu)體只需要區(qū)分結(jié)構(gòu)體名稱即可,。0位對應(yīng)Fcode_mask,,當(dāng)值為1時,對功能碼進行匹配,,匹配對象為Fcode_data(31-28 bit),;1位為Addr_mask,當(dāng)值為1時,,對地址進行匹配,,匹配對象為Addr_data(27-16 bit)??筛鶕?jù)Addr_mask_x(x為0-11,,占據(jù)2-13 bit)選擇需要匹配的地址bit位。
故障策略匹配信息Memory大小為:位寬32 bit,,深度128,。160個32 bit深度的數(shù)據(jù)共分為32組,每組5個32 bit的數(shù)據(jù),,對應(yīng)32組故障策略,,包括功能碼、校驗碼,、位反轉(zhuǎn),、位毛刺等故障參數(shù)配置。
3 故障注入的實現(xiàn)
鑒于Windows系統(tǒng)的高普及性,,本文根據(jù)定義的MVB故障注入設(shè)備寄存器說明,,基于VS2010開發(fā)環(huán)境,利用C語言開發(fā)故障注入驅(qū)動,。利用Wireshark抓取以太網(wǎng)報文的方式驗證API的正確性,,然后通過故障注入軟件調(diào)用檢驗后的API,完成對設(shè)備的故障注入。
3.1 Wireshark
Wireshark是一個網(wǎng)絡(luò)封包分析軟件,,其功能是擷取網(wǎng)絡(luò)分包,,并盡可能顯示最為詳細的網(wǎng)絡(luò)封包資料。Wireshark使用WinPCAP作為接口,,直接與網(wǎng)卡進行數(shù)據(jù)報文交換,。
3.2 以太網(wǎng)報文
UDP報文中,源端口,、目的端口,、UDP長度、校驗和大小為2B,,用戶數(shù)據(jù)根據(jù)具體操作與信息,,占據(jù)若干字節(jié),包括4B的消息包頭,、4B的地址,、若干字節(jié)(4B整數(shù)倍)的具體數(shù)據(jù)。
發(fā)送時,,將消息總線數(shù)據(jù)組合成以太網(wǎng)報文,,總線數(shù)據(jù)以4 B為單位,先發(fā)送最低字節(jié),,再發(fā)送次低字節(jié),,最后發(fā)送高字節(jié)。消息總線數(shù)據(jù)格式為:
消息包頭(Type+Opcode+R+DataLEN)
地址域(R+cardaddr+portnum+OffsetAddr)
數(shù)據(jù)域(one or more 32 bits)
Type為固定值0x1D,,占6 bit,;Opcode為操作碼,占6 bit,,表示信息類型,,對應(yīng)讀、寫寄存器(Memory),;R為保留位,,占7 bit,DataLen為數(shù)據(jù)長度,,包括信息包頭,,占13 bit。
3.3 Memory操作格式
與消息總線數(shù)據(jù)格式一致,,寫Memory包括n×4B的數(shù)據(jù)內(nèi)容。第一行4B數(shù)據(jù)為消息包頭,,Type為固定值0x1D,,Opcode為固定值0x0C,加上7 bit保留位和13 bit的DataLen;第二行為地址域R+cardaddr+port_num+OffsetAddr,;第三行開始為32 bit整數(shù)倍的數(shù)據(jù)域,,數(shù)據(jù)域長度與DataLen大小對應(yīng)。
3.4 故障注入驅(qū)動
為方便對各項故障的選擇性注入,,利用選擇結(jié)構(gòu)編寫驅(qū)動程序,。為了規(guī)范化測試步驟,在故障注入開始前,,先進行掃描,,確認在線設(shè)備數(shù)量及地址端口,然后利用驅(qū)動打開設(shè)備,,開始相關(guān)故障注入,。在整體的測試流程中,需要包括打開,、關(guān)閉,、復(fù)位、暫停等一系列操作,。
物理層故障注入部分代碼如下:
int devPhysicalInjConf( TY_DEV_HANDLE *pHandle,
int32 chnId, TY_PHYSICAL_FAULT_STRUCT phyFaultConfig)
{
……
if((phyFaultConfig.faultEn.cutFaultInjEn & 0x01))
//若故障使能,,對各參數(shù)賦值;
{
cutConf.stCutConf.periodValue=
phyFaultConfig.cutConf.periodValue;
cutConf.stCutConf.periodCut=phyFaultConfig.cutConf.periodCut;
……
cutConf.stCutConf.posiLineCut=
phyFaultConfig.cutConf.posiLineCut;
tmpConfig[0] = tmpPhyFaultConf.cutConf.cutConfValue;
ret=SetCutConfig(pHandle,,chnId,,tmpConfig,
MEM_CONST_LEN);
if(ret != RET_OK)
{
return RET_ERROR_CUT;
}
}
}
斷路故障功能實現(xiàn)部分代碼如下:
int SetCutConfig(TY_DEV_HANDLE *pHandle, int chn,
unsigned int *data,
unsigned int dataLen)
{
int ret = 0;
TY_ADDR_UNION tmpInjAddr;
ret=getAddr(chn,LOCALREG, &tmpInjAddr);
//獲取寄存器地址,;
……
ret=writeMEM(pHandle, tmpInjAddr.addr, data,
dataLen);//配置下發(fā),;
return ret;
}
3.5 實驗結(jié)果與分析
驅(qū)動編譯完成后,通過以太網(wǎng)連接設(shè)備運行編寫的Demo程序,,調(diào)用相關(guān)API,,實現(xiàn)故障注入。本文以斷路,、幅值故障注入情況為例,,結(jié)合以太網(wǎng)報文,驗證驅(qū)動準確性,。
Demo調(diào)用斷路故障設(shè)置函數(shù),,通過對斷路故障項配置定義的結(jié)構(gòu)體內(nèi)參數(shù)賦值,實現(xiàn)對設(shè)備的斷路故障注入,。對斷路時間賦值2(其他默認值為0)時的報文如圖1,。
從第三行14 00 c0 74 開始為用戶配置數(shù)據(jù)段。翻譯為:
74 c0 00 14:對應(yīng)寫memory 操作,,DataLen為5B,。
00 40 02 00:對應(yīng)32 bit地址域,8 bit保留位,3 bit卡位號,,5 bit通道號,,16 bit偏移地址(0x0200)
00 02 00 00:對應(yīng)32 bit斷路故障寄存器位,報文顯示與驅(qū)動賦值結(jié)果一致,。
00 00 00 00 :空數(shù)據(jù)字節(jié)
00 00 00 00 :空數(shù)據(jù)字節(jié)
幅值故障注入?yún)?shù)賦值,,vppEn=1,vppValue=3.4,,得以太網(wǎng)報文如圖2,。
數(shù)據(jù)翻譯如下:
74 c0 00 14:對應(yīng)寫memory 操作,DataL為5 B,。
00 40 02 18:對應(yīng)32 bit地址域,,8 bit保留位,3 bit卡位號,,5 bit通道號,,16 bit偏移地址(0x0218)
00 00 80 02:對應(yīng)32 bit幅值故障Memory位,報文顯示與驅(qū)動賦值結(jié)果一致,。
00 00 00 00 :空數(shù)據(jù)字節(jié)
00 00 00 00 :空數(shù)據(jù)字節(jié)
與斷路,、幅值故障項類似,分別對電氣層,、物理層和協(xié)議層各故障寄存器位賦值,,用Wireshark抓取報文驗證。實驗中,,報文顯示結(jié)果均與驅(qū)動注入值相匹配,,驗證了驅(qū)動對設(shè)備故障注入的有效性、可控性,。
4 結(jié)束語
隨著我國高鐵技術(shù)的不斷進步發(fā)展,,MVB總線技術(shù)在國內(nèi)的應(yīng)用將逐步擴大。本文結(jié)合MVB總線協(xié)議特點和通信方式,,探討適用于MVB總線設(shè)備的故障注入方法,,并開發(fā)出相應(yīng)的故障注入驅(qū)動,彌補了MVB總線故障注入手段的不足,。
故障注入驅(qū)動對各類設(shè)備的高度兼容性,、適應(yīng)性是故障注入技術(shù)的發(fā)展方向。本文提出的測試方法,,可適用于大部分MVB總線設(shè)備,,且與其他總線設(shè)備也具有共通性。如何利用此擴展性,,開發(fā)出適用于各類總線設(shè)備測試的故障注入驅(qū)動,,值得深入研究,。
參考文獻
[1] 楊昌休.多功能車輛總線MVB關(guān)鍵技術(shù)的研究[D].成都:西南交通大學(xué),2012.
[2] 宋娟,,王立德,嚴翔,,等.MVB協(xié)議分析裝置設(shè)計及其實時性分析[J].鐵道學(xué)報,,2011(11):41-45.
[3] 石君友,李鄭,,駱明珠,,等.故障注入控制軟件的設(shè)計與實現(xiàn)[J].測控技術(shù),2008(4):65-67,,70.
[4] 李志宇,,黃考利,連光耀.基于測試性設(shè)計的軟件故障注入研究綜述[J].計算機測量與控制,,2013(5):1112-1114,,1117.
[5] 孫天竹,吳小兵.采用故障注入技術(shù)提高系統(tǒng)可靠性[J].信息技術(shù),,2004(6):85-86.