谌华金,喻敏敏,马洪波,高军保,钱汉明
(中船海洋探测技术研究院有限公司 研发中心,江苏 无锡 214000)
海洋面积辽阔,资源丰富[1],对人类的发展具有举足轻重的作用。海洋科学技术的研究对环境保护、灾害预警、生态循环、资源开发和可持续发展至关重要。但由于海洋的水下环境与陆地迥异,科学勘探、监测保护和可持续利用开发难度大,人类目前对海洋的认识和探测手段也极其有限。加快开发和利用海洋资源,促进自身发展已成为世界各国的战略目标[2]。
海底观测网络由于具备对海底、水体等复杂水下环境的连续、实时、原位观测能力,并能实现跨学科、多要素综合观测,成为了海洋科学技术研究的热点和重要技术手段。世界各国争先建立起众多海底观测网络[3-6],广泛应用于军用、民用领域。
接驳盒是海底观测网络的重要节点和核心装备[7],包括主接驳盒、次接驳盒、湿插拔、水下电源模块、海底光电复合缆等。其中,主接驳盒实现对岸站高压电源的高低转换,为次接驳盒、传感器提供通信和电力接口,次接驳盒也可以外接传感器采集各类数据。系统依靠设备内部的嵌入式软件监测、采集水下设备的实时数据和状态信息,上传接驳盒上位机软件供用户研究分析,并接收接驳盒上位机软件指令对水下设备进行控制调优,以保证软硬件系统能够长期稳定运行。
海底观测网接驳盒上位机软件主要包括后台服务软件和前端界面软件两部分。借鉴文献[8-10]的设计实现方法,提出本项目接驳盒上位机软件总体架构,如图1所示。后台服务软件(以下简称服务软件)部署于Linux服务器(操作系统为CentOS release 7.7,64位),主要用于监测和控制岸基站高压电源,岸站服务器,水下主、次接驳盒,接驳盒外接传感器以及岸站和水下通信设备。通过对这些设备运行参数和环境变量参数的采集、解析、存储管理,进而让用户方便地查看实时数据或对历史数据进行调阅和统计分析,掌握诸多设备的运行情况、设备运行所处环境的情况,并可对设备故障及时上报、告警,供前端界面软件展示输出或者以手机短信、邮件、微信等方式推送给运维人员,以便运维人员及时处置。
图1 软件总体架构
服务软件与岸基站高压电源以TCP Socket方式通信,依据厂家自定义的通信协议实现对输出电压(含电源电压和相电压)、输出电流、机柜和水冷板温湿度等运行状态数据和故障告警信息的实时采集监控,同步输出到前端界面软件,并批量加载到后台数据库供后期排查故障、生成统计报表和分析历史数据。同时服务软件还可以对岸基站高压电源进行控制,实现遥控开关电源、切换操作模式、操控水冷机、复位故障等功能。
服务软件与主、次接驳盒以TCP Socket方式通信,采用类MODBUS或各传感器厂家自定义的通信协议进行报文交互。对主、次接驳盒电子舱内温湿度、气压、漏水检测、绝缘电阻、各接口通断信息、各接口输出电压电流、舱体姿态信息以及电源舱内输入输出电压电流、油压、温湿度、漏水检测、故障告警信息等参数进行实时采集监测,也可以依据外接传感器的通信协议采集相应专业化数据(如海水的温度、盐度、密度、pH值、溶解氧浓度、水声、振动等),并同步输出到前端界面软件,批量加载到后台数据库。服务软件还可对主、次接驳盒执行各接口通断使能、唤醒与休眠、报警阈值调整、数据采集频率调整等控制指令。
服务软件与通信设备测试仪器以TCP Socket方式通信,用于路由器、交换机、光纤等通信设备性能监测测试。这类测试依赖于相应设备的专用协议或者厂家自定义的协议,过程复杂,得到的数据种类繁多、数据量也较大。
服务软件与前端界面软件采用B/S架构实现,以WebSocket方式通信,依据自定义的通信协议对设备状态信息、控制指令、故障告警信息进行数据交换。
(1)状态信息:如岸基站高压电源运行状态数据,主、次接驳盒以及外接传感器的实时状态数据,通信设备状态信息,岸站各服务器运行状态信息(CPU、内存利用率,磁盘剩余空间,磁盘读写速度及网卡发送/接收速率等)。
(2)控制指令:如岸基站高压电源控制指令,主、次接驳盒以及外接传感器的控制指令。
(3)故障告警信息:如岸基站高压电源故障告警信息,主、次接驳盒以及外接传感器故障告警信息,通信设备故障告警信息以及岸基站服务器故障告警信息。
考虑到项目成本、数据规模、存储周期以及系统复杂度,现阶段采用单台数据库服务器(MySQL 5.7,Linux版)。服务软件设计有线程类,用于保存实时采集的数据或者控制命令执行情况,采用批量加载技术以减少对数据库的频繁写操作并提高稳定性。先将前期预处理后的数据缓存到内存,当缓存数据达到一定量级后,一次性加载到数据库。
前端界面软件在登录、注销、对数据库进行增删改操作、查询历史数据时,都要通过服务软件才能访问数据库,从而实现相应功能。并且由于涉及光纤实时数据查询、其他历史数据查询事件等,数据量较大,因此服务软件与前端界面软件客户端中的每一个WebSocket连接采用不同的数据库连接对数据库进行操作,确保各客户端高效同步运行,互不干扰。
为提高服务软件资源利用率和数据加载到数据库的速率以及前端界面软件的登录、注销、数据查询响应速度,服务软件采用多线程技术设计实现,主要包括以下子线程。
(1)主、次接驳盒通信子线程:本项目主、次接驳盒与服务软件建立的TCP连接仅有6个,并且每个TCP连接每秒传输的数据量最大不超过1 200 B,一般情况下每秒不超过400 B。为此设计1个子线程统一处理主、次各接驳盒的通信交互,实现数据的上传下达。
(2)主、次接驳盒外接传感器子线程:主、次接驳盒外接传感器主要通过串口(连接串口服务器可实现网口通信)、网口、光纤等与服务软件建立TCP连接,针对传感器数据量较大、实时响应要求高的特点,为每个TCP连接建立1个子线程实现通信交互。
(3)通信设备子线程:这类通信处理的数据种类繁多、数据量较大,加之前端界面软件对实时响应要求较高,为此专门设计子线程进行处理。
(4)前端界面软件通信子线程:考虑到前端界面软件可能从服务软件获取大量数据,且用户对前端界面实时响应速度要求较高,因此专为每个WebSocket连接建立了子线程,确保各前端界面软件高效同步运行,互不干扰。
(5)数据库访问子线程:该线程主要是为了提高数据库访问速度,避免受其他线程影响而设计的,特别是批量加载数据耗时较长,因此独立设计该线程。
为实时监测光纤的状态参数,项目组采用某公司出品的光时域反射仪,该仪器自动化程度高,具有高速信号处理、测量时间短、结果分析快等优点,并且采用无硬盘设计,防振、防潮,适合复杂、野外环境操作。其自带的RJ 45网口可实现与服务器、工控机及PC机的通信,实现光纤状态的实时测试与维护。服务软件获取光纤测试数据流程如下:
(1)手动修改光时域反射仪IP地址,使服务软件所在的工控机实现网络通信,该步骤仅限服务软件首次获取光纤测试数据时才会用到。
(2)手动修改光时域反射仪测量时间(默认值较长,可以修改)等参数,该步骤仅限服务软件首次获取光纤测试数据时才会用到。
(3)服务软件作为TCP连接客户端与光时域反射仪。
(4)服务软件发送通信握手命令,打开仪器的网口通信功能。
(5)服务软件发送读取光时域反射仪IP地址、网关、子网掩码等基本配置信息的命令。
(6)服务软件发送测量请求命令。
(7)服务软件依据接收的测量请求应答报文作不同处理,如果光时域反射仪正在测量中,则服务软件等待5 s,然后转步骤(6),继续发送测量请求命令;如果光时域反射仪处于空闲等待状态,则进入步骤(8),发送自动测量请求命令。
(8)服务软件发送自动测量请求命令。(9)服务软件发送读取数据请求命令。
(10)服务软件依据接收到的读取数据请求应答报文作不同处理,如果光时域反射仪正在测量中,不能读取数据,则服务软件等待10 s,然后转步骤(9),继续发送读取数据请求命令;如果光时域反射仪测量结束,则转步骤(11),直接读取测量结果;如果光时域反射仪反馈的应答报文为其他形式,则说明测量结果有问题或者测量异常被终止,测量无效,服务软件主动断开TCP连接,等待10 s后转步骤(3),重新与光时域反射仪建立TCP连接。
(11)服务软件发送读取光纤长度测量结果命令,获得光纤长度数据。
(12)服务软件发送读取光纤功率曲线数据命令,由服务软件发送命令获得光纤功率曲线数据的总数据包数和数据的总个数,然后按照数据包号从小到大依次发送读取光纤功率曲线数据命令,读取每个数据包的功率曲线数据。光时域反射仪反馈的最后一个数据包可能会有多余无效数据,最后根据获得的功率曲线数据和数据的总个数,剔除最后一个数据包中的无效数据。
(13)服务软件发送读取事件参数命令,首先由服务软件发送命令获得事件数据包总数和事件的总个数,然后按照事件数据包号从小到大依次发送读取事件数据命令,读取每个数据包的事件数据。
(14)测量结束,服务软件主动断开与光时域反射仪的TCP连接,并通过WebSocket主动将获得的光纤长度数据、光纤功率曲线数据、光纤事件参数等传给前端界面软件,供其绘制二维图形、电子表格,并进行界面展示。
考虑项目在实际应用中,对主、次接驳盒上传数据的可靠性和连续性要求高,特别是故障告警信息和控制命令,而TCP自带的心跳包机制无法及时检测到网线拔出、机器断电、操作系统故障、防火墙断线等突发情况。项目中设计实现了自定义心跳包机制,由服务软件每2 s定时向主、次接驳盒发送心跳包短报文,以便主、次接驳盒及时掌握实时通信状态,确保TCP连接的有效性,降低数据丢失概率。
参考文献[11-12]的方法,服务软件与主、次接驳盒通信采用自定义、类MODBUS协议设计,格式如图2所示。
图2 通信协议格式
通信协议帧头为2 B,接驳盒地址为1 B,每个主、次接驳盒(指电子舱、电源舱)有唯一的地址,通道编号为1 B,指数据上传所用通道。数据帧类型为1 B,主要分为数据帧、控制命令帧、心跳信号帧、控制命令反馈帧等类别。数据帧长度为1 B,表示数据帧内容字节长度,数据帧内容为具体数据。CRC校验码为2 B,采用CRC-16算法进行检错校验。
服务软件与前端界面软件涉及大量的网络报文交换,如前端界面软件查询主、次接驳盒实时数据,查询主、次接驳盒外接传感器数据,下发控制命令,服务软件主动上报系统故障信息、反馈控制命令执行结果等,本项目采用自定义的、特定格式的JSON字符串实现。
项目中用到的数据库表主要有用户表,权限表,设备信息表,故障类型表,主、次接驳盒数据表,主、次接驳盒外接传感器数据表,故障告警表等,主要库表结构见表1所列。
表1 数据库表结构
为验证所设计的服务软件的连续运行稳定性、可靠性,项目组进行了软硬件联调实验。将服务软件部署于岸上控制机柜中的工控机中,前端界面软件分别部署于岸上控制机柜中的工控机、岸上普通台式办公电脑、岸上便携式笔记本电脑3个终端中,前端界面软件部署采用的电脑操作系统均为Windows 7企业版。
主、次接驳盒及外界传感器在陆上经过几个月的连续测试运行,在水池中进行了为期1个月的测试运行,顺利通过了天津国家海洋技术中心组织的现场测试,系统综合测评结果在国内处于领先。在这些软硬件联调实验过程中,服务软件、前端界面软件各子模块均能正常、稳定运行,各类数据无丢失,采集的数据、故障告警信息可及时上报输出。实验结果表明:所设计的服务软件完全可以在实验室环境下进行长期且连续的实时在线监测控制及故障告警。
文中设计了一种基于物联网技术的海底观测网服务软件,详细阐述了系统软件的总体架构、通信协议和数据库表结构及多线程实现等关键技术。经过陆上和水池的软硬件联调实验,验证了服务软件能够实现对各类设备的数据采集、处理、存储管理以及前端界面软件展示输出。实验室环境的长期运行检验了服务软件的稳定性、可靠性和实用性。
但需要指出的是,该软件目前是在实验室环境下部署测试的,没有在高压舱等模拟深海环境下以及真实海上水下环境进行长期、连续的软硬件联调实验,因此其稳定性、可靠性有待进一步深入研究。并且目前的前端界面软件并发用户数较少,接驳盒以及外接传感器中的底层嵌入式软件上传的数据量也较小,服务软件负载压力不大。随着数据量和并发用户数的增加,服务软件必须结合消息中间件、负载均衡技术,利用集群技术或者分布式系统方案才能解决大数据处理问题。同时,目前的数据库是单库,数据可靠性和冗余备份存在问题,扩展性和性能上也存在瓶颈,随着业务数据和联机事务的增加,性能将有所下降。下一步将运用集群数据库提高系统性能,另外还会对重要数据做加密处理,确保数据安全可靠。