欢迎关注《汽车软件技术》公众号,回复关键字获取资料。

Vector工具录制的数据,一般有ASC和BLF两种格式,本文介绍ASC。

1.BLF定义

BLF(binary logging format)即二进制数据文件。

2.BLF查看

因其是二进制文件,且又做了数据压缩,已经无法直接看到物理数值。需要在Vector工具中回放。

3.BLF组成

安装完Vector软件后,可以在Doc\LoggingFormat_BLF目录下看到《CAN_and_General_BLF_Format.pdf》(回复“BLF文档"获取)。此文档详细说明了BLF内容。BLF内由一系列数据块组成。介绍几个常用的:

1)VBLObjectHeaderBase

Parameter

Type

mSignature

DWORD

mHeaderSize

WORD

mHeaderVersion

WORD

mObjectSize

DWORD

mObjectType

DWORD

2)VBLObjectHeader

Parameter

Type

mBase

VBLObjectHeaderBase

mObjectFlags

DWORD

mClientIndex

WORD

mObjectVersion

WORD

mObjectTimeStamp

ULONGLONG

3)VBLCANMessage

Parameter

Type

mHeader

VBLObjectHeader

mChannel

DWORD

mFlags

BYTE

mDLC

BYTE

mID

DWORD

mData[8]

BYTE

4.BLF解析

因BLF的保密性,无法直接读到值,需要使用Vector提供的binlog.dll,相关的例子可以参考《C:\Users\Public\Documents\Vector\CANoe\9.0 (x64)\CANoe Sample Configurations\Programming\BLF_Logging》。下面介绍《bl.c》的函数read_test。(回复“BLF例子”,可以获取ector例子)

/******************************************************************************

*                                                                             *

* read BL file                                                                *

*                                                                             *

******************************************************************************/

int read_test( LPCTSTR pFileName, LPDWORD pRead)

{

HANDLE hFile;

VBLObjectHeaderBase base;

VBLCANMessage message;

VBLEnvironmentVariable variable;

VBLEthernetFrame ethframe;

VBLAppText appText;

VBLFileStatisticsEx statistics = { sizeof( statistics)};

BOOL bSuccess;

if ( NULL == pRead)

{

return -1;

}

*pRead = 0;

/* open file */

hFile = BLCreateFile( pFileName, GENERIC_READ);

if ( INVALID_HANDLE_VALUE == hFile)

{

return -1;

}

BLGetFileStatisticsEx( hFile, &statistics);

bSuccess = TRUE;

/* read base object header from file */

while ( bSuccess && BLPeekObject( hFile, &base))

{

switch ( base.mObjectType)

{

case BL_OBJ_TYPE_CAN_MESSAGE:

/* read CAN message */

message.mHeader.mBase = base;

bSuccess = BLReadObjectSecure( hFile, &message.mHeader.mBase, sizeof(message));

/* free memory for the CAN message */

if( bSuccess) {

BLFreeObject( hFile, &message.mHeader.mBase);

}

break;

case BL_OBJ_TYPE_ENV_INTEGER:

case BL_OBJ_TYPE_ENV_DOUBLE:

case BL_OBJ_TYPE_ENV_STRING:

case BL_OBJ_TYPE_ENV_DATA:

/* read environment variable */

variable.mHeader.mBase = base;

bSuccess = BLReadObjectSecure( hFile, &variable.mHeader.mBase, sizeof(variable));

/* free memory for the environment variable */

if( bSuccess) {

BLFreeObject( hFile, &variable.mHeader.mBase);

}

break;

case BL_OBJ_TYPE_ETHERNET_FRAME:

/* read ethernet frame */

ethframe.mHeader.mBase = base;

bSuccess = BLReadObjectSecure( hFile, &ethframe.mHeader.mBase, sizeof(ethframe));

/* free memory for the frame */

if( bSuccess) {

BLFreeObject( hFile, &ethframe.mHeader.mBase);

}

break;

case BL_OBJ_TYPE_APP_TEXT:

/* read text */

appText.mHeader.mBase = base;

bSuccess = BLReadObjectSecure( hFile, &appText.mHeader.mBase, sizeof(appText));

if ( NULL != appText.mText)

{

printf( "%s\n", appText.mText);

}

/* free memory for the text */

if( bSuccess) {

BLFreeObject( hFile, &appText.mHeader.mBase);

}

break;

default:

/* skip all other objects */

bSuccess = BLSkipObject( hFile, &base);

break;

}

if ( bSuccess)

{

*pRead += 1;

}

}

/* close file */

if ( !BLCloseHandle( hFile))

{

return -1;

}

return bSuccess ? 0 : -1;

}

1)hFile = BLCreateFile( pFileName, GENERIC_READ);

以读取的方式,打开BLF文件

2)BLGetFileStatisticsEx( hFile, &statistics);

读取文件统计信息

3)while ( bSuccess && BLPeekObject( hFile, &base))

读取文件object

4)switch ( base.mObjectType)

5)bSuccess = BLReadObjectSecure( hFile, &message.mHeader.mBase, sizeof(message));

读取CAN message

6)bSuccess = BLSkipObject( hFile, &base);

跳过其他object

7) if ( !BLCloseHandle( hFile))

5.开发步骤

需要c/c++基础

1)新建vc++项目

2)引入头文件:binlog.h和binlog_objects.h

3)引入库文件:binlog.dll和binlog.lib

4)参考bl.c开发

CAN数据格式-BLF的更多相关文章

  1. libsvm的数据格式及制作

    1.libsvm数据格式 libsvm使用的训练数据和检验数据文件格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1 ...

  2. Data组件的JSON数据格式

    {     // "@type" - 类型标识,"table"表明这个JSON是一个table结构的数据     "@type" : &qu ...

  3. 【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  4. 【原创】开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  5. 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...

  6. XML和JSON数据格式对比

    概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...

  7. VS快速生成JSON数据格式对应的实体

          有固定好的Json数据格式,你还在手动敲对应的实体吗?有点low了!步入正题,这是一个json字符串,先去验证JSON数据格式(http://www.bejson.com/)如下: { & ...

  8. 数据格式json讲解

    JSON 在使用名称/值对或XML时,实际上是使用javascript从应用程序中取得数据并将数据转换成另一种数据格式.javascript不仅作为格式化语言使用,还可以使用javascript语言中 ...

  9. treeGrid树形数据表格的json数据格式说明

    在使用easyUI 的treeGrid的时候,很多时候我们从数据库取出来的数据treeGrid却不能读取显示成一个树:如下 { menuCode: "a00", menuName: ...

随机推荐

  1. Codeforces A. Serval and Bus

    inputstandard inputoutputstandard outputIt is raining heavily. But this is the first day for Serval, ...

  2. Java中的门面设计模式及如何用代码实现

    门面设计模式又叫外观设计模式,其核心思想正如其字面意思,向用户提供一个门户,用户只需要访问这个门户来获取他们想要的数据,无需管理这个门户内部的构成,也无需知道里面的运行流程等等,对于开发者来说,使用门 ...

  3. python的类定义与实例化

    理解类属性和实例属性: 直接在类里面定义的变量叫类属性,类属性是公有的,每个类实例化就自动拥有类的属性,且实例化对象的这个属性的初始地址指向类属性的地址 如果直接给实例化对象的属性赋值这样会改变该属性 ...

  4. 第一个vi

    选择——VI 在前面板选择波形图表 在程序框图中选择while循环,框住波形图 在编程-数值中选择随机数,连接随机数与波形图 在编程-定时子选项卡中选择--等待下一个整数倍,在数值中选择常量选项,数值 ...

  5. Mysql sql语句技巧与优化

    一.常见sql技巧 1.正则表达式的使用 2.巧用RAND()提取随机行 mysql数据库中有一个随机函数rand()是获取一个0-1之间的数,利用这个函数和order by一起能够吧数据随机排序, ...

  6. ubuntu更换pip源

    1.创建pip.conf文件 cd ~/.pip 当提示不存在时,创建它 mkdir ~/.pip 在.pip目录下创建一个pip.conf文件 touch pip.conf 2.编辑pip.conf ...

  7. 使用pyaudio播放无损音乐(wav)

    安装pyaudio sudo apt-get install python-pyaudio python3-pyaudio pip3 install pyaudio 执行第二步可能会遇到如下错误: 根 ...

  8. centos默认安装mysql的默认密码

    安装centos时选择安装Mysql 服务器 mysql的默认登录密码为空,但是直接登录的时候有报错: [root@localhost bin]# mysql -u root -pEnter pass ...

  9. 《macOS 使用手册》之远程控制

    https://support.apple.com/zh-cn/guide/mac-help/mchlp1066/mac 选择版本: macOS Catalina 10.15 macOS Mojave ...

  10. json_encode转化索引数组之后依然还是数组的问题

    小坑问题:直接上图 解决方法:(json_encode加入第二个参数) JSON_FORCE_OBJECT