基于dsPIC30F4011单片机实现的CANopen协议

2012-03-27 07:31贾文超王竞恒刘柏松
长春工业大学学报 2012年3期
关键词:标识符字典报文

贾文超, 王竞恒, 刘柏松, 张 嘉

(1.长春工业大学电气与电子工程学院,吉林长春 130012;2.长春天然气有限责任公司,吉林长春 130033)

0 引 言

CANopen是CAN总线通信模型中的应用层协议。其可靠性、实时性、抗干扰性、容错性等多方面优势明显,CAN总线和CANopen协议已经成为汽车工业、工厂自动化、分布式控制系统等众多领域的应用标准[1]。CANopen协议定义了完备的设备模型,包括标准的通信协议、对象字典和设备应用子协议。其中,通信协议遵循CiA DS301协议,针对不同的设备CANopen制定了不同设备的应用子协议。这些子协议已经得到广泛的认可并成为行业规范。CANopen完备的体系结构保证了不同厂商产品之间互联的兼容性。

CANopen包括3个主要组成部分:通信模型(Communication)、对象字典(Object Dictionary)和设备子协议。文中对CANopen协议的各部分进行了详细的分析,重点讲述利用dsPIC30F4011单片机建立符合CANopen协议的从站节点,通过试验对数据进行分析和验证[2]。

1 CANopen协议简介

在CANopen协议推出之前,欧洲公司推出了一个名为CAL的CAN总线高层协议。CAL定义了4种CAN总线应用层功能:CMS(基于CAN的报文应用),NMT(网络控制),DBT(动态分配),LMT(层参数管理)。由于CAL对CMS对象的内容没有进行规定,而CANAopen对其进行了定义。CANopen基于CAL的架构应用了CAL通讯和服务协议的子集。

CANopen网络遵循主从结构(masterslave),系统有且只有一个NMT主站,NMT主站对所有的从站进行状态控制。一条CAN总线上最多可有128个节点,其中0号地址节点为NMT主站,其余为NMT的从站,不同设备可通过CAN总线进行组网。CANopen设备模型如图1所示[3]。

图1 定位系统结构图

CANopen通信协议遵循DS301标准,每一个节点都有一个状态机,NMT主站可通过发送相应对象的报文使从站工作在不同的状态,节点也可在特殊情况下进行状态的转换。在应用层面上不同的节点之间以发送通信对象的方式实现通信,主要的通信对象有NMT,PDO,SDO和特殊功能对象。其中PDO用于实时的数据传递,SDO用于访问对象字典,NMT用于发送主站管理命令。

对象字典(OD:Object Dictionary)是CANopen的核心,不同的设备其对象字典的定义是不同的。实际上,OD是一个有序的对象组:对象用一个16位的索引进行寻址,同时,每个索引使用一个8位的子索引来寻址数据结构中的单个元素。在软件编程过程中,可以定义一个结构体数组以实现对象字典。

2 CANopen节点的硬件设计

CANopen协议从站硬件的核心是一片MICROCHIP公司生产的dsPIC30F4011芯片,该芯片具有24位宽的指令,16位宽的数据总线,48K的程序存储空间,2K的RAM,1K的EEPROM,带有17位*17位的硬件乘法器,性能优越,可满足高频率、高精度的要求。此外,dsPIC30F4011外设的功能丰富,带有QEI模块、PWM模块、A/D模块,以及UART,SPI,I2C,CAN等通信接口。

硬件设计分为3个部分:CAN通信模块、CPU控制、外围I/O。控制器模块和CAN总线收发器之间使用高速光耦进行光电隔离,避免了模块之间的相互干扰,具有良好的电磁兼容性。CANopen节点硬件框图如图2所示。

dsPIC30F4011片内外设含2个CAN控制器模块,实现了CAN2.0A/B协议。设置C1NTE中断使能寄存器的值,可使能或屏蔽相应中断,并通过读取C1INTF中断标志寄存器的值来判断当前中断的中断源。

PCA82C25对CAN总线提供差动发送、差动接收功能,是CAN协议控制器和物理总线的接口。PCA82C250完全符合“ISO11898”标准,最高速达1Mbps,具有抗瞬间干扰和热保护的能力,可连接110个节点。有3种工作模式可供选择:高速、待机、斜率控制。

使用3个旋转拨码开关对CAN总线的波特率和CANopen从站的节点地址进行设置;使用2个LED灯指示CANopen从站的运行状态和错误警报。预留QEI模块、PWM模块、AD模块等I/O。

图2 CANopen节点硬件框图

3 CANopen节点的软件设计

软件设计分为CANopen通讯对象的定义、对象字典的创建以及设备子协议3个部分软件实现。节点标识符分配采用CANopen的预定义连接集。每个对象的标识符有两部分组成:功能码和节点ID。

3.1 节点的通信对象说明

CANopen节点通信对象见表1。

表1 CANopen节点通信对象

设置节点地址,发送的对象标识符为:功能码+节点ID。节点地址的范围为1~127,下面以节点地址06进行说明。NMT对象为主站发送的网络管理命令000H;SYNC对象标识符为080H,当从站收到一个SYNC报文时,发送一个同步报文;TPOD1对象的标识符为(180+6)H,发送报文的内容为实时数据;RPDO1对象标识符为(200+6)H,用于接受实时数据。SDO对象采用服务器/客户的通信模式,分为加速传输和分段传输两种传输机制。一个客户的请求一定有来自服务器的应答,例如,如果想访问地址为06这个节点的对象字典,那么访问的节点就是一个客户,标识符为600+节点地址,06节点做为一个服务器,标识符为(580+6)H;EMCY对象为紧急对象,在节点发生错误时发送紧急报文,紧急报文包含了错误代码和错误信息,标识符为(080+6)H;除此之外,还有一个NMT错误控制对象,它通过发送心跳报文来报告节点所处的状态,标识符为(700+6)H。

3.2 对象字典的实现

对象字典的有关范围在0x1000~0x9FFF之间,索引值低于0x0FFF的范围仅仅是一些数据类型的定义。对象字典描述了节点设备和它的网络行为的所有参数。一个节点的对象字典是在电子数据文档(EDS)中或记录在纸上。一个标准的对象字典实体的格式如下[3]:

索引 子索引 对象 名称 类型 属性 访问类型

不同设备对象字典的定义是不同的,DS301对通讯部分的对象字典做了详细的说明,有些实体的定义是强制性的。对象字典大体分为3个部分:

1)通讯子协议区(0x1000~0x1FFF),描述了设备的类型、错误寄存器、支持PDO参数等。对于不同的设备子协议来说,其定义的PDO数量可能是不同的。

2)制造商特定子协议区(0x2000~0x5FFF),设备的制造商可以自行定义所需的实体。

3)标准的设备子协议区(0x6000~0x9FFF),实体的定义必须符合标准的设备子协议,如符合DS401,DS406等。

程序中对象字典可通过一个结构体数组实现,储存在单片机的非易失性存储器中。具体形式为:

其中,pData的值为EEPROM的地址,对象字典的实体数据值存放在EEPROM中。

以设备子协议DS401为例说明对象字典的建立:首先对对象字典中的内容在头文件中进行预定义,例如属性、实体内容。

索引为0x1A00H中映射PDO参数预定义:

这样在对象字典实体的定义中,可用相应的预定义的名称代替属性代码和数据值。

定义实体的具体格式为:

PDO1通信参数设置见表2[4]。

表2 PDO1通信参数设置

其在程序中的实体定义为:

PDO1映射参数设置见表3。

表3 PDO1映射参数设置

3.3 程序流程

程序分为3个部分:初始化、主程序、中断。具体流程如图3所示。

图3 CANopen节点流程

程序的初始化包括单片机硬件模块的初始化、用户程序的初始化设置、复位通信节点、中断的初始化设置。主程序包括外围接口的检测,节点地址和波特率的输入,判断节点工作状态,数据的采集和发送流程[5]。

初始化完成后程序发送一个BOOT-UP报文,并进入预操作状态,当收到NMT主站命令后进入操作状态。报文的接收和发送是通过中断进行的,当CAN模块接收到报文后即产生接收中断,程序根据报文的标识符来判断接收到报文的对象种类,进行报文长度和数据的错误检测,然后,复制到相应的接收数字中并置位接收报文的标志位[6]。当有新报文发送而CAN模块正被占用时,新报文会被存入发送缓冲数组并置位新标志位和新报文计数器,当前报文发送完后即进入发送中断,程序检查新报文标志位并将计数器减1,随后进行报文发送直到计数器为0。

PDO报文和心跳报文是以事件触发模式发送的,事件为1s定时发送,定时器设置为1ms中断,每次中断后计数器加1,当计数器计满1 000个数后进行PDO报文和心跳报文的发送[7-8]。

3.4 试验验证

搭建CAN总线网络,上位机由一台PCICAN卡实现,通过软件实现数据的收发试验,搭建实验板,对PIC单片机进行在线调试,对单片机端口的I/O量进行传送,结果见表4[4]。

表4 节点传输数据

节点在上电后进入预操作状态,心跳报文发送的状态代码为0x7F。从站接收NMT,主站发送网络控制命令,进入操作状态,进行PDO报文的发送,心跳报文显示了节点工作在操作状态。

4 结 语

文中针对分布式网络系统,应用高性能的16位PIC单片机实现了一种CANopen协议的从站节点,具有较高的可靠性和通用性。试验结果表明,系统传输的数据精确、有效,有较强的抗干扰性,并且降低了系统成本,易于实现调试和扩展。此外,CANopen从站有利于国内自主开发智能型从站设备。

[1] 饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003:379-403.

[2] 梁涛,张江涛,孙鹤旭,等.CANOPEN总线智能多路温度采集从站的研制[J].仪表技术与传感器,2009(10):61-63.

[3] Ci A.CANopen:Application layer and communication profile[Z].DraftDtandard 301,2002.

[4] Ci A.CANopen:Device Profile for Generic I/O Modules[Z].CiA Draft Standard 401,2002.

[5] 孙树文,杨建武,张慧慧,等.基于CANopen协议的分布式控制系统I/O从站设计[J].计算机测量与控制,2007,15(12):1706-1707.

[6] 刘永木,李慧,付志勇.CAN总线系统节点模块的一种设计[J].长春工业大学学报:自然科学版,2002,23(3):16-18.

[7] 李秋菊,田秋艳.基于CAN总线的车身控制系统设计[J].长春工业大学学报:自然科学版,2008,29(2):226-229.

[8] 戴宏亮.基于CAN总线的实时数据采集系统[J].长春工业大学学报:自然科学版,2003,24(4):53-55.

猜你喜欢
标识符字典报文
基于J1939 协议多包报文的时序研究及应用
基于底层虚拟机的标识符混淆方法
CTCS-2级报文数据管理需求分析和实现
基于区块链的持久标识符系统①
浅析反驳类报文要点
字典的由来
大头熊的字典
正版字典
ATS与列车通信报文分析
科研人员唯一标识符的理论研究现状剖析