主要内容1. 概述2. 我们在软件框架中要做什么?
DBC介绍3. 我们该怎么办?数据存储
前面介绍了输入输出1的概述PEAK的所有CAN这些二次开发包提供如下图所示,非常适合二次开发。PCAN-Basic API除了DLL,也提供了C#, C /MFC, C /CLR,C _Builder, Delphi, VB.NET, Java, and Python等待例程,这些例程具有实现硬件初始化和报纸收发的功能;我们只需要在此基础上开发更先进的功能。
本文介绍了我们在收到报纸后如何根据DBC文件分析报纸,使报纸不再仅仅是一系列16进制的数字,而是可读的内容。接下来,我们需要回答以下两个问题,我们想做什么
值得注意的是,文章中提到了我们如何做这件事CAN在报文传输中,编码方法的区别(Intel和Motorola),但由于篇幅有限,没有这两种方法可以进一步解释。读者请自行查阅相关信息。我们要做什么?
2.1DBC软件框架中的位置分析
回顾以前的软件框架DBC收发报文后属于分析。回顾我们在阅读报纸时使用的过程。我们需要考虑的问题是在哪个位置分析我们的报纸。总共有三个位置可以让我们分析我们收到的报纸。在这里,我们选择第三个位置,因为在实现功能的前提下,变化越晚,对整体的影响就越小。接下来我们要回答的问题是使用它DBC分析报文到底是什么,也就是为什么DBC可以将报纸分析成可读内容。
2.2DBC介绍我把DBC分析报文的过程被视为一个映射过程,也就是说,这种报文意味着什么?它已经在那里了DBC定义文件。具体而言,DBC文件中定义了一系列规则,收到了这个ID代表这篇报文(例如ABS类),这篇报纸包含了什么信号(比如ABS传感器状态),数据的第几位到第几位来表示信号的值。根据这些规则分析报文。所以我们接下来要回答的问题是,为了达到分析报纸的目的,一个DBC文件中有哪些规则?回答这个问题,其实只要把几个规则罗列一下就好了,这将在最后的时候列举出来。在此之前,让我们从最终实现的事情开始,解释这些规则的作用。右侧的依据是从DBC文件分析。为了让读者更好地理解这个内容。另一篇文章.dbc以文件为例,解释我们如何从DBC在文件中获得这些参数。打开记事本.dbc文件。首先是下图中的一些文件头,这是对的DBC分析没用,读者可以自己理解。接下来是什么报纸包含什么信号。BO_ 说明这是报文,SG_如果报文中有多个信号,这里就会有多行SG_我们需要的绝大多数参数都来自这里。以后我会继续介绍如何理解这些BO_ 和SG_过了BO_ 和SG_接下来BA_与我们的分析无关,这里就不继续介绍了。过了BA_之后,到了VAL_,这里有一些枚举变量,说明每个值分别代表什么意思。综上所述,我们实际上需要注意BO_ ,SG_以及VAL_这些行。我们以各自的例子来解释这一点,我们对此进行了解释DBC对文件解了文件的内容。这里的理解是指每个人DBC文件包含哪些内容,以及这些内容如何在我们的报纸分析中发挥作用。这里再列举以下内容针对整个报文,有报文ID,报文名称、报文数据长度三个重要参数对于信号,有信号名称、起始位、位长、编码类型、数据类型、因移量、最大值、最小值、单位等对于枚举变量,有一系列的键值3我们怎么做?
3.1 有了前面的基础,我们可以根据前面的流程图来分析报纸。再次说明以下1)读一篇报文,先得到报文ID2)打开DBC顺序阅读文件BO_行,发现ID匹配,知道是这篇报文3)读这个报文接下来的SG_好吧,看看有多少信号,4)根据起始位、位长和编码类型,每个信号,提取16进制报文中的有用位置5)根据数据类型解码。6)解码的数据根据因子和偏移量转化为真实数据7)与VAL_对比,如果是枚举变量,将相应的值转换为有意义的字符串8)此外,这里的单位事务非常简单。问题是,我们不想每次读报纸都打开它DBC文件,但希望DBC程序中提前存储内容,因此,我们需要考虑如何存储这些数据。这实际上是数据结构的知识,我们只需要了解从属关系。这实际上是数据结构的知识,我们只需要弄清楚从属关系。所谓的从属关系是谁的参数。其实这里很直观。我们有两个主题,一个是报纸,一个是信号。信号属于报文、编码方式等参数。因此,我们只需要做以下几件事来存储这里的数据:定义一个枚举类,它存储枚举信号的名称和键值。
定义一个信号类。该类包括信号名称、起始位、位长、编码类型、数据类型、因子和偏移量、最大值、最小值和单位。如果是枚举信号,则还包含了枚举信号的键对。
定义一个报文类。这类包含报文ID,报文名称、报文数据长度、报文中包含的信号列表。
构建报文类作为报文列表。最终的结果是我们用报文列表把它们列出来DBC存储文件的内容,阅读报纸做相应的分析,只要比较16进制报纸和报纸列表的内容做相应的分析。
3.2 有了之前的输入输出准备,下一件事就很自然了。让我们回顾一下我们首先要做的事情。这里用逆序思维的方法来看我们怎么做,怎么做DBC分析需要先储存一个DBC文件信息的报文列表,要有这个列表,需要预先定义列表所需要的类以及有个DBC文件。然后我们顺着做事,扩展上面的流程图。根据这张图,我们可以清楚地知道,我们需要做以下四件事1.根据这些类别的属性和方法定义相关类别DBC确定文件中包含的属性2.编写函数将给定DBC将文件的内容转换报文列表。输入为DBC输出为报文列表的文件路径。
主要涉及文件读取内容,每行内容代表什么意思。.编写一个函数,将指定的报文解析成可读性的内容输入为十六进制的报文和报文列表,输出为可读性的内容
文件列表中每个参数的作用主要涉及4.此函数行文在相应位置引用至此,根据DBC十六进制报文的文件分析工作也已经完成。