1 VxWorks网络协议
VxWorks通常使用以太网作为最底层传输媒介。而在传输媒介的上一层,VxWorks则用TCP/IP协议来用于VxWorks进程与其它主机环境进程之间的传输数据。用户程序需要的就是在TCP/IP层之上进行通信。因此,利用VxWorks对多任务和socket的良好支持,可以方便的实现网络通信。
TCP/IP是VxWorks提供的网络间进程通信的主要机制,它主要包括三个协议:Internet协议、IP协议和传输层协议。其中Internet协议是处于TCP和UDP之上的一组协议专门开发的应用程序,包括telnet、文件传输协议(FTP)等。IP层也称网络层,它包括Internet协议(IP)、网际控制报文协议(ICMP)和地址识别协议(ARP);其中IP协议是TCP/IP协议族的基础,该协议被设计成互联分组交换通信网,现已形成了一个网际通信环境,它负责在源主机和目的地主机之间传输来自其较高层软件的(称为数据报文的)数据块,它在源和目的地之间可提供非连接型传递服务;而传输层协议包括传输控制协议,主要有面向连接的TCP和无连接数据报UDP两种协议。
VxWorks网络协议是一个基于开放系统的互连(OSI)模型,而且系统为了向高层协议层提供一个统一的、规范的、方便协议移植的网络接口,在高层IP层之下添加了一个MUX层,由MUX层负责与网络底层驱动的交互。这样做可以使用户在设计协议中不必关心网络底层的数据传递,而在设计网络驱动程序时也不必关心协议栈的结构,因而大大方便了对其进行的开发。VxWorks网络协议的结构如图1所示。
2 基于双缓冲队列的网络通信设计
网络通信的基石是套接字,一个套接字是通信的一端,在这一端上可以找到与其对应的一个名字。一个正在被使用的套接字都有它的类型和其相关的任务,VxWorks可以实现与BSD4.4TCP/IP兼容的Socket编程接口。由于面向连接的服务器使用的传输层协议可保证数据传送的可靠性和顺序性,因此,本文的系统端采用基于流Socket的客户机/服务器(Client/Server)编程模式,其程序可以分为客户端程序和服务端程序。其通信模型如图2所示。
2.1 客户端程序设计
所谓客户端服务程序,就是主要用来发出服务请求的程序。客户端程序设计要知道服务端的地址、服务所提供的端*及服务使用的传输层协议(TCP协议)。在客户/服务器模式中,客户端程序可以通过两种形式找到服务器:一是通过指定服务器的IP地址和端*来找到服务端;二是通过广播的形式来来寻找服务器。本系统的客户端程序应用第一种形式来寻找服务器。知道了服务端的位置后,客户端任务就可以打开一个套接字,然后通过连接服务器来发送和接收数据。
面向连接的TCP客户端编程结构分为部分:一是以TCP连接服务器,TCP协议是一种可保证传输可靠,且能保护顺序的传输层协议。在连接服务器之前,先要申请一个SOCK_STREAM类型的套接字,该套接字的通信域应制定为PF_INET类型;二是使用TCP与服务器通信,因为TCP是面向连接的协议,在连接建立以后,它可以通过send、recv等调用来进行通信,就像管道一样;三是关闭TCP连接,即在客户端程序结束,或使用完一个套接字后,可以使用close来关闭一个套接字。
2.2 服务端程序设计
在服务端程序设计中,可以根据对要实现的网络服务功能来设计自己的应用层协议。本系统服务端使用的TCP是面向连接的服务端。在这种模式下,服务端程序的设计就可以不考虑数据的可靠传送,而只要接受连接请求,并通过该连接进行通信即可,这样,底层的传输协议就自然会保证数据传送的可靠性。
服务端程序设计的两种基本模式是循环模式和并发模式。循环模式就是服务端进程在总体机构上是一个循环,一次处理一个请求。并发模式的服务端进程一般可以同时处理多个请求,结构上一般采用父进程接受请求,然后产生子进程,这样一般为多进程结构。
本文选用面向连接服务端的循环模式,此模式的建立步骤如下:
(1)创建一个SOCK_STREAM类型的套接字;
(2)调用bind指定地址和端口;
(3)调用listen未处理连接请求的队列长度;
(4)调用accept等待连接请求,一旦有连接请求,accept返回一个新的套接字描述符;
(5)通过新的描述符与客户端交互信息,交互完毕,即关闭新产生的套接字并返回第四步。
3 微机保护系统网络通信模型设计
系统中基于Socket模式下的通信过程分为控制端发起的通信过程和受控端发起的通信过程,这两种过程都是基于客户/服务器的网络编程模式。在客户/服务器模式中,请求的一方称为客户,提供服务的一方称为服务器。
本设计采用嵌入式计算机结合数据采集板的方式,并由VxWorks实时操作系统为嵌入式计算机提供底层软件平台的支持。嵌入式计算机连接数据采集板,并控制数据的采集过程,以(以牵引供电系统馈线保护为例)在工频周期下,从TV、TA侧采集共2路电压、电流信号,每周波采样24个数据点,采样周期为833μs。在该保护系统中,嵌入式系统端为客户端,并采用VxWorks基于Socket客户机编程模式,主要负责发布命令,监控命令的执行状况,其主要工作是数据的采集和存储;服务器端为微机保护运行所在的PC机,负责执行命令并返回命令执行的结果,主要工作是为采集数据的微机提供算法处理保护以及保护启动判断。本系统只需要在服务器启动后,就可以进入等待状态,所有其他的动作都可以等待和客户端建立连接后,由人机界面来控制。其系统网络通信流程如图3所示。
在网络通信时,首先由服务器端创建一个侦听用套接字(socket),然后与服务器的本地地址相绑定(bind),接着进入侦听模式(listen )。客户端开始时,同样也需要创建一个套接字(socket),不同的是,这个套接字只用于通信,然后连接服务器端(cONnect);服务器端用于侦听的套接字接受(accept)这个来自客户端的连接,然后建立新的通信用套接字,并利用新建的通信套接字与客户端进行通信;服务器端和客户端从各自的通信套接字传送和接收数据(send/recv),通信结束后,再关闭相关的通信套接字(close)。
基于这种网络通信模式可实现上述供电系统电压、电流信号数据采集模块与VxWorks系统平台间的数据传输及网络通信。
4 结束语
利用本系统可将VxWorks嵌入式实时操作系统接受的采样数据通过网络通信发送到保护任务所在的PC机上。这种方法不仅有利于采样数据的存储和后续的数据处理,并保证了采样数据的实时性和传送的安全性。相对于传统的前后台微机保护装置,采用VxWorks嵌入式实时操作系统的微机保护装置能有效的提高系统的实时性和可靠性。