使用 SSC 工具生成并移植 EtherCAT 从站协议栈的完整指南

前言:EtherCAT(Ethernet for Control Automation Technology)是一种高性能工业以太网通信协议,广泛应用于实时控制场景。 EtherCAT Slave Stack Code(SSC) 工具,可显著简化 EtherCAT 从站协议栈的开发与 XML 设备描述文件(ESI)的生成过程。
本文基于 SSC 工具 5.13 版本(可在ETG官网下载),详细介绍如何创建工程、配置对象字典、生成协议栈代码,并将其成功移植到目标平台(如 STM32 系列微控制器)。
一、创建SSC工程
1. 新建模板工程
启动 SSC 工具后,点击菜单栏 File → New,新建一个空白工程。

2. 选择合适模板
根据所使用的 EtherCAT 从站控制器(ESC)型号选择对应模板:
-
若使用 FCE1100、FCE1200 或 FCE1302,建议选择模板:
EL9800 | 8Bit Digital I/O, 16Bit Analog Input -
若使用 FCE1353 或 FCE1354,建议选择模板:
Microchip-SPI-2PORT
尽管模板针对特定硬件设计,但实际中具有良好的通用性。例如,Microchip-SPI 模板也可用于 HBI 接口或 FCE1100 的项目。

3. 配置从站参数
SSC 界面分为三栏:
- 左侧:项目导航树
- 中间:配置选项卡
- 右侧:当前配置项的详细说明
关键配置项如下:
(1)Slave Information
设置产品 ID、名称、图标等基本信息,可保留默认值或按需自定义。

(2)功能模块配置
Generic、Hardware、EtherCAT state Machine、Synchronisation、Application、ProcessData、Mailbox 部分可参考 demo 程序中的 ecat_def.h 文件进行配置(0/1),也可根据自己的需求进行配置。

其中ProcessData中的MAX_PD_WRITE_ADDRESS、MAX_PD_READ_ADDRESS以及Mailbox中的MAX_MBX_WRITE_ADDRESS、MAX_MBX_READ_ADDRESS配置的是DPRAM大小。通常,FCE1353配置为0x1FFF;FCE1200和FCE1302配置为0x13FF;FCE1100配置为0x2FFF。


(3)配置完成后点 File-Save 保存项目,保存路径自定义。

二、创建Excel 表格
1. 生成Excel表格
参数设置完成后,通过“Tool → Application → Create New”(“Import”是导入Excel表格),弹出Excel表格。新生成的表格如下图所示,该表格用于配置对象字典。通过SSC工具导入此表格,将自动生成EtherCAT从站代码和XML设备描述文件(ESI)。

2.添加对象
定义好的表格如下图所示,表中仅添加了对象 0x6000 和 0x7000。

0x6000~0x6FFF 定义输入,0x7000~0x7FFF定义输出(这里的输入输出是以主站的角度来看的),我们可以在对应位置添加自己的对象,其中 0x1600、0x1A00 可以不用定义,最后软件会自动生成。0x1C12 和 0x1C13 最好也是自动生成,如果自己定义的话,可点击表格最左侧的“2”或者“+”,但是最后修改可能会比较麻烦。
0x1000, 0x1001, 0x1008, 0x1009, 0x100a, 0x1010, 0x1011, 0x1018, 0x10F0, 0x10F1, 0x10F3, 0x1c00, 0x1c32, 0x1c33 这些对象字典是根据 SSC 中的配置自动生成的,不能在这个 excel 文件中定义。
子索引是从 1 开始的,在生成代码的和 xml 文件的时候会自动添加子索引 0,类型是 UNSIGNED16。也可以理解为,默认的子索引 0 是 excel 表中索引所在的那行。如果想自定义表格配置,具体可参考 SSC 的说明文档 Help----Documentation。

3.协议栈生成
(1)添加完对象以后,保存并关闭 Excel 表,自动弹出如下图。

选 "OK"以后,通过 Project - Create new Slave Files 生成代码,根据需要可选择生 成文件的路径,一般是默认,“Start”就开始生成源代码,完成以后如下图。

三、协议栈程序移植
注:移植说明只针对方芯提供的 demo 进行讲述。
国产EtherCAT方案最优选!方芯半导体FCE1353及方案开发板介绍
1.协议栈程序说明
原 demo 程序协议栈的 main 函数在 el9800appl.c 中,其对应的头文件为 el9800appl.h。 新生成的的协议栈其文件命名可自定义,此模版默认名称为 PIC32 EtherCAT Slave1.c,头文件 分为了 PIC32 EtherCAT Slave1.h 和 PIC32 EtherCAT Slave1Objects.h 两个。
2.协议栈程序移植
(1)将demo程序的Ethercat文件中的文件全部替换为SSC生成的协议栈程序,其中源文件放到 src 文件夹,头文件放到 Inc 文件夹,el9800hw.c文件存放在port文件夹。

(2)打开 demo 程序,将程序中没有的文件移除。

(3)修改ecat_def.h 文件
将_PIC18 修改为_STM32_IO4,_PIC24 修改为_STM32_IO8,数字 都 改 为 1 。

删除 __attribute__((aligned(1), packed)) 。

将 OBJ_DWORD_ALIGN 改为 1 , OBJ_WORD_ALIGN 改为 0。

(4)在 PIC32 EtherCAT Slave1Objects.h 中添加头文件#include "ecatappl.h"
(5)将原程序的el9800hw.c和el9800hw.h直接复制过来
(6)参照原 demo 程序的 el9800appl.c 修改 PIC32 EtherCAT Slave1.c ,可将原 demo 程序中 el9800appl.c 的程序直接复制到 PIC32 EtherCAT Slave1.c 中需要添加程序的部分,然后进行编译修改报错部分。
(7)修改过程通常是:
-
添加缺少的头文件;
-
APPL_StopOutputHandler():根据需求修改;
-
APPL_InputMapping():修改输入映射;
-
APPL_OutputMapping():修改输出映射;
-
APPL_Application():修改应用程序;
-
将#if _PIC24 修改为#if _STM32_IO8 。
需注意:APPL_InputMapping 和 APPL_OutputMapping 函数中的 case 部分要跟新生成的协议栈定义的索引号一致,例如 APPL_OutputMapping 中的 case 部分,用 SSC 默认生成的索引号为 0x1600 所以应将 0x1601 改为 0x1600。

3.XML 文件修改
需修改新生成的 XML 文件中 ConfigData 部分的数据,例如 FCE1353_SPI 的间接模式应改为 800E00448813FF00000000400000,其他模式的修改具体见 EEPROM Configuration 表。

更多推荐



所有评论(0)