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

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. 安装Oracle进行先决条件检查时显示 Environment variable:"PATH" 失败”

    问题已解决:安装时exe可执行文件的目录也不能有中文,安装时注意目录一定要按oracle的格式.运行安装程序时,要用右键--> 要以管理员方式启动. 原文: 用到oracle数据库,由于电脑装的 ...

  2. thinkphp的模型操作

    先开个坑 WHERE篇 1, 模糊查询    where['keyword'] = [ 'like' , '%test%'] 2,   不等于,大于 ,小于 EQ 等于(=)NEQ 不等于(<& ...

  3. C位域操作

    位域的概念 1个字节包含8位,有些变量保存的数据不需要占用这么长的空间(比如bool类型,只有两个状态true和false, 1位就可以搞定,剩下的7位就浪费了),这就催生了“位域”结构,位域将1个字 ...

  4. [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据

    lua5.3在线手册地址  https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...

  5. 第一struts2程序

    今天学习了第一个struts2程序 第一步建立一个java web程序 第二步 加入jar包 第三步 添加两个jsp文件 login.jsp和result.jsp文件 login.jsp 在body部 ...

  6. tableSizeFor()函数在java8和Java13的差别

    java8 static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >&g ...

  7. JEECG开发第一个菜单显示设备列表

    一.新建设备表(t_base_device) ; -- ---------------------------- -- Table structure for t_base_device -- --- ...

  8. [C++]蛇形填数

    [从左下角开始,逆时针蛇形填数] #include <iostream> using namespace std; int main() { int n; cin>>n; in ...

  9. leetCode练题——7. Reverse Integer

    1.题目:   7. Reverse Integer Given a 32-bit signed integer, reverse digits of an integer. Example 1: I ...

  10. JAVA 爬虫框架webmagic 初步使用Demo

    一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...