CANController Area Network控制器局域网简称CAN总线。CAN总线是最为常用的车辆总线。ISO 11898标准是CAN总线最基础的协议最高可以支持1Mb/s的通信速率在此基础上开发的SAE J1939广泛应用于卡车、大客车、工程机械、农业机械等工业领域的高速通信其通信速率为250kb/s乘用车则是基于ISO 11898根据需求自定义通信协议。在ISO 11898-2中定义了高速CAN主要用于连接一些实时性要求较高的设备例如发动机电机等。在ISO 11898-3中定义了低速CAN主要用于连接一些实时性要求不高的设备例如车身系统上的灯光控制车门控制等。两种CAN的传输速率与电平信号也有所区别本文的内容以高速CAN为主低速CAN将略微带过。一.CAN总线在车辆上的应用CAN总线最初是为了解决汽车串行通信而研制的随着CAN总线在各个行业和领域的广泛应用对其通信格式标准化也提出了更严格的要求。1991年CAN总线技术规范Version2.0制定并发布简称CAN2.0其包括A和B两个部分区别在于数据帧的格式2.0A只给出了标准帧格式帧ID长度为11个位2.0B则给出了标准帧与扩展帧两种格式扩展帧ID长度扩展到了29个位。目前国内外新能源车大多基于CAN组建车载网络CAN总线主要用于连接动力系统与车身电子系统乘用车基本以ISO 11898协议标准由OEM自定义通信协议来搭建CAN网络商用车、农业机械、工程机械大多以SAE J1939协议标准搭建CAN网络故障诊断仪也大多采用CAN通信的方式接入常用的协议为OBD诊断和UDS诊断。车上各种基于CAN的网络通过网关连接在一起在许多车载系统中网关功能集成在智能仪表中。在新能源汽车中整车控制器VCU是整个控制系统的核心内部也会搭载网关功能。尽管有其他通信协议在安全性、时效性方面更加优秀在多媒体方面更为领先但是CAN总线依靠其价格低廉并且拥有相对可靠的通信占领了汽车网络较大的份额。二.CAN的基本特征目前传统燃油车与新能源车基本都采用CAN总线组建车载通信网络。CAN总线在设计之初规定物理层的传输CAN_H和CAN_L使用双绞线连接理论上当总线上遇到干扰时两条CAN线之间的差分电平依旧保持不变提高了抗干扰能力如图2-1。图2-1 CAN总线差分信号即便CAN总线自带抗干扰能力但是也无法避免磁场、雷击、电磁脉冲等干扰因素干扰不仅影响信号甚至可能烧毁电子元器件出现设备死机等情况将CAN收发器信号共地增加共模滤波器为双绞线包裹屏蔽层可以在一定程度上降低磁场的影响。为避免雷击与电磁脉冲只能更换无法被电磁干扰的传输介质才能有效屏蔽干扰例如光纤但是也提高了成本。CAN总线是一种串行数据通信总线最高速率可达1Mb/s最远距离可到10km在CAN总线网络中任意两个节点之间的传输速率与传输距离的关系如图2-2所示。500kb/s和250kb/s是最为常用的传输速率。图2-2 CAN总线速率与距离CAN总线经过位填充循环冗余检验CRC校验报文格式检测等检测错误的工作拥有了较强的错误检测能力当总线上检测到错误时会通过接收错误计数器判断当前错误状态是否允许该节点继续参与总线工作。CAN总线的基本特点CAN总线以多主站竞争的总线模式形成了一种广播式通信任何节点在任何时候都可以向总线发送信息我们称其为帧报文报文内不包含物理地址将数据块中的ID作为整个网络的标识符。网络中的各节点根据ID的优先级逐位仲裁竞争向总线发送帧报文其余节点对总线上的报文ID进行检测判断该信息若与自己有关则进行处理否则忽略。采用该模式的优点在于理论上网络内可以无限制地挂接节点实际上受硬件限制也可以使不同的节点接收同一条报文。CAN总线采用非破坏性仲裁技术如果在同一时刻有2个或2个以上的设备向网络上传输数据会触发总线仲裁判断报文优先级发送优先级较低报文的节点将延后发送报文或者竞争失败停止发送报文优先级较高的报文则继续发送。等待总线空闲时间将重新发送优先级较低的报文以此避免总线冲突。同一节点发送的不同报文也会根据传输的数据内容分配优先级故节点之间没有优先级之分主要依靠报文中的ID进行总线仲裁。CAN总线各节点可以设置接收滤波决定总线上的数据帧ID与本节点是否匹配若匹配成功数据就被存入节点设备的相应寄存器中否则就抛弃该数据从而能够减轻总线控制器的工作量。CAN总线支持远程数据请求目标节点需发送一个远程帧其中的标识符ID应与所需数据帧的标识符相匹配。随后相应的数据源节点会发送一个数据帧以响应远程帧请求。CAN总线节点配置相对方便若挂接一个新的节点该节点的作用仅为接收当前总线上已有的数据则网络中的其余节点均不用做任何软硬件方面的调整。若该节点需要发送有效数据或者需要追加新的接收数据则需要对应的接收方与发送方作出调整。总线仲裁失败或者被错误干扰的报文会在总线空闲时间自动重发若空闲时刻依旧有2帧及以上的报文同时发送同样会再次进行仲裁以此反复直到全部发送完毕。任何节点会对错误帧进行标记通过错误计数器判定错误类型。所有接收器会校验接收报文的一致性对数据块中的DLC数据长度进行比较对一致性的帧做出应答否则标记错误。CAN总线能够区分临时故障与永久性故障能够自动断开故障节点使其脱离与总线的连接无法进行报文的发送与接收。通常情况下一个节点必定处于主动错误、被动错误、离线三种状态的其中一种。三.CAN的分层结构CAN通信结构参考开放式系统互联通信参考模型即OSI模型如图3-1。OSI模型提供了一个通用的概念给开发者一个可以用于连接不同系统并且方便开发与完善的框架。图3-1 OSI模型OSI将计算机网络体系结构划分为以下七层物理层: 将数据转换为可通过物理介质传送的电子信号负责管理计算机通信设备和网络媒体之间的互通包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等。数据链路层负责网络寻址、错误侦测和改错决定访问网络介质的方式例如CAN总线、以太网、无线局域网Wi-Fi和通用分组无线服务GPRS等。网络层决定数据的路径选择和转寄传输网络数据例如互联网协议IP。传输层提供终端到终端的可靠连接例如传输控制协议TCP。会话层负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接允许用户建立连接。表示层协商数据交换格式把数据转换为能与接收者的系统格式兼容并适合传输的格式。应用层提供为用户的应用程序和网络之间的接口以设置与另一应用软件之间的通信。例如: HTTPHTTPSFTPTELNET等。CAN的结构体系遵循OSI模型定义了物理层和数据链层又按照局域网标准LAN IEEE 802.2将数据链路层细分为逻辑链路控制LLC和介质访问控制MAC。将物理层细分为物理信令PLS、物理介质附件PMA和介质附属接口MDICAN的分层结构如下图3-2所示。图3-2 CAN的分层结构物理层和数据链层均在ISO 11898-1~ISO11898-3中定义MDI则在CIA DS-102中定义了建议使用Sub-D9接口。LLC用于统一数据传输方式CAN总线的传输方式为向网络中的所有节点发布数据即广播传输发送端不用确定接收端是否收到了帧。MAC属于LLC下的一个子层它定义了数据帧怎样在介质上进行传输。在共享同一个带宽的链路中对连接介质的访问进行优先级判定用于解决总线仲裁拥有故障界定功能能够区分短期干扰故障与永久性故障的自校验机制。物理层中PLS用于发送数据时进行编码以及接收数据时进行解码。PMA用于发送和接收缓冲在高频条件下很好地避免数据间的串扰。MDI定义了一个从物理层实现到物理介质传输数据的物理或电气/光学接口即ECU与CAN总线相连的电路。四.CAN物理层4.1.物理连接CAN总线的物理连接如图4.1-1所示在总线的CAN_L与CAN_H之间并联两个终端电阻用RL表示两个电阻分别位于总线的两端所以叫终端电阻。图4.1-1 CAN总线的物理连接终端电阻主要用来抑制信号反射当信号在传播中遇到阻抗不连续即会产生反射波反射信号叠加在原信号上将会改变原信号的形状。若没有终端电阻干扰波不能被有效的吸收会造成总线传输的信号不稳定直接影响各电控单元的正常工作。 按照ISO 11898协议中规定一条总线上不允许超过32个节点虽然理论上按照这种挂接的方式可以挂接无限的节点数但是实际挂接数量取决于总线的电力负载。例如常用的CAN收发器TJA1050在官方资料中注明最多可以挂接110个CAN节点。一般车辆CAN总线的长度40m连接两个距离最远的节点也称其为干线其余节点均从干线上引出支线连接支线长度1m在乘用车中要求距离更短大约0.4m。总线上终端电阻的取值范围如表4.1-1所示。参数单位最小值额定值最大值备注RLΩ118120130最小功耗220 mW表4.1-1 终端电阻取值范围物理层中的CiA DS-102协议定义了物理接头 DB9并且推荐使用DB9接头但没有强制要求这种建议的物理接口仅用于临时接入总线调试使用如图4.1-2所示。图4.1-2 DB9接头现场采用OBD接头的情况较多如图4.1-3所示。图4.1-3 OBD接头而ECU端则是专用线束除了连接CAN总线以外还包含了需要连接的传感器、执行器电源输入等。4.2.电平信号物理层用于实现ECU与总线相连的电路ECU的连接数量取决于总线的电力负载。CAN总线能够使用多种物理介质例如双绞线、光纤等最常用的是价格相对低廉的双绞线。以高速CAN为例两条信号线为CAN_H与CAN_L信号采用差分电压传送静态电压为2.5V即差分电压为0被称作隐性电平逻辑表达为1。当CAN_H3.5VCAN_L1.5V差分电压为2V称作显性电平逻辑表达为0。总线上的两种逻辑显性与隐性如图4.2-1所示。图4.2-1 显性电平与隐性电平在隐性状态下CAN_H与CAN_L的电压稳定在总线平均电压差分电压几乎为0。显性状态差分幅值最好保持在2V左右若是低于1.3V在强干扰的环境下可能导致收发器无法识别或误识别总线信号。总线遵循线与逻辑即显性位覆盖隐性位。4.3.信号同步CAN总线传输速率最高可达1Mb/s总线节点通常采用石英晶振作为时钟发生器。但是各节点的晶振频率由于温度、电压、元器件的异常导致细微的误差只要它的的振荡频率在容差范围内各节点会通过再同步进行校正。1.位时间位时间的定义为1个位bit的持续时间像ECU同步化动作、网络传输延时补偿和采样点定位等总线管理功能它们均以位时间为架构执行并且都是由CAN协议IC集成电路中的可编程位定时逻辑加以实现的。额定位速率显示了理想发送器在不经再同步的情况下每秒送出的位数。额定位时间定义为额定位时间1/额定位速率。额定位时间可被认为是能够划分成几个互不重叠的分立时段。这些段组成位时间的情形如图4.3-1 所示。图4.3-1 额定位时间Sync_Seg(同步段)总线上挂载的各个ECU通过该时间段进行同步预计在该时间段中会出现一个跳变沿。Prop_Seg(传播段)这一时间段用来对网络内物理延迟时间进行补偿该延迟时间由信号在总线上的传播时间和ECU内部的延迟时间组成。Phase_Seg1Phase_Seg2(相缓冲段1相缓冲段2)这两个时间段用来补偿跳变沿的相位误差这两段可以被再同步处理延长或缩短。采样点它是读取总线电平并将其转化为对应值的时刻它位于Phase_Seg1的结尾。信息处理时间是从采样点开始留出的一段用于计算后续位电平的时间。2.时间编排时间份额是从振荡器周期派生出来的一种定长时间单元。它存在一个可编程的分度值它们都是整数最小范围为1~32。从最小时间份额开始时间份额的长度可以是时间份额m×最小时间份额。其中m为分度值额定时间各时段长度定义如下Sync_Seg为一个时间份额长度Prop_Seg可根据情况设定为12…8或更多个时间份额长度Phase_Seg1可根据情况设定为12…8或更多个时间份额长度Phase_Seg2选Phase_Seg1和信息处理时间中较长的那段信息处理时间小于或等于2个时间份额长度。一个位时间内时间份额的总数目起码要做到可以在8~25这一范围内进行选择。同时必须协调不同ECU中振荡器的频率使其产生一个能在全系统内有效的时间份额。3.同步硬同步和再同步是两种形式的同步过程。它们遵循如下准则一个位时间内仅允许一种同步。硬同步只有在总线空闲状态条件下隐性位到显性位的跳变沿发生时才进行表明报文传输开始。在其他情况下所有从隐性到显性的跳变沿都将用于再同步处理发送显性位的节点将不执行再同步处理。在经过硬同步之后位时间计数器随同步段重新开始计数。硬同步强行将已发生的跳变沿置于重新开始的位时间同步段内。再同步可能导致相位缓冲段1被延长或相位缓冲段2被缩短。这两个相位缓冲段的延长时间或缩短时间上限由再同步跳转宽度SJW给定。SJW规定了相缓冲段的延长量和缩短量的上限同步跳转宽度通常设置为2或者3避免设置为1因为1会导致总线兼容性大幅下降。总线上绝大多数的同步都是由仲裁引起的总线上的所有节点都要同步于最先开始发送的节点但是由于总线延迟节点的同步不可能达到理想的要求。如果最先发送的节点没有赢得总线仲裁那么所有接收节点都要重新同步于获得总线仲裁的节点。4.4.低速CAN电平信号低速CAN收发器电平信号如图4.4-1所示。图4.4-1 低速CAN电平信号低速CAN的通信速率125kb/s过慢的速率使其不会产生反射波不需要接终端电阻应用场景也相对较少。4.5.CAN接口电路推荐的CAN接口电路如图4.5-1所示其中共模滤波器是可选的实际电路中使用的TVS管、ESD电容、EMC电容等未包含在图中。图4.5-1 推荐的CAN接口电路CAN接口电路参数要求如下表RapidECU控制器使用了上述CAN接口电路电路参数与下表一致标号说明参数要求R1、R2终端电阻对于不包含终端电阻的CAN接口无此电阻。60R±5%通常使用62欧姆电阻Cs电容对于不包含终端电阻的CAN接口无此电容。4.7nF±10%C1、C2总线对地总电容包括EMC电容、TVS管结电容、ESD电容、寄生电容等的总线对地总电容。20pFC1200pF20pFC2200pF五.CAN消息帧在CAN2.0技术规范中分为A、B两部分2.0A的消息帧格式只允许标识符ID11位的标准帧基于2.0A的总线网络只能收到这种格式的消息标准帧结构如图5-1所示。图5-1 标准帧格式在CAN2.0B中额外增加了扩展帧它拥有29位标识符ID前11位与CAN2.0A的标识符相同在此之后又增加了18位CAN2.0B专用的扩展标识符其余结构完全相同基于2.0B的总线网络既可以接收标准帧也可以接收扩展帧但是在同一网络中通常只能出现一种帧格式必须提前设定该网络是接收标准帧还是扩展帧扩展帧结构如图5-2所示。图5-2 扩展帧格式CAN消息帧根据用途分为四种数据帧用于数据交互远程帧用于远程请求发送数据错误帧用于标记总线上出现的错误过载帧用于延迟下一条数据帧或远程帧的发送。5.1.数据帧数据帧由7个部分即帧起始、仲裁场、控制场、数据场、校验场、应答场、帧结尾。帧起始SOF长度1bit表示数据帧的开始在总线空闲时向总线发出一个显性位边沿信号所有接收节点将根据最先发送数据的节点帧起始为位同步时钟信号。仲裁场在标准帧格式中由11位标识符和RTR位组成在扩展帧格式中由29位标识符和SRR位、IDE位、RTR位组成ID值越小优先级越高。RTR长度1bit该位用于远程帧请求时为隐性位1在数据帧的情况下必须是显性位0。SRR长度1bit在扩展帧格式中始终为隐性位1总线通过接收到的RTR位和IDE位可以判断出当前数据的帧类型。IDE长度1bit表示标识符扩展位在标准帧格式中表示显性位0扩展帧格式中表示隐性位1同一网络不能出现两种格式的帧。控制场由保留位和DLC组成在标准帧格式中IDE与保留位相同均为显性位0。DLC长度4bit数据长度码范围0-8用于设定数据场长度0-8字节。数据场(Data Field)0~8个字节用于节点之间传递有效数据。CRC场长度16bit包括CRC序列和CRC界定符用于校验数据的准确性。CRC Sequence长度15bit校验序列发送方从SOF到Data Field的所有数据进行编码后填写CRC序列并发送接收方将对接收数据的SOF到Data Field的所有数据进行编码再与CRC序列进行比对判断数据是否正确。DEL长度1bit隐性界定符校验场和应答场的界定符作用相同均为隐性位1。应答场长度2bit由应答间隙和应答界定符组成确认数据是否正常接收。ACK发送方将发送隐性位1由接收方进行确认若收到消息则返回一个显性位0如果没有一个节点收到消息应答间隙则保持隐性电平将会报错。帧结尾EOF长度7bit每个数据帧和远程帧的帧结尾均由7个连续的隐性位组成表示帧结束。5.2.远程帧节点可以通过发送远程帧要求源节点发送数据远程帧由6个部分即帧起始仲裁场、控制场、校验场、应答场、帧结尾结构如下图5.2-1所示。图5.2-1远程帧格式与数据帧的结构类似区别在于数据帧的 RTR 值为显性位“0”远程帧的 RTR 值为隐性位“1”远程帧没有数据场远程帧的 DLC 表示请求发送单元发送的数据长度。总线同时出现数据帧和远程帧时数据帧的RTR位为显性位数据帧将会在总线仲裁中胜出获得优先控制权。5.3.错误帧当某一节点检测到错误时向总线发送错误帧通知其他节点错误帧的结构由错误标志和错误界定构成帧结构如图5.3-1所示。图5.3-1错误帧格式错误标志(Error Flag)长度6bit当某一节点检测到错误会向总线发送“错误标志”主动错误节点会发送6个连续的显性位被动错误节点会发送6个连续的隐性位。错误一旦产生就不是一个节点的问题了发送节点与接收节点都会对错误做出响应。其他节点若检测到错误发送节点停止发送报文接收节点也停止接收报文一同向总线发送错误标志。第二个错误标志(Error Flag)用来叠加其他节点发送的错误标志由于接收节点发现错误的时间可能不同总线上的错误标志可能由6~12个显性位组成。错误界定(Error Delimiter)由8个隐性位组成。当发现错误的节点发送完错误标志后开始发送错误界定符即8个隐性位但是可能会出现另外的节点仍在发送错误标志导致错误界定被显性位的错误标志覆盖直到检测到总线上出现8个隐性位的界定符才表示错误帧结束。错误帧的作用就是用来标记总线上出现的错误错误类型分为位错误位填充错误CRC错误应答错误格式错误。位错误由发送节点对通过总线竞争的节点进行检测节点向总线发送数据的某一位与回读的数据不同则判定出现了位错误。位填充错误由接收节点进行检测对SOF~CRC Sequence最后一位进行位填充编码出现5个连续的相同极性位就会插入一个相反极性的填充位若总线上出现6个连续的相同极性位就判定出现了位填充错误。CRC错误由接收节点检测接收节点对SOF~Data Field的数据进行模2运算计算出的校验序列与数据块中的校验序列进行比较若不同则判定出现了CRC错误。应答错误由发送节进行点检测应答间隙无人应答则判定出现了应答错误。格式错误由接收节点进行检测CRC校验序列往后从校验场的DEL开始不进行位填充应该是固定格式除了应答间隙(ACK)以外都应该是隐性位若出现显性位则判定出现了格式错误。5.4.过载帧过载帧已经被淘汰与错误帧格式相同包括过载标志和过载界定符以下两种情况会发送过载帧:接收单元要求发送节点延迟下一个数据帧或远程帧的发送在帧间隔ITM的3 位内前两位检测到显性位。超载标志由6个显性位构成它破坏了帧间空间的固定格式其他节点检测到后会各自发送一个超载标志。超载界定符由8个隐性位自称超载标志发送完毕后每个节点都会对总线进行监测直到出现一个隐性位此时每个节点的超载标志全部发送完成所有节点将发送7个隐性位直到总线上检测到8个连续的隐性位超载帧发送结束。5.5.帧间空间由3个位的帧间隔和总线空闲组成主动错误节点和被动错误节点发送任何报文结束后都会发送3个隐性位的帧间隔ITM之后进入总线空闲但是被动错误节点在帧间隔后面还会发送8个隐性位的暂停发送。六.非破坏性按位仲裁CAN总线上采用非归零NRZ编码数据具有两种逻辑值即显性电平和隐性电平。NRZ编码的特点在于一个bit时间内电平保持不变信号跳变减少能够减少信号干扰。例如曼彻斯特编码则需要用信号跳变来表明当前信号状态编码对比如下图6-1所示。图6-1 编码策略显性电平用逻辑“0”表示显性位隐性电平用逻辑“1”表示隐性位 总线仲裁中遵循线与逻辑显性电平覆盖隐性电平被覆盖的节点将竞争失败转为接收节点。在CAN总线上的每条报文都拥有一个唯一标识符11位或29位的ID号按照逻辑与进行总线仲裁即ID号越小报文的优先级越高。当总线空闲后如果两个及以上的节点同时向总线发送报文可利用CSMA/CD以及“非破坏性按位仲裁”方法来避免冲突每个节点发送标识符并且检测总线电平判断是否竞争成功如图6-2所示。图6-2 非破坏性按位仲裁如图6-2所示标识符第5位节点1与节点3为显性位节点2为隐性位根据与运算机制隐性位被覆盖总线信号第5位依旧表现为显性位即节点2竞争失败转为接收节点之后的标识符均转变为隐性位信号。同理在标识符第0位处节点1为隐性位被节点3的显性位覆盖竞争失败转为接收节点。通过这种方式节点3赢得了总线仲裁优先发送数据。节点1和节点2将等待节点3所有数据发送完毕总线回到空闲状态节点1和节点2将会再次竞争节点1胜出作为第二个向总线发送数据的节点节点2作为第3个向总线发送数据的节点这样就实现了非破坏性按位仲裁所有节点都完成数据发送。七.位填充位填充属于CAN总线抗干扰措施中的一种在CAN消息帧中帧起始、仲裁场、控制场和CRC校验序列以位填充方法进行编码当检测到发送位中5个极性相同的连续位时将自动插入一个极性相反的填充位如图7-1所示。数据帧和远程帧的CRC界定符、ACK场、帧结尾格式固定不需要进行位填充。图7-1 位填充过程示意图如图7-1所示共有3个填充位其中第3个填充位之前的5个连续的相同极性位包含了第2个填充位因此填充位也被视为总线数据判断是否出现连续5个相同极性位。八.CRC校验CRC校验场包括CRC序列和CRC界定符是一种根据网络数据包生成简短固定位数校验码的信道编码技术主要用来检测或校验数据传输或者保存后是否正确。CAN消息使用的CRC校验序列长度为15位需要将帧起始到数据场的这一串数据做模2运算也就是异或运算。它的对应多项式Gxx15x14x10x8x7x4x31即1100 0101 1001 1001。该多项式相除的余数即为发送至总线的CRC序列接收器接收数据时按照同样的规则对接收到的数据进行CRC计算然后把两个CRC序列进行比较以判定数据是否出错。九.使用控制器收发CAN报文RapidECU通常都提供了若干CAN通道比如RapidECU-U34控制器提供了6个CAN通道其它型号控制器类似。使用带CAN通道的控制器可以收发CAN报文。ECUCoder提供了CANCommucation CAN通信模块库库中的模块用于收发CAN报文。9.1.设置波特率U34控制器CAN模块默认设置波特率为500kbps传统CAN网络默认不启用CAN FD功能如控制器用于传统CAN总线网络且波特率为500kbps则无需再设置波特率。如波特率为其它数值则需要修改CAN Baudrate 的值在RapidECUSetting模块中可设置各个CAN通道的波特率可供设定的范围为1000、500、250、125对应1Mbps、500kbps、250kbps、125Kbps如果填写其它数值控制器则自动设定为500。9.2.发送CAN报文利用CANTransmit或CAN0to2Transmit或CAN3to5Transmit报文发送模块可以发送CAN报文。CAN发送模块的功能CANTransmit报文发送模块用于发送指定ID的CAN报文。CAN发送模块的参数见下表选项选项说明可选值CAN ModuleCAN模块即CAN通道0、1、2、4、5CAN BufferCAN缓存0~63与相应通道的CAN接收模块共用缓存值随通道不同而有所不同CAN Message IDCAN 报文IDID十六进制CAN Message TypeCAN报文类型标准帧、扩展帧CAN Data Length数据长度0~8Sample Time采样时间自定义通常使用-1模块的用法将CAN发送模块拖入到模型中通常是周期性任务中按需求为模块设置所有参数即可发送指定ID的CAN报文如下图所示9.3.接收CAN报文利用CANReceive或CAN0to2Receive或CAN3to5Receive报文接收模块可以接收CAN报文。CAN接收模块的功能CAN报文接收模块用于定时接收指定ID的CAN报文适用于。CAN接收模块的参数见下表选项选项说明可选值CAN ModuleCAN模块即CAN通道0、1、2、4、5CAN BufferCAN缓存0~63与相应通道的CAN发送模块共用缓存值随通道不同而有所不同CAN Message IDCAN 报文IDID十六进制CAN Message TypeCAN报文类型标准帧、扩展帧CAN Data Length数据长度0~8Sample Time采样时间自定义通常使用-1CAN接收模块有四个输出端口端口说明见下表端口名称端口说明数据类型f()触发端口专门用于触发子系统模块CAN_OK是否接收到CAN 报文接收到为1否则为0uint8IDCAN报文IDuint32CAN MsgCAN报文数据uint8数据的维数取决于数据长度模块的用法将CAN接收模块拖入到模型中通常是周期性任务中按需求为模块设置所有参数即可定时接收指定ID的CAN报文。通常情况下CAN接收模块需要触发一个子系统模块如下图所示十.故障界定与总线管理10.1.故障界定故障界定的目标是实现数据传输网络中某个或多个节点发生故障的情况下依旧维持正常运行因此故障界定策略需要区分短期故障和永久性故障找出并断开故障节点。故障界定策略需要每一个节点都配备两个错误接收器分别记录在发送帧期间错误数目TEC和接收帧期间出现的错误数目REC。若该节点的帧被正确发送或接收相应的错误接收器的计数将减少错误计数在任何时刻都反映了当前错误干扰的状况。通过预定数值可以禁止产生错误的节点向总线发送帧报文的操作若错误计数超过限定值将断开该节点。10.2.故障界定规则对故障界定而言一个节点根据错误计数的结果可以处于以下三种状态之一主动错误、被动错误或离线。主动错误在检测到错误时发送主动错误标志6位显性位与错误界定符8个隐性位告知总线上所有节点发生了总线的错误之后进行正常的收发操作。被动错误当检测到总线发生错误的时候将停止报文发送总线发送被动错误标志6个隐性位和错误界定符虽然该节点依旧可以参与总线通信但是在发送报文后会进入8个位的等待时间。离线状态当错误积累到一定程度后该节点将会与总线隔离进入离线状态停止发送与接收任何报文不再干扰总线128 次出现11 个连续“隐性”位后并且用户请求重启节点才可以恢复错误主动状态错误计数器清零。错误计数依照以下规则进行更改在特定帧的传输过程中可以有多条规则起作用下面的TEC代表发送错误计数器计数REC代表接收错误计数器计数。当接收器检测到一个错误将判断该错误是否为位错误时发送的主动错误若不是REC1。如果发送器送出一个错误标志TEC8。例外在主动错误状态下发送器因检测到无人应答或者位填充错误的情况计数不会增加。如果发送器在发送主动错误标志期间检测到一个位错误TEC8。如果接收器在发送主动错误标志或超载标志期间检测到一个位错误REC8。任何节点在送出一个主动错误标志、被动错误标志或超载标志之后至多允许连续出现7个显性位。在检测到一连串显性位中的第14个出现一个活动错误标志或超载标志的情况下或检测到认可错误标志随后的一连串显性位中的第8个之后且再出现一连串8个显性位之后每个发送器的TEC8同时每个接收器的REC8。成功送出一帧收到应答并且直到送完帧结束都没有检测出错误之后TEC-1最小值为0。成功接收一帧接收过程直到应答间隙都没有出错并且顺利送出应答后如果REC127则计数-1最小值为0如果127REC256则将计数器设为119~127之间的某个值。在主动错误状态下的节点如果 REC127或TEC127,该节点将进入被动错误状态当被动错误节点的RCE≤127时该节点就回到主动错误状态。处于被动错误状态下的节点当TEC255 节点将进入离线状态。离线状态下的节点将与总线断开通信禁止再参与总线上的读写除非用户请求重新开机或者使能了BusOff自恢复功能并且总线上检测到128次连续的11个隐性位才允许离线节点回到主动错误状态。三种状态转换如图10.2-1所示。图10.2-1 节点状态转换图10.3.总线故障管理在总线正常运行期间可能会发生一些总线故障它们将对总线运行造成影响。这些故障及其引起的网络动作如下表所示。