matlab跑数据_汽车工程师如何更有效地管理测试数据

已经有很长一段时间没有聊工作上的事了。

还有一周的时间,今年的工作就结束了,所以今天打算写一写最近工作上的一些想法,作为2019年最后一篇工作上的分享。

这两个月,我经常会碰到类似的情况。


接到客户的一个问题反馈,我开始分析测试数据,数据中有一个信号感觉不太对劲,但是我不确定正常情况下应该显示什么值。

印象中之前有些测试记录过这个信号,于是我花了很长时间去找测试数据,结果由于之前的测试文件实在太多了,没能找到,只能拜托测试工程师帮忙重测一遍。


其他项目组的同事跑来问我:某某测试你们做过吗,结果怎么样?

我:恩,之前测过的,我们项目没有这个问题。

同事:你有没有这个测试的数据,我想对比下。

我看着6000个测试文件很无奈:测试数据有些多,你不急用的话,我迟会找到发给你。


类似的例子还有非常多,都是这两个月真实发生的。

总的来说,问题的根本在于,测试文件太多了,无法判断当前碰到的问题是否在曾经的测试中分析过。即使有印象之前测过,也无法在短时间内快速定位测试文件。

其实这几年我一直非常在意测试数据管理这个问题,自己也尝试了好几种方法。

从最开始的完善测试文件名的命名规则,尽可能地准确描述测试内容,到后来的用Excel管理测试数据,在备注里描述此次测试的主题与出现的特殊现象。

不过,这几种方法都没能很好地解决这个问题。

两个星期前,我碰到了一个控制器唤醒后诊断的问题,其中有个故障一直显示激活,影响了另一个功能的启动。

我在所有项目文档中搜了一遍,都没能找到这个故障的具体描述,这个故障可能是从一个祖传代码中复制过来的。

我很想知道,这几年其他项目有没有碰到这个问题,有没有测试分析过。

于是,我就用MATLAB写了一个脚本,把历史测试文件从头到尾读了一遍,把测过这个诊断的所有文件都过滤出来,然后进行分析。最终,这个问题解决的很顺利,完全不需要占用测试台重测一遍。

之后的几天,我一直在思考一个问题: 有多少测试台上在跑的测试是可以避免的?有多少问题是可以从历史测试文件中找到答案的?

于是我又开始了我新的一次测试数据管理的尝试,我决定要把6000个测试文件,将近200G的数据做成一个测试文件数据库,并开发一个对应的测试数据检索工具,整合到HaoFind中。

接下来简单地分享一下如何制作测试文件数据库以及检索工具。

01

定位测试文件路径

目前所有测试数据总计超过200G,并且未来测试数据只会越来越多,所以,我没有把所有测试数据拷到本地,而是保持原先的虚拟盘的路径。

这么处理的一个好处在于,除了避免因为复制文件过大导致耗时之外,之后在项目中进行问题交流时,不必通过邮件转发测试原始文件,而是直接转发测试文件路径。

这样能够更有效的追溯测试的所有信息,包括哪个项目,软件版本,测试目的等一系列信息。

实现所有测试文件路径的定位,本质上就是对一个多层的文件夹进行一次文件的历遍,然后过滤出目标格式的文件,比如dat格式的测试文件。

文件夹的历遍处理不太难,这个曾经是知识星球基础训练营中的一道题目,在MATLAB中使用dir函数,再配合while循环就能获取多层文件夹中所有文件的路径。

02

测试文件的读取

测试文件的读取,这个功能之前已经聊过很多回了,无论是HaoMeas还是dat2workspace,这两款工具的核心功能都是将测试文件中的信号数据读取到MATLAB中。

这里就不再过多赘述这个功能,对这部分有兴趣的朋友,可以戳下方的文章链接。

文章链接:汽车工程师的几个工作小技巧

03

数据库的保存形式

在数据库的制作上,我花了不少时间。

最开始的时候,我没有做过多的思考,直接用cell制作数据库,数据格式也是非常的简单明了,每一行有两个cell,第一个cell为测试文件的路径信息,第二个cell为测试文件中所有信号的信息,包括信号名与相应数值范围。

这种处理方式有一个非常严重的问题,就是数据库保存为mat文件之后,每次加载数据库都要花一分钟以上的时间,并且整个mat文件非常庞大,运行效率很低。

这里我推荐另一种处理方式,不要使用cell的形式,改用数值矩阵的形式。

在历遍所有测试文件之后,先定义一个cell,其中包括所有测试文件路径,再定义一个cell,其中包括所有不重复的信号名。

制作信号名cell的时候,请慎用unique函数,因为这个cell之后将会作为类似于查询index的字典,unique的处理会导致信号排序错乱。

然后就是每个测试测试文件的读取,读取测试文件路径cell中第n个文件,那就定义一个名为meas_n的数值矩阵,矩阵中所有信号的名称用信号cell中对应的index数值替代,如果出现信号cell中不包含的信号名时,那做一次信号cell新增信号处理。

用这种方式处理完之后,最终只需要两个cell,剩下的所有数据都可以通过数值矩阵的形式保存。

目前我保存的mat文件,大小只有2Mb,数据大小要把之前只用cell的形式小上数十倍,在加载mat文件时,加载速度也要快非常多。

04

数据信息

如果整个数据库的有效信息只包含测试文件的路径和相应的信号名时,这个工具的功能是非常局限的。

举一个很简单的例子,如果我要从这6000个测试文件中过滤出所有扭矩监控出现故障的测试,就目前的功能,最多只能定位出哪些文件中记录了扭矩监控的相关信号,却不能判断这些测试中是否有报故障。

所以,在读取测试文件时,除了读取信号名之外,还要读取每个信号的数值。

这部分我处理的逻辑是,如果这个信号所有不重复值不超过20个的话,保留所有不重复值。如果超过20个值的话,比如动态的速度,扭矩等信号,就提取其中最大值和最小值,作为数值范围保存在数据库中。

05

测试文件检索工具

正如之前所介绍的,测试文件检索工具之后将会集成在HaoFind文件中。不了解HaoFind这款工具的朋友,可以戳下方的链接。

文章链接:MATLAB如何制作文件检索工具

所以在做测试文件检索工具的时候,工具的界面设计都是基于HaoFind的框架设计的。

目前工具的开发情况是,功能设计已经都完成了,并且已经在日常工作中投入使用,不过界面设计还是非常粗略,还没有最终定型。因为数据涉及工作内容的原因,就不给大家展示操作动图了。

 9c124d7a43a968367203ee763b08df96.png

这次的工具设计还挺有意思的,是新的一次尝试,无按钮操作。整个工具的使用是通过关键词输入,鼠标选取对象以及快捷键操作。

左侧最上方的编辑框是用于测试文件名的关键词搜索。

第二行左侧的编辑框,用于信号名的关键词搜索,右侧编辑框用于信号范围的过滤。

左侧最下方的列表,是用于过滤条件的显示与操作,可以用过delete快捷键进行删除。

最右侧的列表,展示的是过滤之后的测试文件结果。

通过快捷键A能够在MATLAB环境下显示目标信号的曲线。通过快捷C能够复制测试文件路径并打开文件所在文件夹。

这个工具的功能,很大程度上和HaoFind是类似的,只是检索对象变了而已。

后记

又花了很长的一段篇幅去聊工作上的事,通篇看起来似乎有些无聊枯燥,不过关于这个主题的思考,我差不多整整想了3年,也尝试了3年。

对我而言,这是我作为汽车工程师的心结。

我相信,不仅仅只是在汽车工程中,其他行业的工作或许也是如此,工作的质量与效率,很大程度上取决于,信息的检索能力,信息的处理能力,信息的总结能力。

而今天聊的测试数据管理的这件事,数据库的制作就是信息的总结,测试文件的查找是信息的检索,在获取目标文件之后的分析过程,是信息的处理。而分析的经历会进一步加强自己对问题对产品的理解,一次很好的对问题进行总结的机会。

以上就是今天关于工作上的分享,希望这篇文章对大家平时的工作有所启发与帮助

作者介绍打浦桥程序员

汽车行业工程师

目前在德国从事系统工程

和你一起用MATLAB的角度看世界

8a37b4314ea3abdf7a571aab1ba0002e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值