本文将介绍系统各模块接口之间通信的软件流程、多线程支持技术在多串口上的应用和对采集到的数据进行一些处理的方法。
2 系统的多串口数据采集
2.1数据采集的软件流程
系统软件中的接口包括与GPS和与水声基站的接口,接口的实现又包括硬件实现和软件实现,为了方便与微机的通信连接,硬件实现采用通用的RS232接口,它的工作方式可以通过编程设定,以异步串行通信方式工作,自动完成帧格式。软件实现采用了开发效率高的可视化编程软件Visual Basic,其流程如图2所示。
系统运行时,首先打开连接GPS的端口,GPS设备每秒更新一次导航数据并传送给主控软件,软件将其保存下来为后面的数据融合做好准备。与此同时也通过给水声基站一个触发信号来启动水声通信的设备,将按一定时间间隔收到的水声数据去同步GPS数据,通过实时的算法处理解算出对应的水下目标位置信息。
2.2多线程技术在多串口采集上的应用
对于本系统,首先要保证GPS和水声基站两个外围设备与主机之间的实时通信功能,因此在程序设计时要重点考虑多串口的支持技术。
2.2.1 进程与线程
简单地说,进程就是程序的一次执行,具有动态性、并发性和独立性。进程是系统分配资源的基本单位,在自己的地址空间上运行,拥有各自独立的资源。一个进程包括代码、数据、堆栈、文件I/O和信号表等,进程间的关系如图3所示[l]。
由图3可见,进程的上下文很庞大。传统的操作系统中,进程也是CPU调度的基本单位,也叫单线程进程。随着计算机应用的深入,许多情况下需要处理并发多任务。传统上,由操作系统按照一定的策略调度各个进程进行处理。但随着问题复杂化这种方法也存在很
多缺陷,表现在以下几个方面:
(1)进程作为基本调度单位,上下文切换引起的开销很大;
(2)不同的进程有独立的地址空间和系统资源,但有些进程例如父进程与子进程之间在逻辑上是共享一些资源的,因此造成资源的浪费;
(3)很多情况下进程间通信、同步时必须通过系统调用来完成,开销也很大。
(4)因为单线程进程并发运行时所占资源很多,所以许多操作系统限制用户进程总数,如很多UNIX版本的典型值为40~100,这对许多并发应用是不够的。
为解决多进程调用时开销过大、资源浪费、处理并发多任务不足等问题,提出了线程的概念。把进程中的执行代码与资源分离,则在一个地址空间中可执行多条指令流,每条执行流就是一个线程。线程目前没有严格统一的定义,简单地讲它是程序中的单一顺序执行流,如图4所示。可见线程间的上下文要轻得多,同一进程内的多个线程共享同一地址空间,动态堆、静态数据区及程序代码等为各线程所共享。进程作为独立的实体,为线程提供运行的资源并构成静态结构,线程为维护自己的控制流而保存寄存器和堆栈,线程是处理机调度的基本单元。
2.2.2 水下定位系统中多线程串口通信模型
在水下定位系统中,主控软件需要通过串口实时采集到水声基站测得的数据和GPS测得的数据,因此如何开发出实时性良好、吞吐量大、人机交互友好的串口通信程序是一个待解决的问题。 据以上讨论可知,线程上下文较轻,通信开销很小,可以把各个任务分配到多个线程上并行运行来满足多任务的需要。而且当前流行的wIN32系统采用抢占式多线程处理,可给每个线程规定一个优先级,如根据各任务时间紧迫性的高低给每个任务定义一个数值来表示优先级的高低,调度时选择优先级高的先执行,优先级相同时轮流执行,而且在优先级低的线程运行的时间内,优先级高的线程到达,前者让出CPU给后者使用。这种方法能很好地实现抢占式多任务的处理,提高数据传输的吞吐量和系统的执行效率。
基于多线程技术的水下定位系统中的串口通信模型设计如图5所示。各个模块的描述如下:
(1)主线程:响应用户的输入,提供前端的人机交互界面;完成串口资源的打开、参数设置、关闭;其他线程的创建、关闭和协调运行;接收监听线程发来的消息,并调用相应的线程处理程序;
(2)串口监听线程:实时监视串口的状态,一旦发生预定的事件,就立即向主线程发送相应消息,请求主线程对其进行处理; (3)写处理线程:接收来自主线程的数据并将其写入串口;
(4)读处理l#线程:从串口读出GPS接收的数据并传送给主线程进行处理;
(5)读处理2#线程:从串口读出水声基站采集的数据并传送给主线程进行处理;
(6)其他处理线程:响应一些预定事件并进行响应处理等;
(7)串口资源:提供一个或多个串口资源。
这个模型采用多线程技术,使前端人机交互部分、中间处理部分和后台的串口操作部分并行处理。让耗时的I/O操作在后台运行,在大数据量通信的情况下对改善程序的响应速度相当有效,并且对多个串口设备同时操作或对一个串口同时进行读写操作的处理也非常成功,提高了程序的响应速度和资源的利用率。
笔者用Visual Basic实现了这一模型,并在实际应用中取得了良好的效果。在实现时需注意的2个问题是对串口的操作和各线程问的同步。对串口操作的一般流程是:设置参数,打开串口,关闭串口。为了保证所用的数据是来自各串口同一时刻的实时数据,必须及时读取各串口缓冲区中的数据,传递给对应的存储变量,程序中采用事件驱动的串口操作方式,以满足对端口数据响应时间的严格性。用VB实现部分代码如下:
3 数据处理
3.1 GPS一水声测距联合水下定位嘲
水声定位和水声测距不是一件事,定位一般是指在利用多个基元测量坐标一基元斜距的基础上进行球面或双曲面交汇解算,确定目标坐标的过程。而水声测距仅仅是斜距的测量,其精度取决于信号的传输时间和声速的测量误差,因此可获得很高的测量精度,这为海底大地测量点的高精度定位提供了可能。
在实践中的做法是,船在水底目标上方航行,利用实际测量或以最小距离为目标深度,进而可根据船位估计水平参数。在本系统中,在目标附近船以任意的曲线航行,航行中不断与水下目标应答(或同步定时)测距得ri'i=1,2…m,主控软件自动记录t,时刻水面船GPS大地坐标(Xi,Yi,Zi),任取3点建立下列方程即可获得水下目标坐标信息
式中,(x,r,z)为水下待测目标坐标;i=1,2,3;使用3次测量数据进行计算,在高精度压力测深技术支持下,可以0.1%精度精确测量以平均海平面为基准的。,用大量测量数据对(x,r,z)进行迭代运算,可以获得更精确的水下目标位置。
3.2 GPS测量中的坐标系转换
在GPS测量中,经常要进行坐标系转换和基准转换。所谓坐标系转换就是在不同的坐标表示形式问进行变换,基准转换是指在不同的参考基准间进行变换。
本系统中参与数据融合的GPS坐标是空间直角坐标(X,Y,,Z)的形式,而GPS接收机接收到的数据是空间大地坐标(B,L,H)形式,下面给出在相同的基准下,空间大地坐标系向空间直角坐标系的转换关系.
系统中GPS接收机的坐标系统采用的是目前通用的WGS一84坐标系,其全称是World(Geodetic System,1984(1984年世界大地坐标系统)。它是由美国国防部制图局建立的,于1987年取代了当时GPS所采用的世界大地坐标系统WGS一72而成为GPS使用至今的坐标系统。GPS所发布的星历参数就是基于此坐标系统的,WGS属于地球坐标系。空间点在WGS一84坐标系中主要是用经度B,纬度,J和大地高H表示。
4 结语
本文从多串口数据采集和数据处理两方面介绍了水下定位系统软件部分功能的实现。经过多次实验证明,系统可实现多串口同时准确、快速同步双向数据传输和算法处理,有一定的应用推广价值。