[EtherCAT]Module/Slot概念与OD分配

一、为什么需要Module/Slot

EtherCAT基础规范(ETG.1000)原本只定义"SubDevice"这一层:一台 SubDevice拥有一个对象字典(OD),ESI XML中所有 OD 条目固定写死。但当设备本身是复合形态时——比如IO耦合器可以扩展不同数量、不同类型的IO端子、伺服驱动器内含多轴、网关下挂若干数目子总线节点——这种"一份 ESI把全部OD写死"的模式会暴露两个难以解决的问题:

  1. OD 静态写死:子单元数量可变时,ESI必须为每种组合给一份描述,组合爆炸;
  2. 配置不灵活:现场插拔子单元后必须更换ESI,无法在线识别。

ETG.5001 Modular Device Profile(MDP) 就是为解决这两点而生。它的核心思想只有一句话:

把设备内部的"子单元"抽象成 Module,把设备上能放 Module 的"位置"抽象成 Slot;ESI 只描述 Slot 集合与 Module 库,运行时由主站根据实际装入的 Module 在线拼装出运行时 OD字典。

这就是 EtherCAT 里 Module(模块) / Slot(插槽) 概念的全部出发点。

二、核心术语

ETG.5001定义了三类 MDP 设备类型:

设备类型(Device Type) "Module"代表什么
Fieldbus Gateway(现场总线网关) 子总线上每个设备站就是一个 Module
Modular Device(模块化设备,如端子耦合器) 每个可插拔子设备就是一个 Module
Module Device(模块设备,如多轴伺服、多通道 IO) 每个通道(channel)就是一个 Module

围绕这三类设备,MDP 用一组统一的术语描述它们:

  • Slot(槽位):设备上能放置一个 Module 的"位置"。Slot 的属性决定它能放几个实例、允许放哪些 Module、PDO 索引按多大步长递增。
  • Module(模块):一个具有独立 OD/PDO/参数/诊断的子单元。每个 Module 由唯一的 ModuleIdent 标识。
  • SlotGroup / ModuleGroup:当一个设备需要把 Slot 分组管理(例如"高速区"与"普通区"、或不同子总线域)时,把若干 Slot 编为一个 SlotGroup,每个 SlotGroup 关联一个允许的 ModuleGroup(Module 子集)。
  • ModulePdoGroup:单个 Module 内部还可以把自己的若干 PDO 编组,用于 PDO 排序、对齐与填充。

三、OD 分区:Module 的 OD 空间

一个 SubDevice 只有一份 OD表,索引范围 (0x0000–0xFFFF)。若要把若干 Module 的数据都装进同一张表,必须保证他们的索引互相不重叠。

索引范围 区域 用途
0x1000–0x1FFF EtherCAT Communication Area ETG.1000.6 标准通信对象(Device Type、Syncs、PDO Assign 等)
0x2000–0x5FFF Manufacturer Specific 厂商自定义
0x6000–0x6FFF Input Area 各 Module 的输入数据
0x7000–0x7FFF Output Area 各 Module 的输出数据
0x8000–0x8FFF Configuration Area 各 Module 的配置参数
0x9000–0x9FFF Information Area 各 Module 的识别信息(Device Type、Vendor ID、Product Code、版本)
0xA000–0xAFFF Diagnosis Area 各 Module 的诊断
0xB000–0xBFFF Service Area 各 Module 的服务接口
0xF000–0xFFFF Device Area 整台设备层的状态/控制/模块清单
0xF500–0xF5FF Manufacturer Specific(设备层) 厂商自定义的设备级对象

Modular Device Profile(MDP) 会为每个Module分配OD空间,空间的大小和位置由 Slots/@SlotIndexIncrementSlots/@SlotPdoIncrement 参数决定, 需要使用两个参数来分配Module的OD空间, 是因为分为模块的数据索引空间和PDO映射索引空间。

地址空间 范围 内容 增量参数
OD 对象索引 0x6000–0xBFFF 数据本身(输入、输出、配置、诊断……) @SlotIndexIncrement
PDO 映射索引 0x1600–0x17FF(RxPDO)
0x1A00–0x1BFF(TxPDO)
PDO 的映射条目(一个 PDO 把若干 OD 对象打包) @SlotPdoIncrement

3.1 MDP模板的OD分配

在ETG.5001中推荐的MDP模板是:

@SlotIndexIncrement = 0x10
@SlotPdoIncrement   = 0x01

假设有2个数字IO端子,分别作为Module0、Module1接入MDP设备。
那么Module0使用的RxPDO映射索引是0x1600, 输入数据的索引范围是0x6000-0x600F; 相应的Module1使用的RxPDO映射索引是0x1600 + @SlotPdoIncrement = 0x1601, 输入数据的索引范围是0x6000 - 0x600F + @SlotIndexIncrement = 0x6010 - 0x601F;

一个MDP设备能放下多个各Module, 取决于单个module的OD空间大小。
按照@SlotPdoIncrement = 0x1, RxPDO映射区索引范围:0x1600 - 0x17FF, 可以放512个module的RxPDO映射索引。
按照@SlotIndexIncrement = 0x10, 输入数据索引范围: 0x6000 -0x6FFF, 可以放下256个module的输入数据索引。

综上,按照MDP模板参数, 可以最多容纳256个Module.

3.2 多轴伺服的OD分配

按照CIA402/ETG.6010, 其OD分配存在不同,单个轴的数据对象就定义了几十个:

0x6040  Control word
0x6041  Status word
0x6060  Modes of operation
0x6061  Mode display
0x6062  Position demand value
0x6064  Position actual value
0x606C  Velocity actual value
0x607A  Target position
0x607C  Home offset
0x6080  Max motor speed
0x6083  Profile acceleration
0x6084  Profile deceleration
0x60B0  Position window
0x60B2  Position window time
0x60B8  Touch probe function
0x60BA  Touch probe status
0x60F4  Following error actual value
0x60FF  Target velocity
0x6500  Supported drive modes

此时一个Module(轴)使用0x10个OD数据对象空间就不够用了,CIA402按照传统分配约定是每轴分配一个连续的0x800的OD数据对象空间。 一个伺服驱动器最多能支持8个轴。

@SlotIndexIncrement = 0x800
@SlotPdoIncrement   = 0x10

3.3 OD空间对比

更多关于ESI文件对Module OD的描述和从站程序对Module的OD的处理,见《EtherCAT|以CIA402例程为例介绍MDP设备的OD描述和处理》

参考资料

  1. ETG5001_1_V0i10i0_S_D_MDP_GeneralSpec.pdf
  2. ITW_World_Series_2025_Structuring_CoE_object_dictionary_using_profiles.pdf
  3. ITW_World_Series_2025_Using_Modules_Slots.pdf
0
0

订阅

发表回复 0

Your email address will not be published. Required fields are marked *

captcha
Enter the characters shown in the image:
Reload

This CAPTCHA helps ensure that you are human. Please enter the requested characters.