在Studio5000配置AB PLC非周期访问Anybus CompactCom 40 ADI(EtherNet/IP)

13 9月 2023

本文描述了非过程数据的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

用户数据由用户在驱动程序侧定义在ADI中
  1. 首先定义需要的数据变量,如图本次示例定义了两个用于测试的变量,数据类型为UINT32
    • UINT32 ADI_GET_TESTRD;
      UINT32 ADI_GET_TESTWR;
  2. 在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
      };
  3. 如果该变量为参数型数据需要将在定义ADI时设置变量的访问权限,如果参数为只读型,将访问权限设定为APPL_NOT_MAP_READ_ACCESS_DESC,如果参数为可写型,将其访问权限设置为APPL_NOT_MAP_WRITE_ACCESS_DESC。至此ADI已经定义完毕,请注意不要将其映射到APPL_asAdObjDefaultMap数组中。

  4. 有关ADI定义的更多信息请参考《Anybus CompactCom 40 - Software Design Guide》13.4小节

 

非周期读取ADI

对CIP标准对象 ADI object(0xA2)的访问会由Anybus CompactCom 40模块转化为驱动程序中 Application Data Object(0xFE)的请求。通过EtherNet/IP协议中的服务Get_Attribute_Single/Set_Attribute_Single即可实现对ADI数据非周期读/写。
驱动程序中定义的每一个ADI都对应一个CIP ADI Object的实例。CIP ADI Object的实例属性如下,Attribute5为ADI对应数据变量的值。
 
  1. 在AB PLC中通过MESSAGE通信实现Get_Attribute_Single服务即可实现对ADI的读取,本例以ADI(0x06)为例。首先创建PLC工程,本文不在此展示详细的创建步骤。
  2. 在工程项目管理树的Controller Tags->Edit Tags页面下添加2个标签数据Read_Tag与Read_Data.

    1. Read_Data:编辑标签数据名称为Read_Data,设置数据类型为SINT,长度为4,用于存放读取的ADI变量值(UINT32 ADI_GET_TESTRD;)
    2. Read_Tag:编辑标签名称为Read_Tag,设置数据类型为MESSAGE.
  3. 选中Read_Tag,点击鼠标右键,下拉菜单中选择Configure "Read Tag",在弹出的对话框中,设置如下后,点击确定。

    1. Service Type :Get_Attribute_Single
    2. Class ADI Object(0xA2) Instance (0x6) Attribute(5 :Value) 
    3. 数据存放:Read_Data
  4. 进入Communication界面,设置如下后点击确定。
    1.  点击Browse,弹出Message Path Browser界面
    2. 选择与Anybus Compact Com40相连的EtherNet/IP Scanner网络接口,此时网络接口名称会填入Path框中,本例中为Acyclic_read_write_ADI。
    3. 在网络接口名称Acyclic_read_write_ADI添加逗号随后写2,再添加逗号,填写Anynbus CompactCom40模块的IP地址。(path: Acyclic_read_write_ADI,2,192.168.0.9)
  5. 展开“MainProgram”菜单下“MainRoutine”界面,随后在InputOutput界面,点击上方的MSG按钮添加一个“MSG” 指令到Rung0,选择“Read_Tag” 作为“Message Control”。至此完成读数据配置。

  6. 将程序下载至PLC中,进入在线模式,打开Controller Tags->Mointor Tags,展开Read_Tag,Read_Tag.EN由1置0,按Enter键确认,即可触发一次ADI读取。

非周期写ADI

 

  1. 在AB PLC中通过MESSAGE通信实现Set_Attribute_Single服务即可实现对ADI的读取,本例以ADI(0x07)为例。
  2. 在工程项目管理树的Controller Tags->Edit Tags页面下添加2个标签数据Write_Tag与Write_Data.

    1. Write_Data:编辑标签数据名称为Write_Data,设置数据类型为SINT,长度为4,用于存放要写入ADI变量的值(UINT32 ADI_GET_TESTWR;)
    2. Write_Tag:编辑标签名称为Write_Tag,设置数据类型为MESSAGE.
  3. 选中Write_Tag,点击鼠标右键,下拉菜单中选择Configure "Write_Tag",在弹出的对话框中,设置如下后,点击确定。

    1. Service Type :Set_Attribute_Single
    2. Class ADI Object(0xA2) Instance (0x7) Attribute(5 :Value) 
    3. Source Element:Write_Data,Source Length :4
  4. 进入Communication界面,设置如下后点击确定。
    1.  点击Browse,弹出Message Path Browser界面
    2. 选择与Anybus Compact Com40相连的EtherNet/IP Scanner网络接口,此时网络接口名称会填入Path框中,本例中为Acyclic_read_write_ADI。
    3. 在网络接口名称Acyclic_read_write_ADI添加逗号随后写2,再添加逗号,填写Anynbus CompactCom40模块的IP地址。(path:Acyclic_read_write_ADI,2,192.168.0.9)
  5. 展开“MainProgram”菜单下“MainRoutine”界面,点击鼠标右键,下拉菜单中,添加Rung1,随后在InputOutput界面,点击上方的MSG按钮添加一个“MSG” 指令到Rung1,选择“ReadTag” 作为“Message Control”。至此完成写数据配置。
  6. 将程序下载至PLC中,进入在线模式,打开Controller Tags->Mointor Tags,设置Write_Data的值。
  7. 展开Write_Tag,Write_Tag.EN由1置0,按Enter键确认,即可触发一次ADI写入。

 

附加信息

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

官网手册下载地址如下:

Anybus文件和文档 - CompactCom