本文描述了Anybus CompactCom 40 DeviceNet模块的ADI重映射(Remap)功能相关的驱动程序设置以及与重映射相关的对象实例属性,并基于HMS DeviceNet Master simulator主站仿真软件进行了Remap功能测试。
所述ADI重映射(Remap)是指在Anybus CompactCom40 DeviceNet模块运行过程中,无需修模块改驱动程序,即可实现CIP周期性过程数据组合实例(Assmebly instance)的修改。
使用产品
AB6601、AB6671
注意事项
所使用的DeviceNet主站需要支持CIP协议所规定的基于显式消息的服务:获取属性服务(Get_Attribute())与设置属性服务(Set_Attribute()),更多信息请参考官网英文手册:
更多详细信息请参考官网手册:
《Anybus CompactCom 40 - Software Design Guide》
《Anybus CompactCom 40 - DeviceNet Network Guide》
本示例建立在Anybus CompactCom 40模块已经驱动成功,并且可以正常与主站通信.
本次测试使能了驱动程序appl_adimap_asm.c ADI设置模板。
目录
- Anybus CompactCom40 DeviceNet ADI重映射功能实现原理
- Anybus CompactCom40 DeviceNet ADI重映射功能相关的驱动程序设置
- Anybus CompactCom40 DeviceNet ADI重映射功能测试
Anybus CompactCom40 DeviceNet ADI重映射功能实现原理
- ADI重映射由于DeviceNet网络侧主站设备访问周期性过程数据的路径发生变化产生,在模块与PLC通信建立时,由DeviceNet主站发送Explicit Messages设置 CIP 对象Connection object(05h)的instance#2 Attribute#14(INPUT Data)与#16(OUTPUT Data),即周期数据访问组合实例号。随后通过设置 CIP 对象Connection object(05h)的instance#2 Attribute#9(Expected Packet Data)触发remap命令。实现ADI映射修改。
- 详情请参考英文手册《Anybus CompactCom 40 DeviceNet™NETWORK GUIDE》3.5与4.6小节。
-
通信数据组合实例号由驱动程序的DeviceNet Host Object(0xFC)对象预定义,每一个实例号对应一个ADI映射数组,通过DeviceNet主站更改数据访问组合实例路径即可触发remap命令,Remap命令根据Connection object(05h)所指定的访问路径设定新的ADI映射数组,作为新的周期性过程数据参与DeviceNet网络通信。
Anybus CompactCom40 DeviceNet ADI重映射功能相关的驱动程序设置
- 使能驱动\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中的
DEV_OBJ_ENABLE
、ASM_OBJ_ENABLE
、ASM_IA_NAME_ENABLE
宏定义-
#ifndef DEV_OBJ_ENABLE
#define DEV_OBJ_ENABLE TRUE
#endif
#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
-
-
\abcc_adapt\abcc_identification.h 所有关于DeviceNet的宏定义说明:该属性中的DEV_IA_VENDOR_ID_VALUE(厂商ID)需要由贵司向ODVA协会申请,其余属性根据需求进行修改,同时需要对EDS文件中的对应属性描述做出修改,初始测试阶段,将下列宏定义设置为FALSE即可。
-
#if DEV_OBJ_ENABLE
/*
** Attribute 1: Vendor ID (UINT16 - 0x0000-0xFFFF)
*/
#ifndef DEV_IA_VENDOR_ID_ENABLE
#define DEV_IA_VENDOR_ID_ENABLE FLASE
#define DEV_IA_VENDOR_ID_VALUE 0x0090
#endif
/*
** Attribute 2: Device type (UINT16 - 0x0000-0xFFFF)
*/
#ifndef DEV_IA_DEVICE_TYPE_ENABLE
#define DEV_IA_DEVICE_TYPE_ENABLE FLASE
#define DEV_IA_DEVICE_TYPE_VALUE 0x0043
#endif
/*
** Attribute 3: Product code (UINT16 - 0x0000-0xFFFF)
*/
#ifndef DEV_IA_PRODUCT_CODE_ENABLE
#define DEV_IA_PRODUCT_CODE_ENABLE FLASE
#define DEV_IA_PRODUCT_CODE_VALUE 0x0063
#endif
/*
** Attribute 4: Revision (Array of UINT8 - {0x01-0xFF})
*/
#ifndef DEV_IA_REVISION_ENABLE
#define DEV_IA_REVISION_ENABLE FALSE
#define DEV_IA_REVISION_MAJOR_VALUE 5
#define DEV_IA_REVISION_MINOR_VALUE 5
#endif
/*
** Attribute 5: Serial number (UINT32 - function/variable/0x00000000-0xFFFFFFFF)
*/
#ifndef DEV_IA_SERIAL_NUMBER_ENABLE
#define DEV_IA_SERIAL_NUMBER_ENABLE FLASE
#define DEV_IA_SERIAL_NUMBER_VALUE 0x12345678
#endif
/*
** Attribute 6: Product name (Array of CHAR)
*/
#ifndef DEV_IA_PRODUCT_NAME_ENABLE
#define DEV_IA_PRODUCT_NAME_ENABLE FLASE
#define DEV_IA_PRODUCT_NAME_VALUE "CompactCom 40 DeviceNet(TM)"
#endif
#endif /* #if DEV_OBJ_ENABLE */
-
- 将\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条目数,即可修改周期过程数据内容,有关ADI定义请参考英文指导手册。本次测试使用示例ADI定义。
-
INPUT DATA
const AD_MapType APPL_asAsmObjWriteMap1[] = //0x96
{
{ 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[] = //0x97
{
{ 1, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
const AD_MapType APPL_asAsmObjWriteMap3[] = //0x98
{
{ 3, PD_WRITE, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
/*------------------------------------------------------------------------------
** Example read maps.
**------------------------------------------------------------------------------
*/
OUTPUT DATA
const AD_MapType APPL_asAsmObjReadMap1[] = //0x64
{
{ 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[] = //0x65
{
{ 2, PD_READ, AD_MAP_ALL_ELEM, 0 },
{ AD_MAP_END_ENTRY }
};
-
- 修改EDS文件,将所访问组合实例号设置与需求一致
-
示例程序\example_app\appl_adimap_asm.c\ADI定义及过程数据映射(组合实例号)对应关系,用户可根据实际需求增删
/******************************ADI定义******************************************/
const AD_AdiEntryType APPL_asAdiEntryList[] =
{
{ 0x1, "ABP_UINT32", ABP_UINT32, 1, APPL_WRITE_MAP_READ_ACCESS_DESC, { { &appl_lUint32, &appl_sUint32Prop } } },
{ 0x2, "ABP_SINT32", ABP_SINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, { { &appl_lInt32, &appl_sSint32Prop } } },
{ 0x3, "ABP_UINT16", ABP_UINT16, 1, APPL_WRITE_MAP_READ_ACCESS_DESC, { { &appl_iUint16, &appl_sUint16Prop } } },
{ 0x4, "ABP_SINT16", ABP_SINT16, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, { { &appl_iInt16, &appl_sSint16Prop } } }
};
/******************************************************************************/
/*******************DeviceNet数据组合实例号************************************/
const UINT16 DEV_aiProdInstNumList[] =
{
0x0096,
0x0097,
0x0098
};
const UINT16 DEV_aiConsInstNumList[] =
{
0x0064,
0x0065
};
/*****************************对应关系************************************/
|-----组合实例号:0x96------|-----对应映射数组APPL_asAsmObjWriteMap1[]------|----INPUT Data-----|---字节数:6---|
|-----组合实例号:0x97------|-----对应映射数组APPL_asAsmObjWriteMap2[]------|----INPUT Data-----|---字节数:4---|
|-----组合实例号:0x98------|-----对应映射数组APPL_asAsmObjWriteMap3[]------|----INPUT Data-----|---字节数:2---|
|-----组合实例号:0x64------|-----对应映射数组APPL_asAsmObjReadMap1[]------|----OUTPUT Data-----|---字节数:6---|
|-----组合实例号:0x65------|-----对应映射数组APPL_asAsmObjReadMap2[]------|----OUTPUT Data-----|---字节数:4---|
Anybus CompactCom40 DeviceNet ADI重映射功能测试
- 本次测试基于HMS DeviceNet模拟主站软件,使用CIP Explicit messages通讯的 Set_Attribute服务,设置通信数据组合实例号,默认为0x96(INPUT) 0x64(OUTPUT) ,修改为0x97(INPUT) 0x65(OUTPUT)
- 通信实例由0x96、0x64变为0x97 0x65 通信数根据ADI重映射的变化而变化
- 通信实例为0x96,0x64时,通信数据为
APPL_asAsmObjWriteMap1
APPL_asAsmObjReadMap1
- 通信实例为0x97,0x65时,通信数据为
APPL_asAsmObjWriteMap2
APPL_asAsmObjReadMap2
- 通信实例为0x96,0x64时,通信数据为
附加信息
以上代码仅作参考,不作为功能的最终实现,最终实现需要根据实际情况而定,请您先梳理该功能实现的流程,并参考官网英文手册实现功能需求。
官网手册下载地址如下: