在西门子TIA Portal中配置非周期访问Anybus CompactCom 40 ADI (PROFIBUS)

12 9月 2023

本文描述了非过程数据的ADI定义以及在西门子TIA Portal(V14)软件配置非周期访问ADI.

 

适用产品

AB6600、AB6670

注意事项

本文描述了如何通过西门子PLC非周期访问ADI,更多详细信息请参考官网手册:

《Anybus CompactCom 40 - Software Design Guide》

《Anybus CompactCom 40 - Host Application Implementation Guide》

《Anybus CompactCom 40 - PROFIBUS DP Network Guide》

本示例建立在Anybus CompactCom 40模块已经驱动成功,并且已经成功与PROFINET控制器组态通信.

本次测试使能了appl_adimap_simple16.c ADI设置模板。

 

目录

  • 定义非过程数据ADI
  • 非周期读取ADI
  • 非周期写入ADI

 

定义非过程数据ADI

用户数据由用户在驱动程序侧定义在ADI中
  1. 首先定义需要的数据变量,如图本次示例定义了两个用于测试的变量,数据类型为UINT16
    1. UINT16 ADI_GET_TESTRD;
      UINT16 ADI_GET_TESTWR;
  2. 在const AD_AdiEntryType APPL_asAdiEntryList[]添加相应的ADI,ADI号分别为0x55AA,0x55AB
    1. /*-------------------------------------------------------------------------------------------------------------
      ** 1. iInstance | 2. pabName | 3. bDataType | 4. bNumOfElements | 5. bDesc | 6. pxValuePtr | 7. pxValuePropPtr
      **--------------------------------------------------------------------------------------------------------------
      */各参数含义
      const AD_AdiEntryType APPL_asAdiEntryList[] =
      {
      { 0x1, "OUTPUT", ABP_UINT16, 1, APPL_READ_MAP_WRITE_ACCESS_DESC,{ { &M_Output, &appl_sUint16Prop } } },
      { 0x2, "INPUT", ABP_UINT8, 2, APPL_WRITE_MAP_READ_ACCESS_DESC,{ { &M_Iutput, &appl_sUint8Prop } } },

      { 0x55AA, "ADI_GET_TEST_IR", ABP_UINT16, 1, APPL_NOT_MAP_READ_ACCESS_DESC,{ { &ADI_GET_TESTRD, &appl_sUint16Prop } } },//Input parameter
      { 0x55AB, "ADI_SET_TEST_OW", ABP_UINT16, 1, APPL_NOT_MAP_WRITE_ACCESS_DESC,{ { &ADI_GET_TESTWR, &appl_sUint16Prop } } }//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(以ADI 0x55AA为例)

PLC可以通过PROFIBUS DP-V1 parameter read/write with call服务非周期的访问ADI,该命令会被Anybus CompactCom 40模块转换成对象访问请求发送至驱动程序的Application Data Object (0xFE)。
 
  1. 读取ADI之前首先需要使用DP-V1写命令(0x5F)将要读取的ADI号写入Slot 0x00/ Index 0xFF,Byte 5之后的字节为写命令的数据负载。
    • Call Header,Ext.Funtion no.为0x08 ,设置读取ADI时Subindex 应为0x0002
    • ADI Number为要读取的ADI示例号,注意与驱动保持一致,此处示例为0x55AA。
    • 模块收到该命令后转化为模块向驱动程序读取ADI的Message
  2. 使用HMS PROFIBUS Master Simulator示例如下,

    1. 选择write指令(0x5F)

    2. Slot number 0x00,Index 0xFF
    3. Call Header(Ext Function no 0x08 , SubIndex 0x0002),ADI number 0x55AA
    4. message log
  3. 主站使用read服务(0x5E)获取ADI(0x55AA)读取的结果。ADI的值为0x0005(UINT16)
    • Anybus CompactCom 40返回至主站的数据含义如下。
  4. 使用西门子PLC(本例中所用为S7_1200系列PLC)作为PROFIBUS DP主站非周期读取ADI数据,在TIA Portal中配置步骤如下。
    1. PLC通过RDREC与WRREC功能块实现对ADI的非周期访问。
      1. RDREC功能块各参数类型如下。

        • ID为硬件标识符,S7-300PLC中为模块诊断地址;
        • INDEX数据记录号,此处固定为255(0xFF)
        • MLEN为要读取的数据长度;
        • RECORD为读取数据的存放区,可以通过定义DB块存放读取的数据;
        • LEN为实际读取数据长度
        • VALID为新数据有效标志
        • ERROR数据访问错误
      2. WRREC功能块各参数类型如下。
        • ID为硬件标识符,S7-300PLC中为模块诊断地址;
        • INDEX数据记录号,此处固定为255(0xFF)
        • RECORD为写入数据的存放区,若数据字节数较多,可以通过定义DB块存放读取的数据;
        • DONE为本次请求完成标志
        • ERROR数据访问错误
    2. 在PLC工程中组态Anybus Compact Com 40
    3. 获取Anybus CompactCom 40硬件标识符。

    4. 分别定义2个数据块,用于存放读取ADI操作的配置数据(写命令的负载数据)和读取到的ADI相关的数据。
  5. 添加功能块RDREC与WRREC功能块至程序中,程序设置如下。
    • WRREC功能块设置如下
    • WRREC功能块配置ADI至Slot 0 Index 0xFF完成后,使能RDREC功能块,关闭WRREC功能块。
    • 数据读取成功后,失能RDREC功能块、WRREC功能块
    • RDREC功能块配置如下
    • 设置Write_cfg数组的值如下,设置WR_ADI_REQ为TRUE即可触发程序执行,读取ADI(0x55AA)的值。
    • 读取的值存放在Read_cfg数组中

 

非周期写入ADI(以ADI 0x55AB为例)

写入数据至ADI需要使用DP-V1写命令(0x5F)将数据写入ADI,写ADI的命名格式如下,Byte 5之后的字节为写命令的数据负载。
  1. 使用HMS PROFIBUS Master Simulator示例如下。
    • 选择write指令(0x5F)

    • Slot number 0x00,Index 0xFF
    • Call Header(Ext Function no 0x08 , SubIndex 0x0001),ADI number 0x55AB ,Data 0x0708
  2. message log

  3. 主站使用DP-V1 read服务(0x5E),查看写入操作是否成功

  4. HMS PROFIBUS Master Simulator示例如下,如果status为Read Ok,则写入成功
  5. 上文中已经展示了如何在TIA Portal中配置读取ADI,向ADI写入数据需更改Write_cfg数组的值,修改如下。
    • 随后设置WR_ADI_REQ为TURE,即可将数据写入ADI(0x55AB)

 

附加信息

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

官网手册下载地址如下:

Anybus文件和文档 - CompactCom