APP下载

一种油液分析仪器数据文件内容解析方法*

2021-08-27周建辉常兴山刘雅洁

润滑与密封 2021年8期
关键词:数据文件二进制油液

吴 炜 周建辉 刘 杰 常兴山 刘雅洁

(1.中国舰船研究设计中心 湖北武汉 430064;2.武汉理工大学能源与动力工程学院 湖北武汉 430063)

视情维修在船舶动力系统状态维护保障中的应用越来越广泛,油液分析技术作为一种获取状态特征数据的方法也获得了越来越多的应用[1-3]。随着分析测试任务和检验项目数量猛增,需要处理的数据量也快速增加。但目前的油液分析设备基本都是自带分析处理装置的,其数据存储后只能在自带的软件中打开,导致数据集成不方便,降低了工程人员测试的便利性[4-5]。要摆脱对原有仪器设备软件的依赖,直接操作对应的数据文件,就必须了解其文件的相应数据格式。目前针对油液分析仪器数据格式解析的文献报道还不多见,相关研究大多集中在虚拟仪器的信号采集[6-7],油液分析的数据集成与结果报告生成等方面[8]。对其他类型的仪器格式解析则有一定报道,如医学类仪器[9-10]、雷达[11]及遥感类[12]等。对特定的仪器及文件格式的解析也有一定报道,如对LAS格式[13]及PCB ASCII文件格式[14]、矿山激电测深数据格式[15]等。但这些研究要么只针对特定文件或特定仪器,要么只针对文件格式的文件头部分,要么有相应的前提条件——如已知所需数据在文件中的存储格式和保存位置,并没有形成一套具有一定的通用性的分析仪器格式的解析方法或工具,因此有必要针对该问题进行研究。

本文作者基于浮点数与英文字母在仪器数据文件中的存储特征,提出了利用搜索二进制数据并转换为浮点数,再将转换后的浮点数与搜索值进而确定浮点数在文件中的位置的方法,并基于API函数设计了全自动搜索的辅助工具,为进行文件格式解析和信息提取提供了一种新的思路。

1 解决方案

1.1 背景分析

油液分析仪器的数据基本上由字符类型的标识及浮点数形式的数值2种类型组成,且大部分以文件的形式进行存储。在以文件进行浮点数的存储方面,国际标准组织制订了一系列的浮点数存储相关标准。自20世纪80年代以来,IEEE 754标准逐渐成为使用最广泛的浮点数运算标准。该标准规定了4种用二进制形式表示浮点数值的方式:单精确度、双精确度、延伸单精确度与延伸双精确度。其中单精确度二进制是使用最为广泛的形式。单精度二进制格式中使用4个字节(32个比特)来进行浮点数的存储。存储的具体形式分为3个部分:数符(sign)、阶码(exponent)和尾数(fraction)。其中,数符占1个bit,为32个bit中的最高位,它代表了浮点数的符号,若数符为0则表示浮点数为正数,若数符为1则代表负数;阶码占8个bit,规定为实际指数值加上一个偏移值,需要作移码运算;尾数占23个bit,用于存储“有效数字”的小数部分,使用原码表示。

虽然知道油液分析中的数值数据部分采用IEEE 754标准保存到文件中,但如果没有对应厂家的技术支持,是无法知道在文件的具体位置去获取到需要的值。如果直接打开相应的文件,一般完全无法看懂相应的含义。为了进行示例,选择油液分析光谱仪中保存数据的后缀为.cfg文件,分别用文本文件格式和二进制格式打开该文件,其内容显示分别如图1和图2所示。

从图1和图2可以看出,以文本文件和二进制格式打开文件内容都无法读懂其中代表的含义。但二进制格式中,英文字符可以直观显示,表明英文字符遵循ACSII编码规则。要想实现直接从相应的文件中读取需要的分析数据,就必须明白每个需要的数值在对应文件中的存储起始地址,然后再从该地址中读取需要的二进制数据,再按照IEEE 754标准进行转换。因此,问题的关键就在于如何找到一个需要读取的浮点数在该文件中的起始地址。

图1 文本格式打开cfg文件Fig 1 Opening cfg file in text format

图2 二进制格式打开cfg文件Fig 2 Opening cfg file in binary format

1.2 解析方法

为了进行格式解析方法的分析,选择在油液分析光谱仪自带的软件中打开上述对应的.cfg文件,可以在对应的界面上显示出相应的值,界面示意如图3所示。

从图3可以看出,在界面上显示的数字,在对应的.cfg文件中一定是存在的,如果能搜索到其值所在的位置,根据该值所在的文本框及其前面的标签,就可以明确知道其代表的含义;又因为这类文件都是等长度保存的,特定含义的数值在每个文件中的起始位置都是固定的,相同仪器的数据格式只需要研究清楚一个文件,其他文件就都清楚了。这样就为通过程序自动搜索解析出文件存储格式提供了可能。为此设计了如图4所示的文件格式解析流程图。

图3 光谱分析仪器显示界面Fig 3 Display interface of spectrum analyzer

图4 文件格式解析流程Fig 4 Flow of file format analysis

在该算法中,将需要分析的数据文件在光谱仪器自带的软件中打开,通过其界面的显示提炼出要搜索的特征值。再创建一个辅助程序,在该程序界面上输入要搜索的特征数值,并以二进制方式打开同一个对应的仪器数据文件,并从0字节开始每次取4个字节根据IEEE 754标准存储协议转换成浮点数,再将转换获得的数值与搜索特征值进行比对,如果一致则将相应的字节起始位置保存记录下来。不论转换值是否一致,都取下一组字节重复上面的步骤,一直到文件结束为止。

在上述过程中,即使找到了需要搜索的特征值,仍然需要继续扫描搜索文件的后续部分,主要是因为文件中可能存在该搜索特征浮点数的重复值,要将所有可能的位置都搜索出来。但这样就带来一个问题,如果搜索后只在一个位置上出现过该特征值,则该搜索值的位置就可以唯一确定了。如果在1个以上位置出现,则无法进行判断。为解决这个问题,有2种思路:(1)通过多个文件针对同一个输入框中的特征值进行搜索,查找其出现位置的唯一交集;(2)在仪器自带的软件界面上,将要搜索的文本框中的内容修改为一个很特殊的数值,然后保存文件后再调用上面算法进行搜索,直到只在一个位置上出现为止。这2种方法本质是一致的,但如果文件本身是可以修改的,则后一种处理更为灵活高效。

1.3 方法改进

在1.2节中设计的解析方案中,搜索的浮点数需要人工一一输入,比较费时费力,而且后续如果搜索位置不唯一,还需要重复这个过程,方法并不算最合理。因此利用文献[5]中提到的API函数进行软件界面元素获取的方法,对搜索方法进行改进,以实现自动获取界面上的搜索特征值及特征值代表的含义,然后传递到1.2节中设计的辅助搜索程序,实现全自动的搜索。

设计的自动获取搜索特征值的算法流程如图5所示。

图5 自动获取搜索值流程Fig 5 Flow of automatically obtaining search value

调用API函数获取对应仪器软件界面窗体的各个控件句柄,判断所取控件的类型是否为需要处理的类型,若是的话调用函数获得其文本,反之则进行下一个控件的判断,以此方法遍历窗体所有子控件。值得注意的是,如果只将控件中的具体值作为句柄时,关闭窗体再打开其句柄可能会发生变化,所以在取句柄的时候,不仅需要获得控件的具体值,还需要获得控件相对于窗体的相对位置坐标(x,y)。遍历所有子控件之后,将结果写入一个搜索列表,设计的表结构如表1所示。

表1 搜索值与坐标信息

在获取表1后,就可以自动组合出搜索信息。将图4中列出算法的搜索结果写入表1,再判断表1中需要搜索的每一行是否只在搜索文件中的一个位置出现。对搜索结果中位置数大于1个的,则通过API函数自动修改对应控件中的值,再自动保存修改后的文件,并重新搜索保存后的文件,直到该对应控件的搜索位置结果也只有一个为止。依次进行处理,当所有搜索特征值在相应文件中都只在一个起始位置出现,则文件格式就解析清楚了。

2 实现方法和效果

2.1 字节组与浮点数的转换

IEEE 754标准中浮点数的保存格式为:数符(1b) 阶码(8b) 尾数(23b)。数符部分若为0则代表此数为正数,若为1则代表此数为负数。将阶码部分的二进制转换成十进制再减去127,得到的数如果为正数则代表其向左移了几位,反之则代表向右移动了几位,举一个例子:阶码为10000010,则E=130,e=E-127=3,即说明其向左移了3位。然后将尾数部分加上“整数”部分的1之后得到一个数1.xxx(尾数),根据阶码进行小数点的移位,最后将得到的结果转换成十进制即完成了字节组到浮点数的转换。

2.2 API函数

为了能够实现分析数据的自动获取,需要利用的API函数如下:

(1)FindWindowEx函数:获取窗口句柄,该窗口的类名和窗口名与给定的字符串相匹配;

(2)Enumchildwindow函数:将句柄传递给每个子窗口并依次传递给应用程序,可以枚举一个父窗口的所有子窗口;

(3)GetClassName函数:获得指定窗口所属的类的类名;

(4)SendMessage函数:将指定的消息发送到一个或多个窗口。

2.3 效果

根据前述算法,开发了相应的辅助格式解析识别工具,该工具主要获取对应值在文件中的起始地址,以光谱仪器的数据文件进行测试,相应的运行结果如图6所示。图中最后一列即为对应需要提取的值在文件中的起始位置。通过多份文件的对比,同一属性字段在多个文件中的起始位置是相同的,因此可以证明该解析方法可行。

图6 辅助工具的运行效果Fig 6 Operation effect of auxiliary tools

3 结论

基于浮点数与英文字母在仪器数据文件中的存储特征,提出了利用搜索二进制数据并转换为浮点数,再将转换后的浮点数与搜索值进而确定浮点数在文件中的位置的方法,并基于API函数设计了全自动搜索的辅助工具。以油液分析中的光谱仪器数据为例进行了应用验证。结果表明,该方法能够自动获取出浮点数类型仪器数据的对应位置,摆脱了对仪器自带软件的依赖,为类似仪器文件的数据格式解析提供了一套比较通用的方法,可以用于实现从仪器数据文件中自动获取需要的内容以进行集中保存的目的。

猜你喜欢

数据文件二进制油液
油液颗粒过滤器动态过滤特性仿真与实验研究
用二进制解一道高中数学联赛数论题
通过油液分析查找发动机抱轴故障原因
有趣的进度
二进制在竞赛题中的应用
液压润滑系统的油液污染控制措施
基于表空间和数据文件探讨MIS中数据库架构设计
数据文件安全管控技术的研究与实现
油液混合动力工程机械系统及控制策略研究综述
二进制宽带毫米波合成器设计与分析