SlaveInformation(从站信息)配置项

配置项 功能说明 推荐配置值 适配方案理由
VENDOR_ID 供应商ID(本公司注册的 ETG 的 ID) 0x000004D8(LAN9252  厂商 ID) 调试阶段使用芯片原厂(如LAN9252  厂商 ID),或直接使用本公司ID
VENDOR_NAME 供应商名称 Microchip(LAN9252  厂商) 匹配芯片原厂或本公司名称
VENDOR_IMAGE 供应商图标 默认或自定义 调试阶段默认,量产换成自定义
GROUP_NAME 从站设备分组名 默认或自定义 依公司产品分类命名
GROUP_IMAGE 从站设备组图标 默认或自定义 调试阶段默认,量产换成自定义
DEVICE_IMAGE 从站设备图标 默认或自定义 调试阶段默认,量产换成自定义
PRODUCT_CODE 产品代码 默认或自定义 默认芯片代码(如LAN9252)或公司产品ID,同型号产品其产品代码相同
REVISION_NUMBER 产品版本号 默认或自定义 自定义版本,按需修改
SERIAL_NUMBER 产品序列号 默认或自定义 调试固定默认,量产改唯一序号,就是每个产品全球唯一ID,可以用MCU ID或其他方式保持全球唯一
DEVICE_PROFILE_TYPE 设备行规类型 0x00000192 ETG规范中定义的标准设备类型(如I/O模块、驱动器)。例如:通通用 I/O 设备: 0x00000191
运动控制设备:0x00000192
测量设备与闭环控制器:0x00000193
DEVICE_NAME 从站设备名称 STM32F412-LAN9252-SPI 自定义,主站扫描可直观识别
DEVICE_HW_VERSION 从站设备硬件版本号 1.0.0

按硬件版本填写。
格式建议采用:主版本.次版本.修订号 
主版本:方案变更,向后不兼容
次版本:新增功能,向后兼容

修订号:修复错误,完全兼容

DEVICE_SW_VERSION 从站设备软件版本号 1.0.0 同硬件版本号

Generic (通用)配置项

配置项 功能说明 推荐配置值 适配方案理由
SYSTEM_HEADER_FILE 系统头文件 #include "stm32f4xx_hal.h" 适配你的单片机工程头文件(如 GPIO、SPI 驱动声明、宏定义、类型定义)。开始不知道可空,后面可根据报错情况更新。
EXPLICIT_DEVICE_ID 显式设备 ID 1 开启,主站可以依据EtherCAT标准给每台设备单独发一个 “唯一编号”;
关闭,主站只能靠接线的先后顺序来认设备,换线、换了设备顺序都会乱;
ESC_SM_WD_SUPPORTED EtherCAT从站控制器(ESC) 同步管理器看门狗支持 1 开启后,主站掉线 / 断连超过超时,从站会自动复位或进入安全状态
ESC_EEPROM_ACCESS_SUPPORT ESC EEPROM 访问支持 1 开启,从设备提供访问EEPROM(包含外挂或内部模拟的)的功能

Hardware (硬件)配置项

配置项 功能说明 推荐配置值 适配方案理由
EL9800_HW 倍福 EL9800 硬件支持 0 不用倍福评估板,设 0
MCI_HW  倍福MCI 硬件支持 0 不用倍福 MCI 接口,设 0
FC1100_HW 倍福 FC1100 主站卡支持 0 不用倍福 FC1100 主站卡,设 0
TIESC_HW TI ESC 芯片支持 0 本例用的是 Microchip LAN9252,设 0
HW_ACCESS_FILE 硬件访问头文件 #include "9252_HW.h" 导入 LAN9252 官方 SPI 底层驱动
CONTROLLER_16BIT 控制器(MCU)为 16 位 0 告诉协议栈 MCU 的位数,生成对应位宽的代码,不是32位,设0
CONTROLLER_32BIT 控制器(MCU)MCU 为 32 位 1 STM32F是 32 位,设1
MEMORY_UNIT_16BIT 存储单元为16位 0 告诉协议栈 MCU 的内存访问最小单元。
STM32 最小读写 1 字节(8 位),设 0
_PIC18 适配 PIC18 系列单片机 0 不用 PIC,设 0
_PIC24 适配 PIC24 系列单片机 0 不用 PIC,设0
ESC_16BIT_ACCESS ESC 16 位访问 1 MCU 和 ESC 通信16 位访问,LAN9252是16 位访问
ESC_32BIT_ACCESS ESC 32 位访问 0 和上面互斥,设 16 位就必须关 32 位
MBX_16BIT_ACCESS 邮箱 16 位访问 1 定义邮箱(非实时数据通道)的访问位宽。LAN9252 邮箱也要求 16 位访问,和 ESC 访问保持一致
BIG_ENDIAN_16BIT 16 位大端 0 告诉协议栈 MCU 的 16 位数据字节序。STM32 是小端模式,没有转换,设 0
BIG_ENDIAN_FORMAT 全局大端格式 0 STM32 是小端模式,必须设 0
EXT_DEBUGER_INTERFACE 外部调试接口 0 不用 EL9800_4A(_PIC24),保持0
UC_SET_ECAT_LED 用户(MCU)控制 EtherCAT LED 0 Run/Error 灯 选择 LED 的控制主体。
1(如果 LED 接 STM32 GPIO)
0(如果 LED 接 LAN9252 引脚)
 同下,二选一
ESC_SUPPORT_ECAT_LED ESC 支持 EtherCAT LED 1 LAN9252 完整支持硬件 LED,有 RUN_LED 和 ERR_LED 专用引脚
0(如果 LED 接 STM32 GPIO)
1(如果 LED 接 LAN9252 引脚)
ESC_EEPROM_EMULATION 模拟 ESC EEPROM 0 是否用 MCU 的 Flash 模拟 EEPROM。LAN9252 内部自带的硬件 EEPROM,不是 MCU 模拟,必须设 0
CREATE_EEPROM_CONTENT 生成 EEPROM 内容 0 为模拟 EEPROM 提供初始数据。只有开启模拟 EEPROM 时才有效,这里设 0
ESC_EEPRO_SIZE ESC EEPROM 容量字节数 0x800 告诉协议栈 EEPROM(外接 / 内部)有多大空间。LAN9252 内部自带EEPROM 为 2048(0x0800)字节

EtherCAT State Machine (EtherCAT状态机)配置项

配置项 功能说明 推荐配置值 适配方案理由
BOOTSTRAPMODE_SUPPORTED 引导(Bootstrap)模式支持 1 需要支持通过 FoE 服务进行固件更新
1,则还必须设置"FOE_SUPPORTED"
OP_PD_REQUIRED OP状态过程数据请求 0 =1:必须收到主站输出数据才能进 OP,否则进不了 OP 状态
=0:没收到数据也能进 OP
PREOPTIMEOUT PreOP 状态超时 0x7D0

Init 状态转换到 PreOP/Boot 状态的超时值(单位:ms)。
注意:协议栈内部会使用此值减去 50ms,在主站超时前提前反应。

MCU+LAN9252 的初始化时间通常在 100ms 以内。
超时时间是 2000(0x7D0)-50=1950ms

SAFEOP2OPTIMEOUT SafeOP 到 OP 状态超时 0x1000 SafeOp(安全运行) → OP 超时时间,这个时间是给你在APPL_StartInput()APPL_StartOutput()函数里做运行前准备用的.
超时时间是 4096(0x1000)-50=4046ms
CHECK_SM_PARAM_ALIGNMENT 检查 SM 地址 / 长度是否对齐 1 协议栈自动检查PDO、邮箱等内存区域的地址和长度是否对齐

Synchronisation(同步) 配置项

配置项 功能说明 推荐配置值 适配方案理由
AL_EVENT_ENABLED AL 事件中断使能 1

当 AL 事件寄存器 (0x220) 变化时,是否触发中断。=1:中断模式(支持所有同步模式);=0:轮询模式(仅支持自由运行模式)

DC_SUPPORTED 分布式时钟支持 1 从站是否支持分布式时钟 (DC)。注意:必须同时在SlaveInformation → ESC_CONFIG_DATA中开启 DC 支持。设1让总线上所有从站的采样时间完全同步,必须在代码中实现APPL_Sync0()中断函数,用于同步采样
ECAT_TIMER_INT EtherCAT 定时器中断 1

EtherCAT 看门狗超时检查是否在定时器中断中执行。
=1:定时器中断检查,看门狗不受主循环阻塞影响,更可靠;
=0:主循环检查,主循环卡死超过看门狗时间,从站不会自动进入 SafeOP 状态;

MIN_PD_CYCLE_TIME 最小过程数据周期(单位:ns) 依据实际情况自定义 从站能够稳定支持的最快过程数据周期,单位 ns。对应对象字典 0x1C31:05。
例:0xF4240 = 1000,000 ns = 1ms
MAX_PD_CYCLE_TIME 最大过程数据周期 (ns) 依据实际情况自定义 从站能够支持的最慢过程数据周期,单位 ns。
例:0xC3500000 = 3,276,800,000 ns = 3.2768 秒
PD_OUTPUT_DELAY_TIME 过程数据输出延时(单位:ns) 0

从站收到主站输出数据后,到数据在硬件上生效的延迟时间,单位 ns。对应对象字典 0x1C32:09。
1.纯输入设备(如传感器)没有输出;

2. 对于有输出的设备(如驱动器),这个值是硬件输出延迟;

PD_OUTPUT_CALC_AND_COPY_TIME 过程数据输出计算和拷贝耗时(单位:ns) 0

从站将主站输出数据从 DPRAM 拷贝到应用层并计算的时间,单位 ns。对应对象字典 0x1C32:06。
1. 纯输入设备没有输出,设 0
2. 有输出的设备,设为 0 时,SSC 会自动计算一个合理值

PD_INPUT_CALC_AND_COPY_TIME 过程数据输入计算和拷贝耗时(单位:ns) 0 从站将采集到的输入数据计算并拷贝到 DPRAM 的时间,单位 ns。对应对象字典 0x1C33:06。
设为 0 时,SSC 会根据你的 PDO 长度自动计算一个保守值
PD_INPUT_DELAY_TIME 过程数据输入延迟(单位:ns) 0 从站采集输入数据的时间点,到数据被拷贝到 DPRAM 的时间点之间的延迟,单位 ns。对应对象字典 0x1C33:09
1. DC 同步模式下,这个值用于主站的时间补偿
2. 对于大多数应用,设为 0 即可
3. 只有在你精确测量了 ADC 采样延迟时才需要手动设置

Application(应用) 配置项

配置项 功能说明 推荐配置值 适配方案理由
TEST_APPLICATION 测试应用 0 是否启用 SSC 自带的测试应用,用于验证 EtherCAT 通信和 PDO 功能,不适合实际项目
EL9800_APPLICATION EL9800 评估板应用 0 不用该评估板
CiA402_SAMPLE_APPLICATION CiA402 示例应用 0 是否启用 CiA402 运动控制设备规范。
伺服电机、驱动器专用;
不涉及运动控制,设 0
SAMPLE_APPLICATION 示例应用 0 SSC 提供的基础示例代码,演示 PDO 读写,没有实际业务逻辑,工业项目必须自己写应用,你可以基于它修改
SAMPLE_APPLICATION_INTERFACE 示例应用接口 0 是否启用示例应用的接口封装。和SAMPLE_APPLICATION 配套。
BOOTLOADER_SAMPLE 引导加载程序(Bootloader)示例 0 固件升级引导程序示例,这个示例非常简陋,工业级 OTA 升级建议自己实现 Bootloader。
APPLICATION_FILE 应用文件 #include "app_ecat.h" 指定你自己的应用层代码头文件路径,告诉 SSC 在哪里找你的应用函数声明。
USE_DEFAULT_MAIN 使用默认 main 函数 0 设 1:使用 SSC 生成的默认 main 函数
设0:不使用默认 main,由你自己编写 main 函数,手动调用协议栈的初始化和主循环处理函数

最核心的铁律(官方 ET9300 应用笔记强制规定)

ECAT_Main()的调用间隔必须小于 EtherCAT 看门狗时间的 1/2

EtherCAT 看门狗时间 = 主站配置的 2 倍 PDO 周期

  • 如果你跑 1ms PDO 周期 → 看门狗 = 2ms → ECAT_Main()必须每 1ms 以内调用一次
  • 如果你跑 2ms PDO 周期 → 看门狗 = 4ms → ECAT_Main()必须每 2ms 以内调用一次

工业级应用示例

// 全局标志位
volatile bool g_sample_flag = false;

// 1ms定时器中断服务函数
void TIM2_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
    {
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
        g_sample_flag = true; // 置位采样标志
    }
}

int main(void)
{
    // 初始化...
    MX_TIM2_Init(); // 配置1ms定时器中断
    HAL_TIM_Base_Start_IT(&htim2);
    ECAT_Init();

    while (1)
    {
        // 无限调用ECAT_Main(),有事件就处理,没事件立刻返回
        ECAT_Main();

        // 只有当1ms标志位置位时,才执行业务代码
        if (g_sample_flag)
        {
            g_sample_flag = false;
            APPL_Application(); // 1ms执行一次采样+解算
        }
    }
}

ProcessData(过程数据) 配置项

依据LAN9252 的 Process Data RAM(0x1000~0x1FFF) 进行分配PDO、Mailbox空间地址。

配置项 功能说明 修正后推荐配置值 适配方案理由
MIN_PD_WRITE_ADDRESS 最小 PDO 写地址 0x1000 限制主站输出 PDO 存放地址范围。对应 Sync Manager 2,主站写数据,从站读数据。如果主站不指定地址,默认地址放输出 PDO。
DEF_PD_WRITE_ADDRESS 默认 PDO 写地址 0x1100
MAX_PD_WRITE_ADDRESS 最大 PDO 写地址 0x1FFF
MIN_PD_READ_ADDRESS 最小 PDO 读地址 0x1000 限制主站输入 PDO 存放地址范围。对应 Sync Manager 3,从站写数据,主站读数据。如果主站不指定地址,默认地址放输入 PDO。
DEF_PD_READ_ADDRESS 默认 PDO 读地址 0x1400
MAX_PD_READ_ADDRESS 最大 PDO 读地址 0x1FFF
MAX_PD_INPUT_SIZE 最大输入 PDO 大小 0x0044 从站最多能发送多少字节的实时数据给主站
MAX_PD_OUTPUT_SIZE 最大输出 PDO 大小 0x0044 主站最多能发送多少字节的实时数据给从站

Mailbox(邮箱) 配置项

配置项 功能说明 推荐配置值 适配方案理由
MAILBOX_QUEUE 邮箱队列 1 开启邮箱请求队列。
=1:多个请求排队处理;
=0:同一时间只能处理 1 个,后续请求直接返回忙
AOE_SUPPORTED AoE 协议支持 0 不用 ADS over EtherCAT(倍福专用协议)设0
COE_SUPPORTED 支持 CoE(CANopen over EtherCAT)协议 支持 1 必须启用,用于 SDO/PDO 配置、对象字典通信
COMPLETE_ACCESS_SUPPORTED SDO 完整访问支持 1 是否支持一次性读写一个对象的所有子索引。依赖COE_SUPPORTED=1
SEGMENTED_SDO_SUPPORTED 分段 SDO 支持 1 是否支持超过邮箱大小的 SDO 数据传输。
超邮箱字节数,自动分包传输。依赖COE_SUPPORTED=1
SDO_RES_INTERFACE SDO 响应接口 1 如果不能立即生成SDO响应(例如,当需要通过串行接口进行访问时),则应设置此开关。在这种情况下,OBJ_Read或OBJ_Write应返回ABORTIDX_WORKING,并在响应可用时通过调用SDOS_SdoRes发送响应。
BACKUP_PARAMETER_SUPPORTED 备份参数支持 0 用户自行存储应用参数,可关闭此功能
STORE_BACKUP_PARAMETER_IMMEDIATELY 立即保存备份参数 0 =0:需要主站发保存命令才写入(推荐,防止频繁写 EEPROM 磨损)=1:参数一修改就立刻写入仅在BACKUP_PARAMETER_SUPPORTED=1时有效
DIAGNOSIS_SUPPORTED 诊断消息支持 0 是否支持 ETG.1020 标准诊断消息。普通从站无需诊断,省内存
MAX_DIAG_MSG 最大诊断消息数 默认 诊断消息环形缓冲区大小。不开诊断的话这个参数没用
EMERGENCY_SUPPORTED 紧急消息支持 1 是否支持主动发送紧急故障消息。过载、硬件异常可主动发故障给主站,符合工业传感器规范
MAX_EMERGENCIES 最大紧急消息数 1 单次故障上报足够,无需多缓存
VOE_SUPPORTED VoE 协议支持 0 是否支持厂商自定义协议。
SOE_SUPPORTED SOE 协议支持 0 是否支持伺服驱动协议。仅伺服电机用,非伺服专用协议,关闭
EOE_SUPPORTED EOE 协议支持 0 是否支持以太网 over EtherCAT。若在 EtherCAT 总线上传 TCP/IP 数据,设1
STATIC_ETHERNET_BUFFER 静态以太网缓冲区 0 是否使用静态缓冲区存储以太网帧。与EOE_SUPPORTED配套使用
FOE_SUPPORTED FOE 协议支持 1 是否支持文件 over EtherCAT。文件传输需要设1。如固件升级。
DEF_MBX_SIZE 默认邮箱大小 0x0080 如果主站用户没有手动设置邮箱大小,主站会自动使用这个值
MAX_MBX_SIZE 邮箱最大容量 0x0100 主站绝对不能设置超过这个值的邮箱大小,否则会直接报错,无法进入 OP 状态
MIN_MBX_WRITE_ADDRESS 最小邮箱写地址 0x1000 主站→从站邮箱写,限制邮箱地址范围
DEF_MBX_WRITE_ADDRESS 默认邮箱写地址 0x1000 注意起始地址与大小,与 PDO不能重叠
MAX_MBX_WRITE_ADDRESS 最大邮箱写地址 0x1FFF
MIN_MBX_READ_ADDRESS 最小邮箱读地址 0x1000 从站→主站邮箱读,限制邮箱地址范围
DEF_MBX_READ_ADDRESS 默认邮箱读地址 0x1080 注意起始地址与大小,与 PDO不能重叠
MAX_MBX_READ_ADDRESS 最大邮箱读地址 0x1FFF
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐