1. 引言
波浪滑翔器是近年发展起来的新型海洋观测平台,是一型以波浪能为主驱动力的远程无人自航系统。系统具有实时通信、定位和自主航行控制能力,能够实现长时间、大范围、远距离的海洋环境参数实时测量,同时可应用于军事领域,具有显著的社会及经济效益 [1]。中国船舶重工集团有限公司第七一〇研究所是国内最早开展波浪滑翔器研制的机构之一,目前已经研制出“海鳐-6000”型波浪滑翔器,并在国家863课题及国家重点研发计划中表现出优异的性能,整体水平处于国内领先,样机处于定型状态,具备批量生产条件。
岸站系统是波浪滑翔器无人自主观测系统的指挥控制中心,是波浪滑翔器系统的重要组成部分。岸站系统主要完成波浪滑翔器的工作参数设定、状态检测、航行任务规划、状态监控、卫星通讯链路管理、任务控制等,同时以数字、图表、海图等形式提供波浪滑翔器的运行状态、定位信息、航迹显示等,实现波浪滑翔器的监控任务。
本文基于Labwindows/CVI和Mapx组件设计并开发了一套针对“海鳐-6000”型波浪滑翔器的岸站系统,实现了对波浪滑翔器及其搭载的各类仪器进行全天候的可视化监视与控制,并完成对监测数据的接收、分类存储和可视化展示。
2. 开发环境简介
Labwindows/CVI是美国NI公司推出的进行虚拟仪器设计的交互式C语言开发平台,适用于仪器控制、自动检测及数据处理等。它具有内置的测量库,提供了基于ActiveX技术的服务器/客户端程序。Labwindows/CVI既具有开发效率高、界面设计快的优点,又有语言功能强大、性能灵活的优势,主要适用于仪器控制、自动检测、数据处理等较复杂的应用软件开发 [2]。
Mapx是MapInfo公司提供的一个基于ActiveX技术的可编程控件,它实现了大多数MapInfo的功能,为开发人员提供了一个快速、易用、功能强大的地图化组件。在Visual Basic、Visual C++、Labwindows/CVl、Delphi等可视化开发环境中,只需将MapX放入窗体中,并对其进行相应的属性设置,即可实现丰富的地图信息系统功能 [3]。
3. 系统总体架构设计
波浪滑翔器岸站系统架构如图1所示,主要由岸站计算机、岸站软件、控制箱、北斗/GPS合制模块及天线、短波模块及天线、铱星通讯模块及天线和通讯电缆等组成。

Figure 1. Overall architecture of the shore station system
图1. 岸站系统总体架构
岸站系统可以分别通过北斗卫星、短波、铱星和电缆等四种方式与波浪滑翔器建立连接 [4]。通过岸站软件来选择不同连接方式,选择好连接方式后,岸站软件可以将控制命令发送给波浪滑翔器、回收反馈信息以及监控信息可视化处理。
4. 岸站软件设计与实现
岸站系统的核心是岸站软件。波浪滑翔器岸站软件是提供给用户的人机交互软件。通过岸站软件用户可以给波浪滑翔器设置参数、为波浪滑翔器规划航路、对波浪滑翔器进行检测、回收各种传感器参数,同时岸站软件还具有电子海图功能,能在海图上动态显示波浪滑翔器运行轨迹和实时回传的数据。
4.1. 岸站软件总体架构
考虑到使用对象的不同,岸站软件分为用户模块和管理员模块,其中用户模块面向波浪滑翔器用户,便于用户操作使用,包括以下功能:实时显控功能、参数设置功能、航路规划功能、状态检测功能、文件操作功能;管理员模块面向波浪滑翔器开发者,主要包括系统内部工作参数的设置。软件总体架构图如图2所示。
用户模块为用户提供人机交互接口,通过用户模块,波浪滑翔器使用者可以对滑翔器进行参数设置、状态检测、规划航路、启动或停止运行、监控滑翔器运动轨迹等操作。用户模块包括通讯参数配置、通讯模式切换、实时显控、用户参数预置、航路规划、状态检测、文件操作等功能。管理员模块只供授权用户使用,包括系统参数预置功能、手动操控功能。
4.2. 关键功能设计与实现
4.2.1. 实时显控
实时显控是岸站软件的核心功能,包括海图显示、多机在线状态查询、多机数据解析和显示。实时显控功能软件架构如图3所示。

Figure 3. Software architecture of real-time display and control module
图3. 实时显控模块软件架构
岸站系统开始工作后,周期性自动获取工作中的波浪滑翔器数量和编号并以列表形式显示在人机交互界面上。波浪滑翔器根据用户设置的系统参数,周期性发回数据报文,内容包含波浪滑翔器当前位置信息、工作状态和传感器信息等。岸站软件收到数据报文后,完成数据解析并将位置信息显示在海图上,其他信息以表格形式显示在界面上供用户查看。岸站系统可根据保存的数据文件在海图上动态重现波浪滑翔器的历史航迹。

Figure 4. Real-time display and control interface
图4. 实时显控界面
实时显控模块界面如图4所示,界面左侧是基于Mapx的电子海图,海图中黄色航迹为用户规划航路,黑色轨迹为波浪滑翔器实航轨迹;界面中部是解析出来的位置数据和传感器数据;界面右侧是操控区域。
4.2.2. 自动航路规划
航路规划是岸站软件的重要功能,主要用于完成波浪滑翔器航路的设置和输入。常用方法为通过在海图上获取航路点或人工输入航路点完成航路的规划,这两种方法适用于短距离航行或航路点数量较少的情况。当要进行长距离航行或复杂路线航行时,需要规划的航路点多达到数百甚至上千个,此时通过人工输入航路点,工作量十分巨大。因此需要设计一个自动航路规划模块,用户只需提供初始航路点序列和相关参数,模块根据设置好的参数自动生成详细的航路点序列并下载给波浪滑翔器。该模块的软件界面如图5所示。
4.2.3. Map X航迹实现
岸站的电子海图是通过CVI加载MapX控件来实现,在对电子海图进行操作之前,首先获取MapX控件句柄,然后根据预先设置好的海图的位置,按照指定的路径将海图加载到控件中 [5]。具体实现代码如下:
GetobjHandleFromActiveXCtrl(panelHandle, PANEL_MAP, &seaMap);//获取控件句柄
MapXlib_CMapXSetGeoSet(seaMap, NULL, MAP_NAME);//按照指定路径加载海图
在创建的通讯子线程中可以实时更新显示波浪滑翔器的航行轨迹,软件流程如图6所示。

Figure 5. Automatic route planning interface
图5. 自动航路规划界面

Figure 6. Real-time track display flow chart
图6. 航迹实时显示流程图
海图的基本操作函数如下:
MapXLib_CMapXPointsAddXY(points, NULL, jingdu, weidu, CA_DEFAULT_VAL, NULL);//将经纬度坐标添加到Points对象中
CA_VariantSetObjHandle(&vpoints, points, CAVT_DIS_PATCH);//数据类型转换
MapXLib_CMapXFeatureFactoryCreateLine (hlLine, NULL, vpoints, CA_DEFAULT
MapXLib_CMapXLayerAddFeature(hlLayer, NULL, newLine, CA_DEFAULT_VAL, &mapLine);//将新增加的航线加入图层,完成航迹显示
4.2.4. 多线程技术实现
岸站软件在运行后将一直处于实时监控状态,同时也要响应用户的其他操作,因此必须采用多线程来实现,使用主线程创建实时监控程序,在次线程中响应用户的其他操作。
LabWindows/CVI提供了两种在次线程中运行代码的高级机制,分别是线程池(thread pool)和异步定时器(asynchronous timer)。线程池适用于需要不连续地执行或在循环中执行的任务,而异步定时器适用于在固定时间间隔内执行的任务 [6]。在波浪滑翔器岸站软件的实现中,主要使用了线程池技术。
主函数中使用CmtNewThreadPool(5,&Poolhandle)函数创建一个5线程的线程池并在整个程序结束后使用CmtDiscardThreadPool(Poolhandle)函数释放线程池。
在主线程中使用如下代码创建状态监控线程。
if ((CmtScheduleThreadPoolFunction (Poolhandle, MonitorThreadFunction, &ThreadIndex, &ThreadFuncId)) < 0) //创建实时监控线程
{……; MessagePopup(错误, 监控线程初始化出错!); sFlg = 0; return 0;}
……//其他操作
if (ThreadFuncId!=0) CmtWaitForThreadPoolFunctionCompletionPoolhandle,ThreadFuncId , OPT_TP_PROCESS_EVENTS_WHILE_WAITING);//等待实时监控线程结束
/*释放线程*/
CmtReleaseThreadPoolFunctionID (Poolhandle,ThreadFuncId );
状态监控线程实现代码如下:
int CVICALLBACK MonitorThreadFunction,(void *functionData)
{ while(sFlg) {
…… //接收并处理数据过程}
5. 应用案例
本文设计并实现的岸站系统如图7所示。

Figure 7. “Sea ray-6000”wave glider and shore station system
图7. “海鳐-6000”型波浪滑翔器及岸站系统
岸站系统随“海鳐-6000”型波浪滑翔器经历了多次海上长期连续试验,其工作性能和可靠性得到了充分的检验。以下是“海鳐-6000”型波浪滑翔器岸站系统的典型应用。
2017年5月至8月,在国家“863计划”课题“波浪滑翔器无人自主海洋环境观测系统”的支持下,“海鳐-6000”型波浪滑翔器在青岛千里岩附近进行的长航程试验。整套系统累计工作92天,“海鳐-6000”型波浪滑翔器航行总里程为3242公里,共发送6624帧有效报文,岸站系统可靠接收到6533帧报文,接收成功率达到98.6%,岸站系统监控界面如图8为示。

Figure 8. Monitoring interface of shore station system for the final examination of “863 plan”
图8. “863计划”结题考核岸站系统监控界面
2019年5月至8月,在国家重点研发计划“无人无缆潜水器组网作业技术与应用示范”项目“海洋滑翔机改造与协作关键技术”课题的支持下,多套“海鳐-6000”型波浪滑翔器在南海中东部海域开展了联合组网协同观测试验。整套系统连续工作94天,由于南海禁渔期结束终止。本次试验是国内波浪滑翔器首次实现连续超过三个月的海上高性能可靠运行,在经历多次台风的情况下,仍保持了较高的定点控位和规划轨迹走航精度。试验后回收样机如图9所示。

Figure 9. “Sea ray-6000” after 94 days of continuous and reliable operation
图9. 连续可靠运行94天回收后的“海鳐6000”型波浪滑翔器
走航和定点控位连续12小时定点位置保持精度均小于100米,其中“海鳐6000-2”波浪滑翔机连续15小时位置保持精度小于40米,如图10~12所示。

Figure 10. Trajectory of three sets of “Sea ray-6000” for 15 days
图10. 三套“海鳐6000”型波浪滑翔器连续15天的走航轨迹

Figure 12. Fixed point control accuracy of “Sea ray-6000” no. 2
图12. “海鳐-6000”2号波浪滑翔器定点控位精度
岸站系统在本次试验中实现了多套协调控制和多条任务路线实时切换等重要功能,数据接收成功率达到99%以上。
6. 结束语
本文基于labwindows/CVI和MapX组件设计和开发了一套波浪滑翔器岸站系统。该系统人机界面友好,操作简捷,具有参数设置、航路规划、滑翔器状态检测、传感器数据可视化,数据实时存储、航行轨迹实时跟踪显示和历史轨迹回放等功能,可以通过对海上不同波浪滑翔器分别进行航路设定及状态监控,采用编队方式完成大面积海域的测量调查或其他任务工作,对于实现海洋监测网络的搭建具有实际意义。本文设计的岸站系统能够满足“海鳐-6000”波浪滑翔器的当前需求,但也有待进一步优化完善,如增加三维可视化地图控件、大数据分析功能、高速率卫星通信功能、集群协同显控等。
致谢
感谢中船重工第七一○研究所一〇二事业部对波浪滑翔器项目组的支持,特别感谢我的家人对我工作的支持。
基金项目
国家高技术研究发展计划(863计划)“波浪滑翔器无人自主海洋环境观测系统”2014AA09A508。
国家重点研发计划项目“海洋滑翔机改造与协作关键技术”No. 2017YFC0305902和深圳市投资控股有限公司资金资助。