目录
1、EtherCAT从站开发工具
(1) SSC TOOL软件工具
(2) excel表格,如下示例
2、从站代码架构图
(1)从站代码架构
(2)EtherCAT帧格式详解
3、从站文件概要
4、从站代码执行架构
5、中断处理
5.1 中断源有四个
5.2 中断处理API
6、过程数据处理
6.1 输出映射
6.2 输入映射
7、接口函数(需要用户实现)
7.1 通用接口
7.2 EtherCAT 状态机接口
7.3 过程数据处理接口
7.4 邮箱处理接口
8、对象字典索引范围
9、同步
9.1 ESC中断信号
编辑9.2 支持的同步模式
(1) Free Run
(2) SM
(3) SM/Sync0
(4) SM/Sync0/Sync1
(5) Sync0
(6) Sync0/Sync1
编辑(7) Subordinated Cycles
10、CiA402 state transitons and option codes
11、Excel应用示例
11.1 PDO映射和SM分配对象
11.2 Excel语法
12、过程数据
13、EtherCAT状态机
重要问题汇总
1、wState不能显示状态的问题
注:本文主要摘自《Application Note ET9300(EtherCAT Slave Stack Code)》。
本文主要简述EtherCAT从站开发关键知识点:COE对象字典、PDO、SDO、状态机、同步模式、关键API接口等。【其他知识盲点后续逐渐补充完善】
0、常见缩写和关键字注释
AoE、FoE、EoE、SoE、VoE、CoE 解释见[第2章-从站代码架构图]章节。
DC: Distributed Clock, 分布式时钟;
ENI: EtherCAT Network Information(EtherCAT XML Master Configuration),EtherCAT网络信息;
DPRAM:Dual-Ported RAM,双端口RAM;
EoE: Ethernet over EtherCAT, 基于EtherCAT的以太网;
ESC:EtherCAT Slave Controller,EtherCAT从站控制器;
ESI:EtherCAT Slave Information(EtherCAT XML Devices Description),EtherCAT从站信息;
ESM:EtherCAT State Machine,EtherCAT状态机;
ETG:EtherCAT Technology Group;
FMMU: Fieldbus Memory Management Unit;
MDP: Modular Device Protocol;
OD: Object Dictionary, 对象字典;
PDO: Process Data Object, 过程数据对象;
SDO:Service Data Object, 服务数据对象;
DLPDU:数据链路层处理数据单元;
SM: Sync Manager, 同步管理;
SII:从站信息接口;
SOP:Start of Frame, 开始帧;
NIC:Network Interface Card,即网卡。
/* excel表中 ObjectCode类型解释 */
VARIABLE: 只有一个基本数据类型作为一个对象
ARRAY: 相同基本数据类型的集合作为一个对象
RECORD: 将不同基本数据类型的集合作为一个对象
该软件自动生成EtherCAT从站核心代码。
说明:该表格用来配置对象字典,SSC工具导入该表格自动生成EtherCAT从站代码和xml设备描述文件。
基于EtherCAT总线的应用层协议有AoE、FoE、EoE、SoE、VoE、CoE,各个协议的具体描述如下:
AoE | ADS over EtherCAT | ADS(Automation Device Specification), 由Message Router统一交换数据, ADS路由器看成虚拟的路由器 |
FoE | File Access over EtherCAT | 在EtherCAT总线上传输文件的协议 |
EoE | EtherCAT over EtherCAT | 在EtherCAT总线上执行Ethernet协议 |
SoE | Servo Drive Profile over EtherCAT | 在EtherCAT总线上执行SERCOS协议 |
VoE | Vendor Specific Protocol over EtherCAT | 供应商自定义协议,基于邮箱 |
CoE | CAN Application Protocol over EtherCAT | 在EtherCAT总线上执行CANopen协议 |
Datagram Header帧结构:cmd | idx | Address | Len | IRQ 。
不同寻址方式,报文头的Address字段组成也有所不同。
EtherCAT寻址方式只有4种:位置寻址(Position address)、节点寻址(Node address)、广播寻址(Broadcast address)、逻辑寻址(Logical address)。表中为不同的cmd所采用的寻址方式。
(1) 定时器中断:平台内部1ms定时器设置EtherCAT led和看门狗。如果没有配置定时器中断(ECAT-TIMER_INT = 0),所需的1ms周期基于主循环和平台内部计数器。
(2) Sync0: 使用分布式时钟(DC)处理数据和应用程序同步。
(3) Sync1: 使用分布式时钟(DC)处理数据和应用程序同步。
(4) PDI中断:进程数据处理和应用程序同步。
void ECAT_CheckTimer(void);
void PDI_Isr(void);
void Sync0_Isr(void);
void Sync1_Isr(void);
void APPL_Application(void);
UINT16 APPL_GetDeviceID(void);
UINT16 (*pAPPL_EEPROM_Read)(UINT32 wordaddr);
UINT16 (*pAPPL_EEPROM_Write)(UINT32 wordaddr);
UINT16 (*pAPPL_EEPROM_Reload))(void);
UINT16 (*pAPPL_EEPROM_Store))(void);
void (*pAPPL_MainLoop)(void);
UINT16 APPL_StartMailboxHandler(void);
UINT16 APPL_StopMailboxHandler(void);
UINT16 APPL_StartInputHandler(UINT16 *pIntMask);
UINT16 APPL_StopInputHandler(void);
UINT16 APPL_GenerateMapping(UINT16 *pInputSize, UINT16 *pOutputSize);
void APPL_AckErrorInd(UINT16 stateTrans);
void APPL_InputMapping(UINT16 *pData);
void APPL_OutputMapping(UINT16 *pData);
void (*pAPPL_CoEReadInd)(UINT16 Index, UINT8 Subindex, BOOL CompleteAccess);
void (*pAPPL_CoEWriteInd)(UINT16 Index, UINT8 Subindex, BOOL CompleteAccess);
void (*pAPPL_EoeReceive)(UINT16 *pData, UINT16 length);
void (*pAPPL_EoeSettingInd)(UINT16 *pMac, UINT16 *plp, UINT16 *pSuvNet, UINT16 *pDefaultGateway, UINT16 *pDnsIP);
UINT16 (*pAPPL_FoeRead)(UINT16 MBXMEM *pName, UINT16 nameSize, UINT32 password, UINT16 maxBlockSize, UINT16 *pData);
UINT16 (*pAPPL_FoeReadData)(UINT32 offset, UINT16 maxBlockSize, UINT16 *pData);
void (*pAPPL_FoeError)(UINT32 errorCode);
UINT16 (*pAPPL_FoeWrite)(UINT16 MBXMEM *pName, UINT16 nameSize, UINT32 password);
UINT16 (*pAPPL_FoeWriteData)( UINT16 MBXMEM *pData, UINT16 Size, BOOL bDataFollowing);
(1) Default / Min / Max
(2) M/O/S :mandatory ,optional or conditional.
(3) B/S: backup or settion object;
(4) rx/tx : output ,input
(5) access:
(6) CoeRead/CoeWrite
(7) ENUM(枚举)
补充:
COE 对象字典和PDO映射简介文章参考:【EtherCAT】COE对象字典与PDO映射简介_pdo映射是什么意思_小可嵌入式的博客-CSDN博客
PLC程序需加如下指令(方法来自网上,亲测有效):
注意如果未加该段指令AM600 ECT模块其状态一直会为ETC_SLAVE_BOOT,加上后可正常显示从站状态。
【未测试】当EtherCAT组网中包含伺服与及ECT模块时,wState不能正确反映ECT模块的状态机,此时可以用m_wSlaveStateAct反映所有从站的状态机。实际上,Ethercat芯片(ET1100)寄存器地址0x0130:0x0131的值为从站设备的状态,该值的意义如下图所示。从站变量m_wSlaveStateAct获取的即为Ethercat芯片(ET1100)寄存器地址0x0130:0x0131的值。编程时可以通过m_wSlaveStateAct来获取从站的状态机。