本文描述了非过程数据的ADI定义以及在studio5000软件配置AB PLC非周期访问ADI.
适用产品
AB6604 、AB6674、AB6610 (烧写EtherNet/IP协议固件)、AB6680(烧写EtherNet/IP协议固件)
注意事项
本文描述了如何使用AB PLC非周期访问Anybus Compact Com ADI,更多详细信息请参考官网手册:
《Anybus CompactCom 40 - Software Design Guide》
《Anybus CompactCom 40 - Host Application Implementation Guide》
《Anybus CompactCom 40 - EtherNet/IP Network Guide》
本示例建立在Anybus CompactCom 40模块已经驱动成功,并且可以正常与主站通信.
本次测试使能了appl_adimap_simple16.c ADI设置模板。
目录
- 定义非过程数据ADI
- 非周期读取ADI
- 非周期写入ADI
定义非过程数据ADI
- 首先定义需要的数据变量,如图本次示例定义了两个用于测试的变量,数据类型为UINT32
-
UINT32 ADI_GET_TESTRD;
UINT32 ADI_GET_TESTWR;
-
- 在const AD_AdiEntryType APPL_asAdiEntryList[]添加与变量相应的ADI,ADI实例编号分别为0x06 0x07
-
/*-------------------------------------------------------------------------------------------------------------
** 1. iInstance | 2. pabName | 3. bDataType | 4. bNumOfElements | 5. bDesc | 6. pxValuePtr | 7. pxValuePropPtr
**--------------------------------------------------------------------------------------------------------------
*/各参数含义
const AD_AdiEntryType APPL_asAdiEntryList[] =
{
{ 0x1, "ControlWord", ABP_UINT16, 1, APPL_READ_MAP_WRITE_ACCESS_DESC,{ { &CtrolWord, &appl_sUint16Prop } } },
{ 0x2, "SpeedRef", ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC,{ { &SpeedRef, &appl_sUint32Prop } } },
{ 0x3, "StatusWord", ABP_UINT16, 1, APPL_WRITE_MAP_READ_ACCESS_DESC,{ { &StatusWord, &appl_sUint16Prop } } },
{ 0x4, "SpeedActual", ABP_UINT32, 1, APPL_WRITE_MAP_READ_ACCESS_DESC,{ { &SpeedActual, &appl_sUint32Prop } } },
{ 0x5, "InputDI8", ABP_UINT8, 1, APPL_WRITE_MAP_READ_ACCESS_DESC,{ { &InputDI8, &appl_sUint8Prop } } },
{ 0x6, "ADI_GET_TEST_IR", ABP_UINT32, 1, APPL_NOT_MAP_READ_ACCESS_DESC,{ { &ADI_GET_TESTRD, &appl_sUint32Prop } }},//Input parameter INIT to 5
{ 0x7, "ADI_SET_TEST_OW", ABP_UINT32, 1, APPL_NOT_MAP_WRITE_ACCESS_DESC,{ { &ADI_GET_TESTWR, &appl_sUint32Prop } }},//Output parameter
};
-
-
如果该变量为参数型数据需要将在定义ADI时设置变量的访问权限,如果参数为只读型,将访问权限设定为APPL_NOT_MAP_READ_ACCESS_DESC,如果参数为可写型,将其访问权限设置为APPL_NOT_MAP_WRITE_ACCESS_DESC。至此ADI已经定义完毕,请注意不要将其映射到APPL_asAdObjDefaultMap数组中。
- 有关ADI定义的更多信息请参考《Anybus CompactCom 40 - Software Design Guide》13.4小节
非周期读取ADI
- 在AB PLC中通过MESSAGE通信实现Get_Attribute_Single服务即可实现对ADI的读取,本例以ADI(0x06)为例。首先创建PLC工程,本文不在此展示详细的创建步骤。
-
在工程项目管理树的Controller Tags->Edit Tags页面下添加2个标签数据Read_Tag与Read_Data.
- Read_Data:编辑标签数据名称为Read_Data,设置数据类型为SINT,长度为4,用于存放读取的ADI变量值(UINT32 ADI_GET_TESTRD;)
- Read_Tag:编辑标签名称为Read_Tag,设置数据类型为MESSAGE.
- Read_Data:编辑标签数据名称为Read_Data,设置数据类型为SINT,长度为4,用于存放读取的ADI变量值(UINT32 ADI_GET_TESTRD;)
-
选中Read_Tag,点击鼠标右键,下拉菜单中选择Configure "Read Tag",在弹出的对话框中,设置如下后,点击确定。
- Service Type :Get_Attribute_Single
- Class ADI Object(0xA2) Instance (0x6) Attribute(5 :Value)
- 数据存放:Read_Data
- 进入Communication界面,设置如下后点击确定。
- 点击Browse,弹出Message Path Browser界面
- 选择与Anybus Compact Com40相连的EtherNet/IP Scanner网络接口,此时网络接口名称会填入Path框中,本例中为Acyclic_read_write_ADI。
- 在网络接口名称Acyclic_read_write_ADI添加逗号随后写2,再添加逗号,填写Anynbus CompactCom40模块的IP地址。(path: Acyclic_read_write_ADI,2,192.168.0.9)
- 展开“MainProgram”菜单下“MainRoutine”界面,随后在InputOutput界面,点击上方的MSG按钮添加一个“MSG” 指令到Rung0,选择“Read_Tag” 作为“Message Control”。至此完成读数据配置。
-
- 将程序下载至PLC中,进入在线模式,打开Controller Tags->Mointor Tags,展开Read_Tag,Read_Tag.EN由1置0,按Enter键确认,即可触发一次ADI读取。
非周期写ADI
- 在AB PLC中通过MESSAGE通信实现Set_Attribute_Single服务即可实现对ADI的读取,本例以ADI(0x07)为例。
-
在工程项目管理树的Controller Tags->Edit Tags页面下添加2个标签数据Write_Tag与Write_Data.
- Write_Data:编辑标签数据名称为Write_Data,设置数据类型为SINT,长度为4,用于存放要写入ADI变量的值(UINT32 ADI_GET_TESTWR;)
- Write_Tag:编辑标签名称为Write_Tag,设置数据类型为MESSAGE.
- Write_Data:编辑标签数据名称为Write_Data,设置数据类型为SINT,长度为4,用于存放要写入ADI变量的值(UINT32 ADI_GET_TESTWR;)
-
选中Write_Tag,点击鼠标右键,下拉菜单中选择Configure "Write_Tag",在弹出的对话框中,设置如下后,点击确定。
- Service Type :Set_Attribute_Single
- Class ADI Object(0xA2) Instance (0x7) Attribute(5 :Value)
- Source Element:Write_Data,Source Length :4
- 进入Communication界面,设置如下后点击确定。
- 点击Browse,弹出Message Path Browser界面
- 选择与Anybus Compact Com40相连的EtherNet/IP Scanner网络接口,此时网络接口名称会填入Path框中,本例中为Acyclic_read_write_ADI。
- 在网络接口名称Acyclic_read_write_ADI添加逗号随后写2,再添加逗号,填写Anynbus CompactCom40模块的IP地址。(path:Acyclic_read_write_ADI,2,192.168.0.9)
- 展开“MainProgram”菜单下“MainRoutine”界面,点击鼠标右键,下拉菜单中,添加Rung1,随后在InputOutput界面,点击上方的MSG按钮添加一个“MSG” 指令到Rung1,选择“ReadTag” 作为“Message Control”。至此完成写数据配置。
- 将程序下载至PLC中,进入在线模式,打开Controller Tags->Mointor Tags,设置Write_Data的值。
- 展开Write_Tag,Write_Tag.EN由1置0,按Enter键确认,即可触发一次ADI写入。
附加信息
以上代码仅作参考,不作为功能的最终实现,最终实现需要根据实际情况而定,请您先梳理该功能实现的流程,并参考官网英文手册实现功能需求。
官网手册下载地址如下: