总线通讯协议

Bus protocol

什么是CANopen总线协议?CANopen通信协议概述
在本文中,我们会介绍CANopen协议的基本知识。包含对象字典、服务、SDO、PDO和主/从节点。

一、什么是CANopen?

CANopen协议是基于CAN的通信协议。
CANopen标准是非常有效的,因为它可以在工业机械中的设备(节点)之间实现现有的相互操作性。此外,它还提供了用于配置设备的标准方法。
CANopen协议最初是为面向运动的机器控制系统设计的。
如今,CANopen协议已广泛用于电机控制(步进/伺服电机)中,也广泛用于其他应用中:
如机器人技术(自动化机器人、传送带和其他工业机械)、医疗类(X射线发生器,注射器,病床和透析设备)、汽车行业(农业,铁路,拖车,重型,海洋等)。

二、CANopen-高层协议

CANopen协议是基于CAN总线的“更高层协议”。
这意味着CAN总线(ISO 11898)充当CANopen通信的“运输工具”。
如下图的OSI模型中的CANopen:
 

 
OSI模型是一个概念模型,用于标准化各种通信技术之间的通信功能。较低的层描述基本的通信(例如原始比特流),而较高的层描述诸如长消息的分段之类的东西以及诸如消息的发起、指示、响应和确认之类的服务。
CAN总线代表两个最低层(1:物理层,2:数据链路)。这表明CAN可以简单地启用具有11位CAN ID、远程传输(RTR)位和64个数据位(与高层协议有关的字段)的帧的传输。
如上所示,CANopen协议通过一组标准协议实现 OSI模型(应用程序)的第七层。作为其中的一部分,它增加了一些重要的概念,我们将在下面详细介绍。
另外,CANopen还可以适用于CAN以外的其他数据层协议(例如EtherCAT,Modbus,Powerlink)。
 

三、CANopen六大核心概念

即使您熟悉CAN总线协议,CANopen协议也会增加一系列重要的新概念:
 
 

通讯模式


 
设备/节点通信有3种模型:主设备/从设备、客户端/服务器和生产者/消费者
 

通讯协议


 
协议用于通信,例如配置节点(SDO)或传输实时数据(PDO)
 

设备状态


 
设备支持不同的状态。“主”节点可以更改“从”节点的状态,例如将其重置。
 

对象字典


 
每个设备都有一个OD,OD带有指定设备配置的条目,可以通过SDO访问
 

EDS


 
EDS是用于OD的标准文件格式,允许更新设备的服务
 

设备配置文件


 
CIA标准描述了供应商独立的I / O模块(CiA 401)和运动控制(CiA 402)
 
 
下图显示了CANopen的6个概念之间的关系,我们将在下面详细说明每个概念:
 
 
在CANopen网络中,多个设备需要通信。
例如,在工业自动化设置中,您可能具有带有多个伺服电机节点和一个控制接口/ PC节点的机械手。
为了促进通信,CANopen内部存在三个模型 -每个模型都与我们不久将要讨论的CANopen协议紧密相关。参见下面的简要介绍:
 

1.CANopen通讯模型

(1)主从




一个节点(例如控制接口)充当应用程序主节点或主机控制器。它从从站(例如,伺服电机)发送/请求数据。这用于例如诊断或状态管理。在标准应用程序中,可以有0-127个从站。请注意,在单个CANopen网络中,可能会有不同的主机控制器共享同一数据链路层。
服务示例:NMT
 

(2)客户端服务器
 


 
客户端向服务器发送数据请求,服务器将用请求的数据进行回复。例如,当应用程序主机需要来自从机OD的数据时使用。从服务器读取是“上传”,而写入是“下载”(术语采用“服务器端”的观点)。
服务示例:SDO
 

(3)消费者/生产者
 


 
在这里,生产者节点将数据广播到网络,由消费者节点消费。生产者根据请求(拉模型)或没有特定请求(推模型)发送此数据。
 
显而易见,这些模型实际上是相同的,但是出于术语一致性的考虑,我们对它们进行了区分。
 
 

2.通信协议

要了解CANopen通信,有必要了解CANopen /CAN框架:



 
11位的CAN ID称为通信对象标识符(COB-ID),分为两个部分:默认情况下,前4位等于功能代码,后7位包含节点ID。
 
为了了解COB-ID的工作原理,让我们首先了解简单CANopen网络中使用的标识符的预定义分配(请参见下表)。
 
 
注意:我们将在下面参考十六进制中的COB-ID和节点ID。
 
显而易见,COB-ID(例如381、581等)链接到通信服务(发送PDO 3,发送SDO等)。
 
这样,COB-ID详细说明了哪个节点正在发送/接收数据以及所使用的服务。
 
例:节点ID为5的CANopen设备将通过11位CAN ID 585 传输SDO。
 
这对应于二进制功能代码1011和节点ID 5(二进制:0000101)-参见示意图:
 
 

CANopen通信协议7种服务类型

 
下面我们简要概述了上述7种服务类型,包括。他们如何利用8个CAN帧数据字节。
 
#1网络管理(NMT)
 

 
定义:NMT服务用于通过NMT命令(例如,启动,停止,复位)来控制CANopen设备的状态(例如,预操作,运行,停止)。
 
工作原理:为了更改状态,NMT主设备发送2字节的消息,其CAN ID为0(即功能代码0和节点ID 0)。所有从节点都处理此消息。第一个CAN数据字节包含请求的状态-而第二个CAN数据字节包含目标节点的节点ID。节点ID 0表示广播命令。
 
命令包括转换到操作(状态01),停止(状态02),操作前(状态80)以及复位应用程序(81)和复位通信(82)。
 

#2同步(SYNC)

定义: SYNC消息用于例如同步输入的感测和几个CANopen设备的致动-通常由应用程序主机触发。
 
工作原理:应用程序主机将SYNC消息(COB ID 080)发送到CANopen网络(带有或不带有SYNC计数器)。多个从节点可以配置为对SYNC作出反应,并通过发送与参与同步操作的节点同时捕获的输入数据或同时设置输出来响应。使用SYNC计数器,可以配置几组同步操作的设备。
 

#3紧急情况(EMCY)
 

 
 
 
定义:紧急服务用于设备发生致命错误(例如传感器故障)的情况,从而使其可以向网络的其余部分指示此错误。
 
工作原理:受影响的节点以高优先级向网络发送单个EMCY消息(例如,节点5具有COB-ID 085)。数据字节包含有关错误的信息,可以查找有关详细信息。
 
 
#4时间戳(TIME)[PDO]
 
 
定义:利用该通信服务,可以分配全球网络时间。TIME服务包含一个6字节的日期和时间信息。
 
工作原理:应用程序主机发出带有CAN ID 100的TIME消息,其中最初的4个数据字节包含午夜之后的毫秒数,随后的2个字节包含自1984年1月1日以来的天数。
 

#5过程数据对象[PDO]

 
定义:PDO服务用于在设备之间传输实时数据,例如测量数据(例如位置)或命令数据(例如扭矩请求)。在这方面,它类似于例如J1939中的广播数据参数。
 
它是如何工作的? 我们将在下面深入探讨。
 
#6服务数据对象[SDO]
 
它是什么? SDO服务用于访问/更改CANopen设备的对象字典中的值-例如,当应用程序主机需要更改CANopen设备的某些配置时。
 
它是如何工作的?我们将在下面深入探讨。
 

#7节点监视[SDO]

 
 
定义:心跳服务有两个目的:提供“活动”消息并确认NMT命令。
 
工作原理:NMT从设备会定期(例如,每100毫秒)发送心跳消息(例如,节点5的CAN ID 705),并在第一个数据字节中发送节点的“状态”
 
如果在一定时间内没有收到消息,则心跳消息的“消费者”(例如NMT主设备和可选的任何其他设备)会做出反应。
 
 
 
PDO和SDO服务特别重要,因为它们构成了大多数CANopen通信的基础。
 
下面我们将深入探讨这些内容,但首先,我们需要介绍CANopen的核心概念:对象字典。
 
 

3.CANopen对象字典

 
所有CANopen节点必须具有对象字典(OD),但是它是什么呢?
 
 

 
对象字典是指含有描述的CANopen节点的行为的所有参数的标准化结构。
 
通过16位索引和8位子索引查找OD条目。例如,符合CANopen的节点OD的索引1008(子索引0)包含节点设备名。
 
具体来说,对象字典中的条目由属性定义:
 
 
  • 索引:对象的16位基址
 
  • 对象名称:制造商设备名称
 
  • 目标代码:数组,变量或记录
 
  • 数据类型:例如VISIBLE_STRING或UNSIGNED32或记录名称
 
  • 访问: rw(读/写),ro(只读),wo(只写)
 
  • 类别:指示此参数是否为必需/可选(M / O)
 
 

OD标准化部分

 

 
对象字典分为标准化部分,其中一些条目是必填项,而其他条目则是完全可定制的。
 
重要的是,设备(例如从设备)的OD条目可以由其他设备(例如主机)使用SDO通过CAN进行访问。
 
例如,这可能使应用程序主机更改从属节点是否通过特定的输入传感器记录数据,或者从属发送心跳的频率。
 
链接到电子数据表和设备配置文件
 
要了解OD,查看电子数据表和设备配置文件会很有帮助。
 
 
 
 

电子数据表(EDS)

 
实际上,将使用适当的软件工具来配置/管理复杂的CANopen网络。
 
为了简化此过程,CiA 306标准定义了一种人类可读(且对机器友好)的INI文件格式,用作设备OD(例如“ ServoMotor3000”)的“模板”。此EDS通常由供应商提供的,并且包含信息的所有设备的对象(但不是值)。
 
设备配置文件(DCF)
 
假设一家工厂购买了ServoMotor3000集成到其传送带中。为此,操作员编辑设备EDS并添加特定的参数值和/或更改EDS中描述的每个对象的名称。
 
这样做,操作员可以有效地创建所谓的设备配置文件(DCF)。有了这个,ServoMotor3000就可以现场集成到特定的CANopen网络中。
 
 
EDS和DCF示例
 
EDS / DCF示例是真正了解CANopen对象字典的最佳方法,例如,请参见下面的EDS和DCF对象条目之间的区别。我们建议您查看CiA 306标准,以通过实际示例更深入地了解OD,EDS和DCF。
 

 
如上所述,DCF通常是在设备集成时创建的。但是,通常需要在初始配置后读取和/或更改节点的对象值-这是SDO服务发挥作用的地方。
 

4.SDO-配置CANopen网络

 

什么是SDO服务?

 
 
该SDO服务允许的CANopen节点通过CAN网络读取另一个节点的对象字典/编辑值。
 
如“通信模型”中所述,SDO服务利用“客户端/服务器”行为。
 
具体来说,一个SDO“客户端”启动与一个专用SDO“服务器”的通信。
 
目的可以是更新OD条目(称为“ SDO下载”)或读取条目(“ SDO上传”)。
 
在简单的主/从网络中,具有NMT主功能的节点充当所有NMT从节点读取或写入其OD的客户端。
 
 

示例:客户端节点SDO下载

 
客户端节点可以通过在CAN帧以下广播来启动SDO下载到节点5,这将触发节点5(并被其他节点忽略,请参见上图)。SDO“接收”(即请求)CAN帧如下所示:
 
 
SDO消息变量说明:
 
首先,COB-ID 605反映了“ SDO接收”(COB-ID 600 +节点ID)的使用。
 
所述CCS(客户端命令说明符)是传输类型(例如,1:下载,2:上载)
 
n是数据字节4-7中不包含数据的#bytes (如果设置了e&s则有效)
 
如果设置,e表示“快速传输”(所有数据在单个CAN帧中)
 
如果设置,s表示数据大小显示在n中
 
索引(16位)和子索引(8位)反映了要访问的OD地址
 
最后,字节4-7包含要下载到节点5的数据
 
注释示例:
 
一旦主节点(客户端)发送了CAN帧,从节点5(服务器)便会通过“ SDO发送”进行响应,并带有COB-ID585。该响应包含索引/子索引和4个空数据字节。自然地,如果客户端节点请求上传(即从节点5 OD读取数据),则节点5将以字节4-7中包含的相关数据进行响应。
 
显而易见,每个SDO使用2个标识符,创建一个“ SDO渠道”
 
该示例已简化为“快速”(数据包含在4个字节中)
 
对于较大的数据方案,可以使用SDO 分段/块传输
 
SDO灵活,但会带来大量输出,使其不适用于实时操作数据。
但这就是PDO的主要作用。
 
 

5.PDO-运行CANopen网络

 

首先:什么是CANopen PDO服务?

 
将PDO服务被用于跨CANopen的节点有效地分享的实时运行数据。
 
例如,PDO将携带来自压力传感器的压力数据或来自温度传感器的温度数据。
 
但是,SDO服务不能做到这一点吗?
 
是的,原则上可以使用SDO服务。但是,由于输出(命令字节和OD地址),单个SDO响应只能携带4个数据字节。此外,假设一个主节点需要来自节点5的两个参数值(例如“ SensTemp2”和“ Torque5”)-要通过SDO获得此值,它将需要4个完整的CAN帧(2个请求,2个响应)。
 
 
相比之下,PDO消息可以包含8个完整字节的数据-并且它可以在单个帧中包含多个对象参数值。因此,可能需要在PDO服务中用1帧完成SDO至少需要4帧的操作。
 
由于PDO承载大量信息,因此通常被视为最重要的CANopen协议。
 

PDO服务如何运作?

 
对于PDO,使用消费者/生产者术语。因此,生产者“生产数据”,并使用传输PDO(TPDO)将其传输到“消费者”(主用户)。相反,它可以通过接收PDO(RPDO)从使用者接收数据。
 
生产者节点可以例如被配置为每100ms响应消费者所广播的SYNC触发。然后,节点5可以例如在下面广播,以COB-ID 185发送PDO:
 
 
注意数据字节是如何用3个参数值打包的。这些值反映了节点5特定OD条目的实时数据。使用此信息的节点(使用者)当然需要知道如何解释PDO数据字节。