一种海洋浮标岸站的软件设计与实现

2021-12-04 19:30田炳丽胡坤刘志豪
机电信息 2021年27期

田炳丽 胡坤 刘志豪

摘要:岸站是海洋浮标系统的重要组成部分。基于此,对岸站总体设计进行了描述,介绍了接口设计,并针对各部分程序的运行流程,创新性地提出了利用JSON进行文件的配置和存储,JSON易于人阅读和编写,同时也易于机器解析和生成,且能有效提升网络传输效率。该软件应用到实际的海洋浮标中,获得了较好的效果。

关键词:海洋浮标;岸站;Ubuntu

0 引言

海洋浮标是观测大气和海洋参数最重要的平台之一,其中观测的气象传感器有风速风向传感器、气温传感器、气压传感器、相对湿度传感器、长波辐射传感器、短波辐射传感器等;观测的水下传感器有海水温度传感器、盐度传感器、深度传感器等。浮标数据采集控制器按照一定的观测要求采集数据后,每3 h通过铱星模块把数据从浮标端发送到岸站端,岸站有自动运行的软件接收、处理浮标数据。本文设計了一种海洋浮标岸站的软件,并且基于Ubuntu18.04×64位系统上的gcc version 7.4.0编译器编译生成在此系统下的可执行文件[1-2]。

1 软件总体设计

1.1    软件设计需求

(1)实时接收浮标返回的数据;(2)以相应格式存储采集到的数据;(3)相应时间内存储的数据通过FTP推送给客户。

1.2    软件结构

系统软件结构图如图1所示,软件包含配置解析、数据获取、数据存储、数据推送等部分,各部分负责不同的任务。

1.3    系统运行流程

程序总的运行流程图如图2所示,系统开机读取配置,得到通信的铱星号码,创建串口的监听线程,每3 h从岸站端给浮标端拨号,拨号成功后,在监听到串口收到数据时,将数据保存。当接收完一包数据时,首先按照相应的格式存储数据,其次调用事先保存到程序执行目录的FTP脚本文件将数据保存目录文件夹进行FTP上传,推送给客户。

2 接口设计

岸站系统的通信接口有串口、网口。图3列出了系统的全部接口,装有Ubuntu系统的PC机通过多串口拓展器与铱星模块相连,通过网线连接至互联网。浮标数据通过铱星模块的串口输入至岸站程序,岸站程序在采集保存后进行FTP推送。

其中,多串口拓展器(图4)具备防浪涌设计,RS232和USB端口都增加了防浪涌保护,避免因地线回路电桩、浪涌、感应雷击、静电、频繁插拔烧损接回等环境因素对设备的损毁,从而提高系统抗干扰特性(设备运营稳定性)。由于浮标与岸站的传输是跨海长距离通信,此串口转换器内部带有零延时自动收发功能,抗干扰,有利于较长距离的数据通信。

3 各部分程序运行流程

3.1    配置解析程序

配置文件采用JSON格式编写,JSON是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,且能有效提升网络传输效率。

本程序采用C语言编写,在解析配置文件时,采用了C语言的标准JSON库进行解析,主要从JSON格式的配置文件中解析出浮标位置、任务计划名称和通信铱星号码等,如图5所示。在程序执行时,首先读取JSON配置文件,然后将JSON文件解析保存到定义的全局结构体变量中,作为之后函数调用的入口参数。

3.2    数据获取程序

数据获取主要是创建了一个串口的监听线程实现程序的并发性。多线程和进程相比,是一种非常“节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,是一种“昂贵”的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所占用的空间远远小于启动一个进程所占用的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。对不同进程来说,它们具有独立的数据空间,数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。

数据获取线程流程图如图6所示。在线程创建后便开始执行线程,首先设置了Select多路复用串口的超时值,此处串口采用Select方式使用,保证其具有阻塞性的同时也具备了超时判断。每60 s为一次读取的周期。之后清空系统内部的串口数据缓存区,保证下次接收的数据是干净的。此时若有数据到来,则会判断此数据为何种数据。铱星通信具有不稳定性,时常因为信号不良而出现中断,如果出现中断情况,串口会收到“NO CARRRIER”数据,程序将此作为挂断信息判断,如若挂断,则重新拨号。其次,浮标端规定了浮标数据的帧格式,串口收到的数据判断出符合浮标数据的帧头时,则会保存到本地,之后通过FTP上传。

3.3    数据存储程序

系统程序的主线程一直在读取系统时间,并将时间保存在Linux下一个时间相关的结构体中,此程序中创建了一个结构体的全局变量。由于浮标采用UTC时间,Ubuntu系统默认也是用UTC时间。在串口监听线程中的数据存储环节,根据当前时间对接收到的数据进行命名保存,并且存储为JSON格式。命名如:BLBuoy_RAMA2001_20190520_

02_34_MET.json。数据存储流程如图7所示。

3.4    数据推送程序

Ubuntu系统中,vsftpd可以说是很安全的一个ftp文件系统,通过输入命令(vsftpd: sudo apt-get install vsftpd-y)在线安装。安装完成后,通过命令开启(sudo systemctl start vsftpd.service)服务。在程序执行前,vsftpd的相关配置就已经配置完成,用户的uftp地址输入到vsftpd.user_list文件中;“/home/ftp”作为推送的文件夹目录。在岸站程序根目录下创建一个名为ftp.sh的脚本文件,在程序中调用这个脚本即可上传保存到本地的浮标数据文件至服务器。

Shell脚本模板如图8所示。在脚本中配置好服务器的IP和用户密码后,其会将浮标存储的文件夹内所有文件上传。

4 结语

该软件由C语言进行程序的编写,其中调用了基于Shell脚本语言的脚本文件。基于Ubuntu18.04×64位系统上的gcc version 7.4.0编译器编译生成在此系统下的可执行文件。岸站程序功能主要包含了定时进行对浮标端数据的获取、存储、FTP推送,岸站系统能实现自主运行。岸站系统搭载了工业级串口拓展模块,由其连接铱星通信所需的模块。浮标通过铱星与地面岸站建立实时的通信,岸站系统能够接收浮标实时返回的数据,存储并且通过FTP推送给客户。

[参考文献]

[1] 许欣欣.海洋监测技术发展现状研究及应用[J].中国战略新兴产业,2018(24):180.

[2] 郑苗壮,刘岩,李明杰,等.我国海洋资源开发利用现状及趋势[J].海洋开发与管理,2013,30(12):13-16.

收稿日期:2021-01-28

作者简介:田炳丽(1976—),女,山东高密人,硕士,讲师,主要从事自动化控制、数字信号处理方面的研究工作。