当前位置: 首页 > news >正文

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

  因为经常有读取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.lryc.cn/news/512763.html

相关文章:

  • 计算机网络 (8)物理层的传输方式
  • 【C#】WPF设置Separator为垂直方向
  • 太速科技-519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡
  • 安卓入门二 Kotlin基础
  • C++ ——— 单/多参数构造函数的隐式类型转换和 explicit 关键字
  • Java编程规约:集合处理
  • IOS safari 播放 mp4 遇到的坎儿
  • plsql :用户system通过sysdba连接数据库--报错ora-01031
  • LabVIEW条件配置对话框
  • PyAudio库基本知识详解——为自制PCM音频播放器做准备
  • Git如何添加子仓库
  • 001__VMware软件和ubuntu系统安装(镜像)
  • 在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档
  • STM32完全学习——FATFS0.15移植SD卡
  • Linux -- 生产消费模型之环形队列、信号量
  • Ashy的考研游记
  • MySQL线上事故:使用`WHERE`条件`!=xxx`无法查询到NULL数据
  • vue3学习笔记(11)-组件通信
  • 【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节
  • 张量与数据类型
  • torchvision.utils.make_grid 解释下
  • Android原生Widget使用步骤
  • 实验八 指针2
  • 1 数据库(下):多表设计 、多表查询 + SQL中的with查询语法(MySQL8.0以后版本才支持这种新语法)+ 数据库优化(索引优化)
  • 什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系
  • vulhub-wordpress靶场
  • 安装与配置
  • 斗鱼Android面试题及参考答案
  • Could not install Gradle distribution from 的解决办法
  • 基于 SensitiveWordBs 实现敏感词过滤功能