一言难尽 |
其实,很多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个字节进行截取。