DOCA0132ZH-01

PKW 对象

概述

CANopen 控制器支持 PKW 以非循环字定期保留)。PKW 功能由 4 个制造商特定对象组成:0x3000:0x01 至 0x3000:0x04。

这些对象使得 CANopen 客户端能够使用 PDO 读取或写入任何寄存器。缺省情况下,在传输和接收 PDO4 中其进行映射。

您可以选择使用寄存器的编号或 CANopen 索引和子索引来对寄存器进行寻址,具体取决于功能代码。

PKW OUT 数据寄存器编号寻址

缺省情况下,在接收 PDO4 中对 PDPKW OUT 数据请求( CANopen 客户端 > LTMR )进行映射。

要使用编号寻址访问寄存器,您必须选择下面的其中一个功能代码:

  • R_REG_16 = 0x25,用于读取 1 个寄存器

  • R_REG_32 = 0x26,用于读取 2 个寄存器

  • W_REG_16 = 0x2A,用于写入 1 个寄存器

  • W_REG_32 = 0x2B,用于写入 2 个寄存器。

0x3000:0x01

0x3000:0x02

字 1

字 2

字 3

字 4

MSB

LSB

寄存器地址

切换位

(15 位)

功能位

(位 8 到 14)

未使用

(位 0 到 7)

要写入的数据

寄存器编号

0/1

R_REG_16

代码 0x25

0x00

_

_

R_REG_32

代码 0x26

_

_

W_REG_16

代码 0x2A

要在寄存器中写入的数据

_

W_REG_32

代码 0x2B

要在寄存器 1 中写入的数据

要在寄存器 2 中写入的数据

PKW OUT 数据 CANopen 寻址

要使用 CANopen 寻址访问寄存器,您必须选择下面的其中一个功能代码:

  • R_CO_16 = 0x35,用于读取 1 个寄存器

  • R_CO_32 = 0x36,用于读取 2 个寄存器

  • W_CO_16 = 0x3A,用于写入 1 个寄存器

  • W_CO_32 = 0x3B,用于写入 2 个寄存器

0x3000:0x01

0x3000:0x02

字 1

字 2

字 3

字 4

MSB

LSB

寄存器地址

切换位

(15 位)

功能位

(位 8 到 14)

寄存器地址

要写入的数据

CANopen 索引

0/1

R_CO_16

代码 0x35

CANopen 子索引

_

_

R_CO_32

代码 0x36

_

_

W_CO_16

代码 0x3A

要在寄存器中写入的数据

_

W_CO_32

代码 0x3B

要在寄存器 1 中写入的数据

要在寄存器 2 中写入的数据

功能代码中的任何更改都将触发请求处理(除非功能代码 [位 8...位 14] = 0x00)。

注: 功能代码的最高位(位 15)是切换位。它将对于每个连续请求进行更改。

这一机制使请求发起方能够通过轮询对象 30000x:03 中功能代码的位 15 来检测响应是否就绪。当(开始请求时)OUT 项目中的此位等于 IN 数据中发出响应的切换位时,响应就绪。

PKW IN 数据寄存器编号寻址

缺省情况下,在传输 PDO4 中对 PDPKW IN 数据响应( LTMR > CANopen 客户端 )进行映射。LTMR 回应同一个寄存器地址和功能代码或最终检测到的错误代码:

0x3000:0x03

0x3000:0x04

字 1

字 2

字 3

字 4

MSB

LSB

寄存器地址

切换位

(15 位)

功能位

(位 8 到 14)

未使用

(位 0 到 7)

要写入的数据

与请求中相同的寄存器编号

与请求相同

检测到错误

代码 0x4E

0x00

检测到的错误代码

R_REG_16

代码 0x25

寄存器中读取的数据

_

R_REG_32

代码 0x26

寄存器 1 中读取的数据

寄存器 2 中读取的数据

W_REG_16

代码 0x2A

_

_

W_REG_32

代码 0x2B

_

_

PKW IN 数据 CANopen 寻址

LTMR 回应同一个寄存器地址和功能代码或最终检测到的错误代码:

0x3000:0x03

0x3000:0x04

字 1

字 2

字 3

字 4

MSB

LSB

寄存器地址

切换位

(15 位)

功能位

(位 8 到 14)

寄存器地址

要写入的数据

与请求中相同的 CANopen 索引

与请求相同

检测到错误

代码 0x4E

CANopen 子索引

检测到的错误代码

R_REG_16

代码 0x55

寄存器中读取的数据

_

R_REG_32

代码 0x36

寄存器 1 中读取的数据

寄存器 2 中读取的数据

W_REG_16

代码 0x3A

_

_

W_REG_32

代码 0x3B

_

_

如果启动器尝试将 TeSys T 对象或寄存器写入到未授权值,或尝试访问不可访问的寄存器,则返回一个检测到的错误代码(功能代码 = 切换位 + 0x4E)。同样的代码可在字 3 和 4 中找到。

这些代码与 SDO 中止代码 SDO 中止代码 相同。

请求未被接受,并且对象/寄存器仍保留原来的值。

要重新触发同样的命令:

  1. 将功能代码重置为 0x00,

  2. 等待响应帧,其中功能代码等于 0x00,

  3. 将其重置为之前的值。

这对于受限的客户端(例如 HMI)比较有用。

准确地重新触发同一个命令的其他方式是反转功能代码字节中的切换位。

当响应的切换位等于应答中写入的切换位时,响应有效(这是更有效的方法,但需要更高的编程功能)。

QR Code is a registered trademark of DENSO WAVE INCORPORATED in Japan and other countries.

这有帮助吗?