CAN为国际标准现场总线,应用广泛。作为国际标准ISO11898和ISO11519的控制器局域网CAN[1],最初虽然是为汽车的监测、控制系统设计的,但由于它在性能、可靠性等方面的突出优势,现已广泛地应用于各工业领域[2]。在CAN总线技术中,其MAC机制是基本的和关键的部分之一。在CAN的技术规范中首先提到的就是仲裁,而仲裁规则是通过报文优先级体现的。目前国内外虽然对CAN报文优先级有一些理论研究和分析,但尚未见到有文献介绍有效的方法或手段来产生和检测报文的优先级。这在很大程度上阻碍了CAN总线的进一步研究与应用。
CAN报文优先级检测系统由4个CAN通信节点组成,通过各节点的CAN-H和CAN-L端口并联到总线上,总线两端各接上一个120Ω左右的终端电阻,构成一个闭合回路。4个节点的主体结构是基本相同的,根据系统功能的需要每个节点在硬件结构上又有所差别。系统总体结构如图所示。每个节点均有键盘和显示单元;节点1、2、3为发送节点,每个节点均有“启动发送”按钮;节点1还有“停止发送”按钮,并可对CAN总线电平进行检测,亦即可对CAN总线MAC(媒体访问控制)帧进行检测;节点4为接收节点,可显示接收到的报文。
图 系统结构
CAN技术规范中的MAC机制就是指对媒体访问的控制/仲裁机制[4, 5]。CAN网络上的一个节点发送的报文可被网络上所有其它节点监听并应答。当总线开放时,任何CAN节点均可开始发送报文,若多个节点同时开始发送报文,总线访问冲突借助标识符进行逐位仲裁来解决。仲裁期间,每一个发送器都将发送的位电平与在总线上监视到的电平进行比较,若相同,则该单元可以继续发送;若不同,该单元丢失仲裁,并且必须退出而不再发送后续位。
这里指出,对于多个节点同时发送情况下总线访问的仲裁,CAN采用的是带优先权的非破坏性逐位仲裁机制来解决总线冲突的;对于一个节点想要发送而另一个节点正在发送的总线访问情况,CAN采用的是载波监听技术。这二者共同的基础是CAN总线上一个节点发送的报文可被所有节点(包括自身)监听。带优先权的非破坏性逐位仲裁机制所依赖的其它基础是显性位(“0”)的优先权高于隐性位(“1”),即当一个隐性位和一个显性位同时被发送至总线上时,总线上所出现的结果为一个显性位,“非破坏性”即是对高优先权的“0”而言的;参与逐位仲裁的位为仲裁场(11位标识符和RTR位(对于标准格式)),如图所示。
图 CAN的非破坏性逐位仲裁
1、方法的基本原理
根据CAN的MAC机制及仲裁规则,如果高优先级的报文一直占用着总线,则其它低优先级的报文将无法获得仲裁,但是会尝试重新发送。只有当高优先级报文不再占用总线时,低优先级的报文才可能发送成功。因此,检测报文优先级的前提和关键是如何让不同优先级报文同时竞争总线。
为方便说明,首先命名标识符。节点1要发送两种报文,将其发送报文标识符分别命名为SENT_ID_11和SENT_ID_12;将节点2和节点3发送报文标识符分别命名为SENT_ID_2和SENT_ID_3,报文的优先级顺序:SENT_ID_11>SENT_ID_2,SENT_ID_11>SENT_ID_3,SENT_ID_12>SENT_ID_2,SENT_ID_12>SENT_ID_3,SENT_ID_11不同于SENT_ID_12,SENT_ID_2不同于SENT_ID_3。使节点1连续发送标识符为SENT_ID_11的报文,目的是让高优先级的报文占用总线,使总线一直处于“忙”的状态。然后使节点2和节点3分别开始发送标识符为SENT_ID_2 和SENT_ID_3报文,节点2、3发送的报文优先级不同且均比节点1优先级低。此时,节点2和3监听总线的结果是:发现有比其本身优先级高的报文正在发送,因此要边监听边等待。这时节点1停止发送后,节点2和3会同时竞争总线,从而创造了使不同优先级的报文同时竞争总线的条件。根据节点4接收到报文的先后顺序即可验证节点2和节点3所发报文的优先级了,并且两个节点发出的报文都被成功接收,也验证了CAN总线的非破坏性仲裁机制。另外,通过节点1检测到的MAC帧也能确定节点2和3的报文优先级。这里要注意的是,SENT_ID_12的报文作为检测开始的标志。使节点1停止连续发送报文,让节点1再发送一帧ID为SENT_ID_12的报文,同时开始检测总线电平,捕捉MAC帧。在第三次检测到连续11个“1”时停止检测,即第三帧报文结束时停止检测。节点1将检测到的MAC帧的各位值通过显示单元顺序地显示出来,并与节点2和3发送的MAC帧相比较,可体现节点2和3的报文优先级。这就双方面验证了报文优先级,保证了准确性和可信度。
2、方法的软件实施
软件实施是严格依据方法的基本原理设计的,各个节点的软件实施流程如图所示。
图 各节点软件流程
对实施流程作如下几点说明:
(1)配置CAN位定时寄存器时要保证各节点的通信波特率严格一致;
(2)配置CAN接受码和接受屏蔽寄存器时要保证节点1、2和3屏蔽总线上所有报文,节点4只接受来自节点2和节点3的报文;
(3)节点1软件流程中次配置仲裁场、控制场及数据场是为连续报文发送做准备,第二次配置是为标定报文检测起始标志做准备。
(4)节点1软件流程中次键盘扫描目的是为启动连续报文发送,第二次键盘扫描是为停止连续报文发送。
(5)CAN的MAC帧检测是过检测单元中断服务程序实现的。
其中表1给出了各节点实际设置发送的报文;根据方法的基本原理,表2给出了报文过滤设置情况;表3给出了节点1实际检测到的CAN的MAC帧(灰色阴影标示位为位填充),其检测到的顺序从前到后依次是SENT_ID_12,SENT_ID_2,SENT_ID_3,实际检测情况与理论分析相符合,进而报文优先级得以验证。另外,节点4液晶显示的接收到的报文顺序也与理论分析相符合,更进一步证实了方法的可行性。
维库电子通,电子知识,一查百通!
已收录词条48243个