因为经常有读取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报文文件

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

编辑

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

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

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

编辑

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

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

编辑

 和源文件也是对应的上的

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

编辑

CanMsgRead工具类:下载工具类

CanMsgRead示例程序:下载源程序

二、工具类的详细介绍 

1、StrToCanData()函数

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

编辑

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

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

编辑

2、readCANmsg()函数

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

编辑

只要文件格式对应的上,输入报文文件的路径和文件的格式枚举,即可读取文件中的所有有效数据并以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)

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

编辑

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

4、属性:splitNum_Min

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

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

编辑

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

 1、PCAN-Explorer_CAN

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

编辑

2、白PCAN-view_CAN

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

编辑

3、黑PCAN-view_CAN

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

编辑

4、周立功_CAN

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

编辑

5、CANoe_CAN

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

编辑

CanMsgRead工具类:下载工具类

CanMsgRead示例程序:下载源程序