基于Python的科考数据的实时采集与存储

2024-03-16 04:46钟金波李湘湘
中国修船 2024年1期
关键词:数据格式数据源语句

钟金波,李湘湘

(中国科学院深海科学与工程研究所,海南 三亚 572000)

海洋科学调查工作近几年有了突飞猛进的发展,由于海洋环境的复杂性和多变性,对于后续样品的分析,必须附带有GPS、风速风向、温盐深(CTD)等数据作为支撑。对于科学家来说,人为记录数据存在以下问题,一是不具备连续性;二是海洋科考工作强度较大,没有精力去实现人为记录;三是采集这些数据的传感器分布在全船各处,对于在甲板或者在实验室采集数据的科学家来说不方便手动记录。基于此,迫切需要能在实验室或者甲板工作区有实现实时采集相关数据的接口,而且能实现数据的实时保存。现在大多数的科考船都配置了信息采集系统,在物理架构上,可以实现数据的采集。从实船实验室的采集和使用设备来看,具有设备多样性、接口的需求多样性、数据格式的多样性、文献[1]和文献[2]强调了数据的采集和存储实现的可行性,侧重整个数据包的采集和存储,没有有效手段对数据包进行针对性的处理,以满足不同设备对数据格式的不同需求。基于这种需求,“探索一号”船作为国内科考船改造的成功典范,自然将该项工作提到了日程,在已有的硬件架构上,通过软件的开发,基于Python编程语言的可扩充性、免费、开源、可移植性、可扩展性、可嵌入性等优点,可以有针对性地满足不同设备对不同数据的特殊性需求。

1 系统设计

1.1 系统总体硬件框架

本系统硬件主要包括4个部分。

1)数据源设备层。主要包括分布在驾驶台的导航设备和科学调查设备。这些设备能够提供各种数据源,其中导航数据来自GPS、罗经、计程仪、测深仪、风速风向仪等,科学调查设备数据包括CTD、多波束等,通过双绞线以RS422 或者RS232的串口通讯的数据格式接入采集设备。

2)数据的采集单元。该设备布置在驾驶台,由信号转换单元和串口服务器2部分组成。信号转换单元主要是将双绞线的串口数据转换成网线输出的串口数据,串口服务器选用的是MOXA 的NPort 563016,其功能是将以双绞线接入该串口服务器的COM1、COM2……多个串口的数据,通过该串口服务器转换成对应的网络端口4001、4002……,该串口服务器可以同时将所需的16 种数据传送给串口服务器,而且还可以选用32 口的串口服务器,对于后续的数据扩展提供了比较方便的路径。

3)数据的转发单元。该设备布置在数据处理中心,由2 部分组成,包括串口服务器、客户端。串口服务器选用的是MOXA Nport6650-32 服务器,其作用是端口的控制,该服务器选用的是32 端口的服务器,通过参考NPort_6600_Series_QIG_v6 资料,可以配置不同端口的数据传输形式,既可以选择RealCom 的数据传输模式,也可以选择TCP Server 的传输模式,基于该功能,可以在各实验室获取所需要的数据格式。客户端的作用就是通过安装的TJ-IDAS 软件配置上述服务器的32 个不同端口的数据源,实现数据的采集、转发。

4)数据接收单元。从串口服务器分别布置2条网线到各实验室和其他处所,通过分布在各实验室各区域的网络接口,科学家可以随时采集和存储所需要的数据。

系统硬件框架图如图1所示。

图1 系统硬件框架图

1.2 系统软件实现

1)通过串口实现数据转发。由于科学考察需求的不同,经常会有专业设备软件(ADCP、人工地震作业、Global map 等)需要临时接入GPS、罗经、CTD 等的数据,所以该系统经过2 次重要的升级,第一次是在控制终端实现数据的采集和存储,在控制终端通过TJ-IDAS程序配置不同的端口。

串口转发程序配置界面图如图2 所示,图2中,串口号即实验室实际的物理端口号,串口类型选择发送,在串口数据源端口中,选择所需要分发的数据源,例如GPS、CTD 等,然后在串口参数中配置波特率、数据位、停止位和校验位等相应的参数,在对应的实验室接口就可以获取实时的串口数据。该软件方案提供了2种工作模式:采集模式和采集并存储模式。在采集模式下可以实现数据的采集和停止,而且可以实时查看所有源端口的数据格式和报文。在作业工况下提供采集并存储模式,可以实现所有数据边采集边存储,也可以实现对某一所需通道数据的采集和存储,可以更高效地利用数据和存储空间。

图2 串口转发程序配置界面图

该次升级的软件版本问题在于数据种类的增加,串口采集服务器可以随时增加不同的数据类型,由于从服务器去各个实验室采用串口传输,一个串口端口只能同时传输一种数据,想要在某一区域同时接收多种数据,就需要同时布置多条串口传输网线,在实现上存在很大的困难,是软件需要再次升级的主要原因。

2)Python 程序的实现。串口通信在一条物理链路上只能同时传输一种数据形式。由于对多种类型多路数据的需求增加,迫切需要能在一条物理链路上同时传输多种数据形式,而通过网络通信就可以实现该功能。基于该目标需要第二次软件升级,通过使用Python语言开发了小程序来实现同时获取多种数据形式。MOXA Nport6650-32服务器可以配置其输出端口的通讯形式,在物理链路上实现网络数据的通信,只需要在MOXA Nport6650-32服务器的配置界面上将实验室的某一端口对应的输出端口配置成TCP Server 模式,就可以在实验室访问该串口服务器。

(1)导入库。用import语句,导入所需要使用的第三方库文件,包括网口数据的采集socket库[3-4]、文件读写与保存的CSV 库、datetime 和time库。socket 是计算机之间进行通信的一种约定或一种方式。通过socket约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。datetime 库是Python常用的一个库,主要用于时间解析和计算。csv 在Python 语言中主要用于文件的读取与存储。

①import socket

②import datetime

③import csv

④import time

(2)文件的获取。通过mysock.connect()命令,可以指定需要访问的网络IP 和端口号,用mysock.recv()命令可以获取端口的数据内容,并将该端口获取的内容赋值到a,由于端口获取的数据内容杂乱,可以利用′ ′将所有的数据按换行符来切割成不同的行赋值给a。

⑤mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

⑥mysock.connect((′192.168.1.254′,4001))

⑦out_message=[]

⑧out_gga=[]

⑨while True:

⑩a=mysock.recv(512)

⑪if len(a)<1:

⑫break

⑬a=a.decode("utf-8")

⑭a=a.split() #把a的数据按′ ′切割

(3)数据的选择与截取。为了获取所需要的数据内容,可以通过判断语句“if ′GGA/HDT′in text_split”,并将指定的数据增加到out_gga,然后每读取一条内容,就在后面增加读取该内容的时间。

⑮for text_split in a:

⑯if "GGA" in text_split: # 切割出来一条,判断一条

⑰out_gga.append(text_split)

⑱now_time= datetime.datetime.now().strftime(′%Y-%m-%d%H:%M:%S′)

⑲out_gga.append(now_time)

(4)数据的保存。用withopen()命令,来建立csv 文件,再通过csv.writer ()命令将获取的内容保存在新建立的csv文件里。

⑳with open(′gps_out.csv′,′a′,newline=′′)as f:

㉑writer=csv.writer(f)

㉒writer.writerow(out_gga)

㉓f.close()

㉔print(out_gga)

㉕out_gga=[]

㉖out_message=[]

㉗time.sleep(2)

通过该Python 程序,能够获取指定的数据内容,对于不同的网络端口,只需要更改⑥中的IP地址和网络端口号,就可以获取其他数据内容,比如4002 对应的罗经数据,4003 对应的计程仪数据等。同样,如果需要截取端口内的部分内容,也可以通过⑯的判断语句来截取。

3)程序的封装。 通过PyCharm 软件自带的PyInstaller 库的功能[5],将该程序封装成exe 执行程序,可以安装到不同的电脑上,很方便地实现不同实验室不同数据的实时采集和存储功能。

2 试验测试与结果分析

为了验证该系统的稳定性,“探索一号”科考船的TS21 航次中,在地球物理实验室实时采集和存储GPS 数据,得到比较理想的结果。在该测试中,选用GPS数据作为测试目标,由于GPS发过来的数据包有很多不同类型的数据格式,包括GGA、GLL、RMC 等[6],其大部分数据都具有重复性。所以在该测试中,只读取以S GGA 开头的语句作为存储GPS的坐标,为实现该目的可以利用在Python编程语句中⑯的判断语句“if ′GGA′in text_split”等来实现。也就是说,从socket读取的数据a不是全部采集保存,只有以GGA 开头的语句才保存在输出的文档里。数据样本保存结果如图3所示,通过对比图3,处理后的语句实际已包含经纬度、时间、航速等重要的数据,已删减无用或者重复的数据。只读取该语句的数据,不仅满足科学家对于GPS数据利用的需求,也可以大大节省存储空间。

图3 数据样本保存结果

在“探索一号”科考船上,已经写好了目前所使用的7种数据的语言包,并封装成不同的小软件。在实际使用中,只需要插上网线,将本地电脑设置成192.168.1.**网段的IP,直接打开对应的小软件,就可以获取所需要的数据,并保存在本地电脑里。

3 结束语

综合多航次的实际使用情况,该设计的软硬件的使用在实践上已经获得了科学家的认可,为他们保存了大量的科学考察数据。随着中国科考事业的发展和科考工作的完善,数据的采集和存储将得到更大程度地利用和重视,这种基于Python或者其他语言的数据实时采集与存储系统的便利性和可复制性将得到更广泛的运用。

猜你喜欢
数据格式数据源语句
重点:语句衔接
在智能交通系统中PLC数据格式转换方法的研究
Web 大数据系统数据源选择*
基于不同网络数据源的期刊评价研究
基于真值发现的冲突数据源质量评价算法
论子函数在C语言数据格式输出中的应用
DWG与SHP数据格式互转换方法研究——以龙岩规划测绘数据为例
如何搞定语句衔接题
分布式异构数据源标准化查询设计与实现
基于ArcGIS的规划数据格式转换研究