摘 要: 介绍了列车通信网络(TCN)和多功能车辆总线(MVB),着重分析介绍了MVB网卡的硬件接口及软件接口,并将DOS系统下的MVB通信成功地移植到了Linux系统环境下,在实验室条件下,实现了Linux与DOS环境下的MVB网络互连,为开展不同环境下的MVB通信可行性试验提供了依据。
关键词: DOS;Linux;MVB;过程数据;PC/104总线
0 引言
随着嵌入式微机控制技术以及现场总线技术的快速发展,现代列车的过程控制已从集中型的直接数字控制系统朝着基于网络的分布式系统发展。应用多种总线技术,列车分布式控制系统把分布于各车厢内部、独立完成特定功能的计算机互连为工业局域网,从而达到资源共享、协同工作、分散监测和集中操作等目的[1]。
列车通信网络(TCN)就是一种建立在分布式系统基础上的列车控制、诊断信息数据通信网络。多功能车辆总线(MVB)作为TCN网络的重要组成,其作用在于联接车辆内部的设备和控制单元,实现车辆内部的通信控制。但是,由于传统的MVB通信网络建立在DOS系统环境下,面对恶劣的列车运行环境,越来越难以满足实际运行的需要。Linux以其出色的系统稳定性及快速响应性能,在轨道交通领域获得青睐。嵌入式技术的迅猛发展,使得在Linux系统下建立MVB通信网络的需求变得愈加迫切。
本文以实现Linux与DOS系统下的MVB网络通信为目的,对RVS系列MVB网卡的硬件接口及软件接口进行了应用研究,并将DOS系统下的MVB网络通信成功移植到了Linux环境下,最终实现了Linux与DOS环境下的MVB网络互连。
1 MVB网络简介
列车通信网络(TCN)集列车控制系统、故障检测与诊断系统以及旅客信息服务系统于一体,以车载微机为主要设备,通过网络实现列车各个系统之间的信息交换,最终达到对车载设备的集散式监视、控制和管理等目的,是一种面向控制、连接车载设备的数据通信系统,是分布式列车控制系统的核心[2]。
TCN由绞式列车总线WTB和多功能车辆总线MVB组成,如图1所示。WTB用于联接各个车辆,用于列车级的通信控制;MVB用于有互操作性和互换性要求的互连设备之间的串行数据通信。WTB与MVB之间通过网关来实现数据的传递。其中,MVB能提供最佳的响应速度,适合用作车辆总线。对于固定编组的列车,MVB 也可以用作列车总线。此外,MVB属于总线仲裁型网络,采用主帧/从帧应答方式,可以实现设备和介质冗余,完全满足列车对于运行控制和安全性的要求。
根据实际应用的需要,MVB网络的通信数据类型分为过程数据、消息数据和监督数据。其中,过程数据用于反映列车的状态、速度、加速度、司机指令等;消息数据是偶发数据,不频繁发送且长度不定,如诊断、旅客信息等;监督数据是总线上主设备对于从设备的状态校验、主权转移、列车初运行等所使用的数据[1]。由于过程数据是列车运行控制中最基本和最重要的通信数据,因此本文只针对过程数据的收发进行研究。
2 MVB网络接口单元
为了实现MVB设备之间的互联,各个与MVB相连的设备都必须具有统一的硬件接口和软件接口。硬件接口主要由各个设备中的MVB网络接口单元(网卡)实现,网卡用于实现物理层信号的转换,执行数据链路层的通信规程,其基本任务有:⑴将主机或其他网络设备发送的数据送入网络;⑵从网络中接收其他网络设备发送的数据送入网络;⑶从网络中接收其他设备发来的数据并送给主机。软件接口在于实现MVB数据链路层的服务功能,一方面为高层提供服务及服务访问接口;另一方面屏蔽底层协议,提供透明的、可靠的链路通路,方便用户使用[3]。
2.1 硬件接口
MVB网络通信性能的好坏在很大程度上取决于MVB网络接口单元的品质。本次通信研究采用的是RVS系列MVB网卡。该网卡除了支持MVB三种通信数据的传递外,还支持总线管理器(BA),并具备用户可编程功能,通信速率高达1.5 Mb/s,支持4 096个设备状态扫描纪录,并具有介质冗余能力,是专为MVB-1类设备使用的接口卡。
MVB-1型接口单元的硬件结构框图如图2所示。物理层通过译码器将MVB上的信号转换为数字电平,解码器将来自于MVB的信号移至PC/104并行总线上,检查数据的有效性并将其传送至双端口通信存储器(Traffic Memory),同时上位机可通过PC/104总线对双端口通信存储器进行读写。
图2中,PC/104并行总线接口为网络接口单元和主机之间的数据通信提供了并行通道,由于RVS系列MVB网卡采用的是标准PC/104接口,用户可以将多块网卡层叠使用,在实际应用中较为方便。板上的控制逻辑(Control Logic)采用可编程逻辑器件PLD(Programmable Logic Device),为了适应不同的总线接口需求,用户可以通过逻辑设计方便地动态改变硬件设置。
2.2 软件接口
软件接口的核心功能是屏蔽MVB网卡的底层协议,并为上层应用提供接口。
MVB网卡的驱动是实现通信必不可少的核心部分,它描述了MVB网卡通信的底层协议,并对硬件进行了配置,为上层应用的操作提供接口。MVB网卡的驱动主要包括MVB初始化、配置设备地址、配置过程数据端口、获取过程数据等。用户在使用MVB网卡设计上层应用时,无需对MVB的通信协议有太过深入的了解,只需调用MVB底层的接口函数,即可实现基于MVB网卡的数据传输操作。
在实现数据传输的过程中,采用了UART仿真方式,即以连续方式发送和接收数据。在网络接口单元与主机通信之前,首先必须对UART仿真寄存器进行配置,包括接收数据寄存器RBR(Receiver Buffer Register)、发送器保持寄存器THR(Transmitter Holding Register)、通信线状态寄存器LSR(Line Status Register)。主机和接口单元之间需要通过传输特定的字符命令来实现对接口单元的软件配置,分别为‘C’、‘S’、‘H’、‘I’、‘P’、‘G’或是用其相对应的十六进制数43H、53H、48H、49H、50H、47H来表示,只有这样,才能识别所要执行的操作[3]。
⑴‘C’命令用于将与接口单元有关的控制信息写入网络接口单元;
⑵‘S’命令用于读取接口单元的状态信息,一般用于调试时的自测;
⑶‘H’命令用于写入与过程数据端口相关的控制信息,包括逻辑地址、端口长度及端口源宿性质;
⑷‘I’命令用于读取与过程数据相关的状态信息,与‘S’类似,一般只用于自测试;
⑸‘P’命令用于将待发送的数据写入网络接口单元;
⑹‘G’命令用于读取接收到的数据。
具体的配置流程如图3所示。在通信过程中,首先需要对MVB接口执行初始化操作,包括以下3个步骤:⑴通过清除UART仿真之前的内容来确保UART进入到正常的工作状态;⑵停止MVB通信,以保证不再发送错误信息;⑶关闭MVB数据端口,使其保持为失效状态。接着,对MVB的过程数据端口及MVB设备物理地址及输入线路(分为A线和B线)进行配置。配置完成之后,通过对过程数据端口执行写入或读取操作来实现数据的通信。
3 Linux与DOS系统下的MVB网络互连
DOS系统具有良好的人机界面和丰富的系统资源,在传统的MVB通信中应用十分广泛。但是,由于DOS是一个单任务弱实时的操作系统,且可靠性不高,越来越难以满足MVB网络的愈加严苛的通信要求。Linux系统在具备DOS系统优势的同时,弥补了DOS系统的不足,能够充分满足实际的需要。因此,在Linux系统环境下建立MVB通信对于实际的应用有一定的借鉴意义。
考虑到多数的MVB通信仍建立在DOS系统环境下,因此,在实现Linux与Linux通信的同时,还要实现Linux与DOS的通信互连,这首先要求能够将DOS环境下设计的通信程序移植到Linux系统中去。
3.1 程序移植
移植过程中最主要的问题在于,DOS系统下的部分内置函数及头文件,在Linux系统下并不适用,需要对其进行适当地修改,甚至重新编写。其中,DOS系统下的输入输出函数inp()和outp(),需要更改为inb()和outb()。与此同时,Linux使用端口访问设备之前必须设置端口权限的系统调用,可选用iopl()或ioperm()进行设置。除此之外,由于Linux系统下没有conio.h,因此需要自行编写getch()函数和kbhit()函数,用于获取键盘敲击的字符和判断键盘是否有按下,以识别通信命令和控制通信的启停。部分代码如下:
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,另外一些对于指针的误操作也很有可能引发这个错误,给调试过程中的错误排查带来很多麻烦。
除了以上提到的问题外,还有许多兼容性问题需要解决,在此不再一一赘述。想要更快更精确地找到移植中存在的问题,可采用Linux提供的GDB调试工具。通过设置断点、打印变量等手段可以更快地找到程序的问题所在,并作出相应的调整。
最后,通过GCC编译的方式,将驱动程序与应用程序进行联合编译,就能获得Linux下的可执行文件。通过运行这一可执行文件,通信程序就能在Linux系统环境下实现数据的收发功能。
3.2 系统测试
在软硬件配置完成并移植成功之后,接下来将对系统进行测试。系统测试的目的在于实现Linux与DOS系统下的MVB网络互连。
测试的内容主要分为两个部分:一是以Linux下MVB节点为主节点,接收DOS下MVB发送的数据;二是以DOS下MVB节点为主节点接收Linux下MVB发送的数据。在实验室条件下,搭建了点对点MVB网络,通过两个节点数据收发情况来验证不同环境下MVB通信的可行性。实验结果表明:DOS系统与Linux系统下的MVB网络均能实现收发数据的功能,且误码率低,成功地实现了网络互连。
4 结论
随着信息化和网络技术的发展,列车控制技术不断更新完善。在实验室条件下,根据TCN协议的要求,对MVB网络接口单元进行了软硬件的配置,将DOS系统下的MVB网络通信程序移植到了Linux环境下。通过建立由Linux环境下MVB节点与DOS环境下MVB节点组成的点对点MVB通信网络,成功地实现了MVB网络在Linux和DOS环境下的网络互连,并实现了MVB过程数据通信。通过本次实验,使得MVB通信网络在可靠性和实时性方面的网络性能得到了提高,有一定的应用前景和现实意义。除此之外,还为将MVB通信网络移植到不同的操作系统环境下的应用研究提供了依据。
参考文献
[1] 刘建伟. 轨道交通车辆MVB通信网络的研究与设计实现[D].北京:北京交通大学,2006.
[2] 王磊,何正友. 高速列车通信网络技术特点及其应用[J]. 城市轨道交通研究,2008,11(2):57-64.
[3] 刘海新,谢维达,徐晓松. MVB网络接口单元的应用研究[J]. 工业控制计算机,2002,15(9):13-15.