如何在驱动程序中配置Anybus CompcatCom 40 EtherCAT定义多个PDO

21 2月 2024

本文描述了如何在驱动程序中为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的原理

  1. PDOProcess Data object用于管理配置从站EtherCAT周期性数据每一个PDO对应一组周期性数据组合,每一组PDO在驱动程序中对应appl_adimap_asm.c ADI定义模板中的一组周期性数据组合(APPL_asAsmObjWrite/ReadMap*[]),例程初始定义了3个TPDO(0x1A00~0x1A01)和2个RPDO(0x1600~0x1601)用户可根据实际情况增添,如下图所示。
  2. 详情参考英文手册3.4.2小节、第4章节,实现多个PDO定义需要使能Remap功能以及Assembly Mapping Object (EBh)对象(详情请参考《Anybus CompactCom 40 - Software Design Guide》13.7.5小节)。

 

Anybus CompactCom 40 EtherCAT 定义多个PDO的驱动程序设置

  1. 使能驱动\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
  2. 使能\abcc_adapt\abcc_obj_cfg.h中的ASM_OBJ_ENABLEASM_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
  3. 将\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
  4. 打开\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 }
      };
  5. 如需添加更多数目的PDO,以多添加一个RPDO 0x1602为例
    1. 复制一个APPL_asAsmObjReadMap*结构体数据,将其改名为APPL_asAsmObjReadMap3,在其中添加所需ADI数据
      • const AD_MapType APPL_asAsmObjReadMap3[] = //RPDO 0x1601
        {
        { 2, PD_READ, AD_MAP_ALL_ELEM, 0 },
        { AD_MAP_END_ENTRY }
        };
    2. 复制一个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"
        };

    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 */
        };
  6. 将驱动程序编译下载后,重新驱动模块。

 

重新生成Anybus CompactCom 40 EtherCAT ESI文件

  1. 使用HMS EtherCAT ESI Generator软件重新生成模块的ESI文件
  2. 可将ESI文件导入TwinCAT查看PDO信息

 

附加信息

以上代码仅作参考,不作为功能的最终实现,最终实现需要根据实际情况而定,请您先梳理该功能实现的流程,并参考官网英文手册实现功能需求。

官网手册下载地址如下:

Anybus文件和文档 - CompactCom