马 瑞,胡克勇,沈飞飞,王旭泽,王 娇
(1.青岛理工大学 信息与控制工程学院,山东 青岛 266520;2.国家海洋标准计量中心,天津 300112)
随着传感器以及网络技术的发展,各种类型的监测节点被广泛应用于水文、气象、生物、化学等不同的监测领域,分布在不同区域的监测节点构成了水下传感器网络的硬件环境[1-3]。一个监测节点通常搭载多种类型的仪器,这些仪器通过携带的传感器采样不同的变量并转换成数字信号[4-5]。通过对实时以及历史采样数据进行采集、传输、集成以及分析,可以为气候变化、水下运输等领域提供信息支持以及决策依据,而这些全都依靠水下监测系统来完成。
近年来,不同的水下组织针对水下监测系统开发开展了一系列工作[6-9],并形成了针对不同应用的软件资源和开发工具。这些应用程序大都是专用并且高度集成的,不提供应用程序编程接口,很难进行复用;而传统的开发方法需要开发人员熟悉各种编程语言、异构的传感器协议以及不同的实现算法,复杂的编程和反复的测试延长了开发周期[10-11];另外,由于缺乏统一的水下监测数据模型,难以将不同的水下传感器网络互连,形成统一的水下监测网。针对上述问题,提出了面向水下监测系统的设计规范,以监测数据模型为基础,对系统不同层次中的公用模块进行抽取,形成组件库;通过从组件库选取合适的组件,根据需求对组件进行配置,快速地生成监测系统。
系统硬件结构如图1所示,可分为观测平台、本地观测服务器、数据中转服务器以及数据中心服务器。
观测平台部署在试验场海区内,可以为观测浮标、水下试验平台、海床基及其他类型的平台,不同类型观测平台部署海域及深度各不相同,浮标一般部署在海面上,进行数据传输时可使用多种传输方式,包括无线、有线电缆等,海床基及水下试验平台一般部署在海底,通过海底光缆向服务器传输数据。
本地观测服务器可以位于试验场海区相关海洋站内,通过各种不同方式连接观测设备,实时将数据保存至本地磁盘。服务器上部署有数据上传程序,动态监视磁盘上数据文件目录,能够实时解析产生数据文件。本地测试服务器另一个作用是,当数据中心服务器上的数据发生错误时,可以通过查看本地测试服务器上的数据进行恢复。
数据中心服务器分为两部分:一部分负责数据存储,另一部分负责应用服务。数据存储分为数据库与FTP文件服务器,数据库服务器上运行数据库管理系统,按照数据库逻辑结构对观测数据与元数据进行管理;FTP服务器上运行FTP服务程序,按照本地服务器上数据文件目录进行数据文件管理,提供数据文件上传与下载接口。应用服务器上部署Web应用程序,提供基于观测数据的各种应用服务。
用户终端是用户用来访问位于应用服务器上的应用程序的终端设备,可以为普通PC、个人PC,用户在计算机上可以通过浏览器进行相关程序功能的访问,只需知道应用程序网站的网址,即可进行注册、登录、注销、查看等操作。
按照对数据的处理方式,总体软件模型可划分为数据获取、数据管理与数据展示子系统,如图2所示。
图2 软件总体开发流程
数据获取子系统负责数据文件查找、数据文件解析、数据文件存储管理与解析数据上传,各观测平台的采集数据通过各种通信方式到达本地服务器,并以数据文件形式存储于本地磁盘上相应数据文件目录;数据上传程序动态监视数据文件目录,当有新文件产生时,数据上传程序定位至特定文件,按照预先定义的文件格式对文件进行解析,获取文件内观测时间信息、观测设备信息及实际观测数据;在获取观测数据后,数据上传程序通过数据上传接口将解析数据按照接口协议的数据格式进行数据传输,数据到达数据中心数据库服务器存入数据库,同时,将相应数据文件通过FTP服务接口上传至FTP服务器上。
数据管理子系统负责观测数据管理及观测数据文件的管理。观测数据管理采用关系型数据库方式,通过建立系统信息表、观测要素表、观测平台表、观测仪器表、观测站位表来存储观测相关的元数据,通过建立仪器状态表、观测数据表存储仪器状态数据与实际观测数据,并在相关表中建立主键与外键,实现对多表联合查询支持;观测数据文件采用FTP服务器进行管理,对FTP用户进行权限控制,限制数据文件的上传与下载,对数据文件的管理采用层级目录,数据文件包括所有产生的数据文件,包括格式不匹配以及数据不完整的数据文件。
数据展示子系统运行于数据中心的应用服务器,通过运行环境的搭建及应用程序的部署,向用户终端提供基于B/S方式的数据浏览。数据展示可以向用户提供多样化的数据实时与历史浏览,历史数据可以通过地图导航进入相关平台页面进行查看。数据管理模块负责管理元数据与观测数据信息。系统初始化时,由数据管理模块调用数据库接口获取必要的初始化信息,并将信息分别传给各模块,其他各模块接受初始化信息后,可通过主控程序与其他模块交互。
在监测数据采集与处理过程中,会产生多种类型数据。本节对这些数据进行如下分类:
2.1.1 传感器描述数据
通过对传感器描述信息进行记录,可以了解整个监测节点的结构以及数据的采集过程,对不同类型传感器采集的数据采用不同的分析对比算法。如图3所示,传感器描述以监测节点为单位,对节点、仪器以及传感器进行了层次描述。
图3 传感器描述
2.1.2 监测元数据
监测元数据从时间、空间、内容等方面对监测数据进行描述,主要包括时间范围、监测区域、监测项目、监测参数信息。如图4所示,时间范围描述了各监测节点采集数据的开始时间和结束时间,监测区域信息包括经度、纬度、深度范围及对该地理区域的相关描述,监测项目信息包括项目类型、项目编号以及负责单位信息,监测参数则描述了对特定区域进行监测的一系列水下状态参数。
图4 监测元数据
2.1.3 设备状态数据
通过对状态数据的实时分析,可以及时发现设备异常并进行适当处理。状态数据主要包括监测节点状态,网络设备状态,主机设备状态以及系统运行状态。同时,需要记录由于设备故障等原因进行维护的信息,包括部署时间、位置以及回收的时间、位置;针对软件运行异常,需要记录运行日志,用来追溯软件运行过程以诊断异常原因。
2.1.4 监测数据
根据不同的采样方式,可以将水下监测数据分为时间序列、剖面、时间剖面、轨迹、断面数据等[12]。时间序列数据是在相同的位置区域对水下参数进行持续采样;剖面数据是在固定的时间以及水平位置对水下参数在不同深度上进行采样;轨迹数据是在移动的过程中,在移动路径上选取适当的采样点,对水下参数进行持续采样;时间剖面是在固定的水平位置对水下参数在不同深度上进行持续采样;断面数据是在移动的过程中,在移动路径上选取适当的采样点,对水下参数在不同深度上进行采样。
基于传统的组件开发方法[13-14],本节提出新的组件模型,利用事件通知的方式实现各组件之间的隐式调用,消除了不同组件之间的依赖性;通过对组件进行动态配置,可以实现监测系统对水下监测数据处理需求的自适应。
2.2.1 组件库
通过对水下监测需求进行分析,将整个系统分为数据采集子系统、数据管理子系统以及数据应用子系统,对每个子系统进一步划分,可以抽取出具体功能的组件,形成采集组件库、管理组件库以及应用组件库。
1)采集组件库:水下监测中使用的传感器通常由不同厂家生产,通信协议互不相同,数据采集大多是针对现有监测仪器进行专有开发[15]。针对特定类型仪器,通过对按照仪器通信协议开发的代码进行封装,对外提供统一的接口,形成独立的组件,可以实现采集代码的复用,从而使开发人员不必了解复杂的通信协议。
2)管理组件库:在数据采集之后,通常需要将数据存入数据库,以便为各种应用提供原始数据;在水下监测领域中,经常需要对大范围、多区域采集的数据进行分析,以研究水下现象大尺度、中尺度的变化,不可避免地需要对分布式的数据源进行集成。根据上述需求,管理组件库中主要提供了3种类型的组件:数据组件向外提供统一的数据存取接口,避免在数据存储之前或数据获取之后不必要的数据转换;基于SOS[16]的集成组件提供针对分布式、异构的传感器数据的统一获取方式;基于OpenDAP[17]的集成组件实现对异构文件数据的远程透明访问,无需了解服务器端数据的存储结构。
3)应用组件库:在监测数据与各种元数据的基础上,水下监测系统需要向用户提供应用服务,包括数据查找、数据显示、数据分析、数据下载等。根据用户对各种服务的需求,应用组件库主要包括:地图导航组件利用二维地图方式作为数据浏览的导航界面,可以直观显示监测区域,并利用不同的图标标识各个节点;时间曲线组件处理时间序列的数据,显示水下参数随时间变化的趋势;垂直剖面组件处理剖面数据,显示水下参数随深度变化的趋势;玫瑰图组件:对矢量数据的方向和速度在16个方向上的分布进行统计;参数关联组件显示两个相关参数之间的变化关系;数据列表组件以列表的方式显示各参数的原始测量值;数据下载组件提供以NetCDF[18]、XML或CSV的格式下载监测数据的功能;数据比对组件提供同种类型变量数据的比较,包括各变量最大值、最小值、平均值、标准差的计算。
2.2.2 组件配置机制
为应对系统需求变化,对系统需求进行分析,提取相关参数,在运行时通过组件的接口可以对变化的参数进行动态配置,进而实现对系统需求的自适应;同时,组件的配置参数可以存储在标准的XML文件中并在运行时从文件读取。根据组件库的内容,可以将组件配置可以采集通信配置以及界面显示配置。
1)采集通信配置:当前水下监测设备的通信接口主要包括RS-232、RS-485、Ethernet、GPIB以及USB,需要动态配置这些通信接口参数并在运行时加载。对于Ethernet、GPIB以及USB接口,主要配置设备的通信地址;对于RS-232、RS-485串口通信,需要配置的参数较多,包括串口号、波特率、数据位、停止位、校验位。表1显示了对采用RS-232进行通信的4种仪器的参数配置。
表1 采集通信配置示例
2)界面显示配置:通过对应用组件显示参数的配置,可以满足不同系统用户对数据显示的需求,本节以时间曲线组件为例阐述界面显示配置的步骤。在时间曲线组件中,使用窗口、子窗口、坐标系的概念对界面进行划分,表2显示了时间曲线显示的一种配置方案,在运行时,组件根据配置参数加载子窗口与坐标系,根据坐标系的名称、上限、下限与单位初始化坐标系显示界面。
表2 时间曲线组件配置示例
本文所提出的设计方法已经应用到不同的水下监测系统开发中,涉及近岸监测、深水动力环境立体监测、水下传感器网络以及海上试验场等领域。
OceanSense[19-20]系统通过在海上部署无线传感器网络来监测水下环境的温度与光度,该网络由20个节点组成,其中18个被部署在近岸,节点位置随海水运动不断变化,两个基站位于岸边。节点采集的数据通过无线多跳路由的方式发送给基站,再由岸边的服务器接收,数据解析之后经数据组件存入本地数据库。系统提供了本地客户端以及基于浏览器两种数据访问方式,两种方式都是基于应用组件库进行搭建。
OceanSense由于每个节点采用相同的传感器,可以复用采集组件,海上试验场数据集成系统对每个节点分别开发相应采集组件,有效缩短了开发周期。在系统质量方面,由于在组件开发时已经对其进行多方面测试,而且大部分组件已经应用在不同的系统中,根据在不同系统中发现的问题对组件进行维护,可以保证软件可靠、高效运行。
在海上试验场系统中,海床基和水下试验平台每半年回收一次进行维护,大部分水下变量采样间隔为一小时。另外,监测节点的采样数据可以用于试验仪器的比对测量,对仪器的性能、精确度进行评估,对比结果如图5所示。采样数据通过无线的方式到达本地服务器,采集组件对数据进行解析后通过数据组件将数据存库;应用组件通过数据组件获取数据,并提供数据的分析与展示,系统界面如图6所示。
图5 监测与试验仪器的海流流向比对
图6 监测系统界面
通过与直接编码等4种方式进行比对,表明所提方法的有效性,如图7所示。直接编码方式完全依靠开发人员编写代码实现,效率最低,且代码质量较低,造成维护成本较高;代码修改方式能够在以往代码的基础上开发,但了解与熟悉源代码需要时间,而且在源代码基础上的编程没有解决软件质量差的问题,维护费用依然较高;构件组装方式利用可复用构件组装系统,提前开发的构件已经过多次测试与使用,具有较好的质量,能够降低后期维护费用;本文所提方法在构件复用技术的基础上,利用配置工具定制软件,无需编程,进一步提高了开发效率
图7 开发效率对比
本文提出了面向水下传感器网络的监测系统设计方法,解决了当前系统开发复杂度高、效率低的问题。分析概括了不同类型监测数据,形成了统一的数据模型;通过对系统公共需求分析,形成了一系列可复用的组件,利用组件配置应对需求变化。在以后的工作中,一方面要研究基于数据模型建立通用的水下监测数据,从而减少数据组件的变更;另一方面要不断扩充组件库的内容,逐步实现水下监测系统的零编程开发。