CAN(Controller Area Network)即控制器局域网,是国际上应用最广泛的现场总线之一。作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通信控制方式,CAN 已被广泛应用在汽车电子、自动控制、智能大厦、电力系统、安防监控等各领域。目前,CAN总线技术在工程机械上的应用越来越普遍,欧洲新开发的大型工程机械基本都采用CAN现场总线控制,从而提高了整机的可靠性、可检测性、可维修性和智能化水平。 CAN总线的核心是嵌入式智能监控器及其CAN节点的通信协议。下面着重介绍我们研制的智能监控器的网络结构及通信协议。本文所介绍的智能监控器已成功应用于国家863项目“挖掘机机电一体化及制造信息化(2003AA430200)”,已得到有关专家的充分肯定。 1 硬件及网络结构 硬件结构如图1所示。处理器采用微芯公司的PIC18F458,接口包括一个USB接口、一个串行接口、一个CAN接口和一个调试接口。人机界面包括一个4×4键盘和320×240的LCD显示屏。
 在对CAN总线接口的节点用户协议进行研究之前,有必要对整个网络结构有一个总体的认识。就现代工程机械而言,一般可把CAN总线网络中的节点分为3种类型:上位机节点、执行器节点和传感器节点,总线网络拓扑结构如图2所示。
 2 CAN总线仲裁的基本方法及存在的问题 2.1CAN总线仲裁的优先权法 对于多主网络而言,如何实现多主通信,尤其是如何实现总线仲裁的问题成为衡量网络系统优劣的主要标志。CAN总线在支持网络多主通信、保证通信的实时性方面有其独特的优点。 当网络出现多节点对总线的竞争时,如何协调控制各节点的行为就是总线仲裁。最基本的总线仲裁方法就是优先权法。节点优先权法是给予网络中的每个节点一个唯一的优先级,优先级别高的节点在竞争总线时有优先的占有权,当同时有多个节点希望发送数据时,优先级高的将获得竞争的胜利,将占用总线发送数据;消息优先权法是根据总线上可能被发送的消息的类型不同,给予不同类型的消息以不同的优先级,这样当同时有多个节点希望发送消息时,优先级别高的消息将得以被发送。 CAN总线消息的优先级是由位于发送帧的前部的标识符来唯一确定的。CAN总线中,不同的标识符代表了不同的消息优先级。对应于CAN 2.0的11位的标识符场,最多可以支持211种优先级。标识符的前导显性位越多,即对应的二进制数值越小,该帧在发送时的优先级别就越高。例如有两个数据帧同时要求被发送,其中一个的标识符为00010010110,另一个为00010011000,当发送ID.10-ID.4时两者都是相同的,到ID.3时前者发送0(显性位),后者是1(隐性位),这时总线实际发送为0(显性),这样前一个数据帧得以发送,而后者退出竞争。当同时有多个数据帧要被发送时,CAN总线将以同样的方法来进行仲裁。 由以上的分析可以看出,根据控制系统中对各种类型消息的重要性和处理时的优先性来合理地安排数据帧的标识符就可以实现总线控制权的合理分配,从而解决多主通信时的总线仲裁问题,这是实现多主通信的基础。 2.2存在的问题 如果只是根据网络节点或消息类型的优先级来分配总线控制权,就产生了一个问题,假如系统中的实时性消息较多(这些消息通常都具有较高的优先级),或某个具有较高优先级的节点发送消息的频率过高,总线的控制权就会总是被这样的一些消息和节点占据,从而使得另外一些消息(有些虽然不是实时消息,但对系统的工作也有很重要的作用,例如控制消息和命令消息)长期不能得到发送,也使得其它优先权较低的节点无法占用总线。 3 优先和消息优先相结合的多主通信协议的实现过程 为了解决上述问题,可将节点优先权法和消息优先权法结合起来使用,即在数据帧的标识符中体现的帧的优先级不仅与发送该帧的节点有关,而且和该帧中的数据类型有关。在具体设计优先权法之前,首先确定节点通信的消息类型和接收滤波方法。 3.1 节点通信的消息类型 根据CAN总线的节点类型,可以确定通信时共有以下几种消息类型: (1)由传感器节点发送至上位机节点的实时数据; (2)由传感器节点发送至执行器节点的实时数据; (3)由上位机节点发送至执行器节点的控制命令; (4)由上位机节点发送至传感器节点的控制命令; (5)由执行器节点发送至上位机节点的报告数据; (6)由上位机节点发送至传感器节点的数据要求指令。 3.2 CAN总线控制器的接收滤波 在PIC18F458的CAN总线控制器中有两个涉及接收滤波的寄存器:RXF和RXM,其中RXF是验收码寄存器,RXM是验收屏蔽寄存器。只有当接收到的数据的标识符ID.10-ID.0与RXF及RXM的关系满足表1真值关系时,相应的数据帧才能够通过滤波,从而被接收器接收。 我们可以举一个如下的例子来说明:某节点控制器中 RXM
 此时如果RXF有如下的状态: RXF
 那么只要当总线上正在发送的数据帧的标识符高八位ID.10-ID.5中有关的状态与RXF相同的时候,该帧才可以被该控制器接收。 ID.10-ID.0
 3.3节点优先与消息优先结合的通信协议 为了实现优先级的区划和满足接收滤波的要求,我们采用了将消息类型优先权法与节点优先权法结合的方法,按照这样的思路将标识符的含义做如图3中的安排:
 ID.10-ID.0: 发送节点标识: 0000-传感器节点发送 0001-上位机节点发送 0011-执行器节点发送 数据类型: 00-实时数据 01-控制指令a:上位机节点 - 执行器节点 10-控制指令b:上位机节点- 传感器节点 11-远程数据要求 在设计中采用的6种标识符类型可分别表示如下: (1)由传感器节点发送至上位机节点的实时数据: 0000 00 XXXXX; (2)由传感器节点发送至执行器节点的实时数据: 0000 00 XXXXX; (3)由上位机节点发送至执行器节点的控制命令: 0001 01 XXXXX; (4)由上位机节点发送至传感器节点的控制命令: 0001 10 XXXXX; (5)执行器节点发送至上位机节点的报告数据: 0011 00 XXXXX; (6)由上位机节点发送至传感器节点的数据要求指令: 0001 11 XXXXX。 根据RXF所应该实现的功能,参照每个节点对应的两种消息类型,我们可以方便地得出3个节点的CAN控制器中RXF的正确定义: (1) 传感器节点RXF: 00011XXXXXX; (2) 执行器节点RXF: 000X0XXXXXX; (3) 上位机节点RXF: 00XX00XXXXX。 从而也可以得出每个节点控制器的RXM的定义: (1) 传感器节点RXM: 11111000000; (2) 执行器节点RXM: 11101000000; (3) 上位机节点RXM: 11001100000。
|