本文描述了非过程数据的ADI定义以及在西门子TIA Portal(V14)软件配置非周期访问ADI.
适用产品
AB6605、AB6675、AB6610(烧写PROFINET协议固件)、AB6680(烧写PROFINET协议固件)
注意事项
本文描述了如何通过西门子PLC非周期访问ADI,更多详细信息请参考官网手册:
《Anybus CompactCom 40 - Software Design Guide》
《Anybus CompactCom 40 - Host Application Implementation Guide》
《Anybus CompactCom 40 - PROFINET IRT Network Guide》
本示例建立在Anybus CompactCom 40模块已经驱动成功,并且已经成功与PROFINET控制器组态通信.
本次测试使能了appl_adimap_simple16.c ADI设置模板。
目录
- 定义非过程数据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(本示例以西门子S7-1200PLC做为PROFINET控制器)
PLC可以通过Record Data read/write 指令非周期的访问ADI,该命令会被Anybus CompactCom 40模块转换成对象访问请求发送至驱动程序的Application Data Object (0xFE)。
PLC通过API0访问ADI,其中Index编号与ADI编号一一对应。
详情请参考《Anybus CompactCom 40 - PROFINET IRT Network Guide》第3.4小节
- 打开西门子TIA博图软件,创建工程并将Anybus CompactCom M40/B40组态至PROFINET网络中。
-
双击Main[],将RDREC功能块添加至程序中。
-
RDREC功能块各参数类型如下。
- ID为硬件标识符;
- INDEX数据记录号,与ADI实例号一一对应
- MLEN为要读取的数据长度;
- RECORD为读取数据的存放区,若数据字节较多,可以通过定义DB块存放读取的数据;
- LEN为实际读取数据长度
- VALID为新数据有效标志
- ERROR数据访问错误
- 查看硬件标识符
-
- RDREC功能块各参数设置示例,访问的ADI实例编号为0x06,将REQ置1时,发起数据访问请求。
- 编译工程并下载至PLC中,创建监控表,将REQEN与ADI6_DATA变量添加至监控表中,并将REQEN设置为TRUE。
写数据至ADI
- 非周期将数据写入ADI通过WRREC功能块实现,将该功能块添加至程序。
-
WRREC功能块各参数类型如下,详细信息请参考西门子S7-1200 PLC编程手册。
- ID为硬件标识符;
- INDEX数据记录号,与ADI实例号一一对应
- RECORD为写入数据的存放区,若数据字节数较多,可以通过定义DB块存放读取的数据;
- DONE为本次请求完成标志
- ERROR数据访问错误
- WRREC功能块各参数设置示例,访问的ADI实例编号为0x07,将REQ置1时,发起数据访问请求。
-
为更加直观展示数据写入效果,添加一个RDREC读取ADI实例7的变量值.
-
创建变量监控表,将所示变量添加至监控表中。将REQEN与WRQEN分别置1,查看各变量值,将R7REQEN设置为TRUE,查看数据写入效果.无需访问时请将上诉变量置0.
- 驱动程序Log打印,可知PROFINET Record Data read/write指令被转换为模块的对象访问指令(Message)
-
/***************************************************/
读取ADI6变量大小
Msg received:
[ MsgBuf:0x200004c0 Size:0x0000 SrcId :0x00 DestObj:0xfe
Inst :0x0006 Cmd :0x41 CmdExt0:0x05 CmdExt1:0x00 ]
[ ]
Msg sent:
[ MsgBuf:0x200004c0 Size:0x0004 SrcId :0x00 DestObj:0xfe
Inst :0x0006 Cmd :0x01 CmdExt0:0x05 CmdExt1:0x00 ]
[ 0x00 0x00 0x00 0x05 ]
/***************************************************/
将数据写入ADI7变量
Msg received:
[ MsgBuf:0x200004c0 Size:0x0004 SrcId :0x00 DestObj:0xfe
Inst :0x0007 Cmd :0x42 CmdExt0:0x05 CmdExt1:0x00 ]
[ 0x00 0x00 0x00 0x08 ]
Msg sent:
[ MsgBuf:0x200004c0 Size:0x0000 SrcId :0x00 DestObj:0xfe
Inst :0x0007 Cmd :0x02 CmdExt0:0x05 CmdExt1:0x00 ]
[ ]
/*************************************************/
读取ADI7变量值
Msg received:
[ MsgBuf:0x200004c0 Size:0x0000 SrcId :0x00 DestObj:0xfe
Inst :0x0007 Cmd :0x41 CmdExt0:0x05 CmdExt1:0x00 ]
[ ]
Msg sent:
[ MsgBuf:0x200004c0 Size:0x0004 SrcId :0x00 DestObj:0xfe
Inst :0x0007 Cmd :0x01 CmdExt0:0x05 CmdExt1:0x00 ]
[ 0x00 0x00 0x00 0x08 ]
/*************************************************/
-
附加信息
以上代码仅作参考,不作为功能的最终实现,最终实现需要根据实际情况而定,请您先梳理该功能实现的流程,并参考官网英文手册实现功能需求。
官网手册下载地址如下: