您现在的位置是:首页 > PLC技术 > PLC技术

S7-300/400参数类型ANY的应用

来源:艾特贸易2017-09-21

简介1 .参数类型 ANY 在调用逻辑块时,参数类型 ANY 用于将任意的数据类型传递给声明的形参。 ANY 可用于实参的数据类型未知,或实参可以使用任意数据类型的情况。数据类型 ANY 主要用于

    1.参数类型ANY

    在调用逻辑块时,参数类型ANY用于将任意的数据类型传递给声明的形参。ANY可用于实参的数据类型未知,或实参可以使用任意数据类型的情况。数据类型ANY主要用于为系统功能( SFC)和系统功能块(SFB)分配参数。用户也可以用ANY作为逻辑块的接口参数来传递数据。

   ANY10B组成(见图4-31),第4~9个字节的意义与POINTER的第0~5个字节相同,第1个字节(数据类型编码)见表4-6

   ANY指针可以用来表示一片连续的数据区,例如P#DB2. DBX50.0 BYTE  10表示DB2中的DBB50~DBB5910个字节。在这个例子中,DB编号为2,重复因子(数据长度)为10,数据类型编码为B#16#02 (BYTE)

ANY指针

    4-31    ANY指针

   ANY指针也可以用地址作实参,例如DB2DBW30Q12.5,但是只能指向一个地址。ANY指针只能用于形参的INOUT(不能用于FB)、IN_OUTTEMP变量。

    4-6    数据类型的编码

数据类型的编码

数据类型的编码

    2FC2的程序设计

    【例】  ANY指针作为输入参数,用FC2对若干个连续存放的字作异或运算。不是字则不进行运算。

    在项目“寄存器间接寻址”中生成FC2,其局部变量如表4-7所示。下面是FC2中的STL程序:

    4-7    FC2的局部变量

FC2的局部变量

   L    P##AnyPomt    //P#表示指针,第2#号表示局部变量

   LAR1    //ANY指针送地址寄存器AR1

   L    0

   T    #Result    //将保存异或运算结果的字清零

   L    B[ AR1P#1.0]    //ANY指针内的数据类型(见图4-31

   L    B#16#4

   < >I

   JC    003    //不是字则返回

   L    0

   L    W[AR1P#4.0]    //ANY指针内的数据块编号(见图4-31

   ==I

   JC    001    //不是数据块(编号为0)则跳转

   T    #DB No    //保存数据块编号

   OPN    DB[#DB_No]    //打开ANY指针指定的数据块

   _0011    W[AR1P#2.0]    //ANY指针内的重复因子(见图4-31

   T    #Lenth    //保存需要累加的字的个数

   L    D[AR1P#6.0]    //ANY指针内数据区的起始地址(见图4-31

   LAR1    //要异或的数据的起始地址送AR1

   L    #Lenth    //取需要累加的字的个数(即需要循环的次数)

   _002  T    #Lenth   //保存剩余循环次数

   L    W[AR1P#0.0]    //取数据字

   L    #Result    //取异或运算的中间结果

   XOW    //字异或运算

   T    #Result    //存放运算结果

   +AR1  P#2.0    //AR1指向下一个字

   L    #Lenth    //取剩余循环次数

   LOOP    _002    //未运算完则返回

   _003 NOP    0

    从这个例子可以看到寄存器间接寻址的优点,通过修改地址偏移量,可以方便地读写相距任意字节的地址的数据。

    3OB1的程序设计与程序运行结果

    下面是OB1中调用FC2的程序,对DB1中的DBW0DBW2DBW4作异或运算,运算结果送MW4

   CALL    FC    2

   AnyPoint  =P#DB1. DBX0.0 WORD 3

   Result    =MW4

    应先定义后使用数据块中的变量,如果使用了数据块中未定义的变量,将会出错。

    4-32中的变量表给出了程序运行的结果,DB13个字同一位中1的个数为奇数时,异或运算后MW4的同一位为11的个数为偶数时,MW4的同一位为0

变量表

    4-32    变量表