赞
踩
目录
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: 将不同基本数据类型的集合作为一个对象
-
-
该软件自动生成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来获取从站的状态机。
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),整体过程数据是分包发送的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。