
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所示。
