掌桥专利:专业的专利平台
掌桥专利
首页

一种基于数据描述的记盘数据格式通用化转换方法

文献发布时间:2024-04-18 19:58:30


一种基于数据描述的记盘数据格式通用化转换方法

技术领域

本发明属于航天测控数据处理领域,涉及在实时数据记录系统中使用的数据格式转换方法,用于实现各种二进制记盘数据的提取、解算和显示,用户通过配置数据库表和配置文件描述记盘文件格式,以实现多源记盘文件的通用处理。

背景技术

实时系统中,厂家按照自定义格式记录自身系统获取的原始数据,任务结束后,用户方需对记录数据进行分析及处理。由于厂家众多,实时设备更新换代,系统记录文件格式以及数据帧格式发生变化,如数据协议变化、数据种类增减、数据信息结构调整等,给通用数据处理带来很大困难。

传统数据分析软件或处理软件通过固化数据结构进行数据信息的分析处理,当数据结构变化时,需通过软件更动来适应,导致软件可扩展性及自适应能力差,导致软件工作量增加,软件代码维护困难。

实时系统记录数据文件通常由文件头、文件体和文件尾组成:

(1)文件头或文件尾通常仅包含一种结构化的数据帧,且长度固定,也可能不存在文件头或文件尾。

(2)文件体由多种不同类型的结构化的数据帧组成,记盘格式设计时必须确保不同类型的数据帧可以通过位于固定位置的一个或多个“数据帧标志”进行区分。

(3)数据帧可拆分为“数据帧头”和“数据帧体”。包含有“数据帧标志”的固定长度的部分,称为“数据帧头”,剩余部分称为“数据帧体”,不同类型的数据帧,均包含有相同结构的“数据帧头”。

(4)“数据帧长度”通常位于“数据帧头”中,部分特殊记盘数据,其数据帧长度位于“数据帧体”中。

由n个数据帧组成的记盘文件格式示意如下,其中“数据帧标志1”~“数据帧标志n”的值互不相同:

文件头(定长,长度可为0)

数据帧头(定长,含“数据帧标志1”)、数据帧体1

…………………………………

数据帧头(定长,含“数据帧标志n”)、数据帧体n

文件尾(定长,长度可为0)

通过对记盘格式的通用描述,可以设计一种通用的数据格式转换方法,以显示不同记盘格式的通用化处理和显示。

发明内容

本发明所要解决的技术问题是:提供一种基于数据描述的记盘数据格式通用化转换方法,该方法通过数据库表和配置文件描述记盘文件格式以及其中的结构化数据,实现数据解析功能与数据描述功能的分离,适应记盘文件格式变化以及数据结构调整,以实现各类实时记盘数据的通用化解析。

本发明解决上述问题所采用的技术方案为:

与现有技术相比,本发明的有意效果:

1、本发明为用户提供了识别数据帧结构体的冗余方法。数据帧结构体通常由“数据帧标志”唯一确定,用户在《记盘文件描述表》中配置“数据帧标志计算方法”后,可从数据帧头中识别出数据帧结构体;少数“数据帧标志”对应了多个结构体,此时可通过配置《数据帧描述表》中的“数据帧标志1计算方法”以及“数据帧标志1值”、“数据帧标志2计算方法”以及“数据帧标志2值”进一步识别,为用户提供了多次选择的机会。

2、本发明为用户提供了三种计算数据帧体长度的方法。当数据帧体长度在数据帧头中时,用户在《记盘文件描述表》中配置“数据帧长度计算方法标志”;当数据帧体长度在数据帧体中时,用户在《数据帧描述表》中配置“数据帧长度计算方法标志”;当数据帧体长度在数据中不下传时,本方法自动计算该数据帧体已格式化的字节数,将其转化为数据帧体长度。

3、本发明为用户循环处理结构体中的字段,提供了“固定重复次数”和“动态循环次数”两种方法。“固定重复次数”为用户在结构体中预先定义的字段循环次数,用于对一个字段进行连续重复处理;“动态循环次数”为从原始数据中解算出的循环次数,其值不固定,可用于对多个连续字段进行重复处理。

附图说明

图1是本发明设计的结构体定义文件读取流程图,文件按行读取,自动跳过注释行以及空行,识别其中的结构体及其字段信息,判断字段信息是否合法、结构体定义是否合法以及结构体文件是否合法。

图2是本发明设计的记盘文件读取流程图,以内存映射方式打开记盘文件,根据用户描述的记盘文件格式及数据帧结构体信息,首先显示文件头和文件尾的信息,然后从文件头数据帧的尾部开始,逐帧识别数据帧头及数据帧体,并格式化显示数据帧头和数据帧体。

具体实施方式

以下结合附图实施例对本发明作进一步详细描述。

本申请实施例提供一种基于数据描述的记盘数据格式通用化转换方法,所述方法分为记盘文件格式描述及结构体描述、配置信息初始化及合法性检查、记盘文件处理及显示三个步骤:

步骤A,记盘文件格式描述及结构体描述。

本发明采用数据库表以及配置文件相结合的方法对记盘文件及数据帧结构体进行描述,具体包括:《记盘文件描述表》、《数据帧头结构描述表》、《数据帧描述表》、《数据帧长度计算方法描述表》、《数据帧标志计算方法描述表》、《结构体定义文件》、《基本数据类型描述表》以及《处理函数描述表》,表中字节位置从1开始起算。

步骤A.1,《记盘文件描述表》设计。

该表存储记盘文件总体信息,各字段定义如表1所示,该描述表通常仅包含一行记录。当配置多行记录时,多余数据行自动忽略。

表1《记盘文件描述表》

(1)“文件路径”、“结构体定义文件路径”分为绝对路径和相对路径,相对路径的起始路径为可执行文件所在的目录。“文件路径”字段用于存储记盘文件所在的路径,“结构体定义文件路径”字段用于存储该记盘文件对应的结构体信息。

(2)“文件头数据帧标志”字段和“文件尾数据帧标志”字段用于配置文件头和文件尾格式,当记盘文件中无该信息时,其值填0;非0时,指向《数据帧头结构描述表》中的“数据帧标志”字段。

(3)“数据帧头结构数据帧标志”字段用于配置文件体中的数据帧头的结构信息,该值为外键,指向《数据帧头结构描述表》中的“数据帧标志”字段。

(4)“数据帧标志计算方法”字段用于配置数据帧识别方法。文件体通常由多种不同类型的结构化的数据帧组成,不同类型的数据帧,通过结构体中的位于固定位置的主键进行区分。该值为外键,指向《数据帧标志计算方法描述表》中的“数据帧标志计算方法”字段。

(5)“数据帧长度计算方法标志”字段用于获取数据帧的长度,0表示数据帧头中无数据帧长度,其余值指向《数据帧长度计算方法描述表》中的“数据帧长度计算方法标志”字段。当该值为0时,需在数据帧的结构体中描述其长度计算方法。

步骤A.2,《数据帧头结构描述表》设计。

该表存储文件头、文件尾、以及数据帧头的结构体信息,各字段定义如表2所示,该表中的结构体均为固定长度。

表2《数据帧头结构描述表》

步骤A.3,《数据帧描述表》设计。

该表存储数据帧体的所有结构体描述信息,各字段定义如表3所示,该表通常包含多条记录。

表3《数据帧描述表》

(1)“数据帧标志”字段的值,源于记盘文件中数据帧体的数据帧标志;“结构体名称”对应的结构体在《结构体定义文件》中进行详细描述;“数据帧长度计算方法标志”非0时,其数据长度的计算方法由“数据帧长度计算方法标志”定义;

(2)少部分“数据帧标志”对应了多个结构体,此时可通过“数据帧标志1计算方法”以及“数据帧标志1值”识别,以及“数据帧标志2计算方法”以及“数据帧标志2值”识别。

步骤A.4,《数据帧长度计算方法描述表》设计。

该表存储数据帧长度计算方法的描述信息,各字段定义如表4所示。一个记盘文件中,可能存在多种数据帧长度的计算方法,数据帧长度计算方法通常与数据类型相关。常用的长度计算方法有单字节整数、两字节整数、多字节整数、与目标数量相关的长度计算等。

表4《数据帧长度计算方法描述表》

假设通过原始值计算得到的数据帧长度初始值为nFrameL,该值减去“数据帧长度修正值”,即为最终的数据帧长度。

步骤A.5,《数据帧标志计算方法描述表》设计。

该表存储数据帧标志计算方法的描述信息,各字段定义如表5所示。数据帧标志通常占用多个字节,通过数据帧标志区分不同数据帧。

表5《数据帧标志计算方法描述表》

“数据帧标志间隔字节”值为0时,表示从“数据帧标志开始位置”开始,连续获取“数据帧标志占用字节”的原码值。

步骤A.6,《结构体定义文件》。

(1)一个记盘文件仅使用一个结构体文件,该文件由许多结构体组成,结构体名称不允许重复,结构体文件具有如下的形式:

//基本结构体。该结构体名称1用于……

struct结构体名称1

{

字段类型1字段名称1处理函数1处理参数1字段说明1;

字段类型2字段名称2处理函数2处理参数2字段说明2;

…… …… …… …… ……;

字段类型m 字段名称m 处理函数m 处理参数m 字段说明m;

};

//循环结构体。该结构体名称2用于……

struct结构体名称2

{

字段类型1 字段名称1 处理函数1 处理参数1 字段说明1;

…… …… …… …… ……;

字段类型k循环次数 FieldLoop i,j字段说明k;

…… …… …… …… ……;

字段类型k+i 字段名称k+i 处理函数k+i 处理参数k+i 字段说明k+i

…… …… …… …… ……;

字段类型k+j字段名称k+j 处理函数k+j 处理参数k+j 字段说明k+j

…… …… …… …… ……;

字段类型m字段名称m处理函数m处理参数m字段说明m;

};

//复合结构体示意。该结构体名称2用于……

struct结构体名称3

{

字段类型1字段名称1 处理函数1 处理参数1 字段说明1;

结构体名称1 字段名称2 NULL 0字段说明2;

…… …… …… …… ……;

字段类型p字段名称p处理函数p处理参数p字段说明p;

};

上述示例中,示意了具有三个结构体的结构体文件。

第一个结构体为基本结构体,具有m个变量,字段类型均有基本数据类型组成;第二个结构体为循环结构体,具有n个变量,其中第k个字段为循环次数,函数为FieldLoop,参数为“i,j”,表示字段k+i~字段k+j需循环若干次,i称为”循环字段偏移开始”、j称为”循环字段偏移结束”,循环的次数由字段k的结果值确定;第三个结构体为复合结构体,具有p个变量,第二个字段类型为第一个结构体。

每个结构体字段由5个元素组成,各元素之间由空格分隔,结构体字段之间由“;”隔开,结构体以“struct”关键字开始,该关键字和“{”之间的字符为结构体名称,结构体以“};”结束,其中“{”位于“struct”关键字所在行的下一行,“};”单独占据一行。以“//”开头的为注释行。一个结构体可以有多个子结构体,结构体可以嵌套。

(2)结构体字段定义如表6所示。其中“字段类型”可有两种,一种是基本数据类型,其值在《基本数据类型描述表》中的“数据类型”中选取;第二种是结构体类型,其值为结构体文件中的其他结构体,且该结构体应当在本结构体定义之前先定义。“字段名称”中可包含“[n]”(n为大于0的整数),表示该字段需重复n次。

表6结构体字段的定义

步骤A.7,《基本数据类型描述表》设计。

基本数据类型指不可再分的数据类型,比如byte、short、int、int64、float、double等,基本数据类型中间不允许存在空格。各字段含义见表7,其中格式化参数为该数据类型默认的符合C语言printf函数标准的格式化参数。

表7《基本数据类型描述表》

步骤A.8,《处理函数描述表》设计。

该表存储用于处理和显示结构体中各字段的各类函数,字段定义如表7所示。该表中“函数标识”为0的记录,存储“函数名称”为“NULL”的记录,表示不对该字段进行显示处理;该表中“函数标识”为1的记录,存储“函数名称”为“FieldLoop”的记录,表示该字段用于动态获取循环次数;“函数参数”为使用参数的示例,实际参数在结构体中明确,多个参数以“,”隔开。

表8《处理函数描述表》

步骤B,配置信息初始化及合法性检查。

本发明设计的八种数据库表或配置文件,除《基本数据类型描述表》以及《处理函数描述表》由程序员维护以外,其余六种由用户维护,用户结合自身数据分析需求,对以下六种数据库表或配置文件进行定制,包括《记盘文件描述表》、《数据帧头结构描述表》、《数据帧描述表》、《数据帧长度计算方法描述表》、《数据帧标志计算方法描述表》、《结构体定义文件》等。

配置信息初始化及合法性检查的主要任务是读取各类数据库表或配置文件,对配置信息进行合法性检查,依次执行以下步骤:

步骤B.1,读取《处理函数描述表》。对表格中的每一行记录,执行如下的合法性检查:检查“函数标识”为0的记录,其函数“函数名称”是否为“NULL”,“函数标识”为1的记录,其“函数名称”是否为“FieldLoop”;检查其余“函数名称”是否为程序员已实现的函数。以上检查均合格时,数据合法。

《处理函数描述表》读取完成后,将形成具有如下形式的数据对:{nFunSer,strFun,strParam}

步骤B.2,读取《基本数据类型描述表》。对表格中的每一行记录,执行如下的合法性检查:检查“数据类型”、”数据占用字节”及其“格式化参数”是否符合C语言printf函数的格式化参数标准,如果不符合,那么合法性检查失败,否则数据合法。

《基本数据类型描述表》读取完成后,将形成具有如下形式的数据对:{nTypeSer,strType,nBytes,strFormat}

步骤B.3,读取《结构体定义文件》。

按照《记盘文件描述表》配置的“结构体定义文件路径”,读取该结构体文件,对该文件中的每一个结构体进行合法性检查。如果文件读取失败,那么提示用户该文件不存在,合法性检查失败。否则读取该文件,读取过程中,以“\”开头的数据行以及空行自动跳过,不再赘述。系统设置结构体编号nStruct,其初始值为0,表示当前已获取到的结构体数据,也作为识别结构体的标志;设置结构体字段编号nField,其初始值为0,表示当前结构体中已识别的字段个数,当发现新的结构体时,重新初始化为0。流程图如图1所示。

(1)获取结构体名称。逐行读取文件,查找以“struct”字符串开始的文件行,如果未找到,那么语法错误,系统退出;否则,获取“struct”后的字符串,做为该结构体的名称。如果名称为空,那么语法错误,系统退出;否则,在已发现的结构体名称中查找该名称是否已存在,如果存在,那么提示用户结构体定义重复,系统退出;否则,分析该结构体名称中是否包含“[n]”(n为数字),如果包含,那么设置字段固定重复次数nRepeat值为n,否则设置值为1。

(2)文件指针下移一行,查找是否为“{”,如果不是,那么合法性检查失败,提示用户该数据行存在语法错误,系统退出;如果是,那么当前结构体字段个数nField设置为0,执行下一步。

(3)文件指针下移一行,判断该行数据是否以“;”结束。如果不是,那么提示用户该数据行存在语法错误,系统退出。如果是,那么执行下一步。

(4)如果该行数据是“};”,那么该结构体读取完毕,执行步骤(5);如果该行数据不是“};”,那么从该行数据中获取结构体字段的定义信息,检查该行数据的合法性。

①分析该行数据以空格隔开的字符串个数是否为5,如果不是,那么提示用户该数据行存在语法错误,系统退出。依次获取该行数据中的“字段类型”、“字段名称”、“处理函数”、“处理参数”、“字段说明”,对“字段类型”和“处理函数”、“处理参数”进行合法性检查。

②对“处理函数”进行合法性检查。如果“处理函数”为“NULL”,或者在《处理函数描述表》中存在对应的“处理函数”,那么“处理函数”合法,记录其函数索引号nFunSer以及处理参数strParam,执行下一步;否则提示用户“处理函数”错误,系统退出。

③对“字段类型”进行合法性检查。如果“字段类型”在《基本数据类型描述表》中存在,那么记录其数据类型索引号nTypeSer,数据合法。形成具有如下形式的“字段信息数据对”[nFieldSer,nTypeSer,nRepeat,nFunSer,strParam],其中nFieldSer为结构体字段序号,nTypeSer为数据类型索引号、nRepeat为该字段的固定重复次数,nFunSer为函数索引号、strParam为处理参数。执行下一步。

否则,在已发现的结构体名称中查找是否存在该“字段类型”,如果找到了,那么该“字段类型”为子结构体,把该子结构体的所有nF个“字段信息数据对”插入到本结构体的“字段信息数据对”中,nField值加nF,执行下一步;否则提示错误,系统退出。

④如果“处理函数”为“FieldLoop”,表示该结构体为循环结构体,获取对应参数i和j,该字段往后i个到往后j个之间子结构体字段总数,假设其值为nF(可能为0),那么参数j修改为“j+nF-1”。

⑤本字段识别完毕,nField值加1,跳转到步骤(3)继续执行。

(5)该结构体读取完毕后,将形成具有如下形式的数据对{nStructSer,strStruct,nField,{nFieldSer,nTypeSer,nRepeat,nFunSer,strParam}

(6)文件指针下移一行,循环执行步骤(1)~(4),直到文件读取结束为止。结构体文件读取完毕后,所有复合结构体,均已转换为基本结构体。

最后,将形成具有如下形式的数据对{nStructSer,strStruct,nField,{nFieldSer,nTypeSer,nRepeat,nFunSer,strParam}

步骤B.4,读取《数据帧标志计算方法描述表》。

《数据帧标志计算方法描述表》读取完成后,将形成具有如下形式的数据对:{nSignMethodSer,nFrameLayout,nFrameBytes,nFrameStart,nFrameHigh}

步骤B.5,读取《数据帧长度计算方法描述表》。

《数据帧长度计算方法描述表》读取完成后,将形成具有如下形式的数据对:{nLenMethodSer,nOffsetBytes,nLenBytes,nLenStart,nLenHigh}

步骤B.6,读取《数据帧描述表》。对表格中的每一行记录,执行如下的合法性检查:

(1)检查“结构体名称”中配置的结构体在步骤B.3的“结构体定义描述表”中是否存在,如果存在,那么记录其结构体序号nStructSer,否则提示用户该结构体不存在,合法性检查失败。

(2)检查“数据帧长度计算方法标志”在《数据帧长度计算方法描述表》是否存在,如果存在,那么记录其数据帧长度计算方法标志nLenSign,否则提示用户该数据帧长度计算方法标志不存在,合法性检查失败。

(3)检查“数据帧标志1计算方法”是否合法。如果该数据为0,表示该数据类型无辅助标志,那么数据合法;否则,在《数据帧标志计算方法描述表》中查找是否存在,如果存在,那么记录其数据帧长度计算方法标志nLenSign1,否则提示用户该数据类型辅助标志计算方法不存在,合法性检查失败。

(4)检查“数据帧标志2计算方法”是否合法,检查方法同步骤(3),记录其数据帧长度计算方法标志nLenSign2。

《数据帧描述表》读取完成后,将形成具有如下形式的数据对,称为“数据帧描述表”:{nFrameSignSer,nFrameSign,nStructSer,nLenSign,nSignMethodSer1,nFrameSign1,nSignMethodSer2,nFrameSign2,nOffest}

步骤B.7,读取《数据帧头结构描述表》。对表格中的每一行记录,执行如下的合法性检查:检查“结构体名称”中配置的结构体在步骤B.3的“结构体定义描述表”中是否存在,如果存在,那么记录其结构体序号nFrameHeadStructSer,否则提示用户该结构体不存在,合法性检查失败。

《数据帧头结构描述表》读取完成后,将形成具有如下形式的数据对:{nFrameHeadSer,nFrameHeadStructSer}

步骤B.8,读取《记盘文件描述表》。读取表中“文件编号”值最小的记录,对该记录进行合法性检查。

(1)检查“文件路径”中配置的文件是否真实存在,如果存在,那么执行下一步,否则提示用户该文件不存在,合法性检查失败。

(2)检查“文件头数据帧标志”是否合法。如果该数据为0,那么文件头结构体序号nHeadStructSer值设置为0,执行下一步;否则在《数据帧头结构描述表》中查找是否存在对应的“数据帧标志”;如果存在,获取对应的结构体序号,保存为nHeadStructSer,执行下一步,否则提示用户该数据帧标志不存在,合法性检查失败。

(3)依次检查“文件尾数据帧标志”、“数据帧头结构数据帧标志”是否合法,检查方法同步骤(2),获取到文件尾的结构体序号nTailStructSer、数据帧头的结构体序号nFrameHeadStructSer。

(4)检查“数据帧标志计算方法”在《数据帧标志计算方法描述表》中是否存在、“数据帧长度计算方法标志”在《数据帧长度计算方法描述表》中是否存在,如果存在,那么数据合法,否则提示用户对应信息不存在,合法性检查失败。

《记盘文件描述表》读取完成后,将形成具有如下形式的数据对,称为“记盘文件描述表”:{sFileDir,sStructDir,nHeadStructSer,nTailStructSer,nFrameHeadStructSer,nSignMethodSer,nLenMethodSer},其中sFileDir、sStructDir分别为记盘文件路径、结构体文件路径,nHeadStructSer、nTailStructSer、nFrameHeadStructSer分别为文件头结构体序号、文件尾结构体序号、帧头结构体对应的编号,nSignMethodSer为数据帧标志计算方法,nLenMethodSer为数据帧长度计算方法。

步骤C,记盘文件处理及显示。

以内存映射方式打开“文件路径”所对应记盘文件,获取“记盘文件指针”,该指针指向文件头,主流程图如图2所示。

步骤C.1,处理文件头和文件尾。

(1)当文件头结构体序号值大于0时,“格式化显示”(步骤C.3)文件头信息;如果“格式化显示”操作失败,那么提示文件格式有误,系统处理结束,否则执行下一步。

(2)当文件尾结构体序号值大于0时,“记盘文件指针”指向文件尾结构的起始处,“格式化显示”文件尾信息;如果“格式化显示”操作失败,那么提示文件格式有误,系统处理结束。否则,“记盘文件指针”指向文件头,往后移动文件头结构体的长度。

步骤C.2,处理数据帧。

数据帧由数据帧头和数据帧体组成,其中“数据帧头长度”为固定长度,由数据帧头结构体完全确定,“数据帧体长度”由数据帧长度计算方法、结合数据帧中的原始数据计算得到。

(1)根据数据帧头结构体序号,获取“数据帧头长度”,“格式化显示”数据帧头信息;如果“格式化显示”操作失败,那么提示文件格式有误,系统处理结束,否则执行下一步。

(2)获取数据帧标志。获取数据帧标志计算方法,按照“数据帧标志计算算法”(步骤C.4),从数据帧头中获取“数据帧标志”。

(3)获取数据帧对应的结构体。在“数据帧描述表”中查找是否存在对应的“数据帧标志”,如果存在,那么记录其“数据帧索引号”及“结构体序号”;否则提示用户存在未知数据帧类型。

(4)计算数据帧体长度。如果“记盘文件描述表”中的数据帧长度计算方法大于0,那么按照“数据帧长度计算算法”(步骤C.5),从数据帧头中计算“数据帧体长度”。“记盘文件指针”向后移动“数据帧头长度”。

(5)计算辅助标志。获取“数据帧标志”对应的“数据帧标志1计算方法”、“数据帧标志2计算方法”。如果“数据帧标志1计算方法”值等于0,那么已识别出数据帧类型,执行步骤(8);否则计算其“数据帧标志1”;如果“数据帧标志2计算方法”值等于0,那么已识别出数据帧类型,执行步骤(6),否则按照“数据帧标志2计算方法”,计算“数据帧标志2”,执行步骤(7)。

(6)通过“数据帧标志”和“数据帧标志1”判断结构体。在“数据帧描述表”中查找是否存在对应的“数据帧标志”和“数据帧标志1”。如果存在,那么记录其“数据帧索引号”及“结构体序号”,执行步骤(8);否则提示用户存在未知数据帧类型。

(7)通过数据帧标志和“数据帧标志1”、“数据帧标志2”判断结构体。在“数据帧描述表”中查找是否存在对应的“数据帧标志”、“数据帧标志1”、“数据帧标志2”。如果存在,那么记录其“数据帧索引号”及“结构体序号”,执行步骤(8);否则提示存在未知数据帧类型。

(8)重新计算数据帧体长度。如果“数据帧索引号”对应的数据帧长度计算方法标志大于0,那么从数据帧体中计算“数据帧体长度”。

(9)格式化显示数据帧体。以“记盘文件指针”、“结构体序号”为输入参数,“格式化显示”数据帧体原码(该操作将返回“已格式化的结构体的数据长度”)。如果操作失败,那么提示文件格式有误。

(10)如果“数据帧体长度”值为0,表明用户在数据库中未设置该结构体的数据帧长度计算方法,获取该结构体的“结构体起始偏移字节”,“数据帧体长度”设置为步骤(9)中返回的“已格式化的结构体的数据长度”与“结构体起始偏移字节”之和。

(11)循环处理。“记盘文件指针”向后移动“数据帧体长度”,如果“记盘文件指针”已经超过文件尾结构的起始处,那么数据帧处理结束,此时系统处理结束;否则,执行步骤(1)。

步骤C.3,结构体格式化显示。

当获取到结构体的原始数据后,根据该结构体的定义,格式化输出各字段。用C语言描述的函数表达式为:

int FormatStruct(unsigned char*pFileCur,int nStructSer)

参数pFileCur指向结构体的起始处,nStructSer为结构体索引号,返回值为已格式化的结构体的数据长度。

设置变量“已格式化字节数”,初始化为0;设置变量“结构体指针”,初始化为pFileCur;设置变量“动态循环处理开始字段”nFstart和“动态循环处理结束字段”nFend,初始化为-1;设置“动态循环执行次数”nFcontnue,初始化为0;设置变量“结构体字段序号”nFieldSer,初始化为0,循环执行以下步骤,直至nFieldSer值大于等于当前“结构体字段个数”nField,函数返回“已格式化字节数”:

(1)根据nFieldSer字段的“数据类型索引号”,获取该字段的”数据占用字节”、“格式化参数”、“固定重复次数”,从“结构体指针”处获取到原始值;如果“函数索引号”大于0,那么根据该字段的“函数索引号”及“处理参数”,把原始值转换为结果值,根据该字段的“格式化参数”,把结果值格式化输出。“结构体指针”往后移动”数据占用字节”,“已格式化字节数”增加”数据占用字节”。

(2)如果“固定重复次数”(值为n)大于1,那么循环执行步骤(1),直至步骤(1)共执行了n次。

(3)如果该字段“函数索引号”为1,那么获取该字段的处理结果,即“动态循环次数”(nLoop),记录该字段的序号值(nFieldLoop);从其“处理参数”中提取“循环字段偏移开始”值(i)和“循环字段偏移结束”值(j),那么nFstart设置为(nFieldLoop+i),nFend值设置为(nFieldLoop+j),nFcontnue设置为1。

(4)nFieldSer增加1。如果nLoop值大于0且nFieldSer>nFend且nFcontnue

步骤C.4,数据帧标志计算算法。

从“数据帧标志开始位置”开始,间隔“数据帧标志间隔字节”,获取“数据帧标志占用字节”的原码,按照“数据帧标志高字节先传”组装为一个整数值,即为最终的数据帧标志。

步骤C.5,数据帧长度计算算法。

从“数据帧长度值获取位置”开始,连续获取“数据帧长度值占用字节”的原码,按照“数据帧长度高字节先传标志”组装为一个整数值,其计算结果为数据帧长度的初始值,假设该值为nFrameL,该值减去“数据帧长度修正值”,即为最终的数据帧长度。

1、实现《基本数据类型描述表》,程序员根据实际情况可添加其他基本数据类型,示意如下:

表9《基本数据类型描述表》内容

2、实现《处理函数描述表》,当某些字段显示无法通过基本数据类型实现时,程序员可在此表中添加相应函数,如:

表10《处理函数描述表》内容

3、实现《结构体定义文件》,用户定义了文件头、数据帧头以及温度参数共三个结构体,其中温度参数为循环结构体,字段Temperature的循环次数由字段TempN决定:

/>

4、实现《数据帧标志计算方法描述表》:

表11《数据帧标志计算方法描述表》内容

5、实现《数据帧长度计算方法描述表》,表中“数据帧长度修正值”值为0,表示长度从“FrameLen”之后一个字节起算:

表12《数据帧长度计算方法描述表》内容

6、实现《数据帧描述表》,表中假设温度参数的数据帧标志为5678,表中其余字段设置为0:

表13《数据帧描述表》内容

7、实现《数据帧头结构描述表》。

表13《数据帧描述表》内容

8、实现《记盘文件描述表》,其中“文件尾数据帧标志”为0,表示无文件尾。

表13《数据帧描述表》内容

除上述实施例外,本发明还包括有其他实施方式,凡采用等同变换或者等效替换方式形成的技术方案,均应落入本发明权利要求的保护范围之内。

相关技术
  • 一种用于数据格式转换的管理平台端和数据格式转换方法
  • 一种陆图shp数据格式与内部数据格式的转换方法
技术分类

06120116499139