水下航行器通用数据处理软件的实现
2020-12-08时慧晶刘凤伟
时慧晶,刘凤伟,陈 亮
(1.昆明船舶设备试验研究中心,昆明 650051;2.湖南科技大学 信息与电气工程学院,湖南 湘潭 411201)
0 引言
随着水下航行器向智能化、数字化快速发展,对水下航行器试后数据处理策略提出了更高要求,即数据处理软件需高效快速地形成客户自定义数据分组方案,实现各系统关键参数的数据分析,完成航行综合性能和声磁工作性能评估。水下航行器各系统或组件在调试或试验过程中产生的关键参数数据具有容量大、类型丰富等特点,水下航行器通用数据处理软件(以下简称通用数据处理软件)可提供多型数据处理调度接口,实现试验数据对象抽象提取并自定义分组,生成目标数据的统一格式存盘、分析、显示、生成评估报告。数据处理软件作为航行器内部各系统正常工作的主要评判效果的直观来源,要求具备高性能、高可靠性和高冗余性等特点。
通用数据处理软件能够在产品的科研、试制、生产各阶段,对航行器试验数据进行综合分析,以充分评判产品性能,能够在航行故障时进行故障诊断和定位,并给出可能的故障信息。同时,提高多型水下航行器数据处理方法的规范性与标准化程度,增强软件功能模块的通用化水平,提高软件柔性。综上所述,处理软件在水下航行器生命周期各阶段的任务性质和测试重点不同,试验数据类型改变概率较大,传统的针对某单一型产品逐一设计软件功能模块再进行揉合的软件设计方法,具有通用性差,设计周期长,软件需随航行器设计改动升级,维护成本高,数据样本容量小等缺点,显然已无法满足要求。因此,本文从软件设计层面出发,重点解决了3个问题:
1)数据处理软件各功能模块耦合程度低,但通用性要强,硬件约束条件少,提供调度接口,保证系统的通用性。
2)设计系统数据库为软件提供数据支撑;动态生成各系统的数据库综合信息及报表,提高I/O操作速率,减少访问频度。
3)按文件大小实现自适应处理。采用多线程控制技术和内存映射技术, 实现海量数据的处理、可视化。原始数据文件并行存储,确保异常断电或软件崩溃时,数据不丢失。
1 软件需求分析
根据通用数据处理软件试验需求,可将所需完成的项目(功能)分解为:
1)调度接口:根据航行器接口及高层协议要求的数据格式进行设计,实现数据处理接收模块,可用来接收串口通信、CAN通信、以太网通信等多种数据,生成原始文件、特定格式的数据文件及过程记录文件;
2)数据处理:自适应处理1)中生成的数据文件,对于A类文件(文件大小<500 MB)读取到内存,对B类文件(文件大小≥500 MB)采用内存映射技术,实现大数据处理方案;
3)按系统群组处理:根据航行器研制任务要求设计系统分组,例如与能源消耗相关的参数(电压、电流等)即可归入能源与动力系统。该模块主要实现系统分组的直观显示、特征值分析、缩放及打印等操作;
4)按用户自定义分组处理:工程人员根据关注任务的侧重点,例如分析某一时刻可能影响能源消耗的参数,则可自定义选取参数分组。该模块实现自定义分组的直观显示、特征值分析、缩放及打印等操作。
5)综合数据分析:对本次试验的关键信息、重要节点动作信息、经纬度信息及故障信息等进行分析;
6)帮助文档:提供系统帮助。
从软件功能角度分析,数据处理软件主要具备:
1)完善的数据分析能力,较高的软件柔性,可根据用户需求,直观、方便的对参数类型进行组合和变更,具有系统自控能力;
2)对原始文件大小检测,对A类文件可实现全部加载,对B类文件采用内存映射实现分段读取,提供不同模式下的参数可视化、分析功能;
3)对操作使用人员进行分级管理和权限认证:管理员可实现基本项目管理,例如曲线分组组合、显示时长、管理权限、报表生成信息及人员角色分配,并提供详细的帮助文档。
2 软件总体设计
2.1 开发环境
使用Visual Studio 2010开发环境中的VC++编程语言,基于NI Measurement Studio工具套件和Iocomp工业4.0工控图标控件库联合开发。其中,Measurement Studio自带了丰富的、功能强大的ActiveX控件,可提供海量数据最优化显示的解决方案,显著提高软件开发效率。生成目标数据和信息以.txt与.mdb方式存盘。
2.2 软件框架
通用数据处理软件根据信息域表示的需求分析及功能进行如下设计。
1)数据结构设计:航行器试验过程中产生的内测数据一般不服从于某种特定的分布,需采用统一规范的数据输入格式、数据处理算法、数据输出格式,根据航行器设计需求及高层协议进行采样间隔、分辨率等参数调节,获得服务其上一层需要的数据对象;
2)系统结构设计:采用“模块功能黑盒”程序思想,如图1所示,采用“调度接口+功能模块黑盒+可编辑的帮助文档”的结构设计,模块功能黑盒实现软件的主要功能,这种结构具有信息隐蔽功能,即模块外部不可知模块内部细节,使系统更健壮,更加方便维护;模块独立性高,即每一个模块只涉及自己的功能,接口设计简单,高内聚低耦合,与API接口、可编辑的帮助文档之间的耦合度低,模块内各元素内聚程度高。
图1 “模块功能黑盒”程序结构
数据自适应加载模块: 判断数据总量大小,完成对文件的加载,对于A类文件一次性读取到内存;对B类文件采用内存映射原理,分段处理,将大数据映射到内存;
系统群组可视化模块:根据系统群组显示曲线和数据,选择可视化曲线的名称,对当前界面曲线进行联合定位、联合缩放、区间显示、综合分析、跳转指定段、打印等操作;
自定义群组可视化模块:根据实际情况选取参数可视化曲线,对当前界面的参数曲线进行隐藏显示、联合定位、缩放、区间显示、综合分析、跳转指定段、打印等;数据分析过程中,仍可添加项加入分析队列;
综合数据分析模块:航行器轨迹信息、故障信息及重要动作信息等关键信息解析和显示;
数据显示:本次试验物理量数据的可视化;
3)过程设计:即通用数据处理软件清晰的算法及程序表达,采用“类+函数”型的面向对象的设计方法[1],形成数据处理软件各层次间组织关系,保证软件组成构件的可移植性、互操作性和通用性。
2.3 软件流程
软件流程如图2所示,主要流程依次为:用户登录,试验数据对象抽象提取并存盘,采用多线程技术实现数据处理和数据读取;采用自适应内存映射方式对文件实现按需读取;采用Access 2007数据库作为系统数据库,建立必要数据库表,为软件提供实时数据支持,以实现用户管理、系统设置、故障码管理功能以及生成数据库信息表及评估报告。
图2 通用数据处理软件流程图
1)试验数据提取
水下航行器试后数据存储方式一般分为分布式和集中式[2],将所有内测数据汇聚后分类处理,处理后的数据通过并行存储模块生成被映射文件对象,生成的文件按照同系统、同属性或侧重点进行分组,形成具有某种属性的数据分组,此过程为试验数据抽象提取[3]。在此用户可根据项目侧重、阶段侧重的实际情况,自定义参数可视化的参数分组和控件分布。
试验数据抽象提取方法生成的外部文件可编辑,内部数据格式统一,为后续软件的通用化设计提供数据支撑。
2)数据处理部分
海量数据处理功能的实现和稳定可靠运行,必须通过多线程协调工作完成,主要包括主线程、数据处理线程、数据加载线程及数据可视化线程。其中主线程主要完成界面响应、逻辑控制和计算;数据处理线程,完成数据的接收、响应及处理,处理包括解密处理及转换处理;数据加载线程完成数据读取到内存,可通过普通方式及内存映射方式。线程的创建通过AfxBeginThread函数完成,线程的终止主要由主线程传递标识,通过线程函数自动返回的方式实现。由于线程的运行是由操作系统按时序自动调度完成的,当出现两个线程同时对公共数据或独占性资源进行操作,利用关键代码段(临界区)[4]实现线程同步,在多线程共享变量时,用来安全读写共享变量。
(1)关键代码段(临界区)工作在用户方式下。
(2)关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权。
用InitializeCriticalSection来初始化临界区,最后用DeleteCriticalSection来释放临界区资源。在线程中用EnterCriticalSection和LeaveCriticalSection来分别进入和离开临界区。
3)文件处理部分
文件处理采用内存映射技术。首先通过CreateFile()函数创建或打开文件内核对象,该对象标识磁盘上将要用作内存映射的文件,用CreateFile()函数将文件映像在物理存储的位置通告给操作系统,映像的长度需要CreateFileMaping()函数创建文件内核对象时通知系统文件尺寸及访问方式,并在预留的空间区域内,将文件数据作为该区域的物理存储器进行提交;由MapViewOfFile()函数通过系统管理将文件对象的全部或部分映射到相应的进程地址空间,对映射文件的操作的使用和处理与普通加载到内存中的文件数据处理方式一致;完成映射后,需要清除数据和释放使用资源,通过UnmapViewOfFile()函数完成从进程的地址空间撤销文件的映射,通过CloseHandle()函数关闭前期创建的文件映射对象和文件对象[5-6]。
受系统限制,系统进程可分配有限的虚拟地址空间,实际航行产生的数据量大于内存容量时,不能通过一次性映射方法读取内存,因此通用数据处理软件采取分块映射、循环读取、循环取消映射的方法实现分段读取数据。更改后的大文件内存映射流程图如图3所示。
图3 大文件内存映射流程图
4)生成数据库信息表及评估报告
通用数据处理软件主要采用ADO(ActiveX Data Objects,ActiveX数据对象)应用程序接口实现对Access数据库的访问控制,实现用户管理、系统设置及故障码管理功能。具有使用方便、速度快、内存支出少及磁盘遗迹小的特点[7]。它包含了3个主要对象:Recordset(数据集)、Connection(连接) 和Command(命令)。本文主要使用_ConnectionPtr和_RecordsetPtr接口,实现数据库相关操作。
通用数据处理软件可根据航行器高层协议生成航行过程中某组部件专项信息,此类信息数据量大,采样频率高,采用数据库技术可加快读写速率。航行数据分析完成后,通用数据处理软件最终结合人工评判生成评估报表信息, 如表1所示。
表1 动态生成主要数据库表
5)针对某一型产品形成帮助文档。
3 试验结果分析
在水下航行器试验任务测试过程中,需要处理的各类数据通常具有不同的数据组织方式,但同时又具备一定的共性或相似性,此为软件的输入。通用数据处理软件采用VC++语言,与NI Measurement Studio工具套件和Iocomp工业4.0工控图标控件库联合开发,实现通用数据处理软件的通用性。
数据处理程序提供预处理[8]功能,包括野点修正、插补漏值、趋势项消除等,供数据分析人员选择。图4为根据水下航行器设计任务定义的系统姿态数据特征值分析,图5为自定义群组特征值联合分析。通过多种表现形式形成某型航行器通用数据处理软件的输出结果,输出表现形式为曲线、物理量、文本文件及综合信息表以及结合人工判读得出的航行器性能评估报告,丰富的信息量给航行器的性能评估提供有效的数据支撑。
图4 系统姿态数据特征值分析
图5 自定义群组特征值联合分析
4 结束语
水下航行器通用数据处理软件适应目前水下航行器信息化发展需求,可实现多型水下航行器各系统关键参数的可视化显示、综合数据分析和航行综合性能评估。通用数据处理软件采用“模块功能黑盒”程序思想[8-9],通过自适应处理算法、内存映射技术,实现大容量(超过4G)甚至海量数据的处理及可靠性分析,较大程度缩短了各型产品数据处理软件的开发周期。上百余次试验证明,软件运行稳定、可靠,能适应多型航行器试后数据处理。
此外,随着各种水下无人航行器逐渐成为新型的水下作战平台,水下航行器的信息化水平将越来越高,自适应能力将异常强大,因此对通用数据处理软件提出更高要求,以下两点值得考虑和研究:
1)能够对航行器复杂系统实现快速数据处理,使得某个子系统或者模块出现故障时能够及时得到快速定位和正确处理[9];调度接口的程序对硬件的依赖性持续降低,提高模块封装性。
2)软件执行效率问题。待处理的内测数据容量越大,结构越复杂,输出类型越多则耗时越长。因此软件的执行效率问题必须考虑,可通过优化数据结构、改良程序的控制结构以及数据策略等手段实现。