发明名称 一种分布式实时测试系统多路测试数据压缩与归并方法
摘要 一种分布式实时测试系统多路测试数据压缩与归并方法,有九大步骤:一、根据变量特性制定收集策略;二、查询缓存中最新一帧数据,如果ID与变量值相同,则保存时间标签和变量ID;三、主控节点将实时仿真节点传来数据保存各文件中;四、归并处理信息并保存数据结构中;五、遍历数据文件,如果只有时间标签和变量ID,则从前一帧数据中获取变量值补齐本帧数据;六、获取所有文件第一帧数据,并且比较得出时间标签最小的一帧;七、比较获得的时间标签和前一帧是否相同,若不同,则向输出文件写一行数据;八、将获取的这帧数据值更新到id_value_map中,并且将变化信息更新以便下次比较;九、循环执行步骤六—八,直至所有文件都读取完毕,将最后一行写入输出文件中。
申请公布号 CN103488564A 申请公布日期 2014.01.01
申请号 CN201310418563.8 申请日期 2013.09.13
申请人 北京航空航天大学 发明人 杨顺昆;刘斌;司维
分类号 G06F11/36(2006.01)I;G06F17/30(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种分布式实时测试系统多路测试数据压缩与归并方法,其特征在于:它包括以下步骤:步骤一:减少测试数据的收集次数;测试系统收集数据的方式有两种,一种是需要按照某个时间间隔收集的数据,比如按照5ms的周期采集模拟量或者每隔1ms查询某个接口上的电平是否变为高电平;另一种方式是不需要主动地收集数据,比如串口上的数据只需在板卡检测到总线上有新数据并触发中断才收集数据;通过对这两种数据进行区分并确立不同的收集策略,减少测试过程中需要传送的测试数据,这是对测试数据进行的第一层压缩处理;步骤二:在收集数据的过程中,每一帧测试数据包含以下信息:变量ID,收集到数据的时刻对应的时间标签,变量的数值;变量ID用于区分测试过程中的各个不同的变量,时间标签用于把当前收集到的数据和历史数据进行区分;在设计中,每一帧数据在存放到一级缓存中之前,对缓存中前一帧数据进行比对,如果变量ID与变量值都相同,则只在缓存中添加一帧时间标签和变量ID,不需要再收集重复的变量值;由于不需要移动缓存的索引,不需要进行指针运算操作,这种比较消耗很小,然而在以很高频率收集某个变量值的情况下可以去掉很多冗余信息;在测试完成后分析数据的时候,只要从前一帧数据中获取变量的值即可还原所有的测试数据;步骤三:测试过程中主控节点将实时仿真节点传来的测试数据按照节点保存到不同的文件中;测试过程中实时仿真节点将测试数据发送到主控节点,主控节点把测试数据保存到磁盘文件中,每个实时仿真节点对应一个文件,由于实 时仿真节点发送数据的过程具有时序性,故文件中的数据已经按照时间标签进行了排序,测试停止后对测试数据进行还原和归并处理;步骤四:对数据归并处理进行准备;获取数据归并处理需要的信息并将信息保存到数据结构中,具体包括以下几个方面:需要进行归并的各文件,将其索引保存到一个数据结构中;在不同的系统中,保存的文件索引和所用的数据结构可能有所不同,可以直接保存文件路径,也可以保存打开文件对应的ifstream对象或者CFile对象;采用的数据结构采用数组、链表、vector,对方法本身的实现并无影响;另外,本次处理的测试数据属于哪些变量也是必须的信息,每个变量的值使用一个字符串保存下来,每个变量的ID对应一个字符串组成一对,将其保存入map中,本map用于保存在一个时间标签内的所有变量的值,将其命名为id_value_map;定义一个vector用于记录每个时间标签内或者说每个时刻值哪些变量发生了变化,归并后的数据文件每一行记录一个时间标签的所有测试数据,在行尾用分号分割的字符串将哪些变量有变化表示出来,例如:第一二列数据在本时刻有变化则行尾字符串为1;2,在数据处理过程中将变量是否变化的信息保存在vecModifiedCols中;步骤五:按照顺序对所有数据文件进行处理,遍历文件中所有数据,如果发现某一帧数据只有时间标签和ID没有保存变量值,则从前一帧数据中获取变量值补齐本帧数据;步骤六:遍历所有的文件,获取文件中第一帧数据,由于所有文件中的数据都是各实时仿真节点按照时序关系进行收集的,所以文件的第一帧数据肯定是本文件中时间标签最小的一帧,也就是说产生时间最早的一帧数据;比较各个文件的第一帧数据得到其中时间标签最小的一帧数据,如果获取某一文件第一 帧数据失败,则说明该文件中的数据已经全部被获取,从保存文件索引的数据结构中将其删除,下次遍历不必再打开这个文件;步骤七:判断所获得的这帧数据中的时间标签是否与记录的上一帧数据的时间标签相等,如果不相等,则说明这是属于新的时间标签的测试数据,故前一个时间标签的所有测试数据都已获取完毕,应该将上一时间标签的测试数据都输出到归并后的输出文件中;如果相等,则说明这一行数据还没有拼接完成,不需要向输出文件中写数据,继续进行步骤八即可;这些数据在输出文件中应该存在于同一行,首先向文件中写入时间标签,然后从id_value_map中获取变量的值,按照顺序输出到同一行,最后将vecModifiedCols拼成一个以分号分割的字符串输出到行尾;每列中间可以空格或者制表符进行分割,该分割符只要能将各列分开即可;输出一行数据后将vecModifiedCols清空以便保存下一行数据的变量变化信息,如果是第一帧数据也就是说上一帧数据的时间标签为0则不需要向输出文件中写数据;步骤八:将当前获取的这帧测试数据的时间标签更新到last_lable中,以便下次获取测试数据后进行比较;同时根据这帧测试数据中的变量ID获取变量在步骤四所述id_value_map中的位置,将所得位置信息插入到mapModifiedCols中并且将变量的值写入步骤四所述id_value_map中对应的位置;步骤九:循环执行步骤六到步骤八,直至所有文件都已读取完毕,此时保存文件索引的数据结构为空,id_value_map中存有最后一行的数据,将其写入输出文件中即完成多路测试数据归并操作。
地址 100191 北京市海淀区学院路37号