SDO 与 PDO 通信
SDO = 配置/诊断通道(准可靠、请求-响应、非实时)
PDO = 过程数据通道(实时、可映射、可同步)
这是 CANopen 最核心的一对概念,也是 CoE(EtherCAT)里同名机制的来源。
字节级报文 / 抓包解码请直接读:
1. 为什么要分 SDO 和 PDO
| SDO | PDO | |
|---|---|---|
| 目的 | 读/写任意 OD 项 | 周期交换少量关键过程量 |
| 时延 | 较高(确认握手) | 低 |
| 带宽效率 | 差(协议开销大) | 好(净荷直接是映射数据) |
| 典型时机 | 启动配置、调试、参数整定 | Operational 运行时 |
| 类比 | HTTP GET/PUT | 共享内存/周期帧字段 |
原则:
- 能放 PDO 的周期量,不要每周期用 SDO 扫
- 非周期配置用 SDO
2. SDO(Service Data Object)
2.1 角色
- SDO Server:拥有对象字典的设备(通常是从站)
- SDO Client:发起读写的一方(通常是主站/配置工具)
默认通道(预定义连接集):
- Client → Server:
0x600 + Node-ID - Server → Client:
0x580 + Node-ID
2.2 传输类型(概念)
| 类型 | 适用 |
|---|---|
| Expedited | 很小的数据(常见 ≤4 字节)一次完成 |
| Segmented | 较长数据分段传输 |
| Block(若支持) | 大块数据更高吞吐(固件/大批参数) |
2.3 工程用法
1 | 主站 SDO Upload = 读从站 OD |
典型配置序列:
- 读
1018h确认设备身份 - 写
1400h/1600h/1800h/1A00h配置 PDO - 写应用参数(如
6060h模式、6081h速度) - (可选)
1010h存盘 - NMT Start
2.4 超时与重试
SDO 必须设超时。现场常见问题:
- 从站忙/未上线 → Client 超时
- 写只读对象 → Abort
- 长度/类型不匹配 → Abort
Abort 码需对照厂商手册与 CiA 301。
3. PDO(Process Data Object)
3.1 RPDO / TPDO
| 名称 | 方向(相对节点) | 含义 |
|---|---|---|
| RPDO | 节点接收 | 主站→从站命令(控制字、目标位置…) |
| TPDO | 节点发送 | 从站→主站反馈(状态字、实际位置…) |
一个节点通常支持多路 PDO(常 4 路默认,可扩展)。
3.2 通信参数 vs 映射参数
以 TPDO1 为例:
| 对象 | 作用 |
|---|---|
1800h |
通信参数:COB-ID、传输类型、禁止时间、事件定时器等 |
1A00h |
映射参数:本 PDO 净荷由哪些 OD 项按什么长度拼接 |
RPDO1 对应:
- 通信:
1400h - 映射:
1600h
3.3 映射本质
PDO 净荷 = 若干 OD 条目的位串拼接(按映射表顺序)。
1 | 示例 TPDO1 映射: |
约束:
- 经典 CAN 单帧数据场最多 8 字节 → 单 PDO 映射总长通常 ≤ 8 字节
- CANopen FD 可更大(见 CiA 402-6 等)
3.4 传输类型(Transmission Type)
常见分类:
| 类型 | 行为 |
|---|---|
| 同步(1~240) | 每收到 n 次 SYNC 触发一次 |
| 异步/事件 | 数据变化或事件定时器触发 |
| 厂商特定 | 依实现 |
运动控制常用:同步 PDO + 周期 SYNC,让多轴在同一节拍采样/更新。
4. 同步 PDO 时序(概念)
1 | 主站: 发 SYNC |
细节因驱动实现而异;402 周期模式(CSP/CSV)对此更敏感。
CAN 抖动较大时,同步质量不如 EtherCAT DC。
5. 配置 PDO 的安全步骤(实操)
很多设备要求:
- 先让节点处于 Pre-Operational
- 禁用 PDO(清 COB-ID 有效位)再改映射
- 写映射条目数与各映射项
- 重新使能 COB-ID
- 再 NMT Start
直接在 Operational 热改映射,容易导致协议栈拒绝或行为未定义。
6. SDO 与 PDO 协作的完整图景
1 | [配置阶段 Pre-Op] |
7. 抓包时如何辨认
假设 Node-ID = 3:
| CAN-ID | 可能含义 |
|---|---|
0x000 |
NMT |
0x080 |
SYNC |
0x083 |
EMCY(3) |
0x183 |
TPDO1(3) |
0x203 |
RPDO1(3) |
0x583 |
SDO TX(3) |
0x603 |
SDO RX(3) |
0x703 |
Heartbeat(3) |
用 candump / Wireshark(SocketCAN)对照 EDS 映射表,即可解码净荷。
下一篇:04-CiA402伺服控制.md
正在加载留言…