4

我的第一种方法是使用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集合的路径是可以的(至少我可以在添加后读取它),但是这一切在最后一行持平,错误如下:

COM 服务器错误信息

这条消息被证明是相当神秘的,所以我真的不知道出了什么问题,除了写文件有一些麻烦。问题是我真的不需要CANoe为我写东西,只要我能以BLF某种方式获得包含的数据。

所以我的另一个想法是将BLF作为离线源附加到 CANoe'aConfiguration窗口中,保存配置并从脚本开始测量。这样我就可以将数据放在一个Trace窗口中(默认情况下限制为 4000 个事件,但我认为应该是可编辑的),但到目前为止还没有找到使用 COM 接口获取它的方法。

我觉得应该有一些更简单的方法来做到这一点。毕竟有Logging File Conversion对话框,CANoe合乎逻辑的方法是使用 COM 接口以某种方式访问​​它。我只是似乎无法在文档的任何地方看到写的内容。

任何帮助将非常感激。

4

1 回答 1

3

您可以使用以下脚本通过 CANoe 或 CANalyzer 的自动化来自动化文件格式转换。该解决方案由一个 Windows 批处理文件和一个VisualBasicScript文件组成。批处理文件convert_this_folder.bat必须通过双击启动。它包含以下行,该行为批处理文件所在文件夹中的所有 BLF 日志文件调用另一个脚本:

for /F %%x in ('cd') do for %%i in (*.blf) do c:\windows\system32\wscript.exe canoe_convert.vbs %%i %%x

VBS 脚本canoe_convert.vbs包含以下几行:

'-----------------------------------------------------------------------------
' converts the filenames which are passed via startup parameter to ASC files with the help of CANoe
'-----------------------------------------------------------------------------
Dim src_file, dst_file, pos

Set App         = CreateObject("CANoe.Application")
  Set Measurement = App.Measurement
  Set args        = WScript.Arguments

  ' read first command line parameter
  arg0=args.Item(0)
  arg1=args.Item(1)

  If Measurement.Running Then
    Measurement.Stop
  End If

  Wscript.Sleep 500

  '---------------------------------------------------------------------------
'  you have to create an empty CANoe configuration and specify the path and file name below
'-----------------------------------------------------------------------------
  App.Open("d:awayawayempty_config.cfg")
'-----------------------------------------------------------------------------
' create destination file name and append .asc   -- you could change this to different file format that is supported by CANoe
  src_file=arg1 & "" & arg0
  dst_file=src_file & ".asc"

  Set Logging  = App.Configuration.OnlineSetup.LoggingCollection(1)
  Set Exporter = Logging.Exporter

  With Exporter.Sources
    .Clear
    .Add(src_file)
  End With

  ' Load file
  Exporter.Load

  With Exporter.Destinations
    .Clear
    .Add(dst_file)
  End With    

  Exporter.Save True

  App.Quit
  Set Exporter = Nothing
  Set Logging  = Nothing
  Set App      = Nothing
  Set args     = Nothing
  Set Measurement = Nothing

你必须做的:

  1. 创建一个空的 CANoe 配置并保存。
  2. 将这个空配置的路径和文件名输入到VBS文件中(插入的地方有视觉标记)
  3. 将所有要转换的日志文件复制到2个脚本文件所在的同一目录中。
  4. 如果打开,请关闭 CANoe。
  5. 双击 convert_this_folder.bat 开始批量转换。对于每个文件 CANoe 启动,文件被转换并且 CANoe 被关闭。这是通过 COM 自动化完成的。整个转换过程可能需要一些时间,在此期间请不要理会您的 PC,不要执行其他任务。

脚本文件附在下面。您可以通过将 VBS 文件中的“CANoe.Application”替换为“CANalyzer.Application”来将脚本调整为 CANalyzer。必须另外创建空的 CANalyzer 配置。

转换类型可以调整如下: .BAT 文件中的源文件类型:将 .BLF 更改为支持的请求源文件格式 .VBS 文件中的目标文件类型:将 .ASC 更改为支持的请求目标文件格式。

于 2019-10-17T10:57:01.340 回答