C# 读取多种CAN报文文件转换成统一格式数据,工具类:CanMsgRead

news/2024/12/27 6:35:35/

  因为经常有读取CAN报文trace文件的需求,而且因为CAN卡不同、记录软件不同会导致CAN报文trace文件的格式都有差异。为了方便自己后续开发,我写了一个CanMsgRead工具类,只要提供CAN报文路径CAN报文格式的选项即可将文件迅速读取转换为统一的CanMsg格式包含Time Offset、Type、ID (hex)、Data Length、 Data Bytes (hex) 等公共属性

  工具类在将CAN报文转换为统一的canMsg类型时,会将dataBytes数组中的数据保存为字符串数组和byte数组,方便显示或者通过报文数据进行计算。

CanMsgRead工具类:下载工具类

CanMsgRead示例程序:下载源程序

一、使用步骤

1、软件兼容的CAN报文格式有

  • PCAN-Explorer_CAN报文
  • 白PCAN-view_CAN报文
  • 黑PCAN-view_CAN报文
  • 周立功_CAN报文
  • CANoe_CAN报文

 2、准备一个软件兼容的CAN报文文件

3、调用readCANmsg(string filePath , EmCanFileType canFileType)函数

传入准备的PCAN-Explorer_CAN报文.trc 文件路径,和对应的EmCanFileType.PCAN_Explorer_CAN 的文件类型枚举

函数处理后,会给出一个canMsg的数据列表,你可以通过代码对canMsg中DataBytes中的数据的byte进行处理,也可以对DataStr中的数据字符串进行处理(通过打断点可查看数据)

 和源文件也是对应的上的

CanMsgRead工具类:下载工具类

CanMsgRead示例程序:下载源程序

二、工具类的详细介绍 

1、StrToCanData()函数

可以将一行can报文字符串转换成对用的CanMsg格式的统一数据

2、readCANmsg()函数

只要文件格式对应的上,输入报文文件的路径和文件的格式枚举,即可读取文件中的所有有效数据并以List<CanMsg> 返回。

3、属性:splitNum_Max

  • splitNum_Max是一行数据最多按空格分割成最大数量的子串
  • 默认值是15

splitNum_Max计算方法(以pcanExplorer文件为例):

15= 1(msgNum)+1(timeoff)+1(bus)+1(type)+1(id)+1(Reserved)+1(len)+8(8字节data bytes)

这个值调整的特别大是没有什么问题的,但当Data Bytes的数量大于8时,就必须调大splitNum_Max了。如果不调整,那么前14个子串按空格正常分割,最后一个子串会是剩下的所有没有分割的字符串。

4、属性:splitNum_Min

splitNum_Min是一行数据如果分割字串数量小于这个值会被认定为非正常数据然后被丢弃,是用来避免遇到异常数据做的简单预处理。如以下异常数据,如果不对其进行丢弃,当作正常数据处理会导致数据转换异常。

三、工具类兼容的报文格式示例

 1、PCAN-Explorer_CAN

2、白PCAN-view_CAN

3、黑PCAN-view_CAN

4、周立功_CAN

5、CANoe_CAN

CanMsgRead工具类:下载工具类

CanMsgRead示例程序:下载源程序


http://www.ppmy.cn/news/1558458.html

相关文章

获取XML 属性值

<controlActProcess classCode"CACT" moodCode"EVN"><queryByParameter><statusCode code"new"/><queryByParameterPayload><statusCode code"new"/><actId><value><!--申请单编号-->…

使用GeoPandas进行地理空间数据处理:入门指南

使用GeoPandas进行地理空间数据处理&#xff1a;入门指南 什么是GeoPandas&#xff1f; GeoPandas 是一个基于 Pandas 和 Shapely 的 Python 库&#xff0c;专为地理空间数据处理设计。它扩展了 Pandas 的功能&#xff0c;使用户可以轻松处理地理数据&#xff0c;如矢量数据&…

动态顺序表详解+代码示例

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…

3.基于 Temporal 的 Couchbase 动态 SQL 执行场景

在使用 Temporal 和 Go 语言 调用 Couchbase 执行 SQL 脚本时&#xff0c;可以通过动态参数传递到 SQL 脚本中&#xff0c;以下是完整实现的指南&#xff1a; 1. Temporal Workflow 的参数传递 Temporal 的 Workflow 支持接收动态参数&#xff0c;将这些参数传递给执行 SQL 的…

路径规划之启发式算法之二十四:爬山算法(Hill Climbing Algorithm,HCA)

爬山算法(Hill Climbing Algorithm)是一种启发式的基于局部最优解的搜索算法,用于在给定的搜索空间中寻找全局最优解或足够好的解。它属于局部搜索算法,通常用于解决优化问题,包括连续和离散问题。 一、定义与原理 爬山算法模拟了爬山的过程,从某个随机起始点开始,不断向…

Linux 下的 GPT 和 MBR 分区表详解

在Linux系统中&#xff0c;分区表是描述存储设备上分区布局和属性的一种结构化数据。常见的分区表格式有MBR&#xff08;Master Boot Record&#xff09;和GPT&#xff08;GUID Partition Table&#xff09;。以下是这两种分区表的详解&#xff1a; MBR&#xff08;Master Boot…

SpringBoot3-第四篇(基础特性)

系列文章目录 SpringBoot3-第一篇&#xff08;快速入门&#xff09; SpringBoot3-第二篇&#xff08;Web开发&#xff09; SpringBoot3-第三篇&#xff08;数据访问&#xff09; SpringBoot3-第四篇&#xff08;基础特性&#xff09; 文章目录 系列文章目录1. SpringApplicati…

AppAgent 源码 (AndroidController 类 )

1. AndroidController 类 AndroidController 类&#xff0c;用于通过 ADB&#xff08;Android Debug Bridge&#xff09;命令控制连接的 Android 设备。它提供了一系列方法来实现常见的 Android 设备操作&#xff0c;例如获取屏幕截图、获取 XML 布局文件、模拟点击、输入文本…