事实上,今天是想分享最近碰到的一件比较懊恼的问题。

作为汽车行业的系统工程师,平时的工作内容除了系统需求的分析与系统架构的设计之外,还有一个比较重要的任务就是issue的处理以及测试数据的分析。

在很长一段时间以来,面对形形色色的issue,手头上有上百个INCA的测试结果。

前不久恰巧接到一个issue,而这个问题在半年前的测试文件中出现过。于是项目组内部希望能够将这次的现象与先前的处理结果做一次对比。

那么,问题就来了,我怎么从好几百个测试文件中给你找到那个唯一的目标文件。难道我要通过MDA逐一打开测试文件进行查看么?

而整个过程中,最令人头疼的是,不同的工程师,在测试之后,对测试文件的命名习惯是不尽相同的。甚至有时候由于测试任务比较紧迫,会出现序号命名的形式。

我作为测试数据的接收者,我没有办法在每次收到文件之后进行备注解释,从时间效率上而言,这是一件不大现实的操作。

同时,每一个测试文件中所涵盖的特性不单单只有一个。你是不可能注明所有的测试特性,这个文件是关于NEDC测试,这个测试是否OK,这个测试出现过压故障,这个测试扭矩请求超过260Nm,这个测试车速出现抖动,这个测试后桥结合。。。我的天,这是要给文件名写一篇论文么?

针对这个现象,我曾尝试与周围的同事探讨过,目前是否有一款dat测试文件的管理工具,能够快速过滤出符合条件的测试文件。然而,答案是否定的。作为妥协方案,他们认为可以尝试做一个Excel的数据库,对测试文件进行备注管理。

但是,我不觉得这是一个很明智的解决方案。

于是,HaoMeasure这款工具诞生了。

但是,由于这篇文章写的比较仓促,HaoMeasure目前还是处于draft的阶段。正如你们所看到的,工具界面的设计目前看来还是很糟糕的,同时仅仅只是实现了基础功能,还有几项功能需要时间去实现。

而HaoMeasure这款工具,我计划集成在建模工具中的。最终的打算,是希望这个GUI能够成为一款适用于汽车行业工程服务的小工具。只是初心,需要时间的考验。

接下来我将通过一个动图展示一下这个工具。

这个动图所展示的操作是,从三个dat测试文件中过滤出转速超过8000转的测试文件。整个过程所涵盖的功能细节包括:

- 多文件选取

- 信号名的模糊过滤

- 信号名选取

- 信号值范围选取

- 条件过滤

- 信号值plot显示

上面的动图仅仅只是其中一个例子,接下来将会从各个细节更加详细的描述这个工具。

信号名的过滤

在加载所有的dat文件之后,信号名的list中将会显示所有dat文件中出现的信号名。

HaoMeasure支持多个关键词模糊。就拿搜索故障信号为例,下面这个动图展示了如何快速过滤出VCU的故障信号。

相比起以前惯性的通过按钮去调动过滤的动作,这个工具中所有edit栏中事件的调用都是采用回车激活的。

信号值范围的选取

这个工具事实上才是HaoMeasure主要功能的发起点。应用的情景有许多,比如

1) 过滤出BMS产生故障的测试文件

2) 过滤出扭矩请求高于200Nm的测试文件

3) 过滤出BMS电压低于350V的测试文件

类似的需求还有许多,可以通过对信号值范围的设定,并且能够进行不同条件的组合搜索,过滤出最终的目标文件

dat文件的读取

读取dat文件这项功能是整个工具最重要的一环。

事实上,这项功能的代码并不是我写的。在写这个工具之前,我曾在网上去查找学习如何读取INCA的dat文件,后来在MATLAB的官网上找到一份材料,特别有用。有兴趣的朋友,可以在公众号后台回复“测试读取”获取下载链接,去学习其中的源代码。

在介绍完HaoMeasure之后,回归到问题的本身上来,除了自己写一个工具之外,还有许多很简单的办法可以使用。比如,可以通过一个For循环例遍所有dat文件,通过MATLAB官网上mdfimport的函数依次读取dat文件中的信号,进行范围筛选。

相比起写一个GUI,这种方法在时间效率上而言应该是最高效的做法。当然,正如我在上一篇文章中提到的,我个人更倾向于写一个GUI,“”。

在帖子的最后,来一个抽奖。一如既往,中奖的朋友,我将送出一张100元的星巴克卡券,聊表心意。

不过这次抽奖的规则略有不同。针对这次文章的主题,在公众号中这篇文章下方留言分享你曾用MATLAB解决过的抓狂问题,我将会依次发一个序号。2018年9月15日将会从中抽取一位,在评论区公布中奖者。

最后祝大家,周末愉快

戳一下广告 = 程序员写作的动力