1、主动声呐系统的结构和改进
1.1主动声呐系统的结构主动声呐系统
由上位机PowerPC控制板、DSP处理板、ADC数据采集板、接收机板和水声换能器设备组成,结构框图如图1所示[2,3]。PowerPC控制板通过VME(VersaModuleEuropa)总线与DSP处理板连接,完成DSP芯片的复位和程序加载,查看信号检测结果以及发送控制命令的功能;DSP处理板通过低压差分信号技术接口(LVDS,LowVoltageDifferentialSignaling)读取ADC采集的数据,并对数据进行FFT、波束形成、检测等水声信号处理;ADC数据采集板将接收机输出的模拟信号转换成数字信号;接收机板对换能器输出的模拟电信号进行滤波和放大;水声换能器设备将水声环境中的声信号转换成模拟电信号。
1.2主动声呐系统的改进
上节所述的主动声呐系统凭借VxWorks高性能的实时微内核、可裁剪性以及高可靠性,能够出色地完成声呐系统的控制功能,使系统高效稳定地工作。然而,与Windows操作系统相比,VxWorks很难对系统工作时采集的原始水声数据、信号处理结果和当前工作状态进行比较直观的实时查看和分析处理。尤其在开发和调试阶段,开发人员难以对系统工作状态进行准确判断和实时控制。基于上述功能上的不足,本设计引入一台运行Windows操作系统的远程计算机。通过建立VxWorks与Windows间的TCP/IP网络连接,将系统工作时采集的水声数据、信号处理结果和工作状态经PowerPC控制板,由网络传输至远程计算机端。远程计算机利用图形用户界面和Matlab等数据处理软件将数据和状态实时、直观地展现出来。开发人员还可以随时通过网络向PowerPC控制板发送控制命令,方便查看和控制系统工作状态。主动声呐系统改进后的结构框图如图2所示。
2、VxWorks与Windows间TCP/IP网络通信协议
VxWorks的网络系统由标准网络协议部分组成,即物理层、数据链路层、IP层、TCP层、应用层[1]。Vx-Works在BSD4.4Unix的TCP/IP协议栈的基础上,仅对实时性做了修改。为增强系统的应用性和可移植性,新版的VxWorks增加了一个称为MUX层的接口层,其网络系统结构如图3所示。TCP(TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输控制协议。VxWorks支持TCP协议,它提供了标准的BSDsocket调用,通过套接字建立网络连接。通信双方的主要工作模式为客户端/服务器模式,客户端与服务器的关系是不对称的[4]。服务器(Serv-er)首先启动,利用函数socket()创建一个套接字,并将套接字与一个本地网络地址(IP地址和端口号)通过函数bind()捆绑在一起。接着令套接字处于被动监听状态listen(),随后服务器进程调用accept()进入等待客户端连接的阻塞状态。客户端(Client)同样利用一个套接字socket()向服务器发送连接申请connect(),处于阻塞接收状态下的服务器收到连接申请后,提供网络服务,建立TCP/IP连接。连接建立后,客户端和服务器就可以利用接收函数recv()、发送函数send()以字节流进行数据通信。TCP客户端/服务器工作模式流程图如图4所示。通信过程中,需根据具体需求,设计客户端和服务器间的数据通信协议,以保证数据流传输的正确性和可靠性。本设计中的Windows端和VxWorks端的数据帧结构如图5所示,其中,Windows端到VxWorks端的帧结构中,帧起始标志、DSP工作任务码、DSP号、帧结束标志均为占1个字节的unsignedchar型,帧总字节长度、DSP采集数据大小、DSP文件数据长度为占4个字节的unsignedint型,DSP文件数据块为char型指针;VxWorks端到Windows端的帧结构中,帧起始标志、采集数据标志、工作状态标志、帧结束标志同样为1字节unsignedchar型,帧总字节长度和数据块字节长度为4字节unsignedint型,数据块为char型指针。软件设计时,应根据此通信协议的帧结构定义相关结构体及变量。
3、VxWorks与Windows间TCP/IP网络通信的软件设计
VxWorks与Windows间TCP连接的软件设计是基于套接字socket编程的,每个连接包括一个客户端和一个服务器。为使用方便,本设计以远程Windows作为客户端,主动声呐系统中的VxWorks作为服务器。反之,基本过程类似,本文不再做详细介绍。4.1服务器端(VxWorks)软件设计服务器端软件在集成开发环境WindRiverWorkbench3.0中用C语言进行开发,相比VxWorks6.0之前版本所用的集成开发环境Tornado,Workbench更为方便,功能也更加完善。在主机系统(Windows)中的Workbench开发环境下,将经过编译、调试的应用程序下载到目标机(VxWorks),在目标机上运行服务器程序。服务器端的软件设计过程如下[5]。(1)设置本地地址。VxWorks提供了socket通信的socket地址结构sockaddr_in,定义结构型变量serverAddr,初始化如下:serverAddr.sin_family=AF_INET;//指定TCP/IP协议簇serverAddr.sin_len=(u_char)sockAddrSize;//serverAddr的字节长度serverAddr.sin_port=htons(SERVER_PORT_NUM);//设置端口号serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);//设置IP地址(2)创建基于TCP的套接字。利用函数socket完成套接字的创建。sFd=socket(AF_INET,SOCK_STREAM,0);参数AF_INET代表使用TCP/IP协议簇,SOCK_STREAM表示全双工字节流。函数调用成功后返回一个套接字描述符sFd,代表用于当前连接的套接字,下面绑定、监听、连接时都将用到此套接字描述符。(3)绑定套接字。通过bind函数将套接字和本地地址(IP地址和端口号)绑定在一起。bind(sFd,(structsockaddr*)&serverAddr,sockAddrSize)。(4)创建客户端连接请求。服务器程序在套接字sFd指定的端口上开始监听,创建客户端连接请求队列,等待客户端的连接请求。listen(sFd,SERVER_MAX_CONNECTIONS)。(5)接受新的连接并创建任务。服务器调用accept函数进入阻塞状态,当客户端发出连接申请时,服务器接受请求并建立一个连接:newFd=accept(sFd,(structsockaddr*)&clientAddr,&sockAddrSize);成功建立连接后,返回一个新的套接字描述符newFd,以供当前连接使用。服务器程序可以用taskSpawn创建一个新任务来处理刚建立的连接,并继续在当前任务下监听新的连接。(6)接收和发送数据。成功建立连接后,利用当前连接返回的新套接字描述符newFd接收和发送数据。既可以通过TCP操作函数send、recv进行数据交换,也可以调用I/O系统的操作函数read、write来实现。recv(newFd,pDatabuf,bDataLen,0);read(newFd,pDatabuf,bDataLen);表示从新建立连接的缓存区pDataBuf读取bDataLen字节长度的数据,其中recv中的参数0为标志位。send(newFd,pDatabuf,bDataLen,0);write(newFd,pDatabuf,bDataLen);表示向新建立连接的缓存区pDataBuf写入bDataLen字节长度的数据。4个函数的返回值均为实际读/写成功的数据字节长度。(7)关闭连接。数据交换结束时,通过函数close(newFd)关闭当前连接。程序的末尾调用close(sFd)关闭服务器套接字。4.2客户端(Windows)软件设计客户端软件是基于跨平台框架Qt开发实现的[6]。Qt为开发图形用户界面应用程序提供一个完整的C++应用程序开发框架,集成了丰富的类和API(应用程序编程接口)函数,编程方便。Qt支持TCP网络连接,通过QTcpSocket和QTcpServer类可以用来实现TCP客户端和服务器。(1)创建套接字。利用QTcpSocket类创建一个套接字对象m_tcpClient实现连接。(2)建立连接。套接字对象通过调用连接主机函数,向服务器发送连接申请。m_tcpClient.connect-ToHost(HOST_IP_ADDRESS,HOST_PORT_NUM);两个参数依次为服务器的IP地址和端口号。(3)接收和发送数据。QTcpSocket继承了QIODevice类,对象m_tcpClient可以直接调用QIODevice类中的read()、write()函数,从当前连接的缓存区读写指定字节长度的数据。(4)关闭当前连接。客户端通过m_tcpClient.disconnectFromHost()断开与服务器间m_tcpClient创建的连接,其他套接字对象创建的连接不受影响。
4、水池实验结果
通过水池实验验证主动声呐系统工作时TCP/IP网络通信的正确性、稳定性和可行性。实验中,信号发生器发射脉冲调制信号,脉冲宽度2ms、重复周期20ms、中心频率25kHz。经换能器转换为声信号发射到水池中。脉冲调制信号经水声环境传播到声呐系统,经过换能器、接收机、ADC板等变为数字信号送至DSP处理,再将采样数据和计算结果经上位机通过TCP网络上传到远程计算机。远程计算机通过网络控制声呐系统并实时将采集的数据和运算结果用Matlab进行绘图显示。图6为示波器检测的接收机输出信号,脉冲持续4格,每格时间500μs,故脉冲持续时间为2ms。示波器每格约有12.5个信号周期,即每个信号周期约为40μs,故信号的中心频率为25kHz,与发射信号能够很好地匹配,说明接收机成功地接收到发射信号。图7为接收机输出信号经ADC板以35.159kHz速率采样后,经过DSP和上位机通过TCP网络上传到远程计算机,在远程计算机端绘图的结果。图7中稳态脉冲信号的采样点数为134-60=74个,与理论采样点数:35.159kHz×2ms=70.318基本相同。脉冲幅度最大值均为2V左右。对比图6图7得出,主动声呐系统通过TCP网络通信,将数据完整、准确地上传到了远程计算机。此外,通过多次实验进一步验证了网络通信的正确性、可靠性。
5、结束语
本文提出了一种通过建立TCP/IP连接,实现嵌入式实时操作系统VxWorks与Windows间网络通信的方法,并将其成功地应用到某主动声呐系统中,在实验中验证了网络通信的正确性和稳定性。该方法还可应用于其他需要建立实时操作系统VxWorks与Windows间TCP/IP网络连接的系统,具有广泛的适用性和指导意义。
作者:王敏 马晓川 鄢社锋 杨力 单位:中国科学院声学研究所声学智能制导中心