文章目录
- 前言:对象字典在EtherCAT协议栈中的定位
- 一、对象字典整体架构与寻址模型
-
- [1.1 分层架构图](#1.1 分层架构图)
- [1.2 寻址空间详细划分](#1.2 寻址空间详细划分)
-
- [EtherCAT 对象字典索引分配表](#EtherCAT 对象字典索引分配表)
- 二、通信区域深度解析 (0x1000 - 0x1FFF)
-
- [2.1 核心通信对象详解](#2.1 核心通信对象详解)
- [2.2 PDO映射与分配机制](#2.2 PDO映射与分配机制)
- 三、模块化设备配置文件(MDP)区域 (0x6000 - 0xAFFF)
-
- [3.1 MDP核心概念](#3.1 MDP核心概念)
- [3.3 各功能区域详细定义](#3.3 各功能区域详细定义)
- [四、设备区域 (0xF000 - 0xFFFF) ------ 模块元数据](#四、设备区域 (0xF000 - 0xFFFF) —— 模块元数据)
-
- [4.1 关键对象详解](#4.1 关键对象详解)
- 五、PDO数据流与SyncManager映射
-
- [5.1 完整数据流向图](#5.1 完整数据流向图)
- [5.2 SyncManager物理寄存器映射](#5.2 SyncManager物理寄存器映射)
- [5.3 PDO配置流程详解](#5.3 PDO配置流程详解)
- 六、数据类型定义与编码
-
- [6.1 基础数据类型表](#6.1 基础数据类型表)
- [6.2 复合数据类型构造](#6.2 复合数据类型构造)
- 七、EtherCAT状态机(ESM)与OD访问权限
-
- [7.1 ESM状态与OD访问关系](#7.1 ESM状态与OD访问关系)
- [7.2 状态转换时的OD行为](#7.2 状态转换时的OD行为)
- 参考文档:
前言:对象字典在EtherCAT协议栈中的定位
EtherCAT协议采用OSI分层模型 的精简实现,对象字典(Object Dictionary, OD)位于应用层(Application Layer),直接构建在**数据链路层(DLL)**之上。理解OD必须先理解其与底层硬件的关系:
- ESC (EtherCAT Slave Controller):处理数据链路层,管理SyncManager (SM)、FMMU、DC时钟
- OD (Object Dictionary):存在于从站微控制器(μC)中,通过邮箱通信(MB)与主站交互
- CoE (CANopen over EtherCAT):基于OD的通信协议,支持SDO(服务数据对象)和PDO(过程数据对象)
对象字典不仅是数据存储表 ,更是设备能力的元数据描述。主站在启动阶段通过SDO读取OD(特别是0x1000-0x1FFF区域)来识别设备能力,在运行阶段通过PDO(映射到0x6000-0x7FFF)进行实时数据交换。
一、对象字典整体架构与寻址模型
EtherCAT 对象字典采用**16位索引(Index) + 8位子索引(Sub-index)**的寻址方案,理论最大寻址空间为 65536 × 256 = 16777216 个条目。
1.1 分层架构图
EtherCAT Object Dictionary
0x0000 - 0xFFFF
通信层
Communication Area
0x1000 - 0x1FFF
制造商特定层
Manufacturer Specific
0x2000 - 0x5FFF
模块化设备层
Modular Device Profile
0x6000 - 0xAFFF
设备特定层
Device Area
0xF000 - 0xFFFF
设备身份
0x1000-0x1018
PDO映射定义
0x1600-0x1BFF
PDO分配
0x1C12-0x1C13
诊断历史
0x10F3
输入区 Tx
0x6000-0x6FFF
输出区 Rx
0x7000-0x7FFF
配置区 R/W
0x8000-0x8FFF
信息区 RO
0x9000-0x9FFF
诊断区 RO
0xA000-0xAFFF
模块索引增量
0xF000
模块数量
0xF010
模块配置文件
0xF030
1.2 寻址空间详细划分
EtherCAT 对象字典索引分配表
| 索引范围 (十进制) | 十六进制范围 | 功能类别 | 访问特性 | 协议规范 |
|---|---|---|---|---|
| 0x0000-0x0FFF | 0x0000-0x0FFF | 保留/数据类型定义 | 只读 | CoE 基础 |
| 0x1000-0x1FFF | 0x1000-0x1FFF | 通信对象区域 | 混合 | ETG.1000.6 |
| 0x2000-0x5FFF | 0x2000-0x5FFF | 制造商特定参数 | 厂商定义 | 厂商规范 |
| 0x6000-0x6FFF | 0x6000-0x6FFF | 输入区 (Input Area) | 只读,可映射 | ETG.5001 |
| 0x7000-0x7FFF | 0x7000-0x7FFF | 输出区 (Output Area) | 读写,可映射 | ETG.5001 |
| 0x8000-0x8FFF | 0x8000-0x8FFF | 配置区 (Configuration) | 读写,不可映射 | ETG.5001 |
| 0x9000-0x9FFF | 0x9000-0x9FFF | 信息区 (Information) | 只读,不可映射 | ETG.5001 |
| 0xA000-0xAFFF | 0xA000-0xAFFF | 诊断区 (Diagnosis) | 只读,不可映射 | ETG.5001 |
| 0xB000-0xEFFF | 0xB000-0xEFFF | 保留区域 | - | 未来扩展 |
| 0xF000-0xFFFF | 0xF000-0xFFFF | 设备区域 (Device Area) | 只读 | ETG.5001 |
二、通信区域深度解析 (0x1000 - 0x1FFF)
通信区域是设备的"数字身份证"和"通信能力表"。主站在Pre-Operational状态通过SDO读取此区域来完成设备枚举和配置。
2.1 核心通信对象详解
0x1000 - 设备类型 (Device Type)
数据结构:
- Sub-index 0: UINT32,设备类型编码
- 低16位:设备配置文件号(如0x0192=402表示伺服驱动)
- 高16位:附加功能标志
示例 : 0x00020192 表示基于CiA402的伺服驱动器,带MDP支持。
0x1018 - 身份对象 (Identity Object)
强制子索引结构:
| 子索引 | 名称 | 数据类型 | 说明 |
|---|---|---|---|
| 0x00 | 条目数 | USINT | 通常为4 |
| 0x01 | Vendor ID | UDINT | 厂商唯一标识(如0x00000002为Beckhoff) |
| 0x02 | Product Code | UDINT | 产品型号编码 |
| 0x03 | Revision Number | UDINT | 高16位主版本,低16位次版本 |
| 0x04 | Serial Number | UDINT | 设备序列号 |
0x10F3 - 诊断历史 (Diagnostic History)
用于记录设备运行中的故障和事件,支持环形缓冲区管理。
- 最大条目数由Sub-index 0x00定义
- 每条诊断记录包含:错误代码、时间戳、错误描述
2.2 PDO映射与分配机制
EtherCAT支持动态PDO映射,这是与标准CANopen的重要区别。映射分为两个层级:
第一层:PDO映射对象 (0x1600-0x1BFF)
定义PDO数据包中包含哪些OD条目。
0x1600-0x17FF (RxPDO映射 - 主站到从站):
- 每个索引代表一个RxPDO映射配置
- 子索引0:映射条目数(0-64)
- 子索引1-n:映射条目,格式为0xIISSLLMM
- II: 索引高字节
- SS: 子索引
- LL: 对象长度(位)
- MM: 索引低字节
示例 : 条目值 0x70001020 表示映射对象0x7010的子索引0,长度32位。
第二层:PDO分配对象 (0x1C12/0x1C13)
定义哪些PDO映射实际激活并分配到SyncManager。
0x1C12 - RxPDO分配 (分配到SM2):
c
Sub-index 0: 分配的PDO数量(n)
Sub-index 1: 第一个RxPDO映射索引(如0x1600)
Sub-index 2: 第二个RxPDO映射索引(如0x1601)
...
Sub-index n: 第n个RxPDO映射索引
0x1C13 - TxPDO分配 (分配到SM3):
结构同0x1C12,指向0x1A00-0x1BFF范围的TxPDO映射。
关键规则:
简单设备(Simple Device):PDO映射固定,可不支持0x1C12/0x1C13
复杂设备(Complex Device):必须支持通过SDO写入0x1C12/0x1C13进行动态PDO配置
三、模块化设备配置文件(MDP)区域 (0x6000 - 0xAFFF)
MDP是EtherCAT设备建模的核心创新,允许将物理上或逻辑上独立的模块(Module)组织到统一的OD结构中。
3.1 MDP核心概念
模块(Module): 具有独立功能的最小单元,如:
- 一个8通道数字输入模块
- 一个4通道模拟输出模块
- 一个温度控制回路
索引增量规则:
- IndexIncrement = 16:每个模块在各区占用16个连续索引
- PdoIncrement = 1:每个模块分配1个RxPDO和1个TxPDO
- 最大模块数:理论最大256个(0x6000-0x6FFF范围/16),实际受设备限制
3.2 MDP模块化结构图
模块化设备对象字典结构
Module n (索引基址: n*16)
0x6nn0-0x6nnF
输入区
0x7nn0-0x7nnF
输出区
0x8nn0-0x8nnF
配置区
0x9nn0-0x9nnF
信息区
0xAnn0-0xAnnF
诊断区
0x16nn
RxPDO映射
0x1Ann
TxPDO映射
Module 1 (索引基址: 16)
0x6010-0x601F
输入区
0x7010-0x701F
输出区
0x8010-0x801F
配置区
0x9010-0x901F
信息区
0xA010-0xA01F
诊断区
0x1601
RxPDO映射
0x1A01
TxPDO映射
Module 0 (索引基址: 0)
0x6000-0x600F
输入区
0x7000-0x700F
输出区
0x8000-0x800F
配置区
0x9000-0x900F
信息区
0xA000-0xA00F
诊断区
0x1600
RxPDO映射
0x1A00
TxPDO映射
3.3 各功能区域详细定义
输入区 (0x6000 - 0x6FFF) ------ 过程数据上传
- 访问属性:只读(Read-only),可映射到TxPDO
- 功能:存储从站采集的输入数据(传感器值、状态字等)
- 映射方向:从站 → 主站(TxPDO)
- 典型对象 :
- 0x6000: 数字输入通道1-8状态
- 0x6001: 模拟输入通道1原始值
- 0x6002: 模拟输入通道1滤波后值
输出区 (0x7000 - 0x7FFF) ------ 过程数据下载
- 访问属性:读写(Read-writeable),可映射到RxPDO
- 功能:存储主站下发的控制指令(设定值、控制字等)
- 映射方向:主站 → 从站(RxPDO)
- 典型对象 :
- 0x7000: 控制字(启动/停止/复位)
- 0x7001: 速度设定值
- 0x7002: 位置设定值高位
配置区 (0x8000 - 0x8FFF) ------ 参数设置
- 访问属性:读写,通常不可映射
- 功能:设备工作参数,仅在非运行状态下修改
- 访问方式:通过SDO在Pre-Operational状态配置
- 典型对象 :
- 0x8000: 传感器量程上限
- 0x8001: 传感器量程下限
- 0x8002: PID控制器增益系数
信息区 (0x9000 - 0x9FFF) ------ 静态信息
- 访问属性:只读,通常不可映射
- 功能:设备描述信息(型号、版本、校准日期)
- 典型对象 :
- 0x9000: 传感器型号字符串
- 0x9001: 固件版本号
- 0x9002: 上次校准时间戳
诊断区 (0xA000 - 0xAFFF) ------ 故障与告警
- 访问属性:只读,通常不可映射
- 功能:实时诊断数据(错误码、警告标志、运行时间)
- 典型对象 :
- 0xA000: 当前错误寄存器
- 0xA001: 警告状态字
- 0xA002: 设备运行小时数
四、设备区域 (0xF000 - 0xFFFF) ------ 模块元数据
设备区域存储描述MDP结构本身的元数据,告诉主站"这个设备有多少模块、每个模块是什么类型"。
4.1 关键对象详解
0xF000 - 模块索引增量 (Module Index Increment)
数据类型 : UINT16
默认值 : 16
功能: 定义每个模块占用的索引数量。虽然标准推荐16,但某些高密度模块可能使用不同值。
计算示例:
c
模块n的输入区起始索引 = 0x6000 + (n × 0xF000值)
模块n的输出区起始索引 = 0x7000 + (n × 0xF000值)
0xF010 - 模块数量 (Number of Modules)
数据类型 : UINT16
功能: 指示当前设备包含的模块总数(1-256)。
0xF030 - 模块配置文件列表 (Module Profile List)
结构 : 数组,每个条目对应一个模块的配置文件号
数据格式: 32位无符号整数(UINT32) \
- Bit 0-15: 设备配置文件号(Device Profile Number)
- 5001: 通用MDP设备
- 5003: 半导体设备
- 6010: 伺服驱动
Bit 16-31: 模块配置文件号(Module Profile Number)
- 2020: 质量流量控制器(Mass Flow Controller)
- 2030: 温度控制器
示例 : 0x20205003 表示基于ETG.5003的半导体设备,具体为质量流量控制器模块。
0xF050 - PDO增量 (PDO Increment)
数据类型 : UINT16
默认值 : 1
功能: 定义每个模块分配的PDO数量。标准MDP为每模块1个RxPDO和1个TxPDO。
五、PDO数据流与SyncManager映射
理解OD必须结合ESC硬件的SyncManager机制。OD中的PDO配置最终要落实到ESC的物理寄存器。
5.1 完整数据流向图
从站侧 EtherCAT SubDevice
主站侧 EtherCAT MainDevice
微控制器
μC / Application Layer
ESC芯片 ET1100/AX58100
SyncManager管理
- 写入速度设定值 2. 封装EtherCAT帧 3. 物理信号 4. on-the-fly处理 5. 写入物理内存 6. 数据拷贝 7. 读取0x7000-0x7FFF 8. 写入传感器数据 9. 数据拷贝 10. 读取请求 11. 插入数据到返回帧 12. 返回帧 13. 解析数据 14. 更新输入映像 配置阶段: SDO写
邮箱中断
更新PDO映射
主站应用层
PLC程序
EtherCAT主站驱动
SOEM/TwinCAT
以太网接口
Port 0
Port 0
IN
EtherCAT处理单元
EPU
SM2
0x0810-0x0817
RxPDO缓冲
3-buffer模式
SM3
0x0818-0x081F
TxPDO缓冲
3-buffer模式
SM0
邮箱输出
SM1
邮箱输入
FMMU0
逻辑-物理映射
FMMU1
逻辑-物理映射
Port 1
OUT
Port 2
Port 3
OD通信区
0x1000-0x1FFF
OD过程数据区
0x6000-0x7FFF
EtherCAT状态机
ESM
应用逻辑
控制算法
5.2 SyncManager物理寄存器映射
PDO分配对象(0x1C12/0x1C13)最终配置到ESC的以下寄存器:
| SyncManager | 物理起始地址 | 长度寄存器 | 控制寄存器 | 方向 | PDO分配对象 |
|---|---|---|---|---|---|
| SM2 | 0x0810-0x0813 | 0x0812-0x0813 | 0x0804-0x0807 | 输出 | 0x1C12 |
| SM3 | 0x0818-0x081B | 0x081A-0x081B | 0x080C-0x080F | 输入 | 0x1C13 |
寄存器位定义(以SM2控制寄存器0x0804为例):
- Bit 0-1: 操作模式(00=1-buffer, 01=3-buffer, 10=邮箱)
- Bit 2: 方向(0=输出/写, 1=输入/读)
- Bit 3: 中断使能
- Bit 4-5: 看门狗控制
- Bit 6: 重复请求禁止
5.3 PDO配置流程详解
步骤1:主站读取设备能力(Pre-Op状态)
- 主站读取0x1000确认设备类型
- 读取0x1600-0x17FF和0x1A00-0x1BFF获取可用PDO映射列表
- 读取0xF010获取模块数量(如为MDP设备)
步骤2:配置PDO映射
- 主站通过SDO写入0x1C12子索引0,设置为0(禁用RxPDO)
- 写入0x1600等映射对象,定义具体映射条目
- 写入0x1C12子索引1-n,激活所需PDO映射
- 写入0x1C12子索引0,设置为n(激活数量)
步骤3:验证与启动
- 主站读取0x1C12/0x1C13验证配置
- 主站发送OP命令(0x0120寄存器写入8),设备进入Operational状态
- 过程数据开始通过PDO交换,不再占用邮箱带宽
六、数据类型定义与编码
OD中的每个对象都有明确的数据类型定义,存储在0x0000-0x0FFF区域(数据类型区)。
6.1 基础数据类型表
| 索引 | 类型名称 | 大小 | 说明 | 应用示例 |
|---|---|---|---|---|
| 0x0001 | BOOL/BIT | 1 bit | 布尔值 | 数字输入状态 |
| 0x0002 | SINT | 8 bit | 有符号整数 | 温度偏移量 |
| 0x0003 | INT | 16 bit | 有符号整数 | 速度设定值 |
| 0x0004 | DINT | 32 bit | 有符号双整数 | 位置设定值 |
| 0x0005 | USINT | 8 bit | 无符号整数 | 设备地址 |
| 0x0006 | UINT | 16 bit | 无符号整数 | 状态字 |
| 0x0007 | UDINT | 32 bit | 无符号双整数 | 序列号 |
| 0x0008 | REAL | 32 bit | 单精度浮点 | 模拟量值 |
| 0x0009 | STRING(n) | n×8 bit | 字符串 | 设备名称 |
| 0x000A | ARRAY of BYTE | n×8 bit | 字节数组 | 原始数据块 |
| 0x000B | ARRAY of UINT | n×16 bit | 字数组 | 多通道模拟量 |
| 0x0011 | LREAL | 64 bit | 双精度浮点 | 高精度位置 |
| 0x0015 | LINT | 64 bit | 64位有符号整数 | 大计数器值 |
| 0x001B | ULINT | 64 bit | 64位无符号整数 | 运行时间 |
| 0x001E | BYTE | 8 bit | 字节 | 位掩码 |
| 0x001F | WORD | 16 bit | 字 | 状态寄存器 |
| 0x0020 | DWORD | 32 bit | 双字 | 错误码 |
| 0x0260 | ARRAY of INT | n×16 bit | 整型数组 | 多轴设定值 |
| 0x0261 | ARRAY of SINT | n×8 bit | 短整型数组 | 多通道配置 |
| 0x0262 | ARRAY of DINT | n×32 bit | 双整型数组 | 多轴位置 |
6.2 复合数据类型构造
复杂设备可定义自定义数据结构:
示例:伺服驱动器控制字结构(0x6040)
- Bit 0: 启动(Switch on)
- Bit 1: 使能电压(Enable voltage)
- Bit 2: 快速停止(Quick stop)
- Bit 3: 使能运行(Enable operation)
- Bit 4-6: 操作模式特定
- Bit 7: 故障复位(Fault reset)
- Bit 8: 暂停(Halt)
七、EtherCAT状态机(ESM)与OD访问权限
对象字典的访问权限随EtherCAT状态机(EtherCAT State Machine, ESM) 的状态变化而变化。
7.1 ESM状态与OD访问关系
上电
0x0120=2
主站请求
0x0120=4
配置完成
0x0120=8
主站允许运行
0x0120=4
停止运行
0x0120=2
重新配置
0x0120=1
复位
Init
PreOp
SafeOp
Op
无通信
仅可访问0x1000-0x1FFF
进行硬件初始化
邮箱通信可用(SDO)
可配置0x1C12/0x1C13
可读写0x8000-0x8FFF配置区
PDO映射配置阶段
过程数据通信可用
输入数据有效(0x6000-0x6FFF)
输出数据为安全状态(0x7000-0x7FFF不生效)
验证阶段
完全运行
输入输出数据均有效
实时控制阶段
禁止修改0x1C12/0x1C13
7.2 状态转换时的OD行为
Init → Pre-Operational:
- 从站初始化ESC寄存器
- 主站通过SDO读取0x1000-0x1FFF识别设备
- 可读写配置区(0x8000-0x8FFF)设置工作参数
Pre-Operational → Safe-Operational:
- 主站配置0x1C12/0x1C13分配PDO
- 主站配置FMMU映射逻辑地址
- 从站应用层开始更新输入数据(0x6000-0x6FFF)
- 输出数据(0x7000-0x7FFF)仍由从站本地控制
Safe-Operational → Operational:
- 输出数据(0x7000-0x7FFF)开始接收主站PDO数据
- 设备进入实时控制循环
- 限制: 此时禁止通过SDO修改PDO映射(0x1C12/0x1C13只读)
错误处理:
- 任何状态检测到错误,从站写入0x0134(AL Status Code)错误码
- 设置0x0130(AL Status)错误标志
- 主站可通过SDO读取0x10F3诊断历史
参考文档:
- ETG.1000.4 - EtherCAT技术规范:数据链路层服务定义
- ETG.1000.6 - EtherCAT技术规范:应用层服务定义
- ETG.5001.1 - 模块化设备配置文件(MDP)通用设备模型
- ETG.5003 - 半导体设备配置文件
- ETG.6010 - CiA402驱动器实施指南