收稿日期:2005-09-12
作者简介:刘锡祥(1976-),男,博士生,研究方向为测控技术与计算机辅助工程。
Vx W orks 环境下基于TCP /I P 协议的多网卡
数据传输与双网卡冗余设计
刘锡祥,徐晓苏,刘建娟,冯丹琼
(东南大学仪器科学与工程系,江苏南京210096)
  摘要:利用实时操作系统Vx Works 提供的标准s ocket 接口和多任务机制,实现了基于TCP /I P 协议的多网卡数据通讯;在应用程序中通过对网卡的动态添加删减,实现了双网卡共享I P 和物理地址的冗余备份。介绍了在Vx Works 环境下,PC -104寄生网卡82559与双NE2000的多网卡数据传输和双NE2000网卡的冗余备份。在应用程序中实现对冗余网卡驱动的添加删减,避免了对BSP 底层驱动的二次开发,缩短了开发周期和费用,具有较强的实用价值。
关键词:嵌入式实时操作系统;Vx Works;T CP /I P;PC -104;NE2000网卡中图分类号:TP393102  文献标识码:A   文章编号:100020682(2006)0320030203
The desi gn of m ulti 2network card co mm un i ca ti on prov i ded w ith a dua l 2redundance network card ba sed on the TCP /I P protocol &Vx W orks
L I U Xi 2xiang,XU Xiao 2su,L I U J ian 2juan,FE NG Dan 2qi ong
(Southeast U nversity,J iangsu N anjing 210096,China )
  Abstract:By meanss of a standard s ocket and and the multi 2task method of Vx Works,the multi 2net 2work card communicati on based on the T CP /I P p r ot ocol is realized .The method of adding and deleting a net w ork card dyna m ically in a p r ogra m can bring about a dual 2redundance net,which uses the sa me I P and physical address .The paper gives an exa mp le,in which both 82559and NE2000are used t o realize the multi 2net communicati on and the dual 2redundance backup of the dual NE2000net w ork card .The said method is of highly p ractical value,which av oids the second devel opment of a board packet,thus reducing the devel op ing peri od and cost .
Key words:e mbedded RT OS;Vx Works;T CP /I P;PC 2104;NE2000
0 前言
  Vx Works 是W indR iver 公司提供的一套优秀的实时操作系统,它支持T CP /I P 等标准网络通讯协议,
并以标准的s ocket 编程接口的形式提供了对网络资源的“透明”访问,使得在Vx Works 环境下易于快速开发灵活实用的网络通讯软件;Vx Works 作为一种实时操作系统,具有对外界中断的实时响应和支持多任务的特点,在宏观上多网卡可以并行通讯。这些特点使得在Vx Works 环境下基于TCP /I P 协议的多网卡数据传输与冗余备份成为可能。
1 系统概述
  某工业测控系统要求:通过PC -104寄生网卡82559与监控计算机进行通讯,以提供调试和维护过程中所关心的测试数据,实时监控系统是否正常运行;通过NE2000网卡与上位系统的其他应用对象计算机进行通讯,提供和获取相关信息;通过对NE2000网卡进行冗余备份,使NE2000双网卡在系统启动正常工作后,其中一个网卡处于正常工作状态,在网卡或网络发生故障后,网络自动切换到另一块网卡,使系统能够正常运行。双网卡冗余备份要求双网卡对高层应用呈现单网卡特性,即两块网卡只能有一个物理地址、一个I P 地址;此外要求系统网络部分能够进行扩充,方便添加更多的网卡,以满足未来系统更强大的网络通讯需求。
03・工业仪表与自动化装置                2006年第3期
图1 面向连接的TCP /I P 协议
2 Vx W orks 中基于TCP /I P 协议的socket
 编程原理
  在基于T CP /I P 协议的通信网络应用中,通信两端的设备以客户机/服务器模式通讯,客户机先向服务器提出连接请求,服务器接收到请求后,建立连接,然后提供相应的服务。
协议中,服务器端首先调用s ocket 函数建立流式套接字,然后用bind 将套接字和本地地址绑定;调用listen 准备接收客户端的连接请求;调用accep t 接收连接,当接收到客户端的请求后,连接建立,ac 2cep t 返回新的套接字,此时就可以在这个新套接字上读写数据;原来的套接字则可以继续通过accep t 调用等待另一个连接。
客户端也首先调用s ocket 建立流式套接字,然后调用connect 向远地主机发起连接请求,连接建立后就可以在此套接字上进行数据的读写。
系统中所有基于TCP /I P 协议的数据通讯均作为客户端向系统外服务器发出请求。在Vx Works 环境下,系统自举时,可以自动加载一个网卡,并分配I P 地址。在进行多网卡数据通讯时,需要在应用程序中动态给其他的网卡分配I P 地址,为此修改上述客户端的连接方式如下:首先调用s ocket 建立流式套接字,然后用bind 将套接字和I P 地址绑定,此后调用connect 向远地主机发起连接请求,建立连接后进行数据读写的操作。上述面向TCP /I P 协议的调用过程如图1所示。
3 Vx W orks 环境下多网卡数据传输
3.1 Vx W orks 的多任务环境与实时性
tcpip协议中基于tcp协议的应用程序以往无操作系统的嵌入式系统,采用前后台的方式执行单一线程的程序,前台运行中断服务程序,
后台为无限循环的主程序,在这种方式下,程序员需要管理应用程序以及与应用程序无关的所有系统软硬件资源。Vx Works 作为一种多任务的实时操作系统,采用任务的形式管理系统中要实现的各种功能单元,并能够及时响应外部中断,此时操作系统管理系统的软硬件资源,程序员只需要关注应用程序本身。
在Vx Works 环境下,程序员需根据系统的实际情况将各功能划分为不同的任务模块,每一个任务都被编制成无限循环的程序,等待特定的输入,实现相应的功能。通过对各个不同任务赋予不同优先级别,操作系统会根据这些任务的优先级别关系,自动为这些任务分配资源并进行管理。
作为实时操作系统,系统必须在一定的时间内对外界的事件作出响应,并进行相应的处理。由于Vx Works 中断服务程序的要求和特点,它不能调用
可能引起调用堵塞的函数,如中断服务程序中不能试图获取信号量等。但中断服务程序可以释放一个信号量,从而激活在该信号量上等待的任务,使得该任务得到执行。所以Vx Works 中断通常通过释放信号量激活任务的方式实时响应外部中断。3.2 系统中网络任务的划分与触发
系统中,网络的通讯主要有两处,一是使用PC -104寄生网卡(82559)与监控计算机进行数据的交换(定义
为任务Cli M onit or );二是使用NE2000网卡与应用对象计算机系统进行信息的交换(定义为任务Cli Cntrnav )。在设计中,任务Cli M onit or 每
50m s 交换一次数据,任务Cli Cntrnav
每10m s 交换一次数据。任务的触发由
系统信号完成。系统每10m s 产生一次中断,释放相应的信号,使相应的任务运行,任务完成后进入堵塞状态,等待下一次信号的到来。其中任务Cli 2Monit or 等待的信号直接由中断产生,任务Cli Cntrnav 等待的信号通过对中断的计数进行判断,从而间接产生。3.3 应用程序中对NE2000网卡的添加
Vx Works 在系统自举时,可自动加
载网络,自动初始化引导它启动的那块
网卡,完成网卡与本地地址的绑定。系统通过PC -104寄生网卡82559完成网络的加载。系统的其他网卡需要在应用程序中动态加载。
Vx Works 提供了丰富的函数,可以在应用程序中实现对网卡的动态添加。在对BSP (板级支持
13・2006年第3期               工业仪表与自动化装置
包)进行修改,定义NE2000网卡添加相应驱动,增加相关的设备信息后,就可以在应用程序动态地加载NE2000网卡了。具体可以通过函数usr NetEnd2 DevStart启动设备、usr NetI fConfig绑定地址等相关函数。
4 Vx W orks环境下双网卡冗余备份
4.1 双网卡冗余备份的准备
在系统中,双NE2000网卡在系统正常运行时,一块网卡处于正常工作状态,当网卡发生故障或网络发生故障而导致该网卡不能正常工作时,系统能够自动切换至另一块网卡。应用程序不关心是哪块网卡在工作,也不关心网卡之间的切换。这就需要两块网卡使用同一I P和物理地址。
网络应用中要实现双网卡的冗余备份,最理想的办法是在网卡(N I C)的驱动程序中实现。在Vx2 Works中,相同类型的网卡使用相同的驱动,而各网卡则可以通过句柄进行区分,系统在调用N I C驱动时传入对应网卡的句柄,实现网卡的加载。该方法需要对底层驱动程序进行二次开发,难度较大。
文中采用另一种简单的方法来实现,该方法巧妙地在应用程序中利用Vx Works提供的函数实现网卡的动态删减。
以NE2000双网卡为例,首先为第二块网卡进行I O地址和I O中断的定义(要求与其他网卡不发生冲突),然后在Vx Works的增强型网络设备驱动表endDevTbl中添加第二块网卡的驱动项,最后添加网络加载回调函数并修改系统支持网卡的最大数目I P_MAX_UN I TS。至此完成了网络冗余备份的准备工作。
4.2 网络的动态切换
NE2000网卡中有一种寄存器,称作网络连接状态寄存器,该寄存器中保存的是网络的连接状态。如果正常工作,则信号置1,否则置0。在系统工作过程中,网络通讯任务通过查询网络连接状态寄存器,判断是否需要进行网卡的切换。
双网卡冗余备份对于应用程序而言体现为一个网卡,这样在使用时存在I P地址的冲突,为此在使用时,首先需要删除原先网卡的I P并在主机列表中删除网卡,然后使用同一个地址来初始化第二个网卡。具体使用的函数有host D elete删除I P、i pDetach 去除网卡、i pA ttach增加网卡和if AddrSet配置网卡等。具体名称和功能详见表1,部分实现代码如下: host D elete("host table","202.119.35.11");
if Route Delete("ene",0);
iP Detach(0,"ene");
i pA ttach(1,"ene");
if M askSet("ene1",0xffffff00);
if AddrSet("ene1","202.119.35.11");
表1 网络切换所需要的主要函数
函数名功能描述
host D elete从主机列表中删除I P
if Route Delete关闭网卡
i pDetach从T CP/I P网络堆栈中去除网卡
i pA ttach向T CP/I P网络堆栈中添加网卡
if M askSet定义子网掩码
if AddrSet绑定网卡的I P地址
5 结论
  在分析Vx Works实时响应特性和多任务环境的基础上,划分了不同网络任务的优先级别,给出了中断响应方法;实现在应用程序中动态添加网卡,完成了Vx Works环境下的多网卡数据通讯;实现了在应用程序中完成网卡的冗余备份,避免了复杂的网络驱动程序开发,具有一定的现实意义。目前该文介绍的Vx Works环境下多网卡数据通讯和双网卡冗余备份技术已经成功应用于某垂直惯导设备小型化样机的研制项目中,其性能满足作战系统的工作要求。
参考文献:
[1] 罗国庆.Vx Works与嵌入式软件开发[M]1北京:机械
工业出版社,20031
[2] 孔祥营.嵌入式实时操作系统Vx Works及其开发环境
Tornado[M]1北京:中国电力出版社,20021
[3] Vx Works Net w ork Pr ogra mmer’s Guide[S]1W indR iver
SysTe m,I nc.19981
[4] 田 炜,刘利强,袁赣南.Vx Works环境下双网卡冗余
备份技术的实现[J]1自动化技术与应用,2003,22
(7):32-34.
[5] 程敬原,束礼宝,安 琪.Vx Works下基于多任务的网
络通讯[J]1计算机工程与应用,2003,41(28):134-
1351
2
3
・工业仪表与自动化装置                2006年第3期

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。