之前的分析已搭建 “CoE 协议→OD/SDO/PDO→IgH API” 的核心框架,但缺少两个关键维度:硬件级通讯模式如何支撑 SDO/PDO 的特性数据封包与寻址如何实现主从站精准交互

 本文从 “通讯模式(Buffered/Mailbox)、封包结构、寻址模式” 三个底层视角,解释 “SDO 为什么慢而可靠、PDO 为什么快而实时”,以及 “主站如何精准定位从站数据”。

本文形成 “协议规则→硬件机制→传输载体→工程实现” 的完整闭环,彻底讲透 EtherCAT 数据交互的底层原理。


一、通讯模式:SDO/PDO 的 “硬件底层实现”

SDO/PDO 的核心差异(实时性 / 可靠性),本质源于从站 ESC 芯片(EtherCAT Slave Controller)的两种硬件通讯模式—— 这是之前分析未深入的 “物理基础”:

1. Buffered Mode(缓存模式):PDO 的 “实时性硬件保障”

(1)核心机制(新增文档重点拆解)
  • 三缓存设计:从站 ESC 芯片内置 3 个独立缓存区(Buffer0/1/2),实现 “主站写数据” 与 “从站读数据” 完全并行,无冲突:

    • 主站按周期将 RxPDO 数据写入缓存区 0;

    • 写入完成后,缓存区 0 与 1 交换(确保主站写新数据时,从站不读同一缓存);

    • 从站按周期从缓存区 2 读取数据,读取完成后,缓存区 1 与 2 交换(确保从站下次读的是最新数据);

  • 无锁同步:无需 CPU 干预,缓存交换由 ESC 硬件自动完成,延迟可低至微秒级。

(2)对应 PDO 的核心特性
  • 实时性:三缓存并行读写,无等待开销,适配 1ms/100μs 级周期传输;

  • 无应答:主站无需等待从站确认,写完即走,进一步降低延迟(对应之前 “PDO 无握手开销”);

  • 数据覆盖允许:若主站写数据速度快于从站读,旧数据会被覆盖(工业控制中允许,优先保证实时性)。

(3)与 IgH API 的关联
  • 缓存模式由从站硬件自动启用,主站无需额外配置,仅需通过ecrt_domain_process(domain)触发数据同步;

  • Domain 内存与从站缓存区直接映射(DMA 搬运),EC_WRITE_U16()本质是写入主站侧缓存,ESC 硬件自动同步到从站缓存区 0。

2. Mailbox Mode(邮箱模式):SDO 的 “可靠性硬件保障”

(1)核心机制
  • 单缓存交替读写:从站 ESC 仅用 1 个缓存区,严格遵循 “主站写→从站读→主站再写” 的顺序,不允许并行操作:

    • 主站写 SDO 数据到缓存区→缓存区标记为 “满”,主站无法再写;

    • 从站读取缓存区数据→读取完成后,缓存区标记为 “空”,主站才能再次写入;

  • 应答机制绑定:从站读完数据后,必须通过另一帧报文向主站返回 “读取确认”,主站收到确认后才会发起下一次写入。

(2)对应 SDO 的核心特性
  • 可靠性:交替读写 + 应答机制,确保数据不丢失、不重复(适合配置参数,不允许出错);

  • 非实时:等待确认的过程导致延迟(ms 级),不适合高频传输;

  • 支持长数据:通过分段写入(将长数据拆分为多个 “邮箱帧”),支持无限长度数据传输(如从站固件升级包、长字符串参数)。

(3)与 IgH API 的关联
  • 邮箱模式由 CoE 协议自动绑定,主站通过ecrt_sdo_request_write(req)发起写入后,必须等待ecrt_sdo_request_state(req) == EC_SDO_REQUEST_FINISHED(确认从站已读取),才能进行下一步;

  • 分段传输由 IgH API 自动处理,开发者无需关心缓存区满 / 空状态,仅需调用接口即可。

3. 通讯模式对比表

维度

Buffered Mode(PDO)

Mailbox Mode(SDO)

硬件缓存

3 个独立缓存区

1 个共享缓存区

读写逻辑

并行无冲突(主写从读同时进行)

交替串行(主写完→从读完→主再写)

应答机制

无应答,写完即走

必须应答,确认后再传输

延迟级别

微秒级(实时)

毫秒级(非实时)

数据类型

短数据(≤64 字节,PDO 条目)

短 / 长数据(配置参数、分段数据)

核心保障

实时性、高效率

可靠性、无丢失

IgH API 关联

ecrt_domain_process()

ecrt_sdo_request_write()+ 状态等待


二、封包结构:SDO/PDO 的 “数据传输载体”

EtherCAT 数据最终通过 “以太网帧” 传输,SDO/PDO 的帧格式差异,直接决定了它们的传输效率和适用场景 —— 新增文档详细拆解了这一 “传输载体”:

1. 通用 EtherCAT 帧结构

所有 EtherCAT 数据(SDO/PDO)都基于以下帧格式,核心标识是EtherType=0x88A4(EtherCAT 专属类型):

| 以太网头(14字节) | EtherCAT头(2字节) | EtherCAT数据段(44~1498字节) | FCS校验(4字节) |
|--------------------|--------------------|--------------------------------|------------------|
| 目标MAC+源MAC+类型 | 长度+保留+协议类型  | Datagram(数据报)列表         | 帧校验和         |
  • 核心是EtherCAT数据段,由 1~n 个Datagram(数据报)组成,每个 Datagram 对应一个 “主站→从站” 的操作请求(读 / 写数据)。

2. PDO 的封包结构(Buffered Mode 专属)

(1)核心特点(新增文档重点)
  • Datagram 类型:使用LRW(Logical Read/Write)命令(EtherCAT 核心实时命令);

  • 寻址方式:逻辑寻址(Logical Addressing)—— 主站将所有 PDO 数据映射到一个 4GB 逻辑地址空间,每个从站的 PDO 数据对应一个逻辑地址段;

  • 帧结构极简:每个 Datagram 仅包含 “逻辑地址 + 数据长度 + PDO 数据”,无额外应答字段,单个帧可包含多个从站的 PDO 数据(单帧多站)。

(2)示例帧结构(传输两个从站的 RxPDO)
EtherCAT数据段:
| Datagram1(从站1 RxPDO) | Datagram2(从站2 RxPDO) |
|--------------------------|--------------------------|
| Cmd=LRW(8bit)          | Cmd=LRW(8bit)          |
| 逻辑地址=0x10000000(32bit) | 逻辑地址=0x10000040(32bit) |
| 长度=8字节(11bit)      | 长度=8字节(11bit)      |
| 数据=控制字+目标速度(8字节) | 数据=控制字+目标速度(8字节) |
| WKC=1(16bit)           | WKC=1(16bit)           |
  • WKC(Working Counter):每个 Datagram 处理完成后,从站将 WKC 自增 1,主站通过 WKC 判断数据是否被从站成功接收(对应之前 “Domain 工作计数器”)。

3. SDO 的封包结构(Mailbox Mode 专属)

(1)核心特点(新增文档重点)
  • Datagram 类型:使用APWR(Auto Increment Write)/APRD(Auto Increment Read)命令;

  • 寻址方式:节点寻址(Node Addressing)—— 主站通过 “从站地址” 精准定位目标从站,每个 Datagram 仅对应一个从站;

  • 帧结构含控制字段:Mailbox Datagram Header 包含 “优先级、协议类型、序列号” 等字段,确保数据可靠传输。

(2)示例帧结构(写 SDO 数据到从站)
EtherCAT数据段:
| Mailbox Datagram Header(10字节) | SDO数据(4字节) | WKC(2字节) |
|----------------------------------|------------------|--------------|
| 长度=4(16bit)                  | 0x60600003(操作模式=3) | WKC=1        |
| 从站地址=0x01(16bit)           |                  |              |
| 优先级=3(2bit)                 |                  |              |
| 协议类型=CoE(0x3,4bit)        |                  |              |
| 序列号=0x01(3bit)              |                  |              |
  • 协议类型字段:指定为0x3(CoE),从站 ESC 收到后会将数据转发给 CoE 协议栈解析(对应之前 “SDO 基于 CoE 协议”);

  • 序列号字段:用于检测重复帧(每个新 SDO 帧序列号 + 1),避免数据重复写入。

4. 封包结构核心结论

  • PDO 帧:极简设计 + 逻辑寻址 + 单帧多站,追求 “传输效率”,适配实时性需求;

  • SDO 帧:控制字段完整 + 节点寻址 + 单帧单站,追求 “传输可靠性”,适配配置需求;

  • 两者共享 EtherCAT 帧的底层格式,仅通过 “Datagram 命令类型 + 寻址方式” 区分,确保总线兼容性。


三、寻址模式:主从站的 “数据定位方式”

主站如何精准找到从站的目标数据?答案是 EtherCAT 的四种寻址模式—— 不同寻址模式对应不同应用场景,其中逻辑寻址和节点寻址分别绑定 PDO 和 SDO:

1. 四种寻址模式

寻址模式

核心逻辑

适用场景

对应数据类型

位置寻址(Position)

按从站在总线的物理顺序寻址(Position=0 对应第一个从站)

从站扫描(启动时定位所有从站)

无(仅扫描)

节点寻址(Node)

按从站的固定站号寻址(与物理顺序无关)

SDO 配置(精准定位单个从站)

SDO

广播寻址(Broadcast)

所有从站同时接收并执行同一命令

全局初始化(如所有从站复位)

无(仅命令)

逻辑寻址(Logical)

主站分配 4GB 逻辑地址空间,从站通过 FMMU 映射到物理地址

PDO 传输(批量定位多个从站数据)

PDO

2. 与 SDO/PDO 的绑定逻辑

(1)逻辑寻址→PDO:批量传输的效率保障
  • 核心机制:主站启动时,通过 FMMU(现场总线存储器管理单元)为每个从站的 PDO 数据分配逻辑地址段(如从站 1 RxPDO=0x10000000\0x10000007,从站 2 RxPDO=0x10000040\0x10000047);

  • 从站侧:FMMU 将逻辑地址映射到自身物理内存(如 0x10000000→0x40000000 控制字寄存器);

  • 传输效率:主站只需发送一个包含多个逻辑地址的 PDO 帧,所有从站通过 FMMU 截取自身对应的逻辑地址数据,实现 “单帧多站” 传输(EtherCAT 实时性的核心)。

(2)节点寻址→SDO:精准配置的可靠性保障
  • 核心机制:每个从站在配置时分配唯一站号(如 0x01、0x02),主站发送 SDO 帧时,在 Datagram Header 中指定 “从站地址 = 0x01”,仅对应站号的从站会接收并处理该帧;

  • 适用场景:SDO 配置是 “一对一” 操作(如修改从站 1 的 PDO 映射规则),节点寻址能精准定位目标从站,避免其他从站误操作。

3. 与 IgH API 的关联

  • 逻辑寻址:由 IgH 主站自动配置 FMMU,开发者通过ecrt_domain_reg_pdo_entry_list(domain, regs)将 PDO 条目注册到逻辑地址空间,无需手动分配;

  • 节点寻址:开发者在创建 SDO 请求时,通过ecrt_master_slave_config(master, 从站位置, 厂商ID, 产品码)绑定从站站号,API 自动将站号写入 SDO 帧的 “从站地址” 字段。


四、完整协同逻辑:从主站启动到实时控制

核心要点(整合三篇文档)

  1. 寻址模式切换:启动时用位置寻址扫描从站,配置时用节点寻址(SDO),运行时用逻辑寻址(PDO);

  2. 通讯模式切换:Pre-Operational 态自动启用 Mailbox Mode(SDO),Operational 态自动启用 Buffered Mode(PDO);

  3. 硬件 - 协议 - API 协同:FMMU(硬件)实现逻辑寻址,CoE 协议(软件)定义 SDO/PDO 帧格式,IgH API(工程实现)封装所有底层细节,开发者无需关心寻址、缓存、封包,仅需调用接口即可。


五、实操避坑指南

1. PDO 相关误区

  • 误区 1:认为 PDO 无缓存,直接读写物理内存→纠正:从站用三缓存机制,主站写的是缓存区 0,从站读的是缓存区 2,API 自动处理缓存交换,无需手动干预;

  • 误区 2:逻辑地址与物理地址混淆→纠正:逻辑地址是主站分配的虚拟地址(如 0x10000000),物理地址是从站寄存器地址(如 0x40000000),FMMU 负责映射,开发者无需关心;

  • 误区 3:PDO 帧越长越好→纠正:单帧总长度≤1514 字节,PDO 条目过多会导致帧长度超限,需拆分到多个 Domain 或 PDO 映射对象。

2. SDO 相关误区

  • 误区 1:SDO 可以并行写入多个从站→纠正:节点寻址是 “一对一”,一次只能写一个从站,并行写入需创建多个 SDO 请求句柄;

  • 误区 2:忽略 Mailbox Mode 的序列号→纠正:API 自动处理序列号,但若网络丢包,需重新发起 SDO 请求,避免重复写入;

  • 误区 3:长数据传输无需分段→纠正:单个 SDO 帧数据长度≤1486 字节,长数据(如 > 2KB)需依赖 IgH API 的分段传输,无需手动拆分。

3. 寻址模式相关误区

  • 误区 1:逻辑地址可以手动修改→纠正:逻辑地址由 IgH 主站自动分配,与 PDO 条目注册顺序相关,开发者仅需通过 offset 访问,无需修改;

  • 误区 2:节点地址与物理顺序绑定→纠正:节点地址是固定配置(如从站拨码开关设置),与总线物理顺序无关,支持热插拔后重新定位。


六、终极总结:EtherCAT 的 “技术栈闭环”

EtherCAT 的高效性和兼容性,源于 “硬件机制→协议规则→工程实现” 的完美协同,核心逻辑可概括为:

硬件层(ESC芯片):三缓存(PDO)/单缓存(SDO)→ 支撑实时性/可靠性;
协议层(CoE/EtherCAT):逻辑寻址(PDO)/节点寻址(SDO)+ 标准化帧格式→ 支撑跨品牌兼容;
API层(IgH):Domain(PDO)/SDO请求句柄→ 封装底层细节,降低开发门槛;
应用层(用户代码):调用API读写数据→ 实现控制逻辑。
  • PDO 的核心:三缓存 + 逻辑寻址 + 单帧多站,极致优化传输效率,满足实时控制需求;

  • SDO 的核心:单缓存 + 节点寻址 + 应答机制,极致保障传输可靠性,满足配置需求;

  • OD 的核心:标准化索引 + 子索引,作为 SDO/PDO 的 “数据字典”,实现跨品牌兼容。

掌握这一闭环,无论面对何种从站设备(伺服、IO、传感器),都能快速定位问题、优化性能,从 “会用” 升级到 “懂原理” 的工业控制工程师。

从站是怎么识别来自主站报文的pdo数据的?

一、核心

从站识别主站报文的逻辑是「先按 “逻辑地址 / FMMU” 定位 PDO 数据块,再按 “0x1600 映射规则” 拆分条目,最后用 “0x6060:00” 匹配 OD 参数」——0x1600、0x6060、0x00 是三层不同作用的 “识别标识”,而非简单叠加识别。

二、从站识别主站 PDO 报文的完整流程

结合之前的协议知识和新文档的 “逻辑寻址 / FMMU”“PDO 映射” 内容,从站接收主站 PDO 报文后,会按以下 4 步精准识别数据,每一步都对应一个关键标识:

步骤 1:按 “EtherCAT 报头 + 逻辑地址” 定位 PDO 数据块(硬件级识别)
  • 主站发送的 PDO 报文,报头包含「逻辑地址」(新文档 “逻辑寻址” 核心),这个地址是主站通过 FMMU(现场总线存储器管理单元)预配置给从站的;
  • 从站的 ESC 芯片(EtherCAT 从站控制器)收到报文后,先解析报头的逻辑地址,通过 FMMU 映射表,直接定位到自身 PDRAM(过程数据 RAM)中的 PDO 数据块(如 RxPDO 对应的内存区域);
  • 关键标识:逻辑地址(而非 0x1600/0x6060),这是 “粗定位”,确保从站只接收属于自己的 PDO 数据块,不处理其他从站的数据。
步骤 2:按 “同步管理器(SM2)” 确认数据方向(RxPDO)
  • 新文档明确:SM2 绑定 RxPDO(主站→从站)、SM3 绑定 TxPDO(从站→主站),且 SM 配置为 “Buffered Mode(缓存模式)”;
  • 从站通过 SM2 的配置,确认当前接收的数据是 RxPDO(控制指令),并启用缓存机制(三缓冲区)避免数据冲突;
  • 关键标识:SM2 编号 + 数据方向,这是 “中定位”,确认数据是 “主站发给自己的控制指令”。
步骤 3:按 “0x1600 映射规则” 拆分 PDO 条目(协议级识别)
  • 0x1600 是 RxPDO 的 “映射索引”(新文档 + 之前协议知识),从站 OD 中 0x1600 的子索引存储着 “PDO 条目清单”:
    • 子索引 0x00:条目数量(如 3 个);
    • 子索引 0x01:第一个条目(如 0x6040:00 16 位);
    • 子索引 0x02:第二个条目(如 0x6060:00 8 位);
    • 子索引 0x03:第三个条目(如 0x60FF:00 32 位);
  • 从站根据这个清单,将步骤 1 定位到的 “PDO 数据块” 按字节拆分:
    • 前 2 字节→第一个条目(0x6040:00);
    • 第 3 字节→第二个条目(0x6060:00);
    • 第 4-7 字节→第三个条目(0x60FF:00);
  • 关键标识:0x1600 映射规则,这是 “细拆分”,将连续的数据块拆成单个可识别的 PDO 条目。
步骤 4:按 “0x6060:00” 匹配 OD 参数(数据级识别)
  • 拆分后的每个条目,通过 “索引 + 子索引”(如 0x6060:00)匹配从站 OD 中的具体参数:
    • 0x6060 是 OD 中的 “操作模式” 逻辑索引(CiA402 标准);
    • 子索引 0x00 是该参数的唯一子项;
  • 从站固件通过 OD 映射表,找到 0x6060:00 对应的物理寄存器地址(如 0x40000002),将拆分后的第 3 字节数据写入该寄存器;
  • 关键标识:索引(0x6060)+ 子索引(0x00),这是 “最终识别”,明确数据对应的具体功能(操作模式)。

三、关键澄清:三个标识的不同作用(避免混淆)

标识 作用层级 核心功能 类比场景
逻辑地址 硬件级(ESC) 定位属于本从站的 PDO 数据块 快递的 “小区地址”
0x1600 协议级(CoE) 拆分数据块为单个 PDO 条目 快递的 “收件人姓名 + 快递袋”
0x6060:00 数据级(OD) 匹配具体参数(操作模式) 快递里的 “单个物品标签”

四、结合新文档的补充细节(关键验证)

  1. 逻辑寻址的核心作用:新文档强调 “逻辑寻址用于 PDO 传输”,主站通过 FMMU 将所有从站的 RxPDO 数据块映射到同一逻辑地址空间,从站只需通过自身 FMMU 配置,即可快速定位自己的数据块 —— 这一步是 0x1600/0x6060 发挥作用的前提;
  2. 缓存模式的配合:新文档的 “Buffered Mode” 三缓冲区机制,确保步骤 3 拆分数据、步骤 4 写入寄存器时,不会与主站下一个周期的 PDO 数据冲突 —— 从站识别数据的同时,保障实时性;
  3. 无应答的底层原因:从站的识别流程(ESC 硬件 + SM+OD 映射)全程无 CPU 参与,纯硬件 / 固件处理,因此 PDO 报文无需应答(新文档 “Buffered Mode 无握手”),延迟低至微秒级。

五、总结:从站识别 PDO 报文的核心逻辑

从站不是简单通过 “0x1600+0x6060+0x00” 叠加识别,而是分层定位、逐步拆分

  1. 硬件层(ESC+FMMU):用「逻辑地址」定位自己的 PDO 数据块;
  2. 协议层(SM+CoE):用「SM2+0x1600」确认数据方向并拆分条目;
  3. 数据层(OD):用「索引 + 子索引(0x6060:00)」匹配具体参数。

这个流程既保证了识别的准确性(不混淆其他从站 / 其他参数),又通过硬件级处理保障了实时性 —— 这也是 EtherCAT PDO 传输 “高速 + 可靠” 的核心原因。

如何让通过igh主战获取对象字典 Object Dictionary

利用igh主战的命令:
ethercat sdos  来获取从站的od。

 ethercat 命令里的 SDO 字典 是否就是 EtherCAT 中的 对象字典(Object Dictionary,OD)?

SDO 字典不是严格等同 OD,但它是 OD 最核心、最常用的呈现形式,日常使用中可以近似认为 SDO 字典就是 OD 的可视化版本。

详细解释两者的关系

1. 先明确核心概念
  • 对象字典(OD,Object Dictionary):是 EtherCAT 从站的 “数据总表”,是从站内部所有可配置、可访问的数据 / 参数的集合(包括 PDO 映射、设备配置、状态参数、厂商自定义参数等),是从站的核心数据结构。
  • SDO(Service Data Object):不是数据本身,而是访问 OD 的一种通信协议 / 方式(非实时、可靠的读写方式),专门用于读写 OD 中不适合实时传输的配置类参数。
  • SDO 字典:是 ethercat 工具通过 sdos 命令展示的、能通过 SDO 协议访问的 OD 条目集合—— 简单说,它是 OD 的 “子集(几乎全覆盖)+ SDO 访问属性标注”。
2. 为什么你会觉得两者 “一样”?

因为 EtherCAT 从站的 OD 中,99% 以上的核心条目都支持 SDO 访问,所以 ethercat sdos 输出的 SDO 字典,几乎包含了 OD 的所有关键内容(索引、子索引、数据类型、访问权限、描述等)。日常使用中,我们通过 ethercat sdos 查看的 “SDO 字典”,就是从站 OD 的完整可视化呈现,两者在实操层面可以划等号。

3. 微小的区别(仅理论层面)

OD 中极少数条目(比如纯实时 PDO 映射的过程数据,仅用于实时传输,不支持 SDO 读写),不会出现在 SDO 字典里 —— 但这类条目通常不会通过 ethercat 命令手动访问,所以对你的实操没有影响。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐