ZeroOne AI
← 返回文章列表

SOEM-EtherCAT 源代码解析(二):已知的从站配置信息列表

👁 1
分类:机器人自动化

解析 SOEM 主站库的从站配置信息列表:ec_configlist_t 结构体字段含义、dtype 设备类型解释、倍福 EK1100/EL 系列端子预配置表,以及未知从站如何回退到 EEPROM 读取配置。

SOEM-EtherCAT 源代码解析(二):已知的从站配置信息列表

一、项目背景

在上一篇《SOEM-EtherCAT 源代码解析(一):数据类型定义》中,我们拆解了 ec_type.h 中的基础类型、报文结构体与各类枚举。本篇文章继续深入 SOEM 源码,聚焦从站配置信息列表(Slave Configuration List)。

EtherCAT 主站上电后需要识别并配置每一个从站。对于常见型号(如倍福 EK1100 耦合器、EL 系列端子模块),主站如果内置了它们的配置参数,就可以跳过繁琐的 EEPROM 逐项读取,直接按已知参数完成配置,大幅加快启动速度。SOEM 正是通过一张"已知从站配置表"实现这一机制的。

二、技术方案:从站配置结构体

SOEM 用 ec_configlist_t 结构体描述一个已知从站的全部配置参数,并将所有已知从站放进一张静态表 ec_configlist[] 中:

/** Slave configuration structure */
/*从站配置结构体*/
typedef const struct
{
   uint32           man;      // 从站厂家制造商代码
   uint32           id;       // 从站产品代码
   char             name[EC_MAXNAME + 1];  // 从站产品型号名称
   uint8            Dtype;    // 数据类型
   uint16           Ibits;    // 输入位数量
   uint16           Obits;    // 输出位数量
   uint16           SM2a;     // SyncManager 2 起始地址
   uint32           SM2f;     // SyncManager 2 标志位
   uint16           SM3a;     // SyncManager 3 起始地址
   uint32           SM3f;     // SyncManager 3 标志位
   uint8            FM0ac;    // FMMU 0 有效
   uint8            FM1ac;    // FMMU 1 有效
} ec_configlist_t;

各字段含义:

Dtype 设备类型说明

源码注释给出了 7 种设备类型的定义:

1: static device with no IO mapping ie EK1100         // 静态设备,无IO映射(如EK1100耦合器)
2: input device no mailbox ie simple IO device        // 输入设备,无邮箱(简单IO模块)
3: output device no mailbox                           // 输出设备,无邮箱
4: input device with mailbox configuration            // 输入设备,带邮箱配置
5: output device with mailbox configuration           // 输出设备,带邮箱配置
6: input/output device no mailbox                     // 输入输出设备,无邮箱
7: input.output device with mailbox configuration     // 输入输出设备,带邮箱配置

三、系统架构:已知从站配置表

#define EC_CONFIGEND 0xffffffff

ec_configlist_t ec_configlist[] = {
      {/*Man=*/0x00000002,/*ID=*/0x044c2c52,/*Name=*/"EK1100",/*dtype=*/1,...},
      {/*Man=*/0x00000002,/*ID=*/0x03ea3052,/*Name=*/"EL1002",/*dtype=*/2,/*Ibits=*/2,...},
      {/*Man=*/0x00000002,/*ID=*/0x03ec3052,/*Name=*/"EL1004",/*dtype=*/2,/*Ibits=*/4,...},
      {/*Man=*/0x00000002,/*ID=*/0x07d23052,/*Name=*/"EL2002",/*dtype=*/3,/*Obits=*/2,...},
      {/*Man=*/0x00000002,/*ID=*/0x0c1e3052,/*Name=*/"EL3102",/*dtype=*/4,/*Ibits=*/48,
       /*SM2a*/0x1000,/*SM2f*/0x00000024,/*SM3a*/0x1100,/*SM3f*/0x00010020,/*FM0ac*/0,/*FM1ac*/1},
      {/*Man=*/0x00000002,/*ID=*/0x0fc03052,/*Name=*/"EL4032",/*dtype=*/5,/*Obits=*/32,...},
      {/*Man=*/0x00000002,/*ID=*/0x13ed3052,/*Name=*/"EL5101",/*dtype=*/7,/*Ibits=*/40,/*Obits=*/24,...},
      {/*Man=*/EC_CONFIGEND,/*ID=*/0x00000000,/*Name=*/""  ,...}   // 表结束标志
};

关键设计点:

四、实施过程:配置匹配与回退机制

SOEM 在 ec_config_init() 阶段执行从站识别,其逻辑为:

  1. 依次读取总线上每个从站的 EEPROM(SII),获取厂商代码与产品代码;
  2. 遍历 ec_configlist[] 表,用 man + id 与表项比对;
  3. 命中:直接使用表内配置(Dtype、Ibits/Obits、SM/FMMU 参数),完成快速配置;
  4. 未命中:从从站 EEPROM 中读取完整配置信息(SII 的通用段、SM 段、FMMU 段、PDO 段),动态建立配置——这就是"未知从站"的通用处理路径。

这种"已知表 + EEPROM 回退"的双轨设计,让主站既能在常见场景下秒级启动,又能兼容任意第三方从站。

五、应用价值

六、SEO关键词

SOEM、EtherCAT主站、从站配置、ec_configlist_t、EK1100、EL1002、EtherCAT源码解析、从站EEPROM、SII从站信息接口、倍福端子模块、运动控制

评论(0