本文描述了如何在驱动程序中为Anybus CompactCom 40 EtherCAT定义多个PDO,文中首先说明了定义该功能的原理,并给出了参考示例
适用产品
AB6607-C, Anybus CompactCom for EtherCAT M40
AB6639-C, Anybus CompactCom for EtherCAT M40 with Transparent Ethernet
AB6645-C, Anybus CompactCom for EtherCAT M40 with M12 connectors
AB6677-C, Anybus CompactCom for EtherCAT B40
AB6707-C, Anybus CompactCom for EtherCAT M40 without housing
AB6739-C, Anybus CompactCom for EtherCAT M40 with Transparent Ethernet without housing
AB6745-C, Anybus CompactCom for EtherCAT M40 with M12 connectors without housing
AB6779-C, Anybus CompactCom for EtherCAT B40 with Transparent Ethernet
注意事项
如需了解更多信息请参考官网英文手册:
《Anybus CompactCom 40 - EtherCAT Network Guide》
《Anybus CompactCom 40 - Software Design Guide》
本示例建立在Anybus CompactCom 40 EterhCAT模块驱动以及移植成功,并且可以正常与主站通信.
本次测试使能了驱动程序\example_app\appl_adimap_asm.c ADI定义模板。
目录
- Anybus CompactCom 40 EtherCAT 定义多个PDO的原理
- Anybus CompactCom 40 EtherCAT 定义多个PDO的驱动程序设置
- 重新生成Anybus CompactCom 40 EtherCAT ESI文件
Anybus CompactCom 40 EtherCAT 定义多个PDO的原理
-
PDO即Process Data object用于管理配置从站EtherCAT周期性数据,每一个PDO对应一组周期性数据组合,每一组PDO在驱动程序中对应appl_adimap_asm.c ADI定义模板中的一组周期性数据组合(APPL_asAsmObjWrite/ReadMap*[]),例程初始定义了3个TPDO(0x1A00~0x1A01)和2个RPDO(0x1600~0x1601)用户可根据实际情况增添,如下图所示。
-
详情参考英文手册3.4.2小节、第4章节,实现多个PDO定义需要使能Remap功能以及Assembly Mapping Object (EBh)对象(详情请参考《Anybus CompactCom 40 - Software Design Guide》13.7.5小节)。
Anybus CompactCom 40 EtherCAT 定义多个PDO的驱动程序设置
- 使能驱动\abcc_adapt\abcc_drv_cfg.h的中的
ABCC_CFG_REMAP_SUPPORT_ENABLED
宏定义-
/*------------------------------------------------------------------------------
** Remap support configuration
**
** Check the descriptions in "./abcc_drv/inc/abcc_cfg.h" for more information
** about the purpose of each separate 'define'.
**------------------------------------------------------------------------------
*/
#ifndef ABCC_CFG_REMAP_SUPPORT_ENABLED
#define ABCC_CFG_REMAP_SUPPORT_ENABLED ( TRUE )
#endif
-
-
使能\abcc_adapt\abcc_obj_cfg.h中的
ASM_OBJ_ENABLE
、ASM_IA_NAME_ENABLE
宏定义-
#ifndef ASM_OBJ_ENABLE
#define ASM_OBJ_ENABLE TRUE
#endif
#if ASM_OBJ_ENABLE
/*
** Attribute 13: Name (Array of CHAR - {0x00-0xFF))
*/
#ifndef ASM_IA_NAME_ENABLE
#define ASM_IA_NAME_ENABLE TRUE
#endif
-
- 将\example_app\appl_adi_config.h中的APPL_ACTIVE_ADI_SETUP 设置为APPL_ADI_SETUP_ASM
-
#ifndef APPL_ACTIVE_ADI_SETUP
#ifdef USE_BOARD_SPECIFIC_ADI_SETUP
#define APPL_ACTIVE_ADI_SETUP APPL_ADI_SETUP_SIMPLE_16
#else
#define APPL_ACTIVE_ADI_SETUP APPL_ADI_SETUP_ASM
#endif
#endif
-
- 打开\example_app\appl_adimap_asm.c文件,可在APPL_asAdiEntryList[]添加ADI,并添加到APPL_asAsmObjWrite/ReadMap*[]等系列数组中,通过增删ADI条目数,即可修改PDO周期过程数据内容,ADI定义请参考英文指导手册。本次测试使用示例ADI定义。
-
const AD_MapType APPL_asAsmObjWriteMap1[] = //TPDO 0x1A00 Input Data
{
{ 1, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ 3, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
const AD_MapType APPL_asAsmObjWriteMap2[] = //TPDO 0x1A01
{
{ 1, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
const AD_MapType APPL_asAsmObjWriteMap3[] = //TPDO 0x1A02
{
{ 3, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
/*------------------------------------------------------------------------------
** Example read maps.
**------------------------------------------------------------------------------
*/
const AD_MapType APPL_asAsmObjReadMap1[] = //RPDO 0x1600 Output data
{
{ 2, PD_READ, AD_MAP_ALL_ELEM, 0 },
{ 4, PD_READ, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
const AD_MapType APPL_asAsmObjReadMap2[] = //RPDO 0x1601
{
{ 2, PD_READ, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
-
- 如需添加更多数目的PDO,以多添加一个RPDO 0x1602为例
- 复制一个APPL_asAsmObjReadMap*结构体数据,将其改名为APPL_asAsmObjReadMap3,在其中添加所需ADI数据
-
const AD_MapType APPL_asAsmObjReadMap3[] = //RPDO 0x1601
{
{ 2, PD_READ, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
-
- 复制一个APPL_sAsmReadMapInst*结构体数据,将其命名为APPL_sAsmReadMapInst3,修改该结构体数据的内容如下与APPL_asAsmObjReadMap3绑定。
-
//结构体中各变量含义
{
--PDO访问权限 详情查看《Anybus CompactCom 40 - Software Design Guide》13.7.5小节 “Assembly
descriptor ”--
--PDO所对应ADI过程数据映射数组--
--PDO名称--
}
const ASM_InstanceType APPL_sAsmReadMapInst3 =
{
ABP_ASM_IA_DESC_READ | ABP_ASM_IA_DESC_STATIC | ABP_ASM_IA_DESC_PD_MAPPABLE,
APPL_asAsmObjReadMap3,
"Read mappable assembly 3"
};
-
- 将APPL_sAsmReadMapInst3结构体指针添加至APPL_aasAsmInstances[]数组中,添加位置如下所示,其中每一个Instance即为Assembly Mapping Object (EBh) 对象的一个实例
-
const ASM_InstanceType* APPL_aasAsmInstances[] =
{
&APPL_sAsmWriteMapInst1, /* Instance 1 */
&APPL_sAsmWriteMapInst2, /* Instance 2 */
&APPL_sAsmWriteMapInst3, /* Instance 3 */
&APPL_sAsmWriteNonMapInst, /* Instance 4 */
&APPL_sAsmReadMapInst1, /* Instance 5 */
&APPL_sAsmReadMapInst2, /* Instance 6 */
&APPL_sAsmReadMapInst3, /* Instance 7 */
&APPL_sAsmReadNonMapInst /* Instance 8 */
};
- 复制一个APPL_asAsmObjReadMap*结构体数据,将其改名为APPL_asAsmObjReadMap3,在其中添加所需ADI数据
- 将驱动程序编译下载后,重新驱动模块。
重新生成Anybus CompactCom 40 EtherCAT ESI文件
- 使用HMS EtherCAT ESI Generator软件重新生成模块的ESI文件
-
可将ESI文件导入TwinCAT查看PDO信息
附加信息
以上代码仅作参考,不作为功能的最终实现,最终实现需要根据实际情况而定,请您先梳理该功能实现的流程,并参考官网英文手册实现功能需求。
官网手册下载地址如下: