目录
10、CiA402 state transitons and option codes
注:本文主要摘自《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: 将不同基本数据类型的集合作为一个对象
1、EtherCAT从站开发工具
(1) SSC TOOL软件工具
该软件自动生成EtherCAT从站核心代码。
(2) excel表格,如下示例
说明:该表格用来配置对象字典,SSC工具导入该表格自动生成EtherCAT从站代码和xml设备描述文件。
2、从站代码架构图
(1)从站代码架构
基于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协议 |
(2)EtherCAT帧格式详解
(3)Datagram Header解析和寻址方式简介
Datagram Header帧结构:cmd | idx | Address | Len | IRQ 。
不同寻址方式,报文头的Address字段组成也有所不同。
EtherCAT寻址方式只有4种:位置寻址(Position address)、节点寻址(Node address)、广播寻址(Broadcast address)、逻辑寻址(Logical address)。表中为不同的cmd所采用的寻址方式。
3、从站文件概要
4、从站代码执行架构
5、中断处理
5.1 中断源有四个
(1) 定时器中断:平台内部1ms定时器设置EtherCAT led和看门狗。如果没有配置定时器中断(ECAT-TIMER_INT = 0),所需的1ms周期基于主循环和平台内部计数器。
(2) Sync0: 使用分布式时钟(DC)处理数据和应用程序同步。
(3) Sync1: 使用分布式时钟(DC)处理数据和应用程序同步。
(4) PDI中断:进程数据处理和应用程序同步。
5.2 中断处理API
void ECAT_CheckTimer(void);
void PDI_Isr(void);
void Sync0_Isr(void);
void Sync1_Isr(void);
6、过程数据处理
6.1 输出映射
6.2 输入映射
7、接口函数(需要用户实现)
7.1 通用接口
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);
7.2 EtherCAT 状态机接口
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);
7.3 过程数据处理接口
void APPL_InputMapping(UINT16 *pData);
void APPL_OutputMapping(UINT16 *pData);
7.4 邮箱处理接口
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);
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语法
(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(枚举)
12、过程数据
13、EtherCAT状态机
补充:
COE 对象字典和PDO映射简介文章参考:【EtherCAT】COE对象字典与PDO映射简介_pdo映射是什么意思_小可嵌入式的博客-CSDN博客
重要问题汇总
1、wState不能显示状态的问题
PLC程序需加如下指令(方法来自网上,亲测有效):
注意如果未加该段指令AM600 ECT模块其状态一直会为ETC_SLAVE_BOOT,加上后可正常显示从站状态。
【未测试】当EtherCAT组网中包含伺服与及ECT模块时,wState不能正确反映ECT模块的状态机,此时可以用m_wSlaveStateAct反映所有从站的状态机。实际上,Ethercat芯片(ET1100)寄存器地址0x0130:0x0131的值为从站设备的状态,该值的意义如下图所示。从站变量m_wSlaveStateAct获取的即为Ethercat芯片(ET1100)寄存器地址0x0130:0x0131的值。编程时可以通过m_wSlaveStateAct来获取从站的状态机。
2、wiresshark抓EtheCAT包示例
示例: eth.src == 68:05:ca:35:c5:77 && (ecat.cmd == 5)
3、重要总结
(1) twincat发送过程数据是input/output分开发下去的, input size/outsize 实际最大值为1481(1520-39),整体过程数据是分包发送的。