沈思曦,陈元林,安博文,卢学佳
(1.上海海事大学信息工程学院,上海 201306;2.国网衡水供电公司,衡水 053000)
海上风电系统由陆上集控中心、海上升压站和海上风机组成。陆上集控中心与海上升压站之间、海上升压站与各个风机之间分别用用220kv和35kv的海缆进行串接。风电场工作人员需要对所有铺设海缆的海域进行船舶监控,保护海缆不受锚害。
文献[1]提出了一种单机版的海上船舶监控系统,其能够对海域内传播进行有效监控。文献[2]在文献[1]的基础上提出了基于C/S结构的多客户端监控系统的想法,但其只有想法没有具体的实施方案。文献[3]将文献[2]中的想法成功实现,且系统能够稳定运行,但文献[1-3]的系统均只支持单个AIS设备进行数据采集,使得系统稳定性得不到保障,且其告警系统不够完善,均只能系统报警而不能向目标船舶发送告警信息。这些不足点在文献[4]中被提及,作者提出了一系列方案来完善系统,但最终只有部分功能完成模拟测试,且系统整体设计没有完成。本系统完成了文献[1-4]中的设计,并对其中部分功能进行补充和优化。
本系统采用的技术主要包括AIS解码编码技术、MapWinGIS地图开发技术、PostGIS地理信息空间数据库管理技术、基于分布式数据库(MySQL)的数据发布订阅技术、基于分布式数据库(MySQL)的配置信息管理技术和多线程技术。
(1)支持多个AIS设备同时接入
单个AIS设备监测海域的范围有限,且稳定性较差。因此要求系统支持多个设备同时接入和动态可配置。
(2)GIS电子海图形式的表示层
以电子海图的形式显示观测海域、警戒区和海上船舶,使用户更直观地了解海上船舶的航行情况。
(3)多客户端设计
工程上需要在海上升压站、陆上集控中心等地点查看监控系统信息,所以系统需满足多客户端同时在线访问。
(4)船舶告警功能
系统需要有自动告警功能(系统界面弹出告警框并产生警报),并向滞航船舶自动发送告警信息和向目标船舶手动发送短消息的功能。
(5)历史信息查询功能
系统应包含船舶历史信息和历史航迹绘制的功能,方便用户对历史船舶进行数据查询和事故追责。
本系统要求的系统指标如表1所示。
表1 技术指标
硬件设备主要包含AIS设备、服务器和客户端,其连接框架如图1所示。
图1 硬件框架
本系统软件结构如图2所示,包含以下功能模块:AIS数据采集模块、AIS数据编解码模块、AIS可视化模块、预警与报警模块、AIS数据发送模块、报表管理模块、历史数据查询模块和用户管理模块。
系统中的AIS设备包括A类设备、B类设备和基站。系统通过RS-232串口/RJ-45网口接收AIS信息并进行解码。AIS消息的接收和解码流程如图3所示。
数据进入串口缓冲区后,服务器对缓冲区数据进行提取解析,解码信息通过安全队列送至服务器处理模块进行处理;当有消息发送给目标船舶时,服务器处理模块将短消息通过安全队列发送给数据编码线程进行编码,再通过串口将编码数据进行发送。
图2 软件结构
图3 数据采集/编解码流程
数据采集模块会根据系统连接AIS设备的数量设置线程数,每个AIS设备设一个独立线程,并通过相应的串口将数据发送至服务器,在服务器收发控制层中进行与处理。
系统的信息处理主要包括AIS解码、AIS编码、基于UDP协议的数据发送。
(1)AIS解码
本系统严格按照ITU-1371[4]标准的规定进行AIS解码,对于包含多条AIVDM的信息(如5号报文),系统将对其语句信号和连续消息标识进行识别,将同一组的多条消息进行自动整合再进行解码。
(2)AIS编码
本系统对AIS设备进行二次开发,使得其可以接受上位机的短消息发送指令,具备向海域船舶自动发送短消息功能。本文自主设计了一套AIS编码技术,用于短消息指令编码和传输,其格式为:
$XNMSG,短信 ID,九位码,短信类型,语句内容*校验码
短消息ID:使用三位数字代表所发消息ID
短消息类型:如表2所示。
表2 短消息类型
校验码:取$和*之间的字符串异或校验,为两位16进制数。
(3)基于UDP协议的数据收发
系统对客户端与服务器端之间数据传输的实时性要求很高,考虑到UDP协议的无连接、高速率、占用资源少等一系列优点,系统采用UDP协议而不是TCP协议进行数据发送,但是UDP存在丢包的问题,不能保证传输数据的正确性,为此,系统在发送端的UDP数据尾部加上校验码进行传输数据校验。
系统中的线程主要分为服务器主线程、数据采集/处理线程、UDP数据发送线程和UDP数据接收线程。各线程之间相互独立,互不影响。
服务器主线程主要负责控制用户界面的控件、加载INI配置文件和开设其它线程的工作。
数据采集/处理线程的数量与串口数(AIS设备数)一致。系统会根据如表3所示的INI配置文件,设置AIS设备的数目并自动分配串口数据处理线程,每个串口数据处理线程分配两个线程安全队列,分别用于数据发送和数据接收。
表3 双机双客户端系统INI配置文件
系统各线程间采用线程安全队列进行数据传输,如图4所示,在程序中设置一个轮询,服务器端发送数据时,各个串口数据处理线程的数据发送安全队列将依次向UDP数据发送线程发送数据,不断循环。避免使用线程锁时,线程数量过多导致的数据传输效率低下和死锁的情况。服务器接受数据时,UDP数据接收线程将依次向各个串口数据处理线程的数据接受安全队列发送消息,无需等待,提高了系统的运行速度。
图4 多线程间数据传输流程
(1)MapWinGIS
MapWinGIS是一个功能强大的开源GIS平台,是为小中型GIS应用开发的免费开源的组件及桌面的集合。本系统使用MapWinGIS实现GIS可视化。GIS可视化由如图5所示的四个图层绘制而成,分别为:海图图层、海缆图层、观测警戒图层和AIS船舶图层。不同的图层全部设置在同一坐标系(WGS1984坐标系)下,使得不同图层的各个位置在同一个坐标系下叠加并对应起来。
图5 系统海图图层
①海图图层
海图图层主要功能是为整个系统提供海缆所在海域的地理信息,并将相关海域以地图的方式绘制出来。
传统地图文件往往只使用一份地图文件来表示整个地图,这样会导致若地图文件太小则分辨率低;若地图文件过大系统运行速度降低。
本系统将多张不同文件格式、不同分辨率的文件叠加在一起,组成一份新的地图文件,既解决了地图分辨率的问题,又提高了系统的运行速率。
海图图层是整个系统表示层的基础,海缆图层、观测警戒图层和AIS图层均绘制在该图层上面。
②海缆图层
海缆图层是覆盖在海图图层上的第一张图层,在该图层中要显示海缆的起点、所经过的坐标和终点,绘制出海缆的形状。
③观测警戒图层
观测警戒图层包括观测区和警区域。警戒区在观测区内部,其区域形状均为封闭的不规则多边形。
绘制警戒区时,先确定警戒区所有顶点的经纬度坐标,将它们固定在绘制层上,再将这些顶点依次连接起来。观测区的设置与警戒区相同,此处不再赘述。
④AIS船舶图层的绘制
AIS图层按照坐标信息将船舶显示到绘制层上,根据船舶的坐标和实际航向进行贴图,将船舶的形状绘制在坐标上。该图层上的AIS船舶信息会根据数据库的刷新进行实时更新。
用户浏览GIS表示层时,可以使用GIS地图的所有功能,包括对地图的放大、缩小、平移,对一些关键位置的标记、测距,通过坐标定位等功能,还能单击目标船舶查看船舶具体信息,绘制船舶历史航迹,这使得表示层功能更加强大。
(2)警戒区内船舶判断算法
船舶警戒区为闭合区域,将其抽象为具有N个顶点(Xi,Yi)(i=0…N-1)的多边形。
设一船舶所在点为(Xp,Yp),向右作一条平行于X轴的射线,通过该射线与该多边形的交点数量(记作C)判断(Xp,Yp)是否在闭合区域内。判断方法如下:
若(Xp,Yp)在多边形的边线或顶点上,则船舶在警戒区域;若不在,定义C%2为交点数量C对2取余数,进而利用余数的奇偶性进行判断:
如图6所示,第一条射线与多边形交点为2,点在警戒区外;第二条射线与多边形交点为4,点在警戒区外;第三条射线与多边形交点为3,点在警戒区内。
图6 船舶位置模拟图
(1)PostGIS地理信息数据库
PostGIS是一种支持分布式网络访问的对象-关系型开源空间信息数据库。本系统选用PostGIS地理信息数据库来存储电子海图地理数据信息和警戒区空间数据信息。
由于系统采用多客户端设计,客户端只能通过网络交互的方法对服务器端进行数据访问,无法对服务器端本地文件进行访问。普通地图文件以shape格式进行本地存储,客户端无法对其进行有效读取。选用PostGIS地理信息数据库可以有效解决这一问题,对电子海图地理数据信息进行存储,使得服务器和客户端都能够访问当前的地理信息数据,进行信息读取。
系统设置两级权限,分别为普通员工和管理员。只有管理员拥有权限对电子海图数据信息和警戒区位置、大小信息进行修改。
(2)基于分布式数据库(MySQL)的数据发布订阅机制
本系统所有的船舶数据经解码后将统一存放到在服务器端的MySQL数据库的数据表中。服务器端数据处理流程如图7所示,功能包括船舶数据更新和船舶冗余数据删除。
①船舶数据更新
为优化系统设计,减轻数据表的访问负担,数据库中采用数据表与日志表相结合的方式来处理数据。数据库船舶数据周期性进行刷新,每5秒刷新一次,刷新完成后,数据库将刷新时的时间信息存入日志表中,客户端不断访问日志表。日志表更新后,客户端访问数据表,将船舶数据和PostGIS中的地理数据衔接客户端,在电子海图上显示出各个船舶当前的位置并将其符号化。
②船舶冗余数据删除
船舶数据必须具有一定的时效性,在线程中,系统会启动定时器,定时遍历船舶信息,将获取到的船舶信息的时间与服务器时间进行对比,删除数据库中不具有时效性的船舶进行船舶历史航迹绘制。
系统客户端进行历史航迹绘制时,会从MySQL数据库中调用船舶历史信息,在电子海图上进行模拟航迹显示[5-6]。
图7 数据流处理流程图
系统通过测试软件进行数据源模拟实验。从现场采集到的AIS报文数据中提取样本,将其作为数据源进行压力测试。设置模拟数据源船舶数量、警戒区同时报警船舶数量样本均为系统指标的1.5倍,计算解析出的船舶数量与样本数量的比值,判断其是否达到系统指标。
经过多次测试,实验结果如表4所示,各项数据均达到系统技术指标要求。
表4 实验结果
运用上述思路设计的海上风电场船舶监控系统软件,成功弥补了海上风电场周边海域自动监控领域的行业空白。将模块化设计和多线程技术运用于该软件设计,不但提高了系统的扩展性,而且提高了系统的执行效率。该软件已成功应用于江苏龙源蒋家沙海上风电项目,能够很好地满足监控要求。