一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种具有可扩展性的数据记录存储方法及系统与流程

2021-11-05 20:39:00 来源:中国专利 TAG:


1.本发明涉及一种具有可扩展性的数据记录存储方法,属于计算机控制领域。


背景技术:

2.在计算机控制系统中,对过程数据记录尤为重要,数据记录对于系统调试、故障诊断、故障定位、缩短维修时间等具有重要意义。如在飞行系统中,过程记录数据用于记录飞行过程中各运动参数以及各子系统的状态,在科研试飞阶段,往往需要根据记录下来的数据,以此为依据参与系统排故以及控制律调参工作。数据记录是计算机控制系统中重要的功能,根据记录的过程数据可以对系统发生故障时的状态进行追溯,并对系统优化、参数调节起到指导作用。传统的数据记录,通常是在控制系统关键控制位置加入存储设备操作,将数据记录到存储设备,这种处理方式的缺点是在时序性较高的地方增加系统数据输出对控制效率产生影响,且对存储设备的操作具有时间不确定性,对系统的核心控制容易产生重大灾难性的影响。控制系统中往往有大量参数需要进行记录,如果分散记录,则对数据的维护性成本要求比较高,且系统软件的可扩展性、可维护性较差。


技术实现要素:

3.本发明的技术解决问题是:克服现有技术的不足,提供了一种具有可扩展性的数据记录存储方法,在不影响系统核心控制的前提下,将系统数据记录功能集成统一、系统参数记录具有更强的扩展性。
4.本发明的技术解决方案是:
5.一种具有可扩展性的数据记录存储方法,步骤如下:
6.(1)定义存储表结构,对软件系统所有需要记录的全局变量进行存储管理;
7.(2)根据步骤(1)的存储表结构定义常量数组datarec并进行初始化,常量数组长度由初始化变量决定,该数组为需要存储数据的信息表,将所需要要存储的数据信息填入数组;
8.(3)定义混合数据信息结构store_info,该结构记录了数据记录的所有信息;包括名称、功能码、存储频率、数据存储表指针、存储表类型指针、以及所存储信息的个数;
9.(4)定义一个存放缓冲数据的二维数组buffer,循环存储所记录的数据;二维数组的行信息为缓存区的数量,二维数组列信息为写入存储介质的长度;
10.(5)系统启动时,将混合数据信息结构store_info的内容存储到所述二维数组buffer中;
11.(6)系统完成启动后,对运行过程中存储表store_list中数据进行周期性存储;
12.(7)将二维数组buffer的数据写入到存储设备。
13.进一步的,存储表结构store_list包括四种成员:
14.存储数据的序号num,类型定义为整型;
15.存储数据的名称name,类型为有符号字符型常量;
16.存储数据所占字节数size,类型为无符号字符型;
17.存储数据的全局变量指针pvar,类型为无符号字符型指针。
18.进一步的,所述步骤(2)定义常量数组datarec并进行初始化,具体为:
19.(2.1)常量数组中的元素为存储表结构store_list,常量数组datarec中包括所有系统内需要记录存储的数据,定义数组时将数组长度设置为空,数组长度由初始化变量决定;
20.(2.2)对数组中所有元素的内容进行设计,共包括四个元素:
21.①
第一个元素表示该变量存储的序号,起始从1开始;
22.②
第二个元素为存储变量的名称;
23.③
第三个元素为该变量所占的字节数,通过宏定义方式定义有无符号字符型为1,表示占用字节数为1,定义有无符号短整型为2,表示占用字节数为2,定义有无符号整型为4,表示占用字节数为4;
24.④
第四个元素为存储为全局变量的地址。
25.进一步的,所述步骤(3)定义混合数据信息结构store_info,具体为:
26.(3.1)混合数据信息结构store_info的名称mixname,类型为有符号字符型常量;
27.(3.2)混合数据信息结构store_info的功能码mixfunc,类型为无符号整型;
28.(3.3)混合数据信息结构store_info的存储频率mixrate,定义类型为浮点型,单位为hz;
29.(3.4)存储表store_list类型指针plist,这个元素直接关联设置的常量数组datarec;
30.(3.5)存储表结构store_list元素的个数为mixnum。
31.进一步的,所述将混合数据信息结构store_info存储到所述二维数组buffer中,具体为:
32.(5.1)将混合数据信息结构store_info进行存储,且混合数据信息store_info连续存储n次,n为正整数;
33.(5.2)存储的内容包括混合数据信息结构的名称mixname、混合数据信息结构store_info的功能码mixfunc,混合数据信息结构store_info的存储频率mixrate;
34.(5.3)计算存储表store_list中的名称的长度size,并使用内存拷贝函数将名称name拷贝到发送缓冲数组中;循环将存储表store_list中的信息赋值到发送缓冲数组中,包括每一个表元素的名称所占的空间、表的名称、以及数据的空间,通过保存日志文件方式将发送缓冲数组中的数据进行保存,进入下一步。
35.进一步的,所述步骤(6)对运行过程中存储表store_list中数据进行周期性存储,具体为:
36.(6.1)在初始化过程中启动定时器,在定时器回调函数中周期性将存储表store_list中数据进行保存;
37.(6.2)存储报文设计包括两个起始字节、两个字节的总长度、四个字节的时间戳、一个字节的存储类型以及两个字节的功能码;
38.(6.3)遍历存储表store_list,根据所存数据的类型进行赋值;
39.(6.4)遍历完成后,计算所有数据的总长度并进行存储,放入数据帧的第三四个字
节,并对所有数据计算和校验,填入结尾码,放入存放缓冲数据的二维数组buffer。
40.进一步的,所述步骤(7)将二维数组buffer的数据写入到存储设备,具体为:
41.(7.1)以二维数组buffer的列为变量循环判断当前所存储的字节数len_now,当字节数大于等于存储设备一次允许写入的字节数write_once_len时,将二维数组该列的首地址以及要写入数据的长度write_once_len通过消息队列发送到数据存储操作线程;
42.(7.2)将二维数组的列数进行加一,若加一后数值为buf_num,则行数的值为0,并将上一列的未发送出去的数据,长度为len_now

write_once_len通过内存拷贝到这一列的内存最前面,并且移动指针到需要写数据的位置。
43.进一步的,本发明还提出一种数据记录存储系统,包括:
44.存储表模块:定义存储表结构,对软件系统所有需要记录的全局变量进行存储管理;
45.初始化模块:根据存储表结构定义常量数组datarec并进行初始化,常量数组长度由初始化变量决定,该数组为需要存储数据的信息表,将所需要要存储的数据信息填入数组;
46.混合数据信息结构定义模块:定义混合数据信息结构store_info,该结构记录了数据记录的所有信息;包括名称、功能码、存储频率、数据存储表指针、存储表类型指针、以及所存储信息的个数;
47.二维数组定义模块:定义一个存放缓冲数据的二维数组buffer,循环存储所记录的数据;二维数组的行信息为缓存区的数量,二维数组列信息为写入存储介质的长度;
48.启动模块:系统启动时,将混合数据信息结构store_info的内容存储到所述二维数组buffer中;
49.存储模块:系统完成启动后,对运行过程中存储表store_list中数据进行周期性存储;将二维数组buffer的数据写入到存储设备。
50.本发明与现有技术相比的有益效果是:
51.本发明提出了一种具有可扩展性的数据记录存储方式,设计了一个存储表结构,将系统中所有需要存储数据的变量进行管理,在软件运行过程中实时根据地址去获取变量的值。在低优先级线程中对全体变量进行周期性存储。采用这种方式处理不仅具有强扩展性,用户可以随意增加所需记录的变量。而且不影响系统的核心控制时序。
附图说明
52.图1为一种具有可扩展性的数据记录存储方法。
具体实施方式
53.下面结合附图对本发明的具体实施方式进行进一步的详细描述。
54.数据记录是计算机控制系统中重要的功能,根据记录的过程数据可以对系统发生故障时的状态进行追溯,并对系统优化、参数调节起到指导作用。传统的数据记录,通常是在控制系统关键控制位置加入存储设备操作,将数据记录到存储设备,这种处理方式的缺点是在时序性较高的地方增加系统数据输出对控制效率产生影响,且对存储设备的操作具有时间不确定性,对系统的核心控制容易产生重大灾难性的影响。控制系统中往往有大量
参数需要进行记录,如果分散记录,则对数据的维护性成本要求比较高,且系统软件的可扩展性、可维护性较差。因此,本发明提出了一种新型的数据记录方法,在不影响系统核心控制的前提下,将系统数据记录功能集成统一、系统参数记录具有更强的扩展性。
55.如图1所示,本发明提出一种具有可扩展性的数据记录存储方法,包括如下步骤:
56.1、定义存储表结构,对软件系统所有需要记录的全局变量进行管理,包括存储数据序号,存储数据名称,数据所占字节数,以及无类型指针。
57.2、根据1所设计的结构定义常量数据,数组长度由初始化变量决定,将所需要要存储的数据信息填入数组。
58.3、定义混合数据信息结构,包括名称,功能码,存储频率、数据存储表指针,存储表类型指针,以及所存储信息的个数。
59.4、定义一个存放缓冲数据的二维数组,循环存储所记录的数据,数组的行信息为缓存区的数量,数组列信息为写入存储介质的长度。
60.5、将混合数据信息结构的内容进行存储,包括名称、功能码、存储频率,包括每一个变量的名称、类型。
61.6、周期性对数据进行存储,按照报文格式,将每一个变量按照存储表结构将信息存储二维缓冲区。
62.7、按照数组列进行遍历,循环将数据写入外部存储介质。
63.本发明提出的具有可扩展性的数据记录存储方式,设计了一个存储表结构,将系统中所有需要存储数据的变量进行管理,在软件运行过程中实时根据地址去获取变量的值。在低优先级线程中对全体变量进行周期性存储。采用这种方式处理不仅具有强扩展性,用户可以随意增加所需记录的变量。而且不影响系统的核心控制时序。
64.实施例:
65.s1:定义一个存储表结构store_list,对软件系统中所有需要记录的全局变量进行存储管理,此结构包括四种成员:
66.(1)存储数据的序号num(类型定义为整型)
67.(2)存储数据的名称name(类型为有符号字符型常量)。
68.(3)存储数据所占字节数size(类型为无符号字符型)。
69.(4)存储数据的全局变量指针pvar(类型为无符号字符型指针)。
70.s2:设置常量数组datarec并进行初始化(datarec为数组名),该数组为需要存储数据的信息表。
71.(1)数组中的元素为存储表结构store_list,常量数组datarec中包括所有系统内需要记录存储的数据,为了系统的可扩展型,定义数组时将数组长度设置为空(不填入具体数值),数组长度由初始化变量决定(获取数组长度使用sizeof(datarec)。
72.(2)对数组中所有元素的内容进行设计,共包括四个元素:

第一个元素表示该变量存储的序号,起始从1开始;

第二个元素为存储变量的名称,如滚动“roll”,俯仰“pitch”,航向“yaw”等;

第三个元素为该变量所占的字节数,通过宏定义方式定义有无符号字符型为1,表示占用字节数为1,定义有无符号短整型为2,表示占用字节数为2,定义有无符号整型为4,表示占用字节数为4;

第四个元素为存储为全局变量的地址,不同的变量取址有不同的指针类型,该元素类型定义为void*类型,可以转化为任意类型。s1和s2两步
定义了一个需要存储数据信息表。
73.s3:定义混合数据信息结构store_info,此结构记录了数据记录的所有信息:
74.(1)混合数据信息结构store_info的名称mixname,类型为有符号字符型常量,
75.(2)混合数据信息结构store_info的功能码mixfunc,类型为无符号整型
76.(3)混合数据信息结构store_info的存储频率mixrate,定义类型为浮点型,单位为hz。
77.(4)存储表store_list类型指针plist,这个元素直接关联s2设置的常量数组datarec
78.(5)存储表结构store_list元素的个数mixnum。
79.s4:定义一个存放缓冲数据的二维数组buffer,循环存储所记录的数据。数组的行信息为缓存区的数量buf_num,数组的列信息为一次写入存储介质的长度once_wr_size加上数据溢出防护长度extra_len,(数据溢出防护长度extra_len为了防止系统存入的数据大于一次写入存储介质的长度,需要补充额外的长度存放,长度为extra_len)。
80.s5:系统启动时,将混合数据信息结构store_info存储到s4所定义的二维数组buffer中。
81.(1)将混合数据信息结构store_info进行存储,考虑到介质写操作有失败的可能,因此将混合数据信息store_info要连续存储n次(根据介质的特性设置,一般sd卡为3)。
82.(2)存储的内容包括混合数据信息结构的名称mixname、混合数据信息结构store_info的功能码mixfunc,混合数据信息结构store_info的存储频率mixrate。
83.(3)计算存储表store_list中的名称的长度size,并使用内存拷贝函数将名称name拷贝到发送缓冲数组中。循环将存储表store_list中的信息赋值到发送缓冲数组中,包括每一个表元素的名称所占的空间、表的名称、以及数据的空间,通过保存日志文件方式将发送缓冲数组中的数据进行保存,保存方法转到s7。
84.s6:系统完成启动后,对运行过程中存储表store_list中数据进行周期性存储。
85.(1)在初始化过程中启动定时器,在定时器回调函数中周期性将存储表store_list中数据进行保存,存储报文使用下一步设计的存储报文。
86.(2)存储报文设计包括两个起始字节(0x55 0xaa)、两个字节的总长度。四个字节的时间戳、一个字节的存储类型,以及两个字节的功能码。
87.(3)遍历存储表store_list,根据所存数据的类型进行赋值(根据s2中的定义的类型不同的变量占用缓冲区的一个字节,两个字节和四个字节)。
88.(4)遍历完成后,将计算所有数据的总长度并进行存储,放入数据帧的第三四个字节。并对所有数据计算和校验,填入结尾码(0x66和0x99),放入存放缓冲数据的二维数组buffer。
89.s7:将二维数组buffer的数据写入到存储设备。
90.(1)以二维数组buffer的列为变量循环判断当前所存储的字节数len_now,当字节数大于等于存储设备一次允许写入的字节数write_once_len时,将二维数组该列的首地址以及要写入数据的长度write_once_len通过消息队列发送到数据存储操作线程。
91.(2)将二维数组的列数进行加一,若加一后数值为buf_num,则行数的值为0,并将上一列的未发送出去的数据,长度为len_now

write_once_len通过内存拷贝到这一列的内
存最前面,并且移动指针到需要写数据的位置。
92.上述具有可扩展性的数据记录存储方法,在不影响系统核心控制的前提下,将系统数据记录功能集成统一、系统参数记录具有更强的扩展性。
93.本发明说明书中未作详细描述的内容属于本领域的公知技术。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献