汽车电子 -- CAN文件格式ASC

Vector提供了两种记录数据格式的格式规范:BLF和ASC。
先讲讲ASC。
参看:图文详解CAN Log文件 - ASC文件格式

一、ASC文件格式

在Vector提供的 CAN_LOG_TRIGGER_ASC_Format.pdf 提取码:ltjv 文件中,规定了CANoe/CANalyzer ASC记录中CAN、Log和Trigger event的格式。

1、Header

一个ASCII格式的日志文件以一个header开始。header包含关于日志文件的一般信息。
在这里插入图片描述

  • base:表示记录的数值是hex十六进制或dec十进制的符号。
  • timestamps:表示时间戳是absolute绝对写入测量的开始时间还是relative相对于前一个事件。
  • internal:events logged表示是否记录了内部事件。

2、版本编号

从CANalyzer/CANoe v7.0开始,版本号以注释的形式写在Header之后:
在这里插入图片描述

  • < major >.< minor >表示CANalyzer/CANoe的版本号
  • < patch >表示CANalyzer/CANoe主版本中的修改版本(如服务包中的修改)。

3、CAN2.0 经典CAN Standard标准帧的描述

在这里插入图片描述

  • ID:表示CANID的十六进制值;
  • Length:表示发送/接收该Frame/Message占据总线的时间,单位纳秒;
  • BitCount:表示发送/接收该Frame/Message由多少各Bit构成;
  • IDnum:表示CANID的十进制值。
date Mon Apr 10 02:24:54.471 pm 2023
base hex  timestamps absolute
internal events logged
// version 11.0.00.036886 CAN 1 Status:chip status error active0.036886 CAN 2 Status:chip status error active0.101317 1  211             Tx   d 8 00 00 00 00 00 00 00 00  Length = 242015 BitCount = 124 ID = 5290.201267 1  211             Tx   d 8 00 00 00 00 00 00 00 00  Length = 242015 BitCount = 124 ID = 5290.301361 1  211             Tx   d 8 00 00 00 00 00 00 00 00  Length = 242015 BitCount = 124 ID = 5290.401419 1  211             Tx   d 8 00 00 00 00 00 00 00 00  Length = 242015 BitCount = 124 ID = 529

4、CANFD 经典CAN Standard标准帧的描述

该部分列出了CANoe/CANalyzer ASC记录中的所有经典CAN event和CAN FD channel上的CAN FD event。
在这里插入图片描述

date Mon Apr 10 02:38:41.859 pm 2023
base hex  timestamps absolute
internal events logged
// version 11.0.00.038849 CAN 1 Status:chip status error active0.038849 CAN 2 Status:chip status error active0.100980 CANFD   1 Tx        211                                   0 0 8  8 00 00 00 00 00 00 00 00   242015  124   200040     2a8f 50a00150 46280150 20001f7e 20000b1a0.200978 CANFD   1 Tx        211                                   0 0 8  8 00 00 00 00 00 00 00 00   242015  124   200040     2a8f 50a00150 46280150 20001f7e 20000b1a0.301134 CANFD   1 Tx        211                                   0 0 8  8 00 00 00 00 00 00 00 00   242015  124   200040     2a8f 50a00150 46280150 20001f7e 20000b1a0.400976 CANFD   1 Tx        211                                   0 0 8  8 00 00 00 00 00 00 00 00   242015  124   200040     2a8f 50a00150 46280150 20001f7e 20000b1a

5、标志

在这里插入图片描述

二、C语言组包ASC文件

CAN2.0格式 ASC

double timeStamps = 0;
FILE* fp1 = fopen(FileName[filecnt], "a");
if (fp1 != NULL)
{if (timeStamps == 0){fprintf(fp1, "base hex timestamps absolute\n");fprintf(fp1, "internal events logged\n");fprintf(fp1, "// version 8.2.1\n");}timeStamps += 0.03;const char* tail = "   244000  126   200000     7e04 51200550 4b140250";//ASCfor (int i = 0; i < 3; i++){fprintf(fp1, "  %0.6f CANFD   1 Rx        %x            0 0 8  8 %02x %02x %02x %02x %02x %02x %02x %02x %s\n", (timeStamps + i * 0.0001f), (0x750 + i * 3), \SendBuffer[(i * 3)][0], SendBuffer[(i * 3)][1], SendBuffer[(i * 3)][2], SendBuffer[(i * 3)][3], SendBuffer[(i * 3)][4], SendBuffer[(i * 3)][5], SendBuffer[(i * 3)][6], SendBuffer[(i * 3)][7], tail);timeStamps += 0.0002;fprintf(fp1, "  %0.6f CANFD   1 Rx        %x            0 0 8  8 %02x %02x %02x %02x %02x %02x %02x %02x %s\n", (timeStamps + i * 0.0001f), (0x751 + i * 3), \SendBuffer[(i * 3) + 1][0], SendBuffer[(i * 3) + 1][1], SendBuffer[(i * 3) + 1][2], SendBuffer[(i * 3) + 1][3], SendBuffer[(i * 3) + 1][4], SendBuffer[(i * 3) + 1][5], SendBuffer[(i * 3) + 1][6], SendBuffer[(i * 3) + 1][7], tail);timeStamps += 0.0002;fprintf(fp1, "  %0.6f CANFD   1 Rx        %x            0 0 8  8 %02x %02x %02x %02x %02x %02x %02x %02x %s\n", (timeStamps + i * 0.0001f), (0x752 + i * 3), \SendBuffer[(i * 3) + 2][0], SendBuffer[(i * 3) + 2][1], SendBuffer[(i * 3) + 2][2], SendBuffer[(i * 3) + 2][3], SendBuffer[(i * 3) + 2][4], SendBuffer[(i * 3) + 2][5], SendBuffer[(i * 3) + 2][6], SendBuffer[(i * 3) + 2][7], tail);timeStamps += 0.0002;}/* In order to be compatible with the final result and make a unified interface, the selection target is taken as the clustering result here, and the selection cluster is set to a fixed value */fclose(fp1);

生成ASC:

base hex timestamps absolute
internal events logged
// version 8.2.10.030000 CANFD   1 Rx        700            0 0 8  8 00 ff 00 ff ff ff 03 00    244000  126   200000     7e04 51200550 4b1402500.030200 CANFD   1 Rx        701            0 0 8  8 00 ff ff ff ff ff ff 03    244000  126   200000     7e04 51200550 4b1402500.030400 CANFD   1 Rx        702            0 0 8  8 00 ff ff 00 00 00 00 00    244000  126   200000     7e04 51200550 4b1402500.030700 CANFD   1 Rx        703            0 0 8  8 00 ff 00 ff ff ff 01 00    244000  126   200000     7e04 51200550 4b140250

CAN FD格式 ASC

double timeStamps = 0;
/*  将结果输出  */
FILE* fp1 = fopen(FileName[filecnt], "a");
if (fp1 != NULL)
{if (timeStamps == 0){fprintf(fp1, "base hex timestamps absolute\n");fprintf(fp1, "internal events logged\n");fprintf(fp1, "// version 8.2.1\n");}timeStamps += 0.0014;const char* tail = "  0  665   303000 a8093377 46500250 4b280150";fprintf(fp1, "  %0.6f CANFD   1 Rx      %x            1 0 f 64 %02x %02x %02x %02x %02x %02x %02x %02x ", (timeStamps + i * 0.0001f), tempCAN.ID, \tempCAN.Data[0], tempCAN.Data[1], tempCAN.Data[2], tempCAN.Data[3], tempCAN.Data[4], tempCAN.Data[5], tempCAN.Data[6], tempCAN.Data[7]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x ", \tempCAN.Data[8], tempCAN.Data[9], tempCAN.Data[10], tempCAN.Data[11], tempCAN.Data[12], tempCAN.Data[13], tempCAN.Data[14], tempCAN.Data[15]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x ", \tempCAN.Data[16], tempCAN.Data[17], tempCAN.Data[18], tempCAN.Data[19], tempCAN.Data[20], tempCAN.Data[21], tempCAN.Data[22], tempCAN.Data[23]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x ", \tempCAN.Data[24], tempCAN.Data[25], tempCAN.Data[26], tempCAN.Data[27], tempCAN.Data[28], tempCAN.Data[29], tempCAN.Data[30], tempCAN.Data[31]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x ", \tempCAN.Data[32], tempCAN.Data[33], tempCAN.Data[34], tempCAN.Data[35], tempCAN.Data[36], tempCAN.Data[37], tempCAN.Data[38], tempCAN.Data[39]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x ", \tempCAN.Data[40], tempCAN.Data[41], tempCAN.Data[42], tempCAN.Data[43], tempCAN.Data[44], tempCAN.Data[45], tempCAN.Data[46], tempCAN.Data[47]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x ", \tempCAN.Data[48], tempCAN.Data[49], tempCAN.Data[50], tempCAN.Data[51], tempCAN.Data[52], tempCAN.Data[53], tempCAN.Data[54], tempCAN.Data[55]);fprintf(fp1, "%02x %02x %02x %02x %02x %02x %02x %02x%s\n", \tempCAN.Data[56], tempCAN.Data[57], tempCAN.Data[58], tempCAN.Data[59], tempCAN.Data[60], tempCAN.Data[61], tempCAN.Data[62], tempCAN.Data[63], tail);/* In order to be compatible with the final result and make a unified interface, the selection target is taken as the clustering result here, and the selection cluster is set to a fixed value */fclose(fp1);

生成ASC:

base hex timestamps absolute
internal events logged
// version 8.2.10.007800 CANFD   1 Rx      400            1 0 f 64 8e 00 67 24 01 f3 18 00 a1 1a fe c0 08 00 40 00 8e 01 67 24 01 ff fc 00 87 8b 58 80 08 00 40 00 8e 02 67 24 01 f5 20 00 83 bb 8e 40 08 00 40 00 8e 03 e4 f4 00 10 04 00 b4 93 11 00 08 00 40 00  0  665   303000 a8093377 46500250 4b2801500.009200 CANFD   1 Rx      401            1 0 f 64 8e 04 e4 c4 00 50 e8 00 ae 13 8d c0 07 ff bf fc 8e 05 e4 3c 00 70 2c 00 b2 a2 fa 00 07 ff bf fc 8e 06 66 ec 00 11 10 00 f5 6c 3b 00 08 00 3f fc 8e 07 e7 ec 00 10 08 00 9b 55 61 80 08 00 40 00  0  665   303000 a8093377 46500250 4b2801500.010600 CANFD   1 Rx      402            1 0 f 64 8e 08 66 a4 01 10 70 00 c4 33 a4 40 07 ff bf f0 8e 09 65 bc 00 50 40 00 b5 93 95 80 07 ff bf f8 8e 0a 67 24 01 10 c0 00 c4 13 9f 40 08 00 40 00 8e 0b e4 cc 00 10 10 00 c8 64 55 40 08 00 40 00  0  665   303000 a8093377 46500250 4b2801500.012000 CANFD   1 Rx      403            1 0 f 64 8e 0c 67 24 01 ff fc 00 84 3b 8a 80 08 00 40 00 8e 0d 67 24 01 ef fc 00 88 4b 24 80 08 00 40 00 8e 0e e7 b4 00 30 34 00 c4 03 9c 00 08 00 40 00 8e 0f eb ec 00 60 20 00 cb 94 f1 00 08 7e 41 90  0  665   303000 a8093377 46500250 4b280150

三、PCAN的免费Converter软件

PEAK-Converter 是 PEAK-System 的一款免费 Windows® 软件,用于将跟踪文件转换为各种输出格式以供进一步处理或分析。

1、下载:

下载: PEAK-Converter
转换格式除了PEAK-System(* .trc、* .btr、* .btrc)的格式外,
还提供了* .csv、* .asc或* .mf4等第三方格式。
在这里插入图片描述

2、使用:

将trc转换为asc

在这里插入图片描述
可选择输出格式
在这里插入图片描述
在这里插入图片描述

将asc转换为csv

在这里插入图片描述
在这里插入图片描述

四、CANoe回放.asc文件

上次讲过一遍了,参看:汽车电子 – 根据DBC解析CAN报文

在这里插入图片描述
在这里插入图片描述
右击Replay ReplayBloc选择configuration,在source file一排中点击…,将需要回放的.asc文件添加到模块中。如下图所示
在这里插入图片描述

PF为过滤设置
在这里插入图片描述
之后加载DBC文件,右击Databases,导入需要的DBC文件。
在这里插入图片描述
点击右上角Start键,即可在Trace看到报文数据的回放。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/255430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊,速卖通,沃尔玛构建稳定高成功率的测评补单环境系统:关键步骤解析

亚马逊对于跨境电商行业来说并不陌生&#xff0c;现在越来越多的人想进入亚马逊这个跨境电商平 台。因此随着越来越多的商家进入这个市场&#xff0c;亚马逊的竞争力也在不断上升。在亚马逊的平台&#xff0c;Review 直接影响着亚马逊对卖家账号进行评定的各项因素&#xff0c;…

低代码正在改变软件开发方式

无论你是一个初级的开发者还是一位经验丰富的专家&#xff0c;低代码都将为你提供了一个突破研发限制的机会。这种开发方式让我们能够在短时间内构建高质量的应用程序。接下来&#xff0c;我将详细展开低代码的概念&#xff0c;解决问题的能力&#xff0c;适用于哪些业务场景。…

阿里云效部署前后端

静态站点到OSS 阿里云-云效&#xff0c;阿里云企业级一站式 DevOps&#xff0c;可以免费使用&#xff08;会限制人数、流水线数量等&#xff0c;个人项目够用了&#xff09;。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思&#xff0c;一般一个项目对应一个 Bucke…

数字营销影响消费者行为的 6 种方式

如果您正在考虑转向在线市场&#xff0c;那么这个决定就好了&#xff01;没有什么比数字营销更强大的了。但是&#xff0c;在开始之前&#xff0c;请了解数字营销如何影响消费者行为。由于客户是任何企业的基石&#xff0c;因此跟踪消费者行为至关重要。 数据分析在识别潜在客…

INA219电流感应芯片_程序代码

详细跳转借鉴链接INA219例程此处进行总结 简单介绍一下 INA219&#xff1a; 1、 输入脚电压可以从 0V~26V,INA219 采用 3.3V/5V 供电. 2、 能够检测电流&#xff0c;电压和功率&#xff0c;INA219 内置基准器和乘法器使之能够直接以 A 为单位 读出电流值。 3、 16 位可编程地…

苹果上架被拒提示“1.1 Safety - Objectionable Content”原因排查解决

作为苹果应用开发专家&#xff0c;我们都了解到在iOS应用审核过程中&#xff0c;被拒绝是一种令人沮丧的经历。在众多的拒绝原因中&#xff0c;"1.1 Safety - Objectionable Content"&#xff08;安全性-令人反感的内容&#xff09;是一个常见的拒绝原因。这意味着您…

JPA与MySQL锁实战

前言&#xff1a;最近使用jpa和mysql时&#xff0c;遇到了死锁问题。在解决后将一些排查过程中新学到和复习到的知识点再总结整理一下。首先对InnoDB中锁相关的概念进行介绍&#xff0c;然后展示如何利用JPA提供的排他锁来实现想要的功能&#xff0c;最后对死锁问题进行讨论。 …

可视化监控/安防视频云平台公共区域人员行为安全监控方案

大家在浏览新闻时&#xff0c;经常会看到某某地区有人员摔倒&#xff0c;长时间无人发现或人员闯入某危险区域管理人员未及时劝离&#xff0c;导致发生了意外事故的新闻。由于人力资源和人为巡检能力有限&#xff0c;在很多公共区域无法及时检测人员行为从而导致危险发生。为确…

快递批量查询高手:物流效率提升的秘密武器

在当今这个数字化时代&#xff0c;物流行业的发展迅速&#xff0c;快递公司如雨后春笋般涌现。随之而来的是物流查询的困扰。如何快速、准确地查询大量快递单号&#xff0c;提高物流效率&#xff0c;成为了物流行业亟待解决的问题。而此时&#xff0c;一款名为《快递批量查询高…

mybatis数据输出-驼峰命名规则设置

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

linux安装mysql5.7(一遍过)

之前安装的时候遇到了很多问题&#xff0c;浪费了一些时间。整理出这份教程&#xff0c;照着做基本一遍过。 这是安装包: 链接&#xff1a;https://pan.baidu.com/s/1gBuQBjA4R5qRYZKPKN3uXw?pwd1nuz 1.下载安装包&#xff0c;上传到linux。我这里就放到downloads目录下面…

解决webpack打包生成gz格式css/js文件没法在nginx使用的问题--全网唯一正确

本文绝对是全网解决这个问题唯一正确的文章&#xff0c;没有之一&#xff01; 很多人都说开启nginx gzip压缩&#xff0c;这些人完全是胡说八道&#xff01;你们到底懂不懂叫gzip压缩啊&#xff1f;&#xff01; 不信你就试试&#xff0c;如果css/js只有gz文件&#xff0c;ng…