一文读懂CAN总线通信和CANoe开发

        说到CAN总线通信,对于每个汽车人来说一定都不陌生,甚至每个刚接触单片机串行通信的电子新人,对于CAN通信也能够基本理解其原理,并搭建模块进行测试,市面上关于CAN通信的资料也是铺天盖地。所以本文的重点在后半部分:CANoe开发。将CAN通信原理作为先行知识进行介绍。看到标题,相信不少读者都觉得可笑,CAN这种博大精深的玩意,一文读懂?开玩笑呢?当然,一篇文章下来不可能把所有的知识点讲一遍,但是作为一个骨架、一张脉络,相信能够带给读者以启发。本文摒弃掉复杂的原理和CANoe繁琐的操作步骤,只捞干的。从(CAN/CANoe)它是什么?它可以做什么?它怎么样去做这些事情?三个方面分别对CAN和CANoe进行论述

一、什么是CAN?

1.1、从通信说起

        "交通基本靠走,通讯基本靠吼,治安基本靠狗,取暖基本靠抖,挖掘基本靠手,耕地基属本靠牛,娱乐基本没有......" 这是一段形容落后地区状况的段子,其中有一句“通讯基本靠吼” ,可见原始的通讯方式就是吼,直接向对方讲话。

近距离通信
近距离通信

        先来分析一下"",我们知道真空环境是无法直接讲话沟通的,因为直接说话需要介质传递声波的振动,这时候空气充当传输媒介(通信媒体)。通信媒介是通信传输系统中发方与收方之间的物理路径,也是通信系统的重要组成部分之一。在某种意义上说,通信传输的特性和质量取决于信号本身和传输媒体的特性。说话者通过说话发出信息,是信息的源头,充当信源。在计算机通信过程中,产生和发送信息的设备或计算机。信源,理解成信息的源泉,英文是 Feed 。听话收到了说话者表达的信息,是信息的接收者,充当信宿。信宿是信息动态运行一个周期的最终环节。其功能是接收情报信息,并选择对自身有用的信息加以利用(如两个人说话的时候会过滤掉其他人的谈话内容和环境噪音等),直接或间接地为某一目的服务。信源、通信媒体、信宿被称为通信的三要素

        三要素倒是有了。可是交谈起码得保证对方能听懂你的话吧,那用哪种语言进行交流呢(通信协议)?不小心说错了句话怎么办(纠错机制)?声音太小对方没听清怎么办(重传机制)?多人共同谈话的时候怎么办(总线仲裁)?多人交谈时如何指定一个人或几个人对其说话(消息过滤)?请继续下文。

1.2、CAN网络通信

较长距离通信

        距离稍长一些,直接讲话对方就难以听到。不少同学小时候应该玩过这种传声筒,两边用两个纸杯子,中间用一根棉线,可以在较长距离上进行交谈,还可以说一些悄悄话,其他人不易听到。这就是最原始的网络传输。虽然这个网络只有一根线(棉线)+两个节点(纸杯),更没有什么复杂的交换机/路由器等设备,但它已经是网络通信了。(PS:此处不讨论路由器/交换机/网关,这三者也不影响对本文的理解,需要了解这三者的请另外查找资料。)

CAN网络

        CAN-bus总线(Controller Area Network):两根线CAN-H、CAN-L,所有的CAN节点连接到上面。每个CAN节点包含CAN收发器、CAN控制器、MCU、MCU应用电路(如控制电机)四大部分。是一种用于实时控制系统和嵌入式系统中的串行通信协议。它最初是由Bosch公司开发用于汽车电子系统,但现在已经在各种领域得到了广泛应用,包括工业控制、航空航天、医疗设备等。以下是一些关于CAN-bus总线的重要特点和信息:①、实时性和可靠性:CAN-bus总线具有高实时性和可靠性,适用于对通信延迟和数据传输可靠性要求较高的应用场景。②、多点连接:CAN-bus总线支持多个节点(通常是传感器、执行器、控制器等设备)连接到同一条总线上,实现分布式控制和通信。③、灵活性:CAN-bus总线支持不同的传输速率和帧格式,可以根据具体应用的需求进行配置和调整。④、抗干扰能力:CAN-bus总线具有良好的抗干扰能力,能够在嘈杂的工业环境中稳定运行。⑤、错误检测和纠正:CAN-bus总线具有内建的错误检测和纠正机制,可以检测和纠正通信中的错误,提高通信的可靠性。⑥、优先级和帧格式:CAN-bus总线使用带有标识符的消息帧进行通信,消息帧包括数据、控制信息和错误检测位,可以根据优先级进行消息传输。总的来说,CAN-bus总线在各种实时控制和数据交换应用中都具有重要的作用,为系统的稳定性和可靠性提供了可靠的通信解决方案。

1.2.1、通信协议

        通信是分层的,先来理解一下通信分层的概念: 

传声筒通信时的分层概念

以传声筒通信为例,① 两个小朋友不关心声音如何传输,只关心自己表达的意思对方能不能理解。② 说话这个动作,说出“你好”这个词有很多种表达语言,可以是中文、英文、日文等。只有双方表达一致才能正确理解对方的意思。③ 纸杯,决定以什么样的方式传输信息,以及如何让其他纸杯获取这些信息。④ 绳子 传导振动信号,绳子上振动信号频率与幅度的组合就反映了传递的信息。不关心这些信号的意思。

国际标准化组织ISO对通信系统的详细划分:

        通信协议是指用于在计算机网络中传输数据的规则和约定。它定义了数据如何在网络中传输、如何被分割和重组、错误检测和纠正方法等。常见的通信协议包括TCP/IP、HTTP、FTP、SMTP等。这些协议在不同的网络层次上起着不同的作用,例如TCP/IP协议是在网络层次上进行数据传输的,而HTTP协议则是在应用层次上进行超文本传输的。

        注意:在网络通信的各层中,每一层都有属于自己的通信协议,必须是同一层次同一种通信协议之间才可以"对话"。否则对方理解不了你的意思

        在CAN-BUS协议中定义了ISO模型中的物理层和数据链路层:

        一些国际组织定义了应用层协议,如CiA组织的CANopen、ODVA组织的DeviceNet等,也有一些用户根据需求自行设计应用层。(并非CAN-BUS本身的协议,是另外定义的)

        对于物理层不做过多的解释,知道它最终是把数据转换成比特位(101010....)并且用可靠的方式收发即可。下面重点来看一下数据链路层,CAN的大多数重要操作都是在数据链路层中完成的。

1.2.2、数据链路层

        CAN-bus上传输的基本单位是CAN帧。CAN-bus通过各种不同的帧实现收发目标选择、总线竞争、数据校验、错误机制等功能。CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧、帧间隔5种类型。

1、数据帧:用于发送节点向接收节点传送数据,是使用最多的帧类型。数据帧是使用最多的帧,结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。 

 仲裁段(详解见2.4)

控制段
        控制段用于控制帧的发送和接收过程,确保数据的可靠传输。控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。 
数据段
        一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合。 与其他总线协议相比,CAN-bus的短帧结构具有以下优势:
数据量小,发送和接收时间短,实时性高。数据量小,被干扰的概率小,抗干扰能力强。

CRC段
CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。CRC校验段由15位CRC值和1位CRC界定符构成。 前面四段(帧起始、仲裁段、控制段、数据段)模2除以多项式G(x),得到的值就是CRC值,填入CRC段的前15位。接收端接收到数据后再次将前四段进行一次相同的运算,得到的值与CRC值相比较,如果不一致,则可判定数据被干扰或篡改了,请求重发数据

注:虽然CRC校验是一种常用的检测数据传输中的错误的方法,但是在极少数情况下,数据可能会被篡改而CRC校验仍然通过。这种情况可能发生在以下情况下:
1. CRC冲突:CRC校验算法并不是完美的,有时候可能会出现多个不同的数据帧产生相同的CRC校验码,这种情况称为CRC冲突。虽然这种情况非常罕见,但是理论上是可能发生的。
2. 攻击和篡改: 在一些特殊情况下,攻击者可能会有意地篡改数据,并重新计算CRC校验码,以使数据通过校验。这通常需要攻击者对CRC校验算法的详细了解和计算能力,因此属于高度技术性的攻击。
虽然数据被篡改但CRC校验通过的可能性非常低,但在实际应用中,建议使用其他安全机制来确保数据的完整性,如加密、数字签名等。

ACK段
当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。

2、远程帧:用于接收节点向某个发送节点请求数据。与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)。 

数据帧与远程帧的区别如下:

比较内容数据帧远程帧
ID发送节点的ID被请求发送节点的ID
SRR0(显性电平)1(隐性电平)
RTR0(显性电平)1(隐性电平)
DLC发送数据长度请求的数据长度
是否有数据段
CRC校验范围帧起始+仲裁段+控制段+数据段帧起始+仲裁段+控制段

3、错误帧:用于接收节点向某个发送节点请求数据。尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种。 

        当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识。 

        在CAN总线上,错误帧是由CAN控制器自动产生的,而不是由发送节点或接收节点手动发送。错误帧的产生与错误的类型有关,通常情况下,可以根据错误类型来确定是由发送节点还是接收节点触发了错误帧的发送。
① 发送节点发出错误帧的情况:
   - 位错误(Bit Error):当发送节点在发送数据时,位出现错误,例如发送了高电平但总线上检测到低电平,此时发送节点会被CAN控制器识别为发送了错误的位。这种情况下,发送节点的CAN控制器会发送错误帧。
   - 格式错误(Form Error):如果发送节点在发送帧的起始位、标识符、控制位等位置出现格式错误,例如发送了错误的帧格式或者CAN控制器无法解析的帧格式,发送节点的CAN控制器会发送错误帧。
② 接收节点发出错误帧的情况:
   - CRC错误(CRC Error):当接收节点在接收到数据帧后计算CRC校验码时发现与接收到的CRC校验码不匹配时,会产生CRC错误。此时接收节点的CAN控制器会发送错误帧。
   - 仲裁错误(Arbitration Error):在CAN总线上,如果同时有多个节点尝试发送消息,就会发生仲裁错误。此时,发生仲裁错误的节点会被CAN控制器标记为失败,该节点的CAN控制器会发送错误帧。
总的来说,错误帧是由CAN控制器自动产生的,而不是由发送节点或接收节点手动发送。错误帧的产生是基于CAN总线上发生的错误情况,由CAN控制器根据错误类型自动发送。

        为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为。

4、过载帧:用于接收节点向发送节点通知自身接收能力的帧。当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成。 

5、帧间隔:用于将数据帧或远程帧与前面的帧分离的帧。帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。 

 6、链路层的数据处理流程

1.2.3、应用层

        应用层协议规定设备的工作流程和数据的具体含义。 有很多种,全球许多著名的厂商和协会组织针对各种应用领域制定了各具特色的应用层协议。在工业领域影响力较大的有CiA组织推广的CANopen协议和由ODVA组织推广的Devicenet协议。但应用层协议并不属于CAN-BUS协议本身,而是另外定义的。下面我们自定义一种应用层协议,旨在理解应用层协议本身。想了解CANopen、Devicenet的请自行查找资料。

        CAN-bus只提供可靠的报文传输服务,当一个CAN节点接收到另外一个CAN节点发来的报文时将会产生以下疑问。

        因此,CAN网络中的所有节点必须遵循统一的规则,它规定了CAN帧ID和帧数据的使用方式等,这个规则就是CAN应用层协议。常见的CAN应用层协议有: CANOpen、DeviceNet、J1939、iCAN等。例如,我们将CAN帧ID用于表示为节点的地址时:接收时,若收到的CAN帧ID与自身地址相同,则将CAN帧交给上层处理,否则直接丢弃;发送时,将待发送的CAN帧ID设置为接收节点的地址。特别注意:为什么举了什么个例子?很多文章都说CAN帧的ID和节点地址没有半点关系,只是帧的唯一标识,为啥这又扯上关系了呢?因为这是应用层协议,是自定义的,不属于CAN-BUS本身的规范,CAN-BUS规范只定义了物理层和数据链路层,在CAN-BUS规范中,CAN帧的ID只是这一帧数据的唯一标识,没有其他含义。而应用层的你可以自由发挥,约定好了让它表示什么意思就可以表示什么意思。

        CAN报文的分配是各种基于CAN-bus的应用层协议中最基础的组成部分,主要包含两个方面:

定义示例: 

 1.2.4、总线仲裁

假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是:

从该分析过程得出结论是:帧ID值越小,优先级越高。
对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理。
由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平,所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高
由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐性电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。 

1.2.5、消息过滤

CAN总线的消息收发模式: 

        发送CAN帧的节点,其发送的数据被网络中的所有消费者接收。接收CAN帧的节点,接收总线上的所有CAN帧。CAN节点不需要处理所有的CAN帧CAN控制器通过滤波器来过滤不需要接收的CAN帧。 

1.3、CAN的重要概念

        3.1、CAN ID是什么? CAN ID(Controller Area Network Identifier)是CAN(Controller Area Network)中用于标识消息的唯一标识符。每个CAN消息都有一个唯一的CAN ID,它用于在CAN总线上区分不同类型的消息和确定消息的优先级。CAN ID通常是11位或29位的二进制值,取决于CAN的标准或协议版本。CAN ID的不同取值可以用来区分不同的消息发送者和接收者,以及不同类型的消息。通过使用CAN ID,CAN总线上的节点可以识别和处理特定的消息,并根据需要进行相应的操作。   

        3.2、CAN节点地址是什么?CAN节点地址:CAN(Controller Area Network)节点地址是根据CAN协议来分配的,通常是在CAN总线上进行配置和管理的。在CAN网络中,每个节点都有一个唯一的标识符,称为节点地址或节点ID。这个地址通常是一个整数,通常是8位或11位,取决于CAN的标准或协议版本。节点地址的分配可以手动进行,也可以通过自动配置实现。手动配置时,系统管理员或开发人员可以为每个节点分配一个唯一的地址。而自动配置时,节点可能会在启动时发送请求以获取地址,然后由网络中的其他节点分配地址。无论是手动配置还是自动配置,节点地址的分配都需要确保每个节点都有一个唯一的地址,以便在网络中正确识别和通信。

        3.3、CAN ID与CAN节点地址的区别是什么?CAN ID(Controller Area Network Identifier)和CAN节点地址是在CAN总线上用于标识不同消息和节点的两个不同概念:
CAN ID是用于标识CAN消息的唯一标识符,它用于区分不同类型的消息和确定消息的优先级。通常是11位或29位的二进制值,用于在CAN总线上识别消息的发送者和接收者。
CAN节点地址是用于标识CAN网络中不同节点的唯一标识符,它用于确定数据帧的发送者和接收者。是一个整数值,通常是8位或11位,用于在CAN网络中唯一标识每个节点。
区别:
① CAN ID用于标识消息,而CAN节点地址用于标识节点。
② CAN ID用于在CAN总线上区分消息的来源和目标,而CAN节点地址用于在网络中唯一标识节点。
③ CAN ID是消息的一部分,而CAN节点地址是节点的属性。
④ 在CAN总线上,不同节点可以使用相同的CAN ID来发送消息,但每个节点都应具有唯一的节点地址。

        3.4、CAN ID与CAN节点地址存在什么联系?在CAN协议中,通常情况下,CAN ID是用来表示消息的唯一标识符,而不直接包含节点地址。CAN ID通常是11位或29位的二进制值,用于在CAN总线上区分不同类型的消息和确定消息的优先级。CAN ID的不同取值可以用来区分不同的消息发送者和接收者,以及不同类型的消息。然而,有些CAN应用中,可以在CAN ID中包含节点地址或其他标识信息,以实现更复杂的消息处理或路由。例如,在一些特殊的CAN通信协议中,可以使用CAN ID的一部分来表示节点地址,从而将消息路由到特定的节点。这种做法虽然在某些情况下可能会增加消息处理的复杂度,但也提供了一种灵活的方式来组织和管理CAN网络中的通信。

        3.5、CAN节点地址是如何设置的?CAN节点地址通常是在每个CAN节点的配置中设置的,具体设置的方式取决于所用的CAN控制器和相关的开发环境或工具。一般来说,CAN节点地址可以通过以下几种方式进行设置:
① 软件配置: 在CAN节点的软件中,可以通过配置文件、参数设置或者API调用等方式来设置节点地址。
② 硬件配置: 有些CAN节点可能具有物理开关或者拨码开关,通过设置这些开关的位置可以设定节点地址。
③ 网络配置: 在某些情况下,节点地址可能是通过网络管理工具或者网络协议来设置的,例如在CANopen协议中就有专门的服务来配置节点地址。
④ 自动配置:一些CAN控制器可能支持自动配置节点地址的功能,节点在启动时可以通过网络中的其他节点自动获取地址。无论使用哪种方式进行设置,都需要确保每个CAN节点都拥有一个唯一的地址,以便在网络中正确识别和通信。

        3.6、CAN ID是如何分配的?CAN ID(Controller Area Network Identifier)通常由系统设计者或开发者根据具体的应用需求和通信协议来分配。分配CAN ID需要考虑到网络中不同节点之间的通信需求、消息优先级以及数据帧的格式等因素。通常情况下,CAN ID的分配遵循以下原则:
① 唯一性:每个CAN ID必须是唯一的,以确保在CAN网络中不会出现冲突。  
② 优先级:CAN ID可以根据消息的优先级进行分配,以便在网络中实现消息的优先级处理。
③ 消息类型:不同类型的消息可以分配不同的CAN ID,以便在接收端区分不同类型的消息。
④ 协议规定:在某些CAN通信协议中,CAN ID可能会按照特定的规定进行分配,开发者需要遵循这些规定来进行分配。
分配CAN ID的过程通常是在系统设计和开发阶段完成的,可以通过配置文件、参数设置或者程序代码来进行设置。在分配CAN ID时,开发者需要仔细考虑各种因素,并确保分配的CAN ID符合通信需求和协议规定,以确保系统的正常运行和可靠性。

        3.7、CAN过滤器如何设置?在CAN过滤器中设置的值通常是CAN ID,而不是节点地址。CAN过滤器用于筛选出需要接收的CAN消息,它可以根据CAN ID来过滤消息,并决定哪些消息应该被接收,哪些消息应该被忽略。每个CAN节点可以根据自身的过滤规则来配置过滤器,以确保只接收与自身相关的消息。节点地址通常在数据帧中的某个字段中包含,而不是用于配置CAN过滤器。CAN过滤器通常可以设置多个过滤值,以允许接收多个特定的CAN消息。具体可以设置的过滤值数量取决于CAN控制器的硬件和软件实现以及所用的CAN控制器的型号和规格。一般而言,CAN控制器会提供多个过滤器寄存器,每个寄存器可以配置一个过滤值。这样就可以使用多个过滤器来过滤出需要接收的多个CAN消息。

二、CAN可以做什么?

        CAN总线协议是一种高效、可靠的串行通讯协议,主要用于汽车和工业自动化领域,实现了实时应用的需求。
① CAN总线协议的基本概念包括报文、信息路由和位速率。在CAN系统中,总线上传输的信息以不同格式的报文发送,但长度有限。CAN总线的位速率根据系统的不同而不同。
② CAN总线协议具有多主控制的特点,总线上空闲时,所有单元都可发送消息。同时,两个以上的单元同时开始发送消息时,根据标识符(ID)决定优先级。标识符较小的单元可继续发送消息,而标识符较大的单元则立刻停止发送并转入接收模式。此外,系统具有很高的可靠性,广泛应用于汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
③ CAN总线协议的物理层形式主要分为闭环总线及开环总线网络两种。闭环总线网络适用于高速通讯,总线的最大长度为40m,通信速度最高为1Mbps。开环总线网络适用于远距离通讯,最大传输距离为1km,最高通讯速率为125kbps。
④ 使用CAN总线协议的优点包括高可靠性、多主控制、高速度和远距离通讯等。这些优点使CAN总线协议广泛应用于各种领域,如汽车、工业自动化、船舶、医疗设备等。
        CAN总线协议被广泛应用于多个领域,包括但不限于:
① 汽车领域:CAN总线协议最初就是为了满足汽车内部ECU之间可靠通信的需求而发明的,因此它在汽车领域的应用最为广泛。通过CAN总线,车辆中的各个控制单元可以实现高效、稳定的数据交换,从而实现车辆的智能化、高效化控制。
② 工业自动化领域:CAN总线协议也广泛应用于工业自动化领域,用于实现机器人、物流设备、生产线等各种设备之间的通信与控制。CAN协议具有高速、可靠、实时等特点,可以满足工业控制系统对通信速度和稳定性的要求。
③ 航空领域:CAN总线协议也应用于航空领域,例如用于控制飞行器的各种子系统。
④ 船舶领域:在船舶领域,CAN总线协议被用于实现船舶各种设备的可靠通信。
⑤ 智能家居领域:在智能家居领域,CAN总线协议可以连接各种智能设备,如照明设备、空调系统、安防系统等,实现设备的互联互通。
⑥ 智能医疗领域:在智能医疗领域,CAN总线协议可以用于连接医疗设备,如监护仪、呼吸机等,实现设备间的快速通信。

三、如何使用CAN?

3.1、硬件设计

CAN节点硬件电路由CAN收发器、CAN控制器、MCU以及功能电路几个部分组成。 

3.1.1、CAN收发器
对应ISO/OSI模型的物理层。

CAN收发器就是将CAN控制器的逻辑电平与CAN总线差分电平相互转换的电平转换器。实现CAN收发器的方案有两种,一种是CAN收发IC,另一种是使用CAN隔离收发模块。

3.1.2、CAN控制器
对应ISO/OSI模型的数据链路层。

CAN控制器是CAN-bus设备的核心元件,集成了CAN规范中数据链路层的全部功能,能够自动完成CAN-bus协议的解析。有单独的CAN控制器芯片,也有直接集成CAN控制器的MCU。 

CAN控制器集成了CAN规范中数据链路层的全部功能,主要包括时序逻辑、错误管理逻辑、位流处理、接收滤波器、收发缓冲器以及接口控制逻辑。不同的半导体厂商推出的CAN控制器对内部功能模块的定义有一些差别,整个工作原理确是类似的。下面将分模块详细介绍CAN控制器组成。
① 接口管理逻辑部分(学过单片机的应该很容易理解,没学过的请移步先学习单片机,否则难以理解,更玩不转):解释来自CPU的命令、控制CAN控制器寻址不同的功能模块的寄存器单元、向主控制器提供中断信息和状态信息。
② 缓冲区部分:发送缓冲区 是主控制器和位流处理器之间的接口,能够存储发送到CAN总线网络上的完整信息。接收缓冲区 是验收滤波器和主控制器之间的接口,用来存储从CAN总线上接收到的信息。
③ 验收滤波器:把存于其中的验证码和接收到的CAN报文的识别码进行比较,以决定是否将该接收信息转存到接收缓冲器中。
④ CAN内核:位流处理器、错误管理逻辑和位时序逻辑组成了CAN内核,控制CAN帧的发送和接收。
位流处理器是一个在发送缓冲器和CAN总线之间控制数据流的程序装置,它还在CAN总线上执行错误检测、仲裁、填充和错误处理。
位时序逻辑监视串口的CAN总线和处理与总线有关的位时序,并与数据的同步有关。
错误管理逻辑部分负责传送层模块的错误管制,它接收位流处理器的出错报告,通知位流处理器和接口逻辑进行错误统计。

3.1.3、MCU
软件程序(包括驱动程序和应用程序)都是运行在这上面,控制各个硬件部件工作。按照CAN报文使用规则解析CAN报文、采集并发送数据等。

在CAN节点电路中,MCU 主要用于完成对CAN控制器和功能电路的控制。
① 在CAN节点启动的时候初始化CAN控制器的工作参数
② 在CAN总线通信过程中通过CAN控制器读取和发送CAN帧
③ 在CAN控制器发生中断时处理CAN控制器的中断异常
④ 根据接收到的数据输出对应的一些控制信号,驱动功能电路完成预定功能

3.1.4、功能电路
完成特定的功能,如信号采集或控制外设等。如传感器数据采集/电机控制/LED控制等等。

3.2、软件设计

3.2.1、驱动程序编写
驱动程序是直接驱动硬件工作的程序,如果从零开始编写的话,需要参考芯片手册,配置寄存器状态。基于SDK进行开发的话,具体参考芯片厂商提供的SDK。总体上开发模式仍属于单片机开发,CAN相关的配置主要在于CAN控制器的配置,如波特率、验收滤波器等。
3.2.2、虚拟CAN驱动编写
为啥要有这么个玩意?是必需的吗?答:不是必需的,但有了它会方便很多事情。如下图:

3.2.3、应用程序的编写
根据收到的指令控制本节点的功能电路,或者把本节点的功能电路产生的信息按需要发送出去即可。

四、什么是CANoe?

先来看一幅图

        这是一辆普通的现代化汽车上的部分ECU,有很多ECU,而且在实际开发的时候这些ECU还有由多个供应商进行开发的。比如仪表显示ECU可能由北京的厂家A进行开发,空调控制ECU可能由深圳的厂家B进行开发。其他的ECU也可能由天南海北的各不同厂家进行开发。(对汽车整车不了解的可能有疑问,这些东西不是车厂自己搞的吗?呵呵,几乎所有的整车厂都是一个集成工厂,各零部件分别由不同的供应商实现,所谓术业有专攻,如果整车厂自己全部做,估计能做到赔死,而且质量也不怎么样)。

        如此就带来一个问题,因为各个ECU之间不是独立的啊,他们之间是有交互的,而且有很多很多交互。比如仪表ECU,上面需要显示胎压、显示灯光状态、车门窗状态,怎么办呢?不可能一直等着所有的ECU都做好再调试吧,也不可能为了和对方调试一次就几千公里跑过去吧。而且你依赖对方的ECU,对方也依赖你的,大家都等着做好了再调试,岂不是成死锁状态了!?所以每个开发ECU的都期望自己能有一辆所有其他功能都已完成了样车,可这种期望却是不可能的。那实物不可能有,能不能模拟出来一辆呢?起码模拟出来电子系统,让我们能调试调试交互。当然,我们能想到的已经有大佬想好了,而且还实现了。这就是CANoe,仿真是它的主要功能

其他部分用CANoe仿真出来,只调试仪表显示ECU一个真实节点

        CANoe是Vector公司推出的一款总线开发环境,全称为CAN open environment,最初主要为汽车CAN总线的开发、仿真、测试和分析而设计。随着车载总线的发展,扩展加入了LIN、FlexRay、MOST和Ethernet等网络。CANoe是网络和ECU开发、测试和分析的专业工具,支持总线网络开发从需求分析到系统实现的整个开发过程。CANoe丰富的功能和配置选项被整车厂和供应商的网络设计工程师、开发工程师和测试工程师所广泛使用。在项目开发的各个不同阶段,CANoe发挥的作用也不相同。

五、CANoe能做什么?

5.1、仿真

根据车载ECU项目的开发进度,可以分为以下三个阶段
5.1.1、第一阶段:全仿真网络系统
        在开发的初期阶段,CANoe可以用于建立仿真模型,在此基础上进行ECU的功能评估,这样就可以尽早地发现问题并解决问题。CANoe主要是针对有具体数据定义的报文进行事件处理,也就是借助CAPL实现网络节点的行为(这玩意为啥能实现一个网络节点的行为?怎样实现一个网络节点的行为?将在“六、如何使用CANoe”中进行说明)。在这个阶段,可以利用所设计的完整网络仿真系统进行离线的仿真,检验各个节点功能的完整性及网络的合理性。

全仿真网络系统


5.1.2、第二阶段:真实节点和部分仿真节点共存
        在第一阶段结束后,用户能得到整个网络的系统功能模型。接下来,用户可以将自己开发的真实ECU节点替换仿真系统中对应的仿真节点,利用总线接口和CANoe剩余的节点相连接,测试自己节点的功能,如通信、纠错等。出于这样的原因,在很多场合项目组成员习惯将CANoe仿真工程称为RBS(Rest Bus Simulation,剩余总线仿真),某些地方使用Remaining Bus Simulation。这样,每个供应商的节点可以并行开发,不受其他节点开发进程的影响。

真实节点和部分仿真节点共存


5.1.3、第三阶段:全真实节点的网络系统
        在开发的最后阶段,所有ECU的真实节点都被逐一地连接到总线系统中,此前的仿真节点会被逐一从总线上断开。开发者可以在真实节点的条件下,验证总线的负载情况和其他的设计要求是否满足。在这个阶段,CANoe主要充当网络系统分析、测试和诊断的工具。在这个过程中,整个系统包括各个功能节点都能被?细地检查到。由于利用仿真节点代替真实的网络节点是最理想的状态,所以通过这两种状态的切换可以交叉检查相关功能,快速定位问题的根源。

全真实节点

5.2、诊断

        汽车诊断技术是基于车载网络的一项重要应用,既可实时监控整车的状态,提高汽车的安全性,也可以帮助维修人员方便快捷地定位故障,提高维修效率。汽车诊断技术是在不拆卸车辆的情况下,通过读取车辆在运行过程中所记录的数据或故障码来查明故障原因,并确定故障部位的汽车应用技术。利用该技术,可以快速检测汽车故障(如传感器短路/开路、排放错误、异常操作等)来提高汽车安全性和维修效率。诊断采用“问-答”模式,即诊断仪向车辆指定的ECU发送请求数据,指定的ECU会做出响应,将对应的应答数据返回给诊断仪。利用已定义的诊断描述文件,可将相应的数据解析为可读的诊断信息。

汽车诊断技术基本方法

例如:
诊断仪请求命令:22 4A 05(油箱温度请求命令)
车辆应答数据:62 4A 05 5A FF(返回当前油箱的温度数据)
在诊断描述文件中,定义了车辆应答数据的第?个字节表示邮箱温度的十六进制数据,所以车辆的应答数据中5A就代表油箱温度为90℃。

CANoe可以满足ECU开发的各个阶段中对诊断测试的设计和执行(注意并不是所有诊断相关的都可以做,只是一部分)的要求。Vector公司提供了一整套的诊断工具链,为ECU诊断测试提供一整套解决方案,下表列出常见的诊断工具:

诊断功能Vector相关工具
创建和查阅诊断描述文件CANdelaStudio和ODXStudio:创建和查阅诊断描述文件,如CDD、ODX/PDX等。
ECU诊断软件开发CANdesc
诊断测试CANoe、CANalyzer、CANape、Indigo、CANoe.Diva
ECU软件刷新vFlash

CANoe可以满足ECU开发的各个阶段中对诊断测试的设计和执行的要求。CANoe支持的主要诊断功能见下表:

使用案例相应功能
真实ECU节点通信分析ISO TP、KWP2000和Diagnostics Observer
诊断功能测试Diagnostic Console(诊断控制台)
故障查询Fault Memory Window(故障记忆窗口)
安全保护及会话控制Session Control Window(会话控制窗口)
OBD诊断OBD II Windows(OBD II窗口)
诊断功能设计系统/剩余总线仿真
仿真ECU中诊断实现TP DLL、ECU仿真和CAPL编程仿真
规范测试/集成测试/回归测试(包括TP层故障注入)TP DLL+TP故障注入、CAPL编程仿真、TFS测试功能库

5.3、测试

        对于车载网络的测试,Vector公司提供了较为全面的、专业的ECU测试工具,包括物理层和数据链路层测试等,如使用CANscope和CANstress等工具来验证节点在电路设计、物理电平方面的性能,以及通信参数的一致性等。基于CANoe的测试环境,可进行网络通信的完整性和正确性验证

基于CANoe的自动化测试系统架构

5.4、分析

        CANoe为用户提供了强大的总线测量和分析功能,大大方便了ECU开发过程中的测量、分析和验证。CANoe的测量和分析是基于数据流方向的,从数据源到处理数据、显示数据和记录数据,数据可以根据需要被单独处理。在Measurement Setup窗口中,数据流以图形化的形式显示,并且可以在此窗口中对数据流进行配置。

CANoe测量和分析的数据流结构

① 接收数据:数据源可以是实时数据(online)或者离线数据(offline)。实时数据可以由仿真节点产生,也可以来自相连的硬件(例如VN1630、CANCaseXL等)。离线数据是一个包含记录数据的文件。
② 处理数据:为了更清楚地显示出用户所关心的数据,可以使用过滤器(filter)将期望显示的数据分离出来。过滤器不是必需的,用户可以根据需要添加和设置。
③ 显示数据:CANoe提供各种不同的分析技术,分析窗口可以显示基于总线(bus)、报文(message)或者信号(signal)的数据。有些总线有自己特定的分析窗口。
④ 记录数据:为了便于后续的数据分析,测量数据可以按时序先后记录到Logging文件中。可以在Measurement Setup窗口中设置是否保存记录文件,为了减少Logging文件记录过多的无用数据,可以使用trigger设置触发记录的条件。 

六、如何使用CANoe?

        CANoe的运用是一个相对复杂的事情,因为它功能十分强大。不过万变不离其宗,我们从一个简单的例子来进行说明CANoe的仿真功能。(诊断/测试/分析等功能本文暂不讨论,因为每一项拎出来内容都非常多,会另立其他文章进行讨论)。

6.1、既然是CAN总线通信,首先得有线吧
        打开CANoe主界面,单击File→New可以看到CANoe提供的工程模板。这里双击选择模板CAN-500kBaud-1ch,将生成一个空白的支持单通道的CAN总线仿真工程。这条CAN总线就出来了。

6.2、CAN总线上挂着很多CAN节点,得定义节点吧
        在CAN1的连线上右击,选择Insert Network Node命令,分别创建两个节点为ECU1和ECU2。添加网络节点的方法及添加后的效果图:


6.3、每个节点除了收发CAN信号,得有点看得见的响应吧(功能电路)
 CANoe中为了方便用户模拟真实环境中的操作和显示,可以把需要的相关控制或显示控件设计在一个或多个面板中。
例如创建一个开关的步骤:
① 单击Tools功能区的图标打开Panel Designer(面板设计器)。
② 新建一个Panel,命名为SWITCH,并保存在文件夹Panels下。
③ 在Panel Designer窗口的Toolbox(工具箱)中选择添加控件Switch/Indicator。在Properties(属性)对话框里设置相关参数。
④ 在开关左边添加控件Static Text,将Text属性设置为Switch。

可以仿照以上步骤再创建一个灯,开关绑定到一个ECU、灯绑定到另一个ECU。

仿真面板效果图

6.4、在这个仿真的CAN网络中,有哪些信号/数据,分别表示啥意思啊
        数据库文件在仿真工程中可以供CAPL和Panel面板调用,并在Trace、Graphics等分析窗口中将相关信息解析出来,将十六进制的数据转换为数据库中对应的报文和信号等,具有较强的可读性。操作步骤:① 新建数据库 ② 添加报文和信号 ③ 添加数据库到工程中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值