CANopen协议架构和应用原理

描述

稳健的通信协议和接口在工业电机控制应用中发挥着重要作用。在工业驱动应用中,当需要多个处理器元件来持续通信以完成复杂任务时,CANopen因其易于集成、高度可配置,以及支持高效、可靠的实时数据交换等特性,受到了众多工程师青睐。本文从低功耗电机控制应用的角度深入探讨CANopen。

控制器局域网的背景

控制器局域网(CAN)由Robert Bosch Gmbh于1983年研发,是一种高度稳健的通信协议和接口,创建之初是为了克服RS232等传统串行通信网络的局限性,这些网络无法支持多个控制器之间的实时通信。汽车行业要求多个传感器连续同步传输数据,因而率先采用CAN。CAN允许多个节点使用短小的消息相互通信,因此成为汽车应用的理想选择。

随着时间推移,CAN凭借其经过验证的稳健性和诸多优势,在各行各业越来越受欢迎。然而,受限于专有编码规则,利用CAN协议将来自不同供应商的多个设备集成到单个系统中颇有挑战性,有时甚至是天方夜谭。为了克服这一限制,自动化领域CAN (CiA)的国际用户和制造商协会开发了一种高层协议CANopen。

本文接下来将探讨CANopen协议架构及其在控制多轴电机驱动器中的应用。本文将深入探究这种高层通信协议的复杂之处及其对电机和运动控制领域的影响。为了让读者了解CANopen协议,我们会分析 ADI Trinamic TMCM-6212 多轴电机控制器/驱动器模块与 QSH4218-35-10-027 步进电机的实时通信日志。具体来说,我们将重点关注网络管理(NMT)状态和基于客户端-服务器的CANopen协议。此外,我们还将通过案例研究来展示如何解读通信日志并确定驱动器的状态。

CANopen架构

本节讲解CANopen协议的各种应用原理,包括NMT和SDO(服务数据对象)。

网络管理:NMT是CANopen中的关键通信原则,每个CANopen兼容设备都必须遵守。它作为状态机运行,在协调CANopen框架内的应用方面发挥着重要作用。

网络管理状态机架构:NMT状态机如图1所示,由三个不同的状态组成,详情如下:

初始化状态

预运行状态

运行状态

CANopen

图1. NMT状态机

客户端节点承担着监督不同运行状态下,相关服务器节点通信状态的关键角色。这是通过实施NMT机制来实现的。可通过心跳和节点守护两种不同方法,使客户端节点能够评估服务器节点的通信完整性。TMCM-6212采用心跳技术来验证通信是否正确。每个节点利用对象 1017h,以用户可配置的循环时间间隔(以毫秒为单位)发出心跳信号。这种方式确保所有节点都处于活动状态,可以进行通信。

表1列出了不同通信状态下使用的所有通信对象的组合。设备上电或复位后进入初始化状态时,会产生启动消息。然后,设备转换到预运行状态,准备好执行期望的操作。在预运行状态下,网络中的所有节点可以传输与SDO、心跳/节点守护、紧急情况和时间/同步相关的所有对象。在运行状态下,除了预运行状态下可用的所有对象之外,还可以映射PDO对象。最后,在停止状态下,设备会禁用所有SDO和PDO对象的通信,仅允许执行NMT命令。

CANopen

表1. NMT通信中的状态配置

服务数据对象:SDO通信协议主要用于NMT状态机的预运行状态。它以客户端-服务器配置运行,其中客户端可以访问所有连接的服务器(节点)的对象字典中可用的所有对象。在该协议中,客户端总是发起服务器的读/写事务,并由服务器确认任务完成。此过程可确保SDO中的每个事务都得到确认。

图2显示了多节点网络中SDO协议的基于客户端-服务器的配置。每个节点都被分配一个通道,通过该通道可以与客户端进行通信。在这种情况下,Trinamic TMCM-6212六步进电机驱动器/控制器充当服务器,而连接的PC充当客户端,发起与特定节点(本例中为NODE-1)的读/写事务。虽然所有节点都会收到SDO客户端消息,但只有目标节点会响应,而其他服务器会忽略客户端请求。

CANopen

图2. 多节点SDO配置

服务数据对象数据报

图2显示了SDO数据报的完整结构。SDO报头由COB-ID(连接对象ID)组成,该ID是分配给特定任务(例如读写功能)的唯一编号。因此,SDO通信需要两个COB-ID。第一个COB-ID代表客户端上载/下载请求的NODE-ID+功能代码,即 600h + NODE-ID。第二个 COB-ID (580h+ NODE-ID)用于服务器的响应。

SDO消息中的第一个字节为说明符,对于确定消息的性质至关重要,可表明客户端是打算写入(下载)还是读取(上传)数据,而且还通过中止消息表示事务中的任何错误。说明符字节分为8位,如图3所示。位7-5为客户端命令说明符(CCS),提供有关消息性质的关键信息。客户端命令说明符根据客户端的操作(例如读取、写入、分段/快速传输或事务中的错误)而有不同的配置。在服务器的响应中,说明符(SCS,服务器命令说明符)的三位用于确定事务是否成功。表2列出了不同操作中CCS和SCS位的各种组合。说明符数据报中的位4是超过四字节的数据传输中使用的切换位。位3-2不包含任何数据,并且仅当设置了位0-1时才有效。位1决定通过SDO通道传输的消息类型,指示它是分段传输还是快速传输。在SDO数据报中,如图3所示,最后四个字节专门用于存放需要传输的数据。如果数据超过四个字节,则会以分段方式发送。另一方面,如果SDO数据报包含完整数据,则其被视为快速传输。因此,位1为高电平表示快速传输,位1为低电平表示分段传输。在分段传输中,数据以数据包的形式传输。为了响应客户端的初始读/写请求,服务器在数据字段中提供数据大小。然后,随着每个数据包传输到客户端,第四位(切换位)开始切换。最后,如果说明符数据报中的位0已设置,则位3-2会指示数据大小,如前所述。

CANopen

图3. SDO数据报结构

CANopen

表2. CCS和SCS配置

SDO数据报中的字节2-3和4分别对应索引和子索引字节,如图3所示。这些字节用于访问设备对象字典中可用的所有对象。对象字典包含所有设备参数,用户可根据实时应用需求配置设备的功能。通过设备剖析,无论是像驱动器这样的控制设备,还是简单的I/O器件,我们都可以实现行为标准化。如前所述,SDO数据报中的最后四个字节专门用于存放需要通过SDO层传输的数据。

一旦发生错误,SDO传输就会中止,传输停止的原因可以参考目标设备手册中提供的错误代码解释来确定。在这种情况下,CCS位的值为4,索引和子索引指定传输期间设备中受影响的参数,最后四个字节表示错误代码。

实时通信分析

本节使用机器处于预运行状态下的实时通信日志窗口来解释SDO数据报。ADI Trinamic TMCM-6212六轴步进电机驱动器/控制器4与 QSH4218-35-10-027 [5]步进电机配合使用。对于此设置,电机的最大电流(对象 2003h) 设置为200。利用目标设置的软件界面日志窗口中突出显示的消息,客户端和服务器之间的上传和下载事务得到进一步解释,如图4所示。

CANopen

图4. CANopen IDE

情形1:客户端与服务器之间的下载操作

由客户端发起:0x601:2f 03 20 c8 00 00 00(图5)。

CANopen

图5. 客户端发起下载请求

服务器响应:0x581:60 03 20 00 00 00 00(图6)。

CANopen

图6. 服务器的下载响应

在图6所示的操作中,CCS和SCS位的组合显示了客户端的成功写入操作和服务器的响应,这在表2中也有体现。

情形2:客户端与服务器之间的上传操作

由客户端发起: 0x601:40 03 20 00 00 00 00(图7)。

CANopen

图7. 客户端发起上传请求

服务器响应:0x581:4f 03 20 00 c8 00 00 00(图8)

CANopen

图8. 服务器的上传响应

结论

CCS和SCS位的组合指示在客户端和服务器之间成功执行上传操作。本文提到的示例可以推广到设备对象字典中的其他对象,帮助我们深入了解机器的状态。本次演示的主要目的是帮助用户解读通信日志并监视驱动器的状态。用户可以实时排除错误,更高效地探索ADI Trinamic CANopen的高级特性。ADI产品中集成CANopen协议为客户带来了灵活性。客户可以将自己的PLC与ADI Trinamic模块集成,从而实现多供应商系统的开发。此界面对于从事实验室自动化、机器人、液体处理、半导体处理等复杂应用领域的客户特别有价值。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分