EtherCAT AOE
目录
- 前言
- 集成
- SSC
- XML
- 代码分析
- 测试
- 问题
- 参考文档
前言
AoE(ADS over EtherCAT)的优势:
传统方式依赖SDO下载/上传组合(命令对象),但这种方式效率低,因为至少需要两次完整SDO通信,导致额外开销。
在需要高效并行非周期性通信的场景下,AoE比SDO更优,因其避免了SDO的串行限制,通过Invoke ID实现多请求并发处理。
集成
SSC
SSC里打开AOE支持
Project -》 Create New Slave File,生成代码和XML
XML
Aoe增加三个属性如下
<Mailbox DataLinkLayer="true"><AoE AdsRouter="1" GenerateOwnNetId="1" InitializeOwnNetId="0"/>......
</Mailbox>
代码分析
增加两个源文件如下
aoeappl.c
ecataoe.c
aoeappl.c中提供了example,可以直接运行。(下面代码有精简)
UINT16 AOEAPPL_AmsInd(AmsCmd MBXMEM *pCmd)
{/* only port 65535 (for the device itself) is valid in this example */if ( port == 65535 ){switch ( indexGroup ){case ADSIGRP_CANOPEN_SDO: /* SDO-Request */UINT16 index = (UINT16) (indexOffset >> 16);UINT8 subindex = (UINT8) (indexOffset & 0xFF);OBJCONST TOBJECT OBJMEM * pObjEntry = OBJ_GetObjectHandle( index );if ( cmdId == ADSSRVID_READ ){result = OBJ_Read( index, subindex, dataLen, pObjEntry, (UINT16 MBXMEM *) &pRes[1], bCompleteAccess );pRes->cbLength = dataLen;pRes->result = 0;AOE_AmsRes((AmsCmd MBXMEM *) pRes, result,(UINT16) dataLen+SIZEOF_TAdsReadRes);return result;} else{}}
}
可以获得信息如下:
port设置为65535
index和subindex设置为COE中的,比如index = 0x1018, Subindex = 0x01, 对应EtherCAT Vendor ID
index group设置为ADSIGRP_CANOPEN_SDO(0xF302)
测试
Aoe - online 选项卡中填写正确信息,点击read即可
正常运行情况下,应该可以看到Vendor ID
问题
如果平台发生非对齐hardfault,参考
https://blog.csdn.net/qq_42039294/article/details/148402099
参考文档
EtherCAT Protocol Enhancements
Document: ETG.1020 S (D) V1.3.1