python中使用candas解析转换blf文件

上篇文章介绍了一种blf的解析方式,就是使用cantools和python-can工具包,先加载dbc文件,再解析blf文件,其实还有一种更高级的包可以做这个工作,那就是candas。

事实上,candas底层也是使用的cantools和python-can,只不过做了高层封装,提供了更加丰富的功能,它可以直接把数据转成dataframe,还可以绘图,下面就来看怎么用candas解析blf文件。

因为candas是基于cantools和python-can开发的,所以,它也需要dbc文件,但是它这个库比较特别的是,它需要传一个文件夹参数,也就说,我们要把dbc文件所在文件夹传到参数列表里,而且blf文件要传文件名,就是不要带扩展名“.blf”下面是具体代码。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime
import candas as cd
from asammdf import MDF
database_logpath = r"C:\Users\master01\Downloads\1.28\1-28-(20-21)"
dbc_logpath = r"C:/Users/master01\Downloads/"
db_version = "LR19"
dl = cd.load_dbc(dbc_logpath)

log_data = cd.from_file(dl, database_logpath, verbose=True)
s1 = log_data['FCU_Stk_ClntIn_Pres_kPa']
#print(s1[0][0],s1[1][0],s1[2][0])

all_sig_names = []
for msg in dl.messages:
    for sig in msg.signals:

        all_sig_names.append(sig.name)
df = log_data.to_dataframe(all_sig_names,mode="sampling",frequency=1)
df.set_index('time',inplace=True)
mdf = MDF()
mdf.append(df)
mdf.save("blfconvert.mf4",overwrite=True)

可以看到,第一步,加载dbc文件,注意,要传dbc所在文件夹,然后用candas.from_file(dbc,blffile,verbose=True),返回的log_data是catalog类型,这个类有个to_dataframe方法,这个方法可以把数据直接转成dataframe,非常方便,这个方法有几个参数,第一个是要转的信号名列表,第二个是转换模式,默认是concat,因为blf和mf4一样,允许数据是不对齐的,这样能尽可能保持原始数据的样子,只不过转出的数据比较大,另外一种模式就是采样,后面跟一个采样频率,这样转出来的数据都是对齐的了,频率都一致,数据要比上一个模式小一点。我这个代码最后是把dataframe转成了mf4,用canape看比较方便。

这个库其实还是蛮好用的,但是开发的工具最后没有用这个库,而是用底层库cantools和python-can解析的,原因是用这个库后,开发时功能是没问题的,但是用pyinstaller打包后就有问题了,总是报错,查了资料貌似有共享库冲突,最终没有解决,所以不得不放弃了,如果不打包还是ok的,高层api还是要方便一些,就是参数没太懂为什么要搞成那个样子。

当然,candas还有许多其它功能,比如绘制各种图表,还有一些不知道有什么用的功能,感兴趣的可以看看官方文档。

猜你喜欢

转载自blog.csdn.net/zy1620454507/article/details/129856152
今日推荐