EtherCAT从站ssc V5.12源码研究与记录(一)

applInterface.h 是 SSC协议栈与用户应用程序之间的接口定义文件,它定义了两类东西:函数指针(应用层需要实现的回调)和导出函数(SSC

提供给应用层调用的 API)。

一、函数指针(应用层必须实现的回调)

SSC 通过这些函数指针调用应用层代码,应用层在初始化时把函数地址赋给这些指针。

EEPROM 仿真组(ESC_EEPROM_EMULATION = 1 时生效)

函数指针: pAPPL_EEPROM_Read(wordaddr)

作用: 从用户 EEPROM 中读取数据,拷贝到 ESC 的 EEPROM 数据寄存器(0x508 偏移处)。主站读取 EEPROM 时触发

────────────────────────────────────────

函数指针: pAPPL_EEPROM_Write(wordaddr)

作用: 将 ESC EEPROM 数据寄存器中的数据写入用户 EEPROM 存储器。主站写入 EEPROM 时触发

────────────────────────────────────────

函数指针: pAPPL_EEPROM_Reload()

作用: EEPROM 重载:将 EEPROM 的重载信息复制到 ESC 的 EEPROM 数据寄存器。EtherCAT 有些 ESC 支持热重载 EEPROM 内容

────────────────────────────────────────

函数指针: pAPPL_EEPROM_Store()

作用: 延迟存储:如果 EEPROM 仿真写数据时不能即时存入永久存储器,SSC 会在最后一次 EEPROM 访问 1000ms

后调用此函数,让你把缓存的数据真正固化

EoE 组(EOE_SUPPORTED = 1 时生效)

函数指针: pAPPL_EoeReceive(pData, length)

作用: 收到以太网帧时回调:主站通过 EoE 发来一帧以太网数据时触发。应用层处理后,通过 EOE_SendFrameRequest() 发送响应帧

────────────────────────────────────────

函数指针: pAPPL_EoeSettingInd(pMac, pIp, pSubNet, pDefaultGateway, pDnsIp)

作用: EoE 网络参数变更通知:当主站写入了新的 MAC/IP/子网掩码/网关/DNS 配置时回调,通知应用层更新网络参数

FoE 组(FOE_SUPPORTED = 1 时生效)

函数指针: pAPPL_FoeRead(pName, nameSize, password, maxBlockSize, pData)

作用: 文件读取请求:主站请求读取从站某个文件。应用层把第一个数据块填到 pData,返回实际块大小。用 busy

码可以延迟响应(比如文件还没准备好)

────────────────────────────────────────

函数指针: pAPPL_FoeReadData(offset, maxBlockSize, pData)

作用: 文件读取续传:主站确认了上一次读取应答后,SSC 调用此函数传输文件的第 2~N 块数据。offset 是文件偏移量

────────────────────────────────────────

函数指针: pAPPL_FoeError(errorCode)

作用: FoE 传输被主站中止:主站发送了 FoE Abort 时回调,通知应用层传输失败

────────────────────────────────────────

函数指针: pAPPL_FoeWrite(pName, nameSize, password)

作用: 文件写入请求:主站请求向从站写入一个文件。应用层校验文件名和密码,返回 0 表示接受,返回错误码表示拒绝

────────────────────────────────────────

函数指针: pAPPL_FoeWriteData(pData, Size, bDataFollowing)

作用: 文件写入数据:主站发来文件数据块时回调。bDataFollowing 指示后面是否还有数据。应用层返回 0 表示继续,返回 busy

码可以暂停接收

主循环回调

函数指针: pAPPL_MainLoop()

作用: 应用层自定义主循环:SSC 在每次 MainLoop()

中,处理完邮箱和状态机之后调用这个函数。应用层可以在这里插入自己的周期性任务


二、SSC 导出的 API(供应用层调用的函数)

函数: MainInit(void)

作用: 协议栈初始化入口。在硬件平台和 ESC 就绪后,应用层调用此函数来初始化整个 EtherCAT

从站协议栈(硬件→ESC→EEPROM→SM→邮箱→对象字典→应用)

────────────────────────────────────────

函数: MainLoop(void)

作用: 协议栈主循环。应用层必须周期性调用此函数(通常

1ms~几ms),它负责处理状态机、邮箱协议、过程数据(无同步模式下)等低优先级任务

────────────────────────────────────────

函数: ECAT_StateChange(alStatus, alStatusCode)

作用: 触发状态变更。当应用层检测到错误(如断线、过温),调用此函数请求向更低状态切换。注意只能请求低等级状态(OP→SafeO

P→PreOP→INIT),不能请求升到更高状态

────────────────────────────────────────

函数: EOE_SendFrameRequest(pData, length)

作用: 发送以太网帧(需要 EOE_SUPPORTED)。应用层在收到 pAPPL_EoeReceive 回调后,调用此函数将响应帧通过 EoE

发给主站。返回 0 表示成功,1 表示忙需要稍后重试


核心设计模式

这个接口文件体现了 SSC 的依赖反转设计:

  1. 协议栈核心(ecatslv.c)不依赖具体应用,只通过函数指针调用应用层

  2. 应用层在初始化时把回调函数地址赋给这些指针

  3. 协议栈导出 MainInit/MainLoop/ECAT_StateChange/EOE_SendFrameRequest 给应用层调用

这样可以做到应用层代码和协议栈代码完全解耦,方便移植到不同平台。

相关推荐
北京盟通科技官方账号1 天前
【技术深挖】EtherCAT 如何实现超高精度同步?深度解析分布式时钟 (DC)
网络协议·数据传输·ethercat·智能工厂·盟通科技·windows实时·ec-master
北京盟通科技官方账号3 天前
【技术科普】EtherCAT如何实现高安全性、高可用性与灵活拓扑?
网络拓扑·机器人控制·ethercat·ecmaster·盟通科技·主站开发·主站协议栈
北京盟通科技官方账号16 天前
工业安全:FSoE (Fail Safe over EtherCAT) 常见技术问题解析
安全·具身智能·ethercat·人形机器人·工业安全·fsoe·ecmaster
疆鸿智能研发小助手24 天前
全兼容·真实时·稳如磐石:EtherCAT转Modbus网关赋能医药高端制造
modbus·工业自动化·ethercat·工业通讯·modbus rtu·协议转换网关
沐多1 个月前
IgH EtherCAT主站详解(十六)--Igh主站实时网卡驱动开发指南(以r8169为例)
驱动开发·ethercat·实时linux
【ql君】qlexcel1 个月前
可跑在STM32上的EtherCAT主机协议栈
stm32·soem·ethercat·igh·协议栈
❀搜不到1 个月前
IgH EtherCat主站启动失败
ethercat
沐多1 个月前
IgH EtherCAT主站详解系列文章索引
ethercat主站·ethercat·xenomai·实时linux·preempt-rt
芯智工坊1 个月前
IgH EtherCAT 从入门到精通:第 2 章 环境搭建与编译安装
ethercat