在线手册 PD4-E CANopen

CANopen 服务

CANopen 堆栈提供下表中所列服务;请参见相应章节了解更多详细说明。

默认 CAN-ID 服务 说明
000h 网络管理 (NMT) 网络管理 (NMT)章节
080h 同步对象 同步对象 (SYNC)章节
080h+节点 ID 紧急事件 紧急事件对象 (EMCY)章节
180h+节点 ID TX 进程数据对象 (PDO) 进程数据对象 (PDO)章节
200h+节点 ID RX 进程数据对象 (PDO)
280h+节点 ID TX 进程数据对象 (PDO)
300h+节点 ID RX 进程数据对象 (PDO)
380h+节点 ID TX 进程数据对象 (PDO)
400h+节点 ID RX 进程数据对象 (PDO)
480h+节点 ID TX 进程数据对象 (PDO)
500h+节点 ID RX 进程数据对象 (PDO)
580h+节点 ID TX 服务数据对象 (SDO) 服务数据对象 (SDO)章节
600h+节点 ID RX 服务数据对象 (SDO)
700h+节点 ID BOOT-UP 协议 Boot-Up 协议章节
700h+节点 ID 节点保护和心跳 心跳和节点保护章节

网络管理 (NMT)

网络管理面向 CANopen 设备并遵循主站-从站结构。NMT 需要由网络中的 CANopen 设备充当 CANopen 主站。所有其他设备则充当 NMT 从站。每个 NMT 从站均可通过其各自的节点 ID(范围为 [1–127])进行寻址。NMT 服务可用于启动、开始、监控、重置或停止 CANopen 设备。

这样,控制器即可遵循下图所示的状态图。只有在打开后或通过发送“重置通信”或“重置节点”NMT 命令才能达到“初始化”状态。 初始化之后可自动激活“预操作”状态。

在对象 1F80h 中,可以设置之后是否自动切换到“操作”状态,从而避免发送额外的 NMT 命令。

下表显示了各个状态下的服务活动概览。请注意,停止状态将完全停止通信,而仅允许 NMT 状态机的控制器通信。

服务 初始化 预操作 操作 停止
PDO 活动
SDO 活动 活动
SYNC 活动 活动
EMCY 活动 活动
BOOT-UP 活动
NMT 活动 活动 活动

“网络管理”消息的 CAN-ID 为 0。消息长度始终为两字节,结构如下:

其中,<CMD> 对应以下字节之一(另请参见 NMT 状态图中的图例):
<CMD> 含义
01h 切换到“操作”状态
02h 切换到“停止”状态
80h 切换到“预操作”状态
81h 重置节点
82h 重置通信

<Node-ID> 的值可为 00h;在这种情况下,NMT 命令适用于 CAN 总线(广播)上的所有设备。如果使用了非零数字,则只对具有相应节点 ID 的设备进行寻址。

“重置节点”命令将完全重启控制器;“重置通信”命令仅重置 CANopen 设置并重启通信。

示例:如果要将 CAN 总线上的所有设备切换到“停止”运行状态,则可使用包含“切换到停止状态”命令的广播。NMT 消息的结构如下:

000 | 02 00

如果仅完全重启节点 ID 为 42 的设备,则可发送以下 CAN 消息:

000 | 81 2A

同步对象 (SYNC)

同步对象用于同时验证总线上所有设备的 PDO 数据的时间。同步消息的结构如下:

对于 SYNC 操作,通常为 RX-PDO 使用传输模式(传输类型)0(数据对下次 SYNC 有效);对于 TX-PDO,则选择 1 到 240 的传输模式。(详细信息:请参见进程数据对象 (PDO)一章)。

接收到 SYNC 消息后,会有一个判定时间(“同步判定时间”),在此时间范围内可以发送和接收 PDO 消息;达到此判定时间后,所有设备都必须停止发送 PDO。可在对象 1007h:00h 中设置“同步判定时长”(毫秒)。

典型 CAN-SYNC 操作分为四个阶段(另请参见下图):

  1. 接收 SYNC 消息。从而将之前接收到的 RX-PDO 数据复制到对象目录(如有)中。此时,也会对数据进行采样,并将数据复制到 TX-PDO,同时启动这些消息的发送。
  2. 然后通过总线上的所有从站发送 TX-PDO。
  3. 随后,通过 CANopen 主站发送 PDO。达到“同步判定时长”后,不再允许发送 PDO。
  4. “同步判定时间”再次关闭后,SDO 消息可进行最新交换。

如果同步创建器支持同步计数器,则同步消息将接收到额外的 1 字节数值。此计数器每发送一条同步消息即增加值“1”,且每次达到值 1019h Synchronous Counter Overflow Value 后就会重置。

对于各个 TX-PDO,可在相应通信参数的子索引 06h 中定义同步计数器的起始值(如在 1800h:06h 中),从站将从该值开始首次响应同步并发送 PDO。只有在 1019h 中设置大于 1 的值后才能全局激活此功能。

紧急事件对象 (EMCY)

只要控制器中发生不是由 SDO 访问引起的错误,就会发送“紧急事件”类型的消息。该服务未经确认,通过 CAN-ID 80h+节点 ID 发送。

紧急事件消息的结构如下:

此处共传输三个故障代码:“紧急故障代码”(<EMCY Error Code>)、“错误寄存器”对象的内容(1001h<E-REG>)以及制造商特定代码(制造商特定错误

错误处理

错误处理模块可处理内部发生的所有错误。每个错误均被分类到相应的错误类别中。

对每个发生的错误处理如下:

  • 设定属于“错误寄存器”对象 (1001h) 中的故障的位。
  • 然后将三条信息一起写入“预定义错误字段”对象 (1003h:01):
    1. 紧急故障代码
    2. 错误寄存器
    3. 制造商特定故障代码
  • 如果没有其他待处理错误,则将发送以下错误消息:

    80 + 节点 ID | 00 00 00 00 00 00 00 00

可在对象 1029h 中配置控制器是否以及如何在发生错误情况时更改其 NMT 状态

服务数据对象 (SDO)

“服务数据对象”允许对对象目录进行读取或写入访问。

在下文中,将对象目录的所有者称为“服务器”;将想要请求或写入数据 CAN 节点称为“客户端”。“上传”是指从对象目录读取对象的值;“下载”是指将值写入对象目录。此外,图表中还使用了以下缩写:
  • <IDX>:要在对象目录中读/写的对象的索引;其中索引的 LSB 在字节 1 中。示例:控制器的状态字索引为 6041h;则字节 1 写为 41h,字节 2 写为 60h。对于加速传送,SDO 应答包含与请求相同的索引。
  • <SUBIDX>:对象目录中从 00hFFh 的对象的子索引。对于加速传送,控制器的 SDO 消息的应答同样包含请求的子索引。

由于 SDO 类型的 CAN 消息包含大量元数据,因此 SDO 消息只能用于配置控制器。如果必须在运行操作中循环交换数据,则使用 PDO 类型的 CANopen 消息更为合理(请参见进程数据对象小节)。

SDO 传送分为三种访问类型:

  • “加速传送”,用于传送最多四字节对象。
  • “正常传送”,用于传送任意字节数,可对每条 CAN 消息进行单独确认。
  • “块传送”同样用于传送任意字节数;其中会对给定的 CAN 票证块一起进行确认。

将 SDO 消息发送至 CAN-ID 600h + 节点 ID,而由 CAN-ID 580h + 节点 ID 进行应答。

加速传送

此方法用于写入(下载)或读取(上传)对象目录中 (UN)SIGNED8、INTEGER16 或 INTEGER32 类型对象中的值。通过确认或错误消息确认该服务,即每次访问均通过数据进行应答。

SDO 下载

用于向服务器的对象目录写入数据的加速 SDO 消息结构如下:

其中,<CMD> 字节取决于要写入的数据长度。<CMD> 可以是以下值之一:

  • 1 字节数据长度:2Fh
  • 2 字节数据长度:2Bh
  • 3 字节数据长度:27h
  • 4 字节数据长度:23h

<Data>字段中填写要写入的数据;数据的 LSB 在字节 4 中。

来自服务器的应答为写入操作确认或错误消息(消息结构:见下图)。对于后一种情况,会随数据一同发送错误原因(请参见SDO 错误消息章节中的 SDO 错误消息列表)。

示例:将对象 607Ah:00h(目标位置,SIGNED32)设为节点 ID 为 3 的控制器的值 3E8h (=1000d):

603 | 23 7A 60 00 E8 03 00 00

其中

  • 字节 1 (23h):SDO 加速下载,4 字节数据 (SIGNED32)
  • 字节 2 和 3 (7Ah 60h):对象索引为 607Ah
  • 字节 4 (00h):对象子索引为 00h
  • 字节 5 至 8 (E8h 03h 00h 00h):对象的值:000003E8h
如果成功,控制器将回复以下消息:

583 | 60 7A 60 00 00 00 00 00

SDO 上传

用于从对象目录中读取对象的 CAN 消息的结构如下:

服务器将回复以下消息之一:

在应答的 <CMD> 中对数据长度进行了加密:

  • 1 字节数据长度:4Fh
  • 2 字节数据长度:4Bh
  • 3 字节数据长度:47h
  • 4 字节数据长度:43h

其中数据的 LSB 也在字节 4 中。

如果出现错误情况,会在数据中指明错误原因(请参见SDO 错误消息中的 SDO 错误消息列表)。

示例:要从对象目录中读取“状态字”对象 (6041h:00),则发送以下消息(始终为 8 字节)即可:

603 | 40 41 60 00 00 00 00 00

控制器通常会回复以下消息:

583 | 4B 41 60 00 40 02 00 00

其中

  • 字节 1 (4Bh):SDO 加速上传,2 字节数据 (UNSIGNED16)
  • 字节 2 和 3 (41h 60h):对象索引为 6041h
  • 字节 4 (00h):对象子索引为 00h
  • 字节 5 至 6 (40h 02h):对象的值:0240h
  • 字节 7 至 8 (00h 2h h h):空。SDO 消息始终包含 8 字节。

正常传送

CANopen“加速”传送最多只能传送四字节;为了克服这个限制,必须支持所谓的“正常传送”。这种类型的传送可按内容将多条消息的内容组合在一起;这种消息块在下文中称为“传送”。其中会对传送中的每条消息进行单独确认。

生成文档时,只需对“字符串”类型的对象执行此步骤。由于字符串具有“只读”访问限制,不需要进行 SDO 下载;因此本文档中仅对 SDO 上传进行了讨论。

主站不支持“正常传送”

如果控制器由不支持“正常传送”的主站进行操控,则可通过其他方式处理对字符串数据类型对象的访问:可使用 SDO 上传将每个字符串逐个字符读取到子索引 1 以及后续子索引。

示例:要读取对象 6505h(http 驱动目录地址)。如果主站支持“正常传送”,则只需从子索引 00 开始上传对象;控制器将自动切换到“正常传送”。如果主站仅支持“加速传送”,则可使用对象 6505h:01、6505h:02、6505h:03 等逐个字符读取字符串。

SDO 上传

下图显示了“SDO 上传”的步骤(客户端请求将对象内容发送给它)。此传送过程分为两个阶段:初始化阶段和传送阶段。

与“加速传送”一样,上传从客户端向服务器发送“启动 SDO 更新”开始(见下图)。

“正常传送”的应答不包含 <CMD> 中编码的接收字节数量。而是输入下图<DATA LENGTH>区域中所示的数据范围。

从而完成初始化;然后要做的就是数据上传了。使用以下 SDO 请求请求数据包:

命令 <CMD> 的字节 0 结构如下:

名称为 t 的位根据各个请求进行交替(“切换位”)。它每次传送都从会 0 开始,即使在中止上次传送的情况下也同样如此。

控制器通过数据响应以上消息,其中消息结构如下:

<CMD> 的字节 0 结构如下:

其中位的含义如下:

t(切换位)
此位根据各个消息序列进行交替;它在“请求”和“响应”之间的序列中保持不变。
n(字节数)
这三个位用于指定含数据的字节数。示例:如果位 2 和 1 设为 0,位 3 设为 1,则 011b = 03d 字节无效。这反过来又意味着字节 1 至字节 4 包含允许的值,而字节 5 至字节 7 应忽略。
c(更多分段)
如果没有发送其他 SDO 分段,这是最后一个分段,则此位设为 1。

示例:在此示例中,将读取“制造商硬件版本”对象 (1009h)。此示例中节点的节点 ID 为 3。

相应的 SDO 消息序列如下表所示。要读取的字符串因控制器而异。

COB-ID 数据 说明
603h 40 09 10 00 00 00 00 00 启动上传;索引:1009h;子索引:00
583h 41 09 10 00 1E 00 00 00 启动上传;大小:指定;传送类型:正常;字节数:30;索引:1009h;子索引:00
603h 60 09 10 00 00 00 00 00 上传分段请求;切换位:未设置
583h 00 4E 31 30 20 2D 20 57 上传分段配置;更多分段:是;字节数:7;切换位:未设置
603h 60 09 10 00 00 00 00 00 上传分段请求;切换位:已设置
583h 00 54 31 32 30 39 2D 56 上传分段配置;更多分段:是;字节数:7;切换位:已设置
603h 60 09 10 00 00 00 00 00 上传分段请求;切换位:未设置
583h 10 31 2E 30 30 2D 38 4D 上传分段配置;更多分段:是;字节数:7;切换位:未设置
603h 60 09 10 00 00 00 00 00 上传分段请求;切换位:已设置
583h 0B 42 00 00 00 00 00 00 上传分段配置;更多分段:否(最后分段);字节数:2;切换位:已设置

所有组合在一起的传送数据将生成以下字符串(ASCII 值):

4E 31 30 20 2D 20 57 54 31 32 30 39 2D 56 31 2E 30 30 2D 38 4D 42 00

这对应于字符串:"N5 - W004-N-DT1209-V1.00-8MB"

中止 SDO 传送

服务器和客户端均有权随时中止当前传送。要执行此操作,必须发送“中止 SDO 传送”;这将在下文中进行说明。

接收到消息后,SDO 传送将视为结束;服务确认。然后必须从头开始新的 SDO 传送。可以选择是否传送<ERROR CODE>;控制器不会评估此代码。

SDO 错误消息

如果出现错误情况,会在数据区域中一同发送表示错误原因的错误编号。

故障代码 说明
05030000h 切换位不变:仅对“正常传送”或“块传送”有效。在每次传送后都会进行交替的位的状态没有改变。
05040001h 命令说明符未知:数据块的字节 0 包含不允许使用的命令。
06010000h 不支持访问:如果通过 CAN over EtherCAT (CoE) 请求“完全访问”(不支持)。
06010002h 只读条目:尝试写入常数或只读对象。
06020000h 对象不存在:尝试访问不存在的对象(索引不正确)。
06040041h 无法对对象进行 pdo 映射:尝试映射 PDO 中不允许映射的对象。
06040042h 映射 pdo 超出 pdo:如果要将所需对象附加到 PDO 映射,则将超出 PDO 映射的 8 字节。
06070012h 参数过长:尝试在对象中写入过多数据;例如,将 <CMD>=23h(4 字节)写入 Unsigned8 类型对象,而 <CMD>=2Fh 是正确的。
06070013h 参数过短:尝试在对象中写入过少的数据;例如,将 <CMD>=2Fh(1 字节)写入 Unsigned32 类型对象,而 <CMD>=23h 是正确的。
06090011h 子索引不存在:尝试访问无效的对象子索引;但索引是存在的。
06090031h 值过大:一些对象对值的大小有限制;在这种情况下,尝试在对象中写入过大的值。例如:1003h:00 的“预定义错误字段:错误数量”对象只能设为值“0”;所有其他数值都会导致此错误。
06090032h 值过小:一些对象对值的大小有限制。在这种情况下,尝试在对象中写入过小的值。
08000000h 一般错误:不属于任何其他分类的一般错误。
08000022h 无法在此状态下读取或存储数据:只能在停止或“预操作”状态下更改 PDO 的参数。在“操作”状态下,不允许对以下对象进行写访问:对象 1400h 至 1407h、1600h 至 1607h、1800h 至 1807h 以及 1A00h 至 1A07h

进程数据对象 (PDO)

仅包含进程数据的消息称为“进程数据对象”(PDO)。PDO 用于需要循环交换的数据。PDO 消息的理念是删除 CAN 消息中的所有附加信息(索引、子索引和数据长度),而仅保留 CAN 消息中的数据。PDO 的源信息和目标信息分别存储在所谓的 PDO 映射中。

只有在 NMT 状态机处于“操作”状态时才能使用 PDO(请参见网络管理 (NMT)章节);必须在“预操作”NMT 状态下配置 PDO。

控制器共支持八个独立的 PDO 映射;每条对应的 PDO 消息可包含最多八字节(= 64 位)用户数据。因此,例如,可以传送两个 UNSIGNED32 值或一个 UNSIGNED32 值和一个 UNSIGNED08 值;消息不需要用满全部八个数据字节。发送和接收配置的配置中 PDO 又有所不同。接收配置说明了对已发送 PDO 消息的处理,发送配置说明了对待发送 PDO 消息的处理。

RX 配置

配置 RX-PDO 时必须考虑对象目录中的三个对象分类:

  1. 描述映射功能的对象。
  2. 描述映射内容的对象。
  3. 接收已收到数据的对象。

功能配置(通信参数)

第一个映射的配置存储在对象 1400h 的子索引中。第二个映射在 1401h 中配置,以此类推。在下文中,我们以 140Nh 为参考。此处,配置会影响 PDO 消息的 COB-ID 和传送类型。

对象 140Nh 只有三个子索引:

  • 子索引 0(最大子索引):子索引总数
  • 子索引 1 (COB-ID):COB-ID 存储在这里。对于 PDO 映射 1–4 (1600h–1603h),根据节点 ID 确定 CAN-ID,且只能在 COB-ID 中设定有效位(位 31)。从 1604h 至 1607h,可以独立设定 CAN-ID(但不能被其他服务使用,请参见CANopen 服务一章开头的表格),也能独立设定有效位。COB-ID 的更改在控制器或通信重启才会生效(请参见网络管理 (NMT))。
    映射 COB-ID
    1600h 200h + 节点 ID
    1601h 300h + 节点 ID
    1602h 400h + 节点 ID
    1603h 500h + 节点 ID
    1604h xxxh + 节点 ID
    1605h xxxh + 节点 ID
    1606h xxxh + 节点 ID
    1607h xxxh + 节点 ID

  • 子索引 2(传输类型):该子索引中存储的数字定义了接收到的数据生效的时间。请参见下表查看数字及相应的含义。
    140Nh:02h 含义
    00h-F0h 同步:数据经过缓冲,且只有在接收到下一条 SYNC 消息后才会生效并传递至对象目录。
    F1h-FDh 保留
    FEh、FFh 异步:数据在接收到 PDO 消息后生效并传递至对象目录。

映射内容

映射内容的配置结构如下(另请参见下图示例):

  • 配置对象的所有子索引都在一起。因此,1600h 及所有子索引描述第一个映射,1601h 描述第二个 RX-PDO 映射,以此类推。
  • 子索引 00h 指定映射中的对象数量。它同时也指定了有效子索引的数量。如果对象 1600h:00h 设为“0”,则 RX 映射将完全关闭。在下图的示例中,映射了两个对象;因此,对象 1600h:03h 和 1600h:04h 处于非活动状态(显示为灰色)。
  • 从 1600h:01h 至 1600h:0Fh 的每个子索引依次无间断地描述了一个映射目标。从而对索引、子索引和位长进行编码。下图中的示例:消息的前两个字节将写入对象 6040h:00h 中。以十六进制表示的 1600h:01h 的内容将包含

    <Index><Subindex><Bit length>

    60400010。第二个映射 (1600h:02h) 包含条目 607A0020。因此,它可在对象 607Ah:00h 中映射后续四个字节 (=20hBit)

TX 配置

配置 RX-PDO 时必须考虑对象目录中的三个对象分类:

  1. 描述映射功能的对象。
  2. 描述映射内容的对象。
  3. 接收待发送数据的对象。

另请注意,将数据复制到 TX-PDO 消息的时间和发送时间不需要一致(取决于模式)。

功能配置(通信参数)

第一个映射的功能配置存储在对象 1800h 的子索引中。第二个映射在 1801h 中配置,以此类推。在下文中,我们以 180Nh 为参考。此处,配置会影响 PDO 消息的 COB-ID 和传送类型。

对象 180Nh 有以下子索引:

  • 子索引 0(最大子索引):子索引总数
  • 子索引 1 (COB-ID):COB-ID 存储在这里。对于 PDO 映射 1–4 (1A00h–1A03h),根据节点 ID 确定 CAN-ID,且只能在 COB-ID 中设定有效位(位 31)。从 1A04h–1A07h,可以独立设定 CAN-ID(但不能被其他服务使用,请参见CANopen 服务一章开头的表格),也能独立设定有效位。COB-ID 的更改在控制器或通信重启才会生效(请参见网络管理 (NMT))。
    映射 COB-ID
    1A00h 180h + 节点 ID
    1A01h 280h + 节点 ID
    1A02h 380h + 节点 ID
    1A03h 480h + 节点 ID
    1A04h xxxh + 节点 ID
    1A05h xxxh + 节点 ID
    1A06h xxxh + 节点 ID
    1A07h xxxh + 节点 ID

  • 子索引 2(传输类型):该子索引中存储的数字定义了将数据复制到 PDO 消息的时间以及消息的发送时间。请参见下表查看数字及相应的含义。下面,我们以能够触发数据复制和/或发送的事件为参考。该事件包括三个事件,这三个事件可视为相互独立:
    • NMT 状态机切换为“操作”。
    • 当前数据已根据上条 PDO 消息发生更改。
    • 事件计时器已过期(请参见 180Nh:5)。

    如果使用事件计时器,则对它的处理与更改无关;事件计时器在当前事件计时器过期后才会重启,而不是基于另一个事件

    180Nh:02h 含义
    0 同步(非循环):收到 SYNC 时会立即将数据复制到 TX-PDO,但在事件发生时才会发送数据。
    01h-F0h 同步(循环):收到第 n 条 SYNC 消息时会立即复制数据,随后立即发送数据(n 对应数字 1 到 240,传输类型“1”在每次 SYNC 时都会发送新数据)。
    F1h-FBh 保留
    FCh 仅 RTR(同步):收到每条 SYNC 消息时都会立即复制数据,但仅在通过 RTR 消息进行请求时才会发送数据。
    FDh 仅 RTR(事件驱动):收到 RTR 消息时立即将数据复制到 TX-PDO 消息,随后立即发送数据。
    FEh、FFh 事件到达时复制数据,并立即发送数据。

  • 子索引 3(抑制时间):该子索引包含一个时间锁 (100 µs)(见下图)。这可用于设置发送 PDO 后必须经过的时间,然后才能再次发送 PDO。该时间仅适用于异步 PDO。这是为了防止在映射对象不断变化的情况下连续发送 PDO。
  • 子索引 4(兼容项):该子索引没有功能,仅是为了兼容性而存在。
  • 子索引 5(事件计时器):该时间 (ms) 可用于触发处理数据复制和 PDO 发送的事件
  • 子索引 6(同步起始值):在此输入同步计数器的起始值,从站从该起始值开始响应同步并发送 PDO。只有在 1019h Synchronous Counter Overflow Value 中设置大于 1 的值后才能全局激活。

映射内容

映射内容的配置结构如下(请参见下图示例):

  • 配置对象的所有子索引都在一起。因此,1A00h 及所有子索引描述第一个映射,1A01h 描述第二个 RX-PDO 映射,以此类推。
  • 子索引 00 指定映射中的对象数量。它同时也指定了有效子索引的数量。如果对象 1A00h:00h 设为“0”,则 RX 映射将完全关闭。在以下示例中,在条目 1A00h:01h – 1A00h:02h 中映射了两个对象。因此,没有映射条目 1A00h:03h – 1A00h:04h 中的对象(显示为灰色)。
  • 从 1A00h:01h 到 1A00h:0Fh 的每个子索引分别依次无间断地(可为间隔使用虚拟对象)描述了一个映射源。从而对索引、子索引和位长进行编码。下图中的示例:将从对象 6041h:00h 读取消息的前两个字节。以十六进制表示的 1A00h:01h 的内容将包含 <Index><Subindex><Bit Length>,或 60410010。第二个映射 (1A00h:02h) 包含条目 60640020。因此,它可从对象 6064h:00h 映射 TX-PDO 消息中的后续四个字节(对应于 32 位)。

预设

已预设以下配置:

RX-PDO

1.映射(CAN-ID:200h + 节点 ID):

  • 6040h:00h(控制字)
  • 6060h:00h(操作模式)
  • 3202h:02h(电机驱动子模式选择)

2.映射(CAN-ID:300h + 节点 ID):

  • 607Ah:00h(目标位置)
  • 6081h:00h(标准速度)

3.映射(CAN-ID:400h + 节点 ID):对象 6042h:00h(vl 目标速度)

4.映射(CAN-ID:500h + 节点 ID):对象 60FEh:01h(数字输出)

TX-PDO

1.映射(CAN-ID:180h + 节点 ID):

  • 6041h:00h(状态字)
  • 6061h:00h(功能)

2.映射(CAN-ID:280h + 节点 ID):6064h:00h(位置实际值)

3.映射(CAN-ID:380h + 节点 ID):6044h:00h(vl 速度实际值)

4.映射(CAN-ID:480h + 节点 ID):对象 60FDh:00h(数字输入)

更改 PDO 映射

  1. 将相应通信参数(如 1400h:01h)的子索引 01h 的有效位(位 31)设为“1”,从而禁用 PDO。
  2. 将相应映射参数(如 1600h:00h)的子索引 00h 设为“0”,从而禁用映射。
  3. 更改所需子索引(如 1600h:01h)中的映射。
  4. 将要映射的对象数量写入相应映射参数(如 1600h:00h)的子索引 00h,从而激活映射。
  5. 将相应通信参数(如 1400h:01h)的子索引 01h 的位 31 设为“0”,从而激活 PDO。

Boot-Up 协议

如果 CAN 从站达到“预操作”NMT 状态(见下图),则将发送以下消息表示操作准备就绪。

该服务未经确认;无响应。

注: 引导加载程序会发送自身的启动消息。这可以加以抑制,请参见对象 2007h:00

心跳和节点保护

通过“心跳”和“节点保护”服务(通常也称为“寿命保护”),可检测 CAN 总线上已关闭或挂起的设备。为此,NMT 主站将循环请求包含从站当前 NMT 状态的消息(节点保护)。另一种方式是每个从站自发循环地发送消息(心跳)。不允许组合使用节点保护和心跳。此外,还建议为心跳设置高于节点保护的优先级,因为节点保护会导致 CAN 总线的负载较高。

节点保护

该服务所依据的原理是 NMT 主站可向相应的从站发送包含 CAN-ID 700h + 节点 ID 的 RTR 消息。随后从站必须发送消息进行响应;此消息结构如下。其中位 7 在每次传送时都会进行交替,从而能够确定消息是否丢失。在位 6 到 0 中输入从站当前的 NMT 状态。

对于节点保护,存在三个时间间隔(另请参见下图):

  1. 保护时间:两条 RTR 消息之间的之间。每个 CAN 节点可能具有不同的保护时间,保护时间存储在从站的对象 100Ch:00 中(单位:毫秒)
  2. 生存时间因数保护时间的倍数;存储在 CAN 从站的对象 100Dh:00 中,CAN 总线上每个从站可能具有不同的生存时间因数。
  3. 可能的生存时间保护时间乘以生存时间因数所得出的时间。

在节点保护期间会检查以下条件:

  1. NMT 主站必须在“可能的生存时间”内发送 RTR 请求。
  2. 从站必须在“可能的生存时间”内发送对 RTR 请求的响应。
  3. 从站的响应必须包含其 NMT 状态。此外,还必须正确设置“切换位”。

心跳

如果激活心跳,从站将自发循环地将其 NMT 状态发送至 CAN 总线。可通过将对象 1017h:00h 中的创建者心跳时间时间设为非零值,从而激活该服务。创建者心跳时间以毫秒为单位测量。从站发送的消息格式如下:

从站必须在心跳使用者时间内发送心跳消息。该时间只有主站知道,且不会存储在控制器中。

从站还可以从其他创建者(主站或其他从站)监测心跳。为此,必须在对象 1016h 中输入使用者心跳时间创建者的节点 ID。

如果两个功能均已禁用,或者再次在正确的时间内发送心跳,则将重置在此监测过程中发生的错误。

▶   下一个

目录