CAN数据格式-BLF

欢迎关注《汽车软件技术》公众号,回复关键字获取资料。
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, ðframe.mHeader.mBase, sizeof(ethframe));
/* free memory for the frame */
if( bSuccess) {
BLFreeObject( hFile, ðframe.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的更多相关文章
- libsvm的数据格式及制作
1.libsvm数据格式 libsvm使用的训练数据和检验数据文件格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1 ...
- Data组件的JSON数据格式
{ // "@type" - 类型标识,"table"表明这个JSON是一个table结构的数据 "@type" : &qu ...
- 【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- 【原创】开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...
- XML和JSON数据格式对比
概念 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...
- VS快速生成JSON数据格式对应的实体
有固定好的Json数据格式,你还在手动敲对应的实体吗?有点low了!步入正题,这是一个json字符串,先去验证JSON数据格式(http://www.bejson.com/)如下: { & ...
- 数据格式json讲解
JSON 在使用名称/值对或XML时,实际上是使用javascript从应用程序中取得数据并将数据转换成另一种数据格式.javascript不仅作为格式化语言使用,还可以使用javascript语言中 ...
- treeGrid树形数据表格的json数据格式说明
在使用easyUI 的treeGrid的时候,很多时候我们从数据库取出来的数据treeGrid却不能读取显示成一个树:如下 { menuCode: "a00", menuName: ...
随机推荐
- 题解 P1453 【城市环路】
P1453 城市环路 感觉基环树(or环套树)的题目一般都是找到树上的环,断掉一条边再进行树上的操作(如noip2018P5022 旅行) 双倍经验:P2607 [ZJOI2008]骑士 P1453和 ...
- docker为镜像添加SSH服务
启动并进入容器中 这里用db1容器完成实验. 安装openssh服务和修改sshd配置文件 安装openssh yum install openssh-server openssh-clients - ...
- C语言数据结构——第二章 线性表
二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...
- SpringCloud Netflix Eureka
Eureka是Netflix开源的服务发现组件,基于REST,SpringCloud将它集成在子项目Spring Cloud Netflix中,从而实现服务的注册.发现. Eureka包含Server ...
- Gym安装ubuntu16.04
Step1:将gym克隆到计算机上: git clone https://github.com/openai/gym.git 如果你的电脑没有安装git,那么键入 sudo apt install g ...
- 题解【POJ2955】Brackets
Description We give the following inductive definition of a "regular brackets" sequence: t ...
- 推荐一个手机端切换地址gps的app
在写脚本的时候遇到的 客户提供了这个app 免费 自身可以防检测 苹果和安卓都可以使用 官网 http://www.daniu.net/ 搜索 大牛 或者danniu即可
- IDE - IDEA - 快捷键整理 - 01. Navigation
1. 概述 工具的熟练程度, 会决定工作效率 总共也就 140 条左右吧 需要讲解吗? 2. ref 1. idea 自带的 ReferenceCard.pdf 3. keymap 1. 文件移动 C ...
- 小白科普:Netty有什么用?
随着移动互联网的爆发性增长,小明公司的电子商务系统访问量越来越大,由于现有系统是个单体的巨型应用,已经无法满足海量的并发请求,拆分势在必行. 在微服务的大潮之中, 架构师小明把系统拆分成了多个服务,根 ...
- 多租户SaaS平台的数据库方案
1.1 多租户是什么 多租户技术(Multi-TenancyTechnology)又称多重租赁技术:是一种软件架构技术,是实现如何在多用户环境下 (此处的多用户一般是面向企业用户)共用相同的系统或程序 ...