我的第一种方法是使用python-can(因为它增加了对解析 2.0.0 版本的 BLF 文件的支持),如下所示:
import can
filename = "logfile.blf"
logging = can.BLFReader(filename)
for msg in logging:
print(msg)
但这导致我向开发人员报告了一个错误。BLF格式是专有的并且有些秘密,所以我知道在开源库中支持它可能会有问题。
因此,我考虑使用 Vector :提供的解决方案来做这件事COM,但到目前为止还没有提出解决方案。
(下面的代码片段是vbscript在文档中使用的CANoe,但我也有Python使用完全相同的脚本win32com)
所以首先我尝试了这个:
Dim app, measurement, loggings, logging, exporter, expfilter
Set app = CreateObject("CANoe.Application")
Set loggings = app.Configuration.OfflineSetup.LoggingCollection
loggings.Add("D:\path\dummy3.blf")
Set logging = loggings(1)
Set exporter = logging.Exporter
Set expfilter = exporter.Filter
exporter.Load
For Each symbol In exporter.Symbols
expfilter.Add(symbol.FullName)
Next
For Each message In exporter.Messages
expfilter.Add(Message.FullName)
Next
expfilter.Enabled = True
Dim dests
Set dests = exporter.Destinations
dests.Clear
dests.Add("D:\path\dummy3.csv")
exporter.Save True
这至少可以工作,因为它BLF被加载到Exporter对象中,我可以读取FullName所有对象和对象的属性,Symbol而且Message我确定添加到其Destinations集合的路径是可以的(至少我可以在添加后读取它),但是这一切在最后一行持平,错误如下:
这条消息被证明是相当神秘的,所以我真的不知道出了什么问题,除了写文件有一些麻烦。问题是我真的不需要CANoe为我写东西,只要我能以BLF某种方式获得包含的数据。
所以我的另一个想法是将BLF作为离线源附加到 CANoe'aConfiguration窗口中,保存配置并从脚本开始测量。这样我就可以将数据放在一个Trace窗口中(默认情况下限制为 4000 个事件,但我认为应该是可编辑的),但到目前为止还没有找到使用 COM 接口获取它的方法。
我觉得应该有一些更简单的方法来做到这一点。毕竟有Logging File Conversion对话框,CANoe合乎逻辑的方法是使用 COM 接口以某种方式访问它。我只是似乎无法在文档的任何地方看到写的内容。
任何帮助将非常感激。
