7.5.18 EtherCAT 用户手册
1. 概述
本模块基于开源 SOEM(Simple Open EtherCAT Master)库,针对搭载 FreeRTOS 的嵌入式 MCU 平台(S100)进行了移植与适配。主要特性如下:
本模块基于开源 SOEM(Simple Open EtherCAT Master)库,针对搭载 FreeRTOS 的嵌入式 MCU 平台(S600)进行了移植与适配。主要特性如下:
| 特性 | 说明 |
|---|---|
| EtherCAT 主站 | 实现完整的 EtherCAT MainDevice(主站)功能 |
| 实时调度 | 通过 FreeRTOS 任务实现周期性过程数据收发 |
| 硬件适配 | 通过 McalCdd/Ethernet(Eth.h)驱动底层以太网收发 |
| 邮箱协议 | 支持 CoE、FoE、EoE、SoE、AoE 邮箱协议 |
| 分布式时钟 | 支持 DC 同步,提供 PI 控制器进行时钟对齐 |
| 从站诊断 | 支持从站状态检测、自动恢复与重配 |
| Shell 接口 | 提供交互式命令行测试入口 |
2. 软件架构
| 层级 | 模块 / 文件 | 说明 | 对外接 口 |
|---|---|---|---|
| 用户应用层 | ec_sample/src/ec_sample.c | EtherCAT 完整运行示例,包含实时任务、检测任务与启动流程 | EtherCAT_Sample_Start() / Shell Ec_Sample_Test |
| 用户应用层 | slaveinfo/src/slaveinfo.c | 从站信息扫描、SDO 读写工具 | EtherCAT_SlaveInfo_Start() / Shell Ec_SlaveInfo、Ec_SlaveOP |
| SOEM 核心层 | core/src/ec_main.c | 主站初始化、状态机、邮箱收发、EEPROM 读写 | ecx_init / ecx_readstate / ecx_writestate 等 |
| SOEM 核心层 | core/src/ec_config.c | 从站自动枚举与 PDO 映射配置 | ecx_config_init / ecx_config_map_group |
| SOEM 核心层 | core/src/ec_coe.c | CoE(CANopen over EtherCAT)SDO 读写、对象字典查询 | ecx_SDOread / ecx_SDOwrite / ecx_readODlist |
| SOEM 核心层 | core/src/ec_dc.c | 分布式时钟(DC)配置与同步 | ecx_configdc |
| SOEM 核心层 | core/src/ec_foe.c | FoE(File over EtherCAT)文件传输 | ecx_FOEread / ecx_FOEwrite |
| SOEM 核心层 | core/src/ec_eoe.c | EoE(Ethernet over EtherCAT)以太网隧道 | ecx_EOEsend / ecx_EOErecv |
| SOEM 核心层 | core/src/ec_soe.c | SoE(Servo over EtherCAT)伺服参数访问 | ecx_SoEread / ecx_SoEwrite |
| SOEM 核心层 | core/src/ec_base.c | 底层 EtherCAT 帧构造与收发 | ecx_send_processdata / ecx_receive_processdata |
| SOEM 核心层 | core/src/ec_print.c | 错误码与状态码转可读字符串 | ec_ALstatuscode2string / ecx_elist2string |
| OSAL 抽象层 | osal/src/osal.c | OS 时间、任务、互斥锁的 FreeRTOS 适配实现 | osal_usleep / osal_mutex_lock 等 |
| OSHW/NIC 层 | oshw/src/nicdrv.c | 网络收发适配,将 SOEM 帧操作映射到 McalCdd/Ethernet API | ecx_setupnic / ecx_outframe / ecx_inframe |
| OSHW/NIC 层 | oshw/src/oshw.c | 字节序转换工具(大小端互转) | oshw_htons / oshw_ntohs |
| 硬件层 | 以太网控制器 Controller 0 | 物理网口,收发 EtherCAT 帧(ETH 类型 0x88A4) | McalCdd Eth_Transmit / Eth_Receive_ethercat |
3. 目录结构
McalCdd/EtherCAT/
├── SConscript # 顶层构建脚本
├── README.md # 原始说明
├── core/ # SOEM 核心源码
│ ├── SConscript
│ ├── src/
│ │ ├── ec_main.c # 主功能:初始化、状态机、邮箱
│ │ ├── ec_config.c # 从站自动配置(PDO 映射)
│ │ ├── ec_coe.c # CoE(CANopen over EtherCAT)SDO 操作
│ │ ├── ec_dc.c # 分布式时钟(DC)配置
│ │ ├── ec_eoe.c # EoE(Ethernet over EtherCAT)
│ │ ├── ec_foe.c # FoE(File over EtherCAT)
│ │ ├── ec_soe.c # SoE(Servo over EtherCAT)
│ │ ├── ec_base.c # 底层帧操作
│ │ └── ec_print.c # 调试打印工具
│ └── inc/
│ ├── nicdrv.h # NIC 驱动接口
│ ├── osal.h # OSAL 接口
│ ├── osal_defs.h # OSAL 类型定义
│ ├── oshw.h # OS/HW 工具接口
│ └── soem/
│ ├── soem.h # 总头文件(一键包含)
│ ├── ec_main.h # 数据结构与主 API 声明
│ ├── ec_type.h # 基本类型、枚举、宏
│ ├── ec_options.h # 编译期配置参数
│ ├── ec_coe.h # CoE API 声明
│ ├── ec_config.h # 配置 API 声明
│ ├── ec_dc.h # DC API 声明