鸡肋的Vector公司的binlog.dll

文摘   汽车   2024-04-08 21:13   上海  

一言难尽

Vector确实是很牛逼的,我们必须得承认。
但是牛逼的定义是多维度的,产品功能全面叫做牛逼,能让不掏钱的用户用着不那么舒服,也算是本身。
师子一号曾经介绍过Vector公司的blf文件,它是汽车网络发展史上具有轰动意义的标准。
总线架构第1讲,blf文件及blf读写接口
Vector公司给这个blf文件发布了编解码规范,并且还发布了一个dll文件,专门用于操纵这样一个文件。

这也就意味着,你可以用任意编程语言,调用这个C规范的dll,实现对blf文件的读写操作。
大师云集
对于这样的事情,NI公司肯定是跟在前面的,很快就官网发布了调用binlog.dll的示范工程源码,如下所示:


师子一号对此当然是爱不释手,第一时间就进行了尝试。
但是尝试下来,发现其效率较差,速度较慢。
有多慢呢?
上海同星公司在表达自己产品性能强悍的时候,说自己可以每秒发送两万多帧。
而Vector官方发布的这个binlog.dll,其每秒只能读取1000帧左右
同行们都知道,车载网络负载率一般是40%左右,500k波特率的话,一秒大概2000多帧。
也就是说,你录制10s的报文,用vector的这个binlog.dll,需要20秒才能读完。
再换句话说,它比在线回放还要慢!!!
师子一号一开始以为是LabVIEW的锅,但是在尝试了C#、python分别调用这个dll之后,性能没有任何改善,一秒钟还是1000帧左右!
草!
所以,师子一号有理由怀疑,这个dll内部可能埋了若干不必要的延时函数,避免读取速度太快,把电脑累坏了。
或者说读取太快了,干活节奏太快,不方便工程师喝茶摸鱼。
由此可见,Vector公司还是相当贴心的,太懂工程师了。

寇可往,我亦可往

其实,很多ide早就知道了这个事情,只是看破不说破,以后好见面。

既然blf编码解码是有规律的,他们就选择了另立炉灶,跳过binlog,直接对二进制文件进行编解码!

python圈子里,有大名鼎鼎的python-can,LabVIEW圈子里,有牛逼轰轰的OpenG。

python-can可以通过pip直接安装。

OpenG的blf例程就在上面那个页面,和labview调用binlog.dll在一起,一个是经过dll,一个是跳过dll

说实话,这俩库,读取blf文件的速度真是相当快。

但是,幽默的是,OpenG读取出来的,和python-can读取出来的不太一样,并最终证明了,OpenG是错误的

这个事情上,看来还是python-can更牛逼一些,所以师子一号站python-can。


总结

根据具体应用场景,选择适当的方案,是工程师的价值所在。

我们不能偏执必须用LabVIEW,虽然它在开发大型测试系统方面确实有优势。

我们也不能偏执使用python,虽然它确实简单。

必要时,我们要会混搭!

针对较小的blf文件(小于1M),推荐用LabVIEW调用dll读取,虽然慢了点,但是耗时也就几秒钟而已,而且简单可靠,做实时辅助分析确实好用。

针对较大的blf文件(1M以上),如果仅做临时回放展示,推荐直接用python,确实简单快捷。

对于较大的blf文件,如果做大型数据分析,并且需要配合CAN、Excel等,推荐用python把blf转成二进制文件,然后再用LabVIEW把二进制文件读取成报文帧,效果也是好得不要不要的。

转换二进制文件只需进行一次,而LabVIEW读取这个二进制文件时,速度飞快,粗略估计,1s约可以读取100M左右。

转成二进制的时候,一般可以定义M*N的U8数组,其中M是报文帧数,N一般是80,其中64个用于存储数据区(canfd最大64个字节嘛),另外16个用于存储时间戳、id等其他信息。

多数情况下,64个数据区不全是有效数据,无效区域要补0,尤其是标准帧才8个字节。读取成报文帧的时候,要使用dlc参数,对64个字节进行截取。


【推荐】
汽车行业,千万不要去干外包
恒润和意昂,两扇窗户,看懂行业的过去、当下和未来

总线10讲,东半球最好用的excel2dbc工具,永远免费送

车辆技术
致力于汽车研发测试技术的研究推广,帮助同行互通有无,为提升职业价值感,为产业崛起而奋斗!
 最新文章