3.2.4.8 模块/插槽
建议 SCI 在使用或不使用模块/插槽元素方面遵循 ESI。然而,即使相关的 ESI 使用了模块/插槽元素,SCI 也可以选择不使用。
如果不使用模块/插槽元素,则结果产生的过程数据、对象字典、通道信息和诊断历史消息将在 SCI 的 /Device 元素中描述,并省略 Slots 和 Modules 元素。对象和 PDO 的索引需要调整,以匹配将模块分配给插槽后的索引。在计算时,需要考虑插槽号、插槽组、偏移信息(例如 @SlotIndexOffset 属性)以及 @DependOnSlot/@DependOnSlotGroup 属性。
如果 SCI(和 ESI)使用模块/插槽,它包含相关 ESI 中定义的所有插槽列表。每个插槽的 @MinInstances 和 @MaxInstances 属性应为 “1”。每个插槽的唯一 ModuleIdent 元素保存该配置中分配模块的模块标识值。
未分配模块的插槽(“空插槽”)的唯一 ModuleIdent 元素应为 “0”。对于有和没有分配模块的插槽,唯一允许的模块的 @Default 属性应为 “1”。
可以省略尾部没有分配模块的插槽,因为它们不影响子设备的配置。
索引偏移信息(例如由 @IndexIncrement 和 @PdoIndexIncrement 引起的)与相关 ESI 中的相同。
所有分配给插槽的模块都在 SCI 的 Modules 元素中描述。带有 @Crc 的模块应从相关 ESI 中精确复制(包括 @Crc32)。
多次使用且发生变化的模块(即彼此不同,例如 PDO 内容或名称变更)在 SCI 中多次出现。每个变更的分配模块都会在 SCI 中添加一个新的 Module 元素。
由于模块标识值在一个文件中必须唯一,因此也需要更改该值。在这种情况下,/Sci/TargetSpecific/ModuleIdents 元素应包含一个条目,显示 SCI 模块标识号和相关 ESI 模块标识号之间的关系。
对于带有 @Crc32 属性的 FSoE 模块,参考第 3.2.4.9 条。
如果 ESI 不使用模块/插槽,SCI 也不应使用模块/插槽
我理解您对这段ETG 2000标准中关于模块/插槽的描述感到困惑。这确实是一个复杂的主题,涉及EtherCAT从站信息(ESI)和从站配置信息(SCI)文件的结构。让我为您解释一下关键点,并给出一些例子。
模块和插槽的概念:
在EtherCAT系统中,从站设备可以有模块化结构。"插槽"是设备上可以插入模块的物理或逻辑位置,"模块"是可以插入这些插槽的功能单元。ESI和SCI文件:
- ESI(EtherCAT Slave Information)文件描述了从站设备的所有可能配置。
- SCI(Slave Configuration Information)文件描述了特定从站的实际配置。
模块/插槽的使用选择:
SCI文件可以选择是否使用模块/插槽结构,即使相应的ESI文件使用了这种结构。不使用模块/插槽的情况:
如果SCI选择不使用模块/插槽,所有数据(过程数据、对象字典等)都将直接在SCI的/Device元素下描述。使用模块/插槽的情况:
如果使用模块/插槽,SCI需要列出所有插槽,并为每个插槽指定分配的模块(如果有的话)。
让我们通过一个简化的例子来说明:
假设我们有一个支持模块化的EtherCAT从站设备,它有3个插槽。
ESI文件可能看起来像这样(简化版):
<Slots>
<Slot Name="Slot1" />
<Slot Name="Slot2" />
<Slot Name="Slot3" />
</Slots>
<Modules>
<Module Name="DigitalInput" ModuleIdent="1001" />
<Module Name="DigitalOutput" ModuleIdent="1002" />
<Module Name="AnalogInput" ModuleIdent="1003" />
</Modules>
现在,如果我们决定在SCI中使用模块/插槽结构,并且我们在Slot1中放置了一个数字输入模块,在Slot2中放置了一个数字输出模块,而Slot3保持空置,SCI可能看起来像这样:
<Slots>
<Slot Name="Slot1">
<ModuleIdent>1001</ModuleIdent>
</Slot>
<Slot Name="Slot2">
<ModuleIdent>1002</ModuleIdent>
</Slot>
<Slot Name="Slot3">
<ModuleIdent>0</ModuleIdent>
</Slot>
</Slots>
<Modules>
<Module Name="DigitalInput" ModuleIdent="1001">
<!-- 模块具体配置 -->
</Module>
<Module Name="DigitalOutput" ModuleIdent="1002">
<!-- 模块具体配置 -->
</Module>
</Modules>
如果我们选择在SCI中不使用模块/插槽结构,那么所有配置都将直接在Device元素下描述:
<Device>
<!-- 数字输入模块的配置 -->
<!-- 数字输出模块的配置 -->
<!-- 其他设备级别的配置 -->
</Device>
这种灵活性允许SCI根据实际需求来描述设备配置,无论是使用模块化结构还是将所有内容作为单一设备来处理。
需要注意的是,当不使用模块/插槽结构时,可能需要调整对象和PDO的索引,以反映实际配置。这就是为什么标准提到了需要考虑插槽号、偏移信息等因素来计算正确的索引。
这个主题确实很复杂,如果您有任何特定方面需要进一步澄清,请随时问我。