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)包含节点设备名。
具体来说,对象字典中的条目由属性定义:
- 数据类型:例如VISIBLE_STRING或UNSIGNED32或记录名称
- 访问: rw(读/写),ro(只读),wo(只写)
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数据字节。