7,PDO 通信控制
PDO(Process Data Object)用于实现主从站之间的高速实时数据通信,相比 SDO 具有:
无需握手,通信效率高
支持同步/异步触发
适用于实时控制(位置 / 速度 / 状态反馈等)
PDO通信默认帧结构对照表(可通过PDO映射修改帧结构),如下所示:

表7.1 PDO通信默认帧结构
7.1,RPDO2 速度控制示例
控制流程:
① 使能三步骤
② RPDO2发送速度控制指令
① 使能三步骤
参考第5小节,去使能电机;
② RPDO2发送速度控制指令
数据段解析:
a) 第 1 字节(0x03):代表速度模式;
b) 第 2~5 字节(0X58 02 00 00):速度值 0x0258(小端格式);对应数据为 600 RPM;
c) 第 6~7 字节(0X58 02):力矩值 0x0258(小端格式);对应数据为 600 mA(力矩模式才生效);
核心作用:设置速度模式以及目标速度,单位RPM。
7.2,TPDO1/2/3/4 报文解析示例
TPDO1/2,在你开启NMT后(启动节点),会实时反馈报文信息,接下来我们来解析以下示例(NodeID = 1):

数据段解析:
a) 第 1~2 字节(0x17 0x02):实际读出来Statusword的值:0x0217;
b) 第 3 字节(0x03):速度模式;
c) 第 4~7 字节(0X00 C8 00 00):读出来当前位置值 0x0000C800(小端格式);对应数据为 51200相当于绝对零点正转1圈的位置;

数据段解析:
a) 第 1~4 字节(0x58 02 00 00):代表实际读出来的速度值为 0x00000258(小端格式);对应数据为 600,即当前转速为600RPM;
b) 第 5~8 字节(0X52 00):读出来当前电流值 0x0052(小端格式);对应数据为 82,即当前电流为82mA;
注意:开启 NMT 节点启动后,TPDO3、TPDO4 不会自主实时上传报文。
设备默认将 TPDO3/TPDO4 配置为同步状态帧,仅在收到主机发送 SYNC 同步帧后,才会一次性上报当前状态数据。:
① 主站发送一次SYNC

② 从站会发送一次TPDO3/4:

数据段解析:
a) 第 1~4 字节(0x00 C8 00 00):读出来当前位置值 0x0000C800(小端格式);对应数据为 51200相当于绝对零点正转1圈的位置;
b) 第 5~8 字节(0x58 02 00 00):代表实际读出来的速度值为 0x00000258(小端格式);对应数据为 600,即当前转速为600RPM;

数据段解析:
a) 第 1~2 字节(0x17 0x02):实际读出来Statusword的值:0x0217;
7.3,PDO映射说明
PDO 的核心在于映射(Mapping):将对象字典中的变量,映射到 PDO 数据帧的 8 字节数据区中。
完成映射配置后,若希望设备在掉电重启后仍保持当前映射关系,可通过发送掉电保存指令(厂商自定义对象 0x2003,详见第 10 小节)将配置写入非易失性存储,实现掉电不丢失。
7.3.1,PDO映射结构
PDO 映射由两部分组成:
① 通信参数(Communication Parameter)

表7.3.1.1 PDO通信对象

表7.3.1.2 PDO通信索引关键字段
② 映射参数(Mapping Parameter)

表7.3.1.3 PDO映射参数
每个映射项为 32 位(4 字节),格式如下:

图7.3.1.1 映射项格式

表7.3.1.4 映射项格式参数说明
7.3.2,映射配置流程(标准步骤)
PDO 映射必须按照以下顺序配置:
① 禁止 PDO,设置 COB-ID 最高位(bit31)=1
② 清除映射,表示当前无映射项
③ 写入映射项
④ 设置映射个数
⑤ 重启PDO
TPDO1 映射示例:
步骤①:禁止PDO:

数据段解析:
a) 第 1 字节(0x23):SDO 写命令,表示写入4字节;
b) 第 2~3 字节(0X00 18):表示0x1800,即TPDO1的通信对象索引;
c) 第 4 字节(0X01):子索引0x01代表要设置COB-ID;
d) 第 5~8 字节(0x81 01 00 80):表示将COB-ID设置为0x80000181,即bit31置1,表示禁止PDO;
步骤②:清除映射:

数据段解析:
a) 第 1 字节(0x2F):SDO 写命令,表示写入1字节;
b) 第 2~3 字节(0X00 1A):表示0x1A00,即TPDO1的映射对象索引;
c) 第 4 字节(0X00):即子索引0;
d) 第 5~8 字节(0x00 00 00 00):0x00,表示清除映射。
步骤③:写入映射项:

数据段解析:
a) 第 1 字节(0x23):SDO 写命令,表示写入4字节;
b) 第 2~3 字节(0X00 1A):表示0x1A00,即TPDO1的映射对象索引;
c) 第 4 字节(0X01):即0x01表示子索引1,即第1个映射项参数;
第 5~8 字节(0x10 00 41 60):其中0x10 表示数据长度:16bit;0x00表示子索引0;0x6041第1映射项参数代表是状态字,长度是16bit。

数据段解析:
a) 第 1 字节(0x23):SDO 写命令,表示写入4字节;
b) 第 2~3 字节(0X00 1A):表示0x1A00,即TPDO1的映射对象索引;
c) 第 4 字节(0X02):即0x02表示子索引2,即第2个映射项参数;
d) 第 5~8 字节(0x08 00 61 60):其中0x08 表示数据长度:8bit;0x00表示子索引0;0x6061第2个映射项参数代表是运动模式,长度是8bit。

数据段解析:
a) 第 1 字节(0x23):SDO 写命令,表示写入4字节;
b) 第 2~3 字节(0X00 1A):表示0x1A00,即TPDO1的映射对象索引;
c) 第 4 字节(0X02):即0x03表示子索引3,第3个映射项参数;
d) 第 5~8 字节(0x20 00 64 60):其中0x20 表示数据长度:32bit;0x00表示子索引0;0x6064第3个映射项参数代表是实际位置模式(51200 = 1圈),长度是32bit。
步骤④:设置映射数量:

数据段解析:
a) 第 1 字节(0x2F):SDO 写命令,表示写入1字节;
b) 第 2~3 字节(0X00 1A):表示0x1A00,即TPDO1的映射对象索引;
c) 第 4 字节(0X00):即子索引0;
d) 第 5~8 字节(0x03 00 00 00):0x03表示写入映射数量3。
步骤⑤:使能 TPDO1:

数据段解析:
a) 第 1 字节(0x23):SDO 写命令,表示写入4字节;
b) 第 2~3 字节(0X00 18):表示0x1800,即TPDO1的通信对象索引;
c) 第 4 字节(0X01):子索引0x01代表要设置COB-ID;
d) 第 5~8 字节(0x81 01 00 80):表示将COB-ID设置为0x00000181,即bit31置0,表示使能TPDO1;
此时TPDO1将会输出以下格式的数据:

总结:PDO 映射的本质是将对象字典中的变量按顺序打包到 8 字节数据区,实现高效实时通信;配置时必须遵循“先禁用 PDO → 配置映射 → 再启用 PDO”的标准流程。各类 PDO 的配置方法基本一致,本文以 TPDO1 为例进行说明,其余 PDO 可按相同方式配置。
完成映射配置后,若希望设备在掉电重启后仍保持当前映射关系,可通过发送掉电保存指令:
示例:掉电保存指令

数据段解析:
a) 第 1 字节(0x2F):SDO写命令,写 1 字节;
b) 第 2~3 字节(0x03 0x20):对象字典索引 0x2003(掉电保存);
c) 第 4 字节(0x00):子索引 0x00;
d) 第 5~8 字节(0x01 00 00 00):写入任意值执行掉电保存;
核心作用:执行参数掉电保存。
8,SYNC 同步对象与 EMCY 紧急对象
在 CANopen 网络中,除了常用的 NMT、SDO、PDO 之外,还定义了若干用于系统管理与实时控制的通信对象,其中最常用的包括:
SYNC(Synchronization Object):用于实现网络节点的同步触发
EMCY(Emergency Object):用于设备故障的紧急上报
这两个对象在运动控制系统中具有重要作用,特别是在多轴电机同步控制或设备异常报警场景下。
8.1,SYNC 同步对象
SYNC(Synchronization Object)用于在 CANopen 网络中提供 全局同步信号。
当网络中的节点配置为同步模式(Synchronous PDO) 时,节点接收到 SYNC 报文后才会执行对应的数据处理或动作。
SYNC 报文通常由主站(SYNC Producer) 周期性发送,从站(SYNC Consumer)接收该报文后执行相应操作。

表8.1.1 SYNC 报文格式
在 CANopen 系统中,SYNC 报文用于为网络中的节点提供统一的同步触发信号。主站周期性发送 SYNC 报文,从站根据 PDO 的 Transmission Type(传输类型) 设置,在指定的 SYNC 周期触发 PDO 的发送或执行。
在大多数应用中,SYNC 报文 不包含数据(DLC = 0),仅作为同步触发信号使用。从站每接收到一次 SYNC 报文,其内部同步计数器会递增,并根据 Transmission Type 判断是否触发 PDO。例如,当 Transmission Type 设置为 5 时,从站需要接收到 5 次 SYNC 报文 才会触发一次对应的 PDO 操作。
CANopen 规范也允许 SYNC 报文 携带 1 字节数据(DLC = 1),该字节表示 SYNC 计数值(1~240)。从站在接收到 SYNC 后,会将该计数值与 Transmission Type 进行比较,当两者相等时触发对应的 PDO 操作。
8.2,SYNC 工作原理
SYNC 的主要作用是 统一网络节点的执行时刻。在未使用 SYNC 的情况下,各节点接收到 PDO 后会立即执行:
主站发送 PDO
从站立即执行
由于总线传输存在延迟,不同节点执行时间可能略有差异。当启用 SYNC 同步机制后,流程如下:
主站发送 PDO(更新数据)
主站发送 SYNC
所有从站同时执行 PDO 数据
通过该机制,可以实现多轴电机的 同步运动控制。
8.3,PDO 同步与异步模式
PDO 的触发方式由 Transmission Type(传输类型) 决定,该参数位于 PDO 通信参数对象中。
本系统支持通过对象字典动态配置 PDO 的同步或异步模式。


本驱动默认工作在 异步 PDO 模式,即:Transmission Type = 0xFF,在该模式下,PDO接收数据后电机会立即执行。SYNC不参与控制。
若需要启用 SYNC 同步控制,可通过 SDO 修改 PDO 通信参数:
0x1400:02 RPDO1 Transmission Type
0x1401:02 RPDO2 Transmission Type
0x1800:02 TPDO1 Transmission Type
0x1801:02 TPDO2 Transmission Type
例如:Transmission Type = 2,表示每收到 2 次 SYNC 执行一次 PDO。
8.4,EMCY 紧急对象
EMCY(Emergency Object)用于设备在发生异常时向网络发送 紧急故障报告。
当设备检测到错误(如堵转、欠压、过压、通信异常等)时,会主动发送 EMCY 报文通知主站。
EMCY 报文的 COB-ID 计算方式为:
EMCY COB-ID = 0x080 + Node-ID
EMCY 报文结构:EMCY 报文长度固定为 8 字节。

当电机发生堵转错误时,EMCY 报文示例解析:

数据段解析:
a) 第 1~2字节(0x01 FF):即0xFF01 表示堵转类错误;
b) 第 3 字节(0x81):二进制对应1000 0001,表示通用错误和厂商自定义错误;
第 4~8 字节(0x04 00 00 00 00):代表0x04;表示电机此时为堵转状态;
8.5,同步模式使用示例
假设有 两个电机驱动器(Node-ID分别是1和2),需要同时开始运动。
③ 基础网络激活:发送 NMT 启动指令(ID=0x000,数据 = 01 00),驱动器心跳包回复值从默认 0x7F 变为 0x05(Operational 状态);
④ 电机硬件使能:执行 CiA402 标准三步使能流程(根据第5小节操作),完成两个电机电机上电与运行使能;
⑤ 配置 PDO 为同步模式(电机1和电机2均设置同步模式)


⑥ 主站发送控制数据(将电机1和电机2,设置速度模式,600RPM)


⑦ 主站发送一次SYNC

此时两个电机会几乎同时按600RPM的速度旋转起来。
总结:同步模式的作用,就是先接收控制数据,再由 SYNC 信号统一触发执行,实现多个设备同时动作。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3175136/ ,如需转载,请注明出处,否则将追究法律责任。