汽车电子 -- 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、经典CAN网络中的描述

二、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";

	//ASC
	for (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.1
  0.030000 CANFD   1 Rx        700            0 0 8  8 00 ff 00 ff ff ff 03 00    244000  126   200000     7e04 51200550 4b140250
  0.030200 CANFD   1 Rx        701            0 0 8  8 00 ff ff ff ff ff ff 03    244000  126   200000     7e04 51200550 4b140250
  0.030400 CANFD   1 Rx        702            0 0 8  8 00 ff ff 00 00 00 00 00    244000  126   200000     7e04 51200550 4b140250
  0.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.1
  0.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 4b280150
  0.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 4b280150
  0.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 4b280150
  0.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用TCP通信实现文件传输和通信

前言 我们上一章已经熟悉了理论知识&#xff0c;这一章来练习一下 1.实现文件的传输 1.1 客户端 dir_client.c #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include …

Java ThreadLocal 实现原理 与 如何使用弱引用解决内存泄漏问题

目录 一、ThreadLocal 有什么用二、ThreadLocal 使用示例三、ThreadLocal 实现原理四、ThreadLocal 如何是使用弱引用解决内存泄漏问题4.1、强引用内存泄漏分析4.1、弱引用解决内存泄漏问题 一、ThreadLocal 有什么用 ThreadLocal 诞生于 JDK 1.2&#xff0c;用于解决多线程间的…

基于ssm学院党员管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对鄂尔多斯应用技术学院党员信息管理混乱&#xff0c;出错率高&#x…

javaWebssh图书系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

系统前景 图书有很多&#xff0c;老的图书书的管理靠纸介质&#xff0c;浪费人力和物力&#xff0c;给图书管理者带来极大的资源浪费。随着计算机信息化的普及&#xff0c;对图书的管理带来本质的改变&#xff0c;图书的销售情况以及&#xff0c;图书管理&#xff0c;以及年终对…

振弦采集仪助力岩土工程质量控制

振弦采集仪助力岩土工程质量控制 随着工程建设规模越来越大&#xff0c;建筑结构的安全性和稳定性越来越成为人们所关注的焦点。岩土工程在工程建设中占据着非常重要的地位&#xff0c;岩土工程质量控制更是至关重要。而振弦采集仪作为一种先进的检测设备&#xff0c;正得到越…

Linux命令之ps

Linux命令之ps ps命令的基本用法**常用的ps命令示例** ps命令的基本用法 ps: 显示当前终端会话中属于当前用户的进程列表。 ps -ef: 显示系统中所有进程的列表&#xff0c;包括其他用户的进程。 ps -aux: 显示详细的进程信息&#xff0c;包括CPU和内存使用情况等。 -e选项&…

浅谈如何写开发信和报价?外贸邮件怎么写?

外贸开发信要写报价进去吗&#xff1f;写开发信能加产品价格吗&#xff1f; 开发信和报价是连接您和潜在客户之间的纽带&#xff0c;它们有助于传达您的价值主张、产品或服务的优势以及价格细节。蜂邮EDM将探讨如何撰写令人印象深刻的开发信和报价&#xff0c;以吸引更多的潜在…

AIGC:使用变分自编码器VAE实现MINIST手写数字生成

1 变分自编码器介绍 变分自编码器&#xff08;Variational Autoencoders&#xff0c;VAE&#xff09;是一种生成模型&#xff0c;用于学习数据的分布并生成与输入数据相似的新样本。它是一种自编码器&#xff08;Autoencoder&#xff09;的扩展&#xff0c;自编码器是一种用于…

严蔚敏数据结构p17(2.19)——p18(2.24) (c语言代码实现)

目录 2.19已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于 mink 且小于 maxk 的元素(若表中存在这样的元素&#xff09;同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的个参变量,它们的值可以和表…

【JavaEE】生产者消费者模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

从零开始学习 JS APL(一):完整指南和实例解析

本章内容主要是按一下来&#xff1a; 操作DOM BOM 比如 控制网页元 素交互等各种网页 交互效果 以下是我总结笔记&#xff08;仅供参考&#xff09; webAPL 获取DOM对象 变量声明有三个 var let 和 const 我们应该用那个呢&#xff1f; 首先var 先排除&#xff0c;老派写法…

UDP协议实现群聊

代码&#xff1a; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String; public class liaotian extends JFrame{ private static final int DEFAULT_PORT8899; private J…

机器的深度强化学习算法可以被诱导

设计一个好的奖励函数是机器深度强化学习算法的关键之一。奖励函数用于给予智能体&#xff08;机器&#xff09;在环境中采取不同行动时的反馈信号&#xff0c;以指导其学习过程。一个好的奖励函数应该能够引导智能体朝着期望的行为方向学习&#xff0c;并尽量避免潜在的问题&a…

使用ASIRequest库进行Objective-C网络爬虫示例

在Objective-C中&#xff0c;ASIHTTPRequest是一个非常受欢迎的库&#xff0c;用于处理HTTP请求。它可用于下载网页内容&#xff0c;处理API请求&#xff0c;甚至进行复杂的网络交互。下面是一个简单的示例&#xff0c;展示了如何使用ASIHTTPRequest库来爬取网页代码。 首先&a…

【ROS2指南-9】Bag的record和play操作

目标&#xff1a;记录在某个话题上发布的数据&#xff0c;以便您可以随时回放和检查它。 教程级别&#xff1a;初学者 时间&#xff1a; 10分钟 内容 背景 先决条件 任务 1 设置 2 选择一个主题 3 ros2包记录 4 ros2 包信息 5 ros2包玩 概括 下一步 相关内容 背景 …

Java 简易版 TCP UDP聊天

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;pr…

自定义类加载器

通过继承ClassLoader类&#xff0c;重写findClass方法&#xff0c;实现自定义类加载器。 一、自定义类加载器 package com.molange.JavaSE.myclassloader;import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; impor…

MATLAB - 绘制立体图(平面+水深)

目录 代码结果 代码 % 在 X-Y 平面上绘图 % 正常绘制平面图 [X,Y,Z] peaks; contour(X,Y,Z,20); hold on% ****重点******************************************** % 改为三维视图&#xff0c;具体可以help % view(3); %此时的平面图对应z0 &#xff1b;默认az-37.5&#x…

大模型在企业知识库场景的落地思考

一、引言 在这个信息爆炸的时代&#xff0c;企业的知识库已不再是简单的数据堆砌&#xff0c;而是需要智能化、高效率的知识管理和利用。大模型作为AI领域的一个重要突破&#xff0c;正逐步成为企业知识库管理的强大助力。通过前面一段时间对于大模型在企业落地的深入调研和实…

Linux---逻辑卷管理

本章主要介绍逻辑卷的管理。 了解什么是逻辑卷创建和删除逻辑卷扩展逻辑卷缩小逻辑卷逻辑卷快照的使用 前面介绍了分区的使用&#xff0c;如果某个分区空间不够&#xff0c;想增加空间是非常困难的。所以&#xff0c;建议尽可能使用逻辑卷而非普通的分区&#xff0c;因为逻辑卷…