- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
VxWorks下基于缓冲队列的网络通信
1引言
现代监控系统的监控对象越来越复杂,越来越分散,信号采集终端呈现分布式趋势。各个信号采集终端经常用小巧灵便、易于控制和性价比高的嵌入式系统构成相对独立的数据采集系统,然后通过网络将数据传输到上位机服务器进行统一分析处理 [1]。负责数据传输的网络通信协议和软件在整个监控系统中起着十分重要的作用,然而周围环境的电磁干扰、上位机 CPU被占用等情况可能导致网络阻塞、连接中断等,如果软件不能及时发现故障并做出相应的处理,将会直接影响到整个系统的稳定性,导致数据采集中断,甚至使系统瘫痪。利用实时操作系统 VxWorks对多任务的良好支持,本文提出了一种基于缓冲队列的网络通信模式,并添加了网络状态监测功能,使系统能够快速的对网络断线等故障做出响应,提高了网络通信的稳定性和可靠性。
2 VxWorks及分布式数据采集系统介绍
VxWorks是美国风河( Wind River Systems)公司开发的一套具有微内核、可裁减的高性能实时操作系统,适用于当下所有流行的目标 CPU平台,支持广泛的网络通信协议,为开发者提供了高效的实时多任务调度、终端管理、实时的系统资源及实时的任务间通信功能,是嵌入式领域中应用最多的实时操作系统之一[2]。VxWorks采用了与 4.4BSD TCP/IP兼容的实时网络协议栈,使得网络开发变得易于进行和方便移植。利用 VxWorks对多任务和Socket的良好支持,可以方便地实现网络通讯。
图1是我们开发的一个基于 TCP/IP协议的分布式监测系统的结构示意图。该系统主要可分为三个层次结构:服务器、采样节点、传感器。传感器负责采集信号,将物理信号转换为电信号;采样节点首先对信号进行预处理,然后通过 A/D芯片将信号转换为数字信号,最后通过网络传送给服务器;服务器负责数据的接收、分析、存储并显示结果。服务器和采样节点之间通过TCP/IP协议进 行数据的传输与接收,网络通讯程序的质量直接影响着整个系统的稳定性和可靠性。TCP/IP协议是目前广泛采用的一组完整的网络通信协议,可以用在各种各 样的信道和底层协议之上,是一组不基于任何特定硬件平台而可实现异种机互联的网络通信协议,在网络通信中被广泛应用[3-4]。
具体表现为,消息队列初始为空,数据发送任务阻塞在消息队列上,网络正常情况下,每有新的消息单元到达时,数据发送任务就将该消息单元指向的数据包立刻发送出去;如果某个时刻网络受到外界环境的影响变地不稳定或发生短暂阻塞,数据包不能及时发出,该数据包就可缓存在 Buffer中,其地址信息缓存在消息队列中,而不会丢失,等网络正常后再发送出去。基于缓冲队列的网络通信模式如图 3所示。根据待传输信息的紧急程度,不同的任务可以选择基于 FIFO或优先级向缓存队列中写入消息单元。
实验时,以一台普通 PC机作为上位机服务器,采样节点和服务器之间通过一个百兆的交换机相连。采样节点的所有采集通道全开,均设为最大采样率,服务器每隔 5秒钟查询一次节点状态,此时数据传输率约为 65Mbit/s,系统连续运行 8小时。实验结果显示服务器收到的数据包数目和采样节点发送的数据包数目相同,数据传输丢失率为 0.0%。
4网络监测原理
当网络发生中断时,系统软件应该能够尽快发现网络故障,并在网络恢复后仍可正常运行,因此软件应该具备网络监控功能,实时监测网络的连通性。监测网络连通性的一个比较简单的方法就是通过服务器向采样节点不间断发送 ICMP(Internet控制消息协议 )包,如果能收到回应则证明网络连通,反之则表示网络中断。此法虽然简单,但是当节点比较多时,大量的 ICMP数据包会占用 CPU资源,降低服务器的效率,故此法不可行。图 4是我们设计的一个网络监控原理图。
为避免影响到数据的实时传输,通信双方各建立两个 socket端口,一个作为数据通道专门用来传递数据信息,另一个用作监控通道,传递应答信号,监测网络的连通性;监控通道负责管理和维护数据通道。节点 和服务器端运行的监控任务都是无限循环任务,每若干秒运行一次。在每一个循环周期内,采样节点都会向服务器发起一次连接,服务器端收到采样节点的连接请求 后,和其建立连接,然后向其发送信号指令。采样节点收到信号指令后,向服务器发送应答信号,服务器若能在 T_wait时间内收到应答信号,则判定网络通畅,否则认为网络中断。如果某时刻网络出现断线,那么重新建立连接后,服务器会向采样节点发送重新连接指 令,采样节点收到重新连接指令后,会关闭原有的数据传输 socket,重新和服务器建立数据传输通道。
实验时,通过插拔网线模拟网络的连通和断线。结果表明,在系统进行数据传输时拔掉网线,若在 20秒内再接上,由于采样节点具有一定的缓存能力,数据不会丢失,网络仍可正常工作;若拔掉网线,超过 20秒之后再接上网线,采样节点和服务器之间会重新建立连接,网络仍可正常工作,但由于缓存队列溢出,数据会发生丢失;若拔掉网线超过 30分钟,采样节点会判定网络中断、记录故障并自动关闭系统,插上网线后,服务器通过网络远程启动采样节点,系统继续正常工作。
5总结
利用 VxWorks对多任务和网络的良好支持,本文提出了一种基于缓冲队列的带网络状态监测功能的网络通信模式,目前已经在我们开发的分布式监控系统中得到应 用。该网络通信模式使系统能够应付一定的网络故障,提高了系统的可靠性。该模式还可以方便地应用到其它嵌入式网络开发中,具有广泛的应用前景。本文作者创 新点:本文提出的这种基于缓冲队列的带网络状态监测功能的网络通信模式,充分地利用了 VxWorks对多任务和网络的良好支持,消息队列不仅同步任务,还可作为缓存队列用来缓存数据,使系统能够应付一定的网络波动;监控任务的工作模式使系 统能够快速发现网络故障并做出响应,待网络故障排除后仍可正常运行。