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

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. 题解 P1453 【城市环路】

    P1453 城市环路 感觉基环树(or环套树)的题目一般都是找到树上的环,断掉一条边再进行树上的操作(如noip2018P5022 旅行) 双倍经验:P2607 [ZJOI2008]骑士 P1453和 ...

  2. docker为镜像添加SSH服务

    启动并进入容器中 这里用db1容器完成实验. 安装openssh服务和修改sshd配置文件 安装openssh yum install openssh-server openssh-clients - ...

  3. C语言数据结构——第二章 线性表

    二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...

  4. SpringCloud Netflix Eureka

    Eureka是Netflix开源的服务发现组件,基于REST,SpringCloud将它集成在子项目Spring Cloud Netflix中,从而实现服务的注册.发现. Eureka包含Server ...

  5. Gym安装ubuntu16.04

    Step1:将gym克隆到计算机上: git clone https://github.com/openai/gym.git 如果你的电脑没有安装git,那么键入 sudo apt install g ...

  6. 题解【POJ2955】Brackets

    Description We give the following inductive definition of a "regular brackets" sequence: t ...

  7. 推荐一个手机端切换地址gps的app

    在写脚本的时候遇到的 客户提供了这个app 免费 自身可以防检测 苹果和安卓都可以使用   官网 http://www.daniu.net/   搜索 大牛 或者danniu即可

  8. IDE - IDEA - 快捷键整理 - 01. Navigation

    1. 概述 工具的熟练程度, 会决定工作效率 总共也就 140 条左右吧 需要讲解吗? 2. ref 1. idea 自带的 ReferenceCard.pdf 3. keymap 1. 文件移动 C ...

  9. 小白科普:Netty有什么用?

    随着移动互联网的爆发性增长,小明公司的电子商务系统访问量越来越大,由于现有系统是个单体的巨型应用,已经无法满足海量的并发请求,拆分势在必行. 在微服务的大潮之中, 架构师小明把系统拆分成了多个服务,根 ...

  10. 多租户SaaS平台的数据库方案

    1.1 多租户是什么 多租户技术(Multi-TenancyTechnology)又称多重租赁技术:是一种软件架构技术,是实现如何在多用户环境下 (此处的多用户一般是面向企业用户)共用相同的系统或程序 ...