1、基于 ARM 的 CANopen 现场总线设备通信的研究摘 要CAN 总线是国际上应用最广泛的现场总线之一。CANopen 协议是基于 CAN 总线的高层应用层协议,是为标准的嵌入式网络开发而设计的,是具有灵活配置能力的开放式协议,其应用进一步提高系统的通讯效率及灵活性, 而且可以使产品具有很好的兼容性。 关键词现场总线 CANopen S3C440BX 网络通信 中图分类号:TM121.1.3 文献标识码:B 文章编号:1009-914X(2015)25-0052-01 现场总线通讯协议是现场总线技术的核心,它的结构是根据国际标准化组织提供的 ISO/OSI 模型来制定的。标准 ISO/OS
2、I 模型有七层框架,但根据工业控制的特点,多数总线协议都是采用了其中的物理层、数据链路层和应用层,这样可以保证实时通信,在此基础上已经发展起来了FF、LonWorks 、CAN、Profibus、ControlNet 等总线协议4。其中的CAN(Controller Area Network)即控制器局域网络,是世界上应用最广泛的现场总线之一,能有效支持分布式控制和实时控制。因其可靠性高、抗干扰性强、开发简单、造价低廉及其短帧传输和无破坏仲裁技术等优点而被广泛应用,与一般的通信总线相比,CAN 总线的数据通信具有突出的可靠性、实时性和灵活性。 1 CAN 总线通信介质访问控制方式 在现场总线系
3、统中,节点间通过公共传输介质传输数据,因而数据链路层是总线的核心部分。CAN 总线数据链路层的通信介质访问控制方式为事件触发,采用带优先级的随机载波侦听方式(CSMA/CD) 。只要总线空闲,任何节点都可以主动向网络上其它节点发送数据。协议规定 CAN报文具有最低二进制数值的标识符优先级别最高。 CAN 总线上用“显性”和“隐性”两个互补的逻辑值表示“0”与“1”,采用“线与”机制,当在总线上出现同时发送显性和隐性位时,其结果是总线数值为显性。当总线空闲时,呈“隐性”状态,当有任何一个节点发送“显性”位时,总线进入“显性”状态。每个节点发送报文前,都会检查总线是否处于空闲状态。如果总线空闲,该
4、节点就成为总线主控节点并发送报文。在该节点发送第一个发送位时,其他节点就切换到接收模式。当正确接收报文后,每个总线节点都会检查报文标识符,如果需要的话就存储该报文,否则便丢弃。 2 CAN 总线数据收发程序设计 CAN 总线数据收发部分是应用程序设计中最核心关键的部分,对CANopen 设备的测试和配置都是通过将信息组成 CAN 报文,然后发送到CAN 总线上进行传输通信来完成的。 CAN 作为 CANopen 的底层协议,主要实现报文传输、仲裁及错误检测等功能。为了保证 CAN 报文能正常传输,在程序中构造了 CAN_MSG 结构体。 typedef struct INT16U ID; /
5、Message Identifier INT8U LEN; / Data length (0-8) INT8U BUF8; / Data buffer CAN_MSG; 在 CAN 总线数据收发电路中起主要控制作用的是 CAN 控制器SJA1000。SJA1000 有 BasicCAN 和 PeliCAN 两种工作方式 ,设计中SJA1000 工作于 PeliCAN 工作方式。由于在 PeliCAN 工作方式下,传输的帧有标准帧和扩展帧之分。在发送和接收数据前需判断该帧为标准帧还是扩展帧。 3 测试通信参数程序设计 当捕获到键值为 0 的消息时,对 CANopen 设备进行测试,读取其对象字典
6、中的参数信息。测试 CANopen 通信参数包括五部分,分别是测试基本通信参数、RPDO 通信参数、TPDO 通信参数、RPDO 映射参数和 TPDO映射参数。代码如下: void Test_Task (void *ID) Request_Basic() ; /测试基本通信参数 Request_RPDOCom() ; /测试 RPDO 的通信参数 Request_TPDOCom() ; /测试 TPDO 的通信参数 Request_RPDOMap() ; /测试 RPDO 的映射参数 Request_TPDOMap() ; /测试 TPDO 的映射参数 POSMSG pmsg; for(;)
7、if(GerKey()=0) pmsg=OSCreateMessage(OSM_KEY) ; if(pmsg) SendMessage(pmsg) ; 基本通信参数是指设备型号、错误寄存器、支持的 PDO 个数、节点标识符、节点保护时间,以及主节点和子节点的心跳报文时间等参数。由于这些参数的索引是无规律的,因此在程序中构建了一张参数表,该表包含了基本通信参数的主索引高位、低位及子索引,编程时可根据这张表组成相应的 SDO 请求报文,再进行发送。 4 配置通信参数程序设计 当接受到键盘值为 1 的消息时,对 CANopen 设备按照事先定义好的通信参数进行配置。配置通信参数程序包括配置 CANo
8、pen 设备的基本通信参数、RPDO 的通信及映射参数、TPDO 的通信及映射参数。配置CANopen 设备的通信参数,必须先发送管理报文,然后发送相应的 SDO 请求报文,因此其程序流程图与测试通信参数的流程图以及代码基本相同,唯一不同之处就是 SDO 报文的请求内容以及 PDO 报文的应答内容。此处不再就设计流程复述。 默认的配置参数存放在事先构建的表中,包括命令字、主索引、子索引和数据,共 8 字节长度。编程时,只需依次取出,即可组成相应的SDO 请求报文。构建默认参数表的实现语句如下: #define unsigned char configure_TAB= 0x23,0x04,0x1
9、0,0x00,0x03,0x00,0x00,0x00, /支持 PDO的个数为 3 0x23,0x0F,0x10,0x00,0x03,0x00,0x00,0x00, /支持 SDO的个数为 3 0x23,0x17,0x10,0x00,0x00,0x20,0x00,0x00,/主节点的心跳报文时间为 2000ms 0x23,0x16,0x10,0x00,0x01,0x00,0x00,0x00, /子节点的心跳报文的个数为 1 0x23,0x16,0x10,0x01,0x00,0x10,0x00,0x00, /子节点的心跳报文时间为 1000ms,使子节点支持心跳报文,而不支持节点保护 0x23,
10、0x00,0x14,0x01,0x02,0x02,0x00,0x00, /RPDO1 的COB-ID 为 202 参考文献 1 阳宪惠.现场总线技术及其应用.北京:清华大学出版社,1999,6. 2 史久根.现场总线系统设计技术.北京:国防工业出版社,2004. 3 邬宽明.CAN 总线原理与应用系统设计.北京:航空航天大学出版社,1996. 4 汤儒兰,石玉祥,刘黎红.几种典型的现场总线及其应用.机电一体化,1999(2). 5 H.BOTERENBROOD,CANopen high-level protocol for CAN-bus.NIKHEF Internal Documentation,2000. 作者简介 李伟(1982.12) ,男,安徽凤阳,助理工程师,大学本科,电信交换和有线通信指挥专业。从事通信管理方面的工作。