【发布时间】:2018-11-09 00:53:36
【问题描述】:
我的第一种方法是使用python-can(因为它增加了对解析 2.0.0 版本的 BLF 文件的支持),如下所示:
import can
filename = "logfile.blf"
logging = can.BLFReader(filename)
for msg in logging:
print(msg)
但这导致我向开发人员报告了一个错误。 BLF 格式是专有的并且有些秘密,所以我知道在开源库中支持它可能会有问题。
然后我考虑使用 Vector 提供的解决方案:COM,但到目前为止还没有提出解决方案。
(下面的代码 sn-p 在 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 对象中并且我可以读取其所有Symbol 和Message 对象的FullName 属性并且我确定添加到它的路径Destinations 集合还可以(至少我可以在添加后阅读它),但是在最后一行中一切都变平了,错误如下:
这条消息被证明是相当神秘的,所以我真的不知道出了什么问题,除了写文件有一些问题。问题是我真的不需要CANoe 来为我写作,只要我能以某种方式获得BLF 中包含的数据。
所以我的另一个想法是将BLF 作为离线源附加到CANoe'a Configuration 窗口中,保存配置并从脚本开始测量。这样我就可以在Trace 窗口中获得数据(默认情况下限制为 4000 个事件,但我认为应该是可编辑的),但到目前为止还没有找到使用 COM 接口获取它的方法。
我觉得应该有一些更简单的方法来做到这一点。毕竟CANoe 中有Logging File Conversion 对话框,合乎逻辑的方法是使用COM 接口以某种方式访问它。我只是似乎无法在文档中的任何地方看到它。
任何帮助将不胜感激。
【问题讨论】:
标签: vbscript com pywin32 win32com canoe