前言:对象字典在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):

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,但某些高密度模块可能使用不同值。

计算示例

模块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管理

1. 写入速度设定值
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状态)

  1. 主站读取0x1000确认设备类型
  2. 读取0x1600-0x17FF和0x1A00-0x1BFF获取可用PDO映射列表
  3. 读取0xF010获取模块数量(如为MDP设备)

步骤2:配置PDO映射

  1. 主站通过SDO写入0x1C12子索引0,设置为0(禁用RxPDO)
  2. 写入0x1600等映射对象,定义具体映射条目
  3. 写入0x1C12子索引1-n,激活所需PDO映射
  4. 写入0x1C12子索引0,设置为n(激活数量)

步骤3:验证与启动

  1. 主站读取0x1C12/0x1C13验证配置
  2. 主站发送OP命令(0x0120寄存器写入8),设备进入Operational状态
  3. 过程数据开始通过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驱动器实施指南
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐