夏勇,叶晓东,赵江海
(1.中国科学院合肥物质科学研究院先进制造技术研究所,江苏 常州 213164;2.南通大学 电气工程学院,江苏 南通 226019)
CAN即控制器局域网,是一种多主总线,被公认为最有前途的现场总线之一[1]。CAN协议一个最大特点是废除了传统的站地址编码,取而代之的是对通信数据块进行编码[2]。CANopen是CAN网络的一种应用层协议,是开放的、标准化的高层协议,是目前应用最广泛的嵌入式网络。CANopen建立在CAN的数据链路层之上,除了对应层规范(DS 301)进行定义外,CANopen还专门为不同的接口设备应用子协议定义了行规(DSP4),其中CiA 402是针对驱动装置和运动控制装置的设备规范。本文正是针对CANopen在伺服上的运用展开的。
CANopen协议包括对象字典(Object Dictionary,OD)、通信模型和设备模型三大部分,设备对象字典是中心概念[3]253。
CANopen设备如图1所示,可以视作为一个抽象设备,一边接CAN总线,另一边接应用设备的I/O数据端口。应用部分设备制造商已经提供了相关设备规范。为了访问CANopen设备的对象字典,必须实现CANopen协议栈的相关功能[3]260。
图1 CANopen设备模型
每个设备都拥有一个对象字典,对象字典提供了完全访问应用程序的途径,提供了设备使用的所有数据类型、通信参数、应用数据和参数配置。对象字典中常用索引:1000-1FFF,对应的对象为通讯子协议区域(如设备类型,错误寄存器,支持的PDO数量);索引:6000-9FFF,对应的对象为标准设备子协议区域(例如“DSP-402运动控制装置的设备规范”中的控制字、速度、位置等)。
CANopen通讯模型定义了4种通讯对象:管理消息、服务数据对象、过程数据对象、预定义的消息或者特殊功能对象[4]。值得注意的是对象字典中对象的访问是使用对象字典索引和子索引,通讯对象或者消息的访问是通过 COB-ID。COB-ID本质上还是标识符(CAN-ID),它只是被规划了特殊的含义。
1.3.1 服务数据对象(Service Data Object,SDO)
SDO用来访问一个设备的对象字典。访问者被称作客户(client),被访问且提供所请求的设备称作服务器(Server)。SDO是以Server的角度去理解的,从服务器上获得数据叫做上传,往服务器上写数据叫做下载。SDO主要用于一些实时性要求不高的数据,一般用来配置和获得节点的参数。
1.3.2 过程数据对象(Process Data Object,PDO)
PDO用来传输实时数据,每个PDO在对象字典中用PDO通讯参数和PDO映射参数这2个对象描述。
通俗的讲,PDO只是一个载体,它里面装载什么对象是可以配置的,这些都是由PDO映射来完成。PDO映射用来把指定的对象字典装进PDO,或者从接收的PDO中将数据放到配置的对象中。
PDO分为TPDO和RPDO,但都是针对从站来说的。TPDO:主站←从站;RPDO:主站→从站。
1.3.3 管理消息(Network Management,NMT)
管理消息包括 Boot- up 消息,Heartbeat协议以及 NMT[3]254。
CANopen状态机定义了初始化状态,就绪状态,运行状态和停止状态。上电后每个CANopen节点处于初始化状态,然后自动转入就绪状态,并发出Boot-up消息通知NMT主节点已经到就绪状态。在就绪状态SDO传输是允许的。主节点发送NMT消息启动从节点后,从节点就可以传输和发送PDO了。在停止状态,除了NMT消息外不允许传输和接收其他消息。
实验平台由上位机,USBCAN-2A,Accelnet伺服驱动器,伺服电机构成,如图2所示。
图2 实验平台
上位机和CAN卡构成CANopen主站,负责整个网路的监控和管理,监控伺服系统的运行状态,并将上位机运动规划之后的运动参数发送给伺服。伺服系统构成从站,从站主要是执行主站发来的数据信息,并将必要的运动参数返回给主站进行相关的运动决策。
主站开发环境选用 VC6.0,主要实现两部分内容:1)实现CAN的数据通信;2)实现CANopen数据帧的解析。前者的实现主要是调用USBCAN-2A的接口函数库,先打开CAN设备,然后对设备进行初始化,之后启动CAN卡,最后进行数据发送和接收,函数调用流程如图3所示。
后者的实现主要是对CAN数据帧的解析,这里的数据帧主要就是CANopen通讯模型定义的4种通讯对象。
对象字典中每个对象采用一个16位的索引值来寻址,为了允许访问数据结构中的单个元素,同时定义了一个8位的子索引[3]253。对象字典可用 SDO直接进行读写,也可以配置到 PDO映射中进行读写。
图4为SDO的使用方法。以上传和下载伺服控制器中参数目标速度为例,对象字典索引为60FF,子索引为00,大小为4字节,值为0x3E8。对应的SDO操作信息如图4所示。
图3 接口库函数使用流程
图4 SDO的上传和下载
返回的SDO命令字为80时为错误,具体的错误内容可参见SDO错误码。加速传送机制,最多传送4字节数据。大于4字节接着的数据都运用分段传送结构为SDO命令字+最多7字节数据[5],多个分段只由1个确认报文应答以增加总线吞吐量。
图5为Copley伺服驱动器PDO配置方法。通讯参数和映射内容为预定义,可以用 SDO进行读取验证,配置RPDO映射与TPDO类似,以TPDO2,Node-ID等于2为例,配置TPDO步骤如图5所示。
实际运用当中,PDO传输类型常用的是:
(1)同步传输:在收到一个或者多个SYNC消息后触发PDO发送[6]。
(2)定时发送:有别于SYNC,它是节点本身定时发送,通过设置通讯参数eventtime来实现。但是,并不是所有设备都支持这项服务。
(3)事件触发:当节点的某个时间发生触发的一次数据发送,该方式是实时性最好的一种传输方式。
实验中以伺服的两种位置模式为例,验证CANopen协议在伺服上的运用。上位机以SDO方式发送运动参数,启动远程节点,配置控制字来启动停止,控制界面在运动过程中定周期地发送SDO查询实时位置,速度和电流等。若使用PDO方式,必须先启动远程节点,并设置相关通讯参数。伺服调试的控制界面如图6所示。
图5 TPDO配置
图6 伺服调试的控制界面
离散位置模式经过计算设定的参数是:梯形模式,目标位置:36 000 Counts,配置最大速度:3 000 r/min,最大加速度:1 000 r/s2,最大减速度:500 r/s2。通过实验发现数据传输正确,伺服有较好的响应。实验数据如图7所示,图中1表示目标位置,2表示配置的速度曲线,3表示实时速度曲线,4线表示实时位置。
图7 离散位置模式曲线
为观测伺服对CANopen协议的动态响应,又实验了连续位置模式,通过计算设定的参数是:梯形模式,起始最大加速度:1 000 r/s2。最大速度:3 000 r/min。第二段最大加速度为333.33 r/s2。最大速度:4 000 r/min。最大减速度:1 333.33 r/s2。最终位置124 633 Counts。实验结果如图8所示,曲线颜色分配同上。通过实验发现数据传送无误,伺服能按照计算的模式进行运动。最终位置由于上位机定时器的不精确有少量的偏差。
图8 连续位置模式
CANopen面向对象的设计思想,协议公开透明,便于理解和开发的优点,在多轴运动控制上是一种高效的数据传输方法。
本文利用CANopen协议实现了由上位机和USBCAN-2A组成的主站与从站数字伺服之间的数据通讯,通过实例验证了CANopen协议在伺服控制上的可行性和较高的可靠性。同时,通过具体的实验和系统调试为基于CANopen协议多电机运动控制的实现奠定了理论和实践基础。
[1]宋海亮 CAN总线的特点及发展趋势[J].应用科学,2010(8):6-8.
[2]左永文.CAN总线通讯在汽车电子控制系统上的应用[J].计算机光盘软件与应用,2012(4):92-93.
[3]史久根,张培仁,陈真勇.CAN现场总线系统设计技术[M].北京:国防工业出版社,2004:251-260.
[4]CAN in Automation.CANopen Application Layer and Communication Profile[S].CiA Draft Standard 301,Version 4.02,2002(2).
[5]邓遵义,宁祎.基于CANopen协议的主节点通讯实现[J].微计算机信息,2008,25(23):62 -64,65.
[6]CAN in Automation.Device Profile Drivers and Motion Control[S].CiA Draft Standard Proposal 402,Version 2.0,2005(3).