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: ...
随机推荐
- 安装Oracle进行先决条件检查时显示 Environment variable:"PATH" 失败”
问题已解决:安装时exe可执行文件的目录也不能有中文,安装时注意目录一定要按oracle的格式.运行安装程序时,要用右键--> 要以管理员方式启动. 原文: 用到oracle数据库,由于电脑装的 ...
- thinkphp的模型操作
先开个坑 WHERE篇 1, 模糊查询 where['keyword'] = [ 'like' , '%test%'] 2, 不等于,大于 ,小于 EQ 等于(=)NEQ 不等于(<& ...
- C位域操作
位域的概念 1个字节包含8位,有些变量保存的数据不需要占用这么长的空间(比如bool类型,只有两个状态true和false, 1位就可以搞定,剩下的7位就浪费了),这就催生了“位域”结构,位域将1个字 ...
- [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
lua5.3在线手册地址 https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...
- 第一struts2程序
今天学习了第一个struts2程序 第一步建立一个java web程序 第二步 加入jar包 第三步 添加两个jsp文件 login.jsp和result.jsp文件 login.jsp 在body部 ...
- tableSizeFor()函数在java8和Java13的差别
java8 static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >&g ...
- JEECG开发第一个菜单显示设备列表
一.新建设备表(t_base_device) ; -- ---------------------------- -- Table structure for t_base_device -- --- ...
- [C++]蛇形填数
[从左下角开始,逆时针蛇形填数] #include <iostream> using namespace std; int main() { int n; cin>>n; in ...
- leetCode练题——7. Reverse Integer
1.题目: 7. Reverse Integer Given a 32-bit signed integer, reverse digits of an integer. Example 1: I ...
- JAVA 爬虫框架webmagic 初步使用Demo
一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...