对象字典与预定义连接集
CANopen 的“统一地址空间”:一切配置、诊断、过程数据映射都围绕 Object Dictionary
通信对象默认 CAN-ID 由 预定义连接集(Pre-defined Connection Set) 决定
1. 对象字典(Object Dictionary)
每个 CANopen 设备维护一张对象字典:
- Index:16-bit(常写为 4 位十六进制,如
0x6040) - SubIndex:8-bit(如
0x00) - 每个条目有:数据类型、访问属性(ro/wo/rw)、默认值、可选 PDO 映射标志等
1 | 访问形式: Index : SubIndex |
1.1 索引分区(必须背)
| 范围 | 用途 |
|---|---|
0000h |
未使用 / 保留语义 |
0001h–009Fh |
数据类型定义区(通信用数据类型) |
00A0h–0FFFh |
保留 |
1000h–1FFFh |
通信参数区(通信行为) |
2000h–5FFFh |
厂商自定义应用参数 |
6000h–9FFFh |
标准化设备行规参数(如 CiA 401/402) |
A000h–FFFFh |
保留 / 特殊用途 |
来源要点见 CiA 对内部设备架构的说明:
CiA — CANopen
1.2 通信区常见对象(1000h 起)
| Index | 名称 | 作用 |
|---|---|---|
1000h |
Device type | 设备类型 |
1001h |
Error register | 错误寄存器 |
1003h |
Pre-defined error field | 错误历史 |
1005h |
COB-ID SYNC | SYNC 的 COB-ID |
1006h |
Communication cycle period | 通信周期 |
1008h |
Manufacturer device name | 设备名 |
1009h |
Manufacturer hardware version | 硬件版本 |
100Ah |
Manufacturer software version | 软件版本 |
1010h |
Store parameters | 参数存盘 |
1011h |
Restore default parameters | 恢复出厂 |
1014h |
COB-ID EMCY | 紧急对象 COB-ID |
1016h |
Consumer heartbeat time | 消费者心跳监视 |
1017h |
Producer heartbeat time | 生产者心跳周期 |
1018h |
Identity object | Vendor-ID / Product code / Revision / Serial |
1200h+ |
SDO server/client 参数 | SDO 通道 |
1400h+ |
RPDO 通信参数 | RPDO COB-ID、传输类型 |
1600h+ |
RPDO 映射参数 | RPDO 映射表 |
1800h+ |
TPDO 通信参数 | TPDO COB-ID、传输类型 |
1A00h+ |
TPDO 映射参数 | TPDO 映射表 |
2. EDS 与 DCF(CiA 306)
| 文件 | 含义 |
|---|---|
| EDS(Electronic Data Sheet) | 描述设备“能提供哪些对象、默认值、类型” |
| DCF(Device Configuration File) | 在 EDS 基础上写入本网络实例的具体参数值(含 Node-ID 等) |
用途:
- 配置工具导入 EDS,生成网络工程
- 主站/协议栈用 DCF/EDS 生成对象字典代码或运行时配置
- 测试与诊断工具读取设备描述
官方系列说明:
CiA 306 — Electronic Device Description
现代也常见 XML/XDD 等描述格式(工具链相关);经典工程仍大量使用 EDS/DCF。
3. 预定义连接集(Pre-defined Connection Set)
为降低“从零配置”成本,CiA 301 定义了基于 Node-ID 的默认 COB-ID:
公式形态(概念):
COB-ID = 功能码基址 + Node-ID
3.1 常用默认 COB-ID(11-bit)
| 功能 | 默认 COB-ID(示意) | 说明 |
|---|---|---|
| NMT | 0x000 |
网络管理(广播命令) |
| SYNC | 0x080 |
同步(可改) |
| EMCY | 0x080 + Node-ID |
紧急 |
| TPDO1 | 0x180 + Node-ID |
发送 PDO1 |
| RPDO1 | 0x200 + Node-ID |
接收 PDO1 |
| TPDO2 | 0x280 + Node-ID |
|
| RPDO2 | 0x300 + Node-ID |
|
| TPDO3 | 0x380 + Node-ID |
|
| RPDO3 | 0x400 + Node-ID |
|
| TPDO4 | 0x480 + Node-ID |
|
| RPDO4 | 0x500 + Node-ID |
|
| SDO TX(Server→Client) | 0x580 + Node-ID |
|
| SDO RX(Client→Server) | 0x600 + Node-ID |
|
| Heartbeat / Node Guard | 0x700 + Node-ID |
|
| LSS 请求/响应 | 0x7E5 / 0x7E4 |
CiA 305 |
具体数值以设备 EDS / CiA 301 为准;上表用于快速心算与抓包对照。
3.2 为什么要改默认 COB-ID?
- 多主站/复杂拓扑避免冲突
- 多轴优化 PDO 布局
- 与网关、桥接设备对接
- 安全相关对象(如 SRDO)另有规则
改法:通过 SDO 写对应通信参数对象(如 1800h 的 COB-ID 子索引)。
4. 位速率与线缆(工程要点)
CiA 301 允许约 10 kbit/s ~ 1 Mbit/s。经验关系:
| 波特率 | 典型总线长度上限(经验) |
|---|---|
| 1 Mbit/s | ~25 m |
| 500 kbit/s | ~100 m |
| 250 kbit/s | ~250 m |
| 125 kbit/s | ~500 m |
| 50 kbit/s | ~1000 m |
实践注意:
- 两端 120Ω 终端电阻
- 双绞屏蔽、单点接地策略
- 所有节点波特率必须一致(可用 LSS 统一切换)
- 高波特 + 长线 = 最先出问题的组合
5. Identity Object(1018h)为何重要
1018h 通常包含:
- Vendor-ID
- Product code
- Revision number
- Serial number
用途:
- LSS 选择性切换(按身份定位未配置节点)
- 资产盘点与固件匹配
- 主站启动时校验“接的是不是预期设备”
6. 与应用行规的衔接
通信区(1xxxh)回答:“怎么通信”
行规区(6xxxh)回答:“通信的是什么应用量”
例如 CiA 402:
| Index | 含义 |
|---|---|
6040h |
Controlword |
6041h |
Statusword |
6060h |
Modes of operation |
607Ah |
Target position |
6064h |
Position actual value |
详情见 04-CiA402伺服控制.md。
下一篇:02-NMT与错误控制.md
正在加载留言…