文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.08.017
中文引用格式: 仲康正,徐惠勇. MVB总线故障注入方法研究与实现[J].电子技术应用,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)是针对车辆环境下,车辆内部功能设备数据通信的现场总线,是列车通信网络系统(Train Communication Network,TCN)的核心部分之一。随着微电子技术和分布式现场总线技术的发展,MVB的应用日益广泛,此类列车可通过网络实现对车载设备的集散式监控和管理,逐步实现了列车控制系统的智能化、网络化与信息化[1]。
MVB介质访问控制的优点在于,它将总线上的时间分为固定大小的基本周期,每个基本周期又由周期相和偶发相组成,这样既可传送对时间有确切要求的数据,同时也可以处理偶发紧急数据[2]。为了保证总线系统的高可靠性,总线测试必不可少,然而由于国外对MVB技术的垄断,国内尚没有统一高效的测试方案。本文基于故障注入技术,提出了一种总线测试方案,并通过软件注入的方式,进行试验验证。
1 故障注入技术
故障注入是进行产品测试性实验的重要技术手段,在产品检测中,通过故障注入可以验证被测产品的机内测试、外部测试的诊断能力[3]。与传统的测评方法相比,故障注入技术具有应用范围广、结果精确度高、节省时间等优点[4]。特别是在有关国防安全的航空航天系统中,最为关键的系统都采用高可靠性的容错计算机系统。在过去近20年中,故障注入的研究对容错系统的设计和应用起到了重要作用[5]。
故障注入主要分为硬件注入和软件注入两种。与硬件注入相比,软件故障注入具有易于控制、成本低、方便灵活等优点,逐渐成为故障注入技术的发展方向和研究热点。
2 故障注入方法
本文通过挂接在总线系统中的故障注入设备,在不改变设备激励以及被测信号的前提下,从MVB故障注入板卡底层寄存器、内存开始,通过软件实现对板卡内寄存器、存储器值的修改,模拟输入信号的故障情况,从而实现相应的故障注入。故障注入过程中,利用分析软件Wireshark抓取以太网报文,检测设备的故障注入情况,从而验证系统的容错性能。
MVB故障注入设备包含核心板寄存器配置和2个MVB通信节点寄存器配置,寄存器地址共32 bit,由8 bit保留位(R)、3 bit板卡地址CardAddr、5 bit通道地址port_
num和16 bit偏移地址OffsetAddr组成,寄存器地址=R+CardAddr+port_num+OffsetAddr。
在故障注入时,考虑到系统的合理性及高效性,将MVB板卡内寄存器定义为核心板全局配置寄存器、子版全局配置寄存器、通道级寄存器3种类型。结合其他总线的相关经验和理论,将MVB总线的故障概括为3个层面:电气层、物理层与协议层。
2.1 电气层
电气层故障配置项包括断路故障、短路故障、串行、并行阻抗等,FPGA接收软件的指令,处理采样所得的信号,控制继电器矩阵和电阻网路,以实现对应故障注入。以断路故障项为例说明。断路故障Memory偏移地址为0x0200,port_number为0x00,故障参数bit位说明见表1。
根据表1中内容,在程序中定义断路故障参数结构体和对应的位域结构体。断路故障寄存器位域结构体如下:
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 物理层
物理层故障配置项包括幅值调节故障项配置、占空比调节、总线延时故障等8项。幅值故障寄存器偏移地址为0x0218,portnumber为0x00。故障配置参数见表2。
根据表中内容定义类似电气层的结构体,在驱动开发时以实现相关故障参数的配置及赋值实现。
2.3 协议层
协议层故障项参数配置包括2个内容:匹配策略信息Memory、故障策略信息Memory。MVB总线传输数据帧的两种类型具有不同的帧结构和帧标识符。协议层故障由客户端根据需要选择主帧还是从帧故障相关参数配置。
匹配策略信息配置参数主从帧一致,位域结构体只需要区分结构体名称即可。0位对应Fcode_mask,当值为1时,对功能码进行匹配,匹配对象为Fcode_data(31-28 bit);1位为Addr_mask,当值为1时,对地址进行匹配,匹配对象为Addr_data(27-16 bit)。可根据Addr_mask_x(x为0-11,占据2-13 bit)选择需要匹配的地址bit位。
故障策略匹配信息Memory大小为:位宽32 bit,深度128。160个32 bit深度的数据共分为32组,每组5个32 bit的数据,对应32组故障策略,包括功能码、校验码、位反转、位毛刺等故障参数配置。
3 故障注入的实现
鉴于Windows系统的高普及性,本文根据定义的MVB故障注入设备寄存器说明,基于VS2010开发环境,利用C语言开发故障注入驱动。利用Wireshark抓取以太网报文的方式验证API的正确性,然后通过故障注入软件调用检验后的API,完成对设备的故障注入。
3.1 Wireshark
Wireshark是一个网络封包分析软件,其功能是撷取网络分包,并尽可能显示最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
3.2 以太网报文
UDP报文中,源端口、目的端口、UDP长度、校验和大小为2B,用户数据根据具体操作与信息,占据若干字节,包括4B的消息包头、4B的地址、若干字节(4B整数倍)的具体数据。
发送时,将消息总线数据组合成以太网报文,总线数据以4 B为单位,先发送最低字节,再发送次低字节,最后发送高字节。消息总线数据格式为:
消息包头(Type+Opcode+R+DataLEN)
地址域(R+cardaddr+portnum+OffsetAddr)
数据域(one or more 32 bits)
Type为固定值0x1D,占6 bit;Opcode为操作码,占6 bit,表示信息类型,对应读、写寄存器(Memory);R为保留位,占7 bit,DataLen为数据长度,包括信息包头,占13 bit。
3.3 Memory操作格式
与消息总线数据格式一致,写Memory包括n×4B的数据内容。第一行4B数据为消息包头,Type为固定值0x1D,Opcode为固定值0x0C,加上7 bit保留位和13 bit的DataLen;第二行为地址域R+cardaddr+port_num+OffsetAddr;第三行开始为32 bit整数倍的数据域,数据域长度与DataLen大小对应。
3.4 故障注入驱动
为方便对各项故障的选择性注入,利用选择结构编写驱动程序。为了规范化测试步骤,在故障注入开始前,先进行扫描,确认在线设备数量及地址端口,然后利用驱动打开设备,开始相关故障注入。在整体的测试流程中,需要包括打开、关闭、复位、暂停等一系列操作。
物理层故障注入部分代码如下:
int devPhysicalInjConf( TY_DEV_HANDLE *pHandle,
int32 chnId, TY_PHYSICAL_FAULT_STRUCT phyFaultConfig)
{
……
if((phyFaultConfig.faultEn.cutFaultInjEn & 0x01))
//若故障使能,对各参数赋值;
{
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;
}
}
}
断路故障功能实现部分代码如下:
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);//配置下发;
return ret;
}
3.5 实验结果与分析
驱动编译完成后,通过以太网连接设备运行编写的Demo程序,调用相关API,实现故障注入。本文以断路、幅值故障注入情况为例,结合以太网报文,验证驱动准确性。
Demo调用断路故障设置函数,通过对断路故障项配置定义的结构体内参数赋值,实现对设备的断路故障注入。对断路时间赋值2(其他默认值为0)时的报文如图1。
从第三行14 00 c0 74 开始为用户配置数据段。翻译为:
74 c0 00 14:对应写memory 操作,DataLen为5B。
00 40 02 00:对应32 bit地址域,8 bit保留位,3 bit卡位号,5 bit通道号,16 bit偏移地址(0x0200)
00 02 00 00:对应32 bit断路故障寄存器位,报文显示与驱动赋值结果一致。
00 00 00 00 :空数据字节
00 00 00 00 :空数据字节
幅值故障注入参数赋值,vppEn=1,vppValue=3.4,得以太网报文如图2。
数据翻译如下:
74 c0 00 14:对应写memory 操作,DataL为5 B。
00 40 02 18:对应32 bit地址域,8 bit保留位,3 bit卡位号,5 bit通道号,16 bit偏移地址(0x0218)
00 00 80 02:对应32 bit幅值故障Memory位,报文显示与驱动赋值结果一致。
00 00 00 00 :空数据字节
00 00 00 00 :空数据字节
与断路、幅值故障项类似,分别对电气层、物理层和协议层各故障寄存器位赋值,用Wireshark抓取报文验证。实验中,报文显示结果均与驱动注入值相匹配,验证了驱动对设备故障注入的有效性、可控性。
4 结束语
随着我国高铁技术的不断进步发展,MVB总线技术在国内的应用将逐步扩大。本文结合MVB总线协议特点和通信方式,探讨适用于MVB总线设备的故障注入方法,并开发出相应的故障注入驱动,弥补了MVB总线故障注入手段的不足。
故障注入驱动对各类设备的高度兼容性、适应性是故障注入技术的发展方向。本文提出的测试方法,可适用于大部分MVB总线设备,且与其他总线设备也具有共通性。如何利用此扩展性,开发出适用于各类总线设备测试的故障注入驱动,值得深入研究。
参考文献
[1] 杨昌休.多功能车辆总线MVB关键技术的研究[D].成都:西南交通大学,2012.
[2] 宋娟,王立德,严翔,等.MVB协议分析装置设计及其实时性分析[J].铁道学报,2011(11):41-45.
[3] 石君友,李郑,骆明珠,等.故障注入控制软件的设计与实现[J].测控技术,2008(4):65-67,70.
[4] 李志宇,黄考利,连光耀.基于测试性设计的软件故障注入研究综述[J].计算机测量与控制,2013(5):1112-1114,1117.
[5] 孙天竹,吴小兵.采用故障注入技术提高系统可靠性[J].信息技术,2004(6):85-86.