[EtherCAT]对象字典从0x1000到0xFFFF功能分区详解——2026.02.09

文章目录

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

  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驱动器实施指南
相关推荐
不做无法实现的梦~9 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
LeoZY_20 小时前
CH347/339W开源项目:集SPI、I2C、JTAG、SWD、UART、GPIO多功能为一体(3)
stm32·单片机·嵌入式硬件·mcu·开源
Hello_Embed21 小时前
libmodbus STM32 板载串口实验(双串口主从通信)
笔记·stm32·单片机·学习·modbus
良许Linux21 小时前
嵌入式处理器架构
stm32·单片机·程序员·嵌入式·编程
wotaifuzao21 小时前
为什么 if/else 是嵌入式系统的慢性毒药?
stm32·重构·freertos·状态机·架构设计·事件驱动·表驱动
LeoZY_21 小时前
开源项目精选: lazygit —— 告别繁琐命令,终端里玩转可视化Git
git·stm32·单片机·mcu·开源·远程工作·gitcode
youcans_1 天前
【STM32-MBD】(17)基于 ADC 同步采样的 PWM 闭环控制链路
stm32·单片机·嵌入式硬件·matlab·电机控制·foc
what丶k1 天前
深入浅出 STM32 中断系统:原理、配置与实战优化
stm32·单片机·嵌入式硬件
Zeku1 天前
RTSP音视频传输软件流程文档
stm32·音视频·freertos·linux驱动开发·linux应用开发
Bin Watson1 天前
STM32 HRTIM 学习心得(2):控制输出 PWM/SPWM/带死区的互补SPWM
stm32·单片机·嵌入式硬件