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

STEP 7的ANY指针“变量”

来源:艾特贸易2018-04-28

简介ANY 参数必须使用在编译阶段定义过的数据区或变量来参数化。比如使用 SFC 20BLKMOV 把一个变量复制到数据区: CALL SFC20 ( SRCBLK := “ReC eiveMailbox”. Data, RET_VAL :=SFC20Error, DSTBLK :=P#DB63.DBX0.

    ANY参数必须使用在编译阶段定义过的数据区或变量来参数化。比如使用SFC 20BLKMOV把一个变量复制到数据区:

   CALL SFC20  (

   SRCBLK  :=  “ReC eiveMailbox”. Data,

   RET_VAL  :=SFC20Error,

   DSTBLK  :=P#DB63.DBX0.0 BYTE 8);

    在运行时可以修改或重新定义变量或数据区,因为编辑器把一个确定的ANY指针指向了暂态局部数据中的实参。

    如果实参自身也在暂态局部数据中,且实参数据类型为ANY,编辑器将会出现例外。此时将不再设置更多的ANY指针,编辑器将会把ANY变量当做指向实参的ANY指针。这意味着ANY变量的结构必须与ANY指针的结构相同。

    然后就可以在运行时修改暂态局部数据中的ANY变量,给ANY参数指定其他实参。按照下列步骤使用ANY指针“变量”:

    ●应用数据类型为ANY的暂态局部变量(ANY变量的名称可以在块局部变量允许

    的结构内自由地选择):

   VAR_TEMP

   ANY_POINTER  ANY;

   END_VAR

    ●使用数值初始化ANY变量。

使用数值初始化ANY变量

    ●初始化ANY参数,比如,在SFC 20

   CALL SFC20 (

   SRCBLK  :=“ReceiveMailbox”.Data,

   RET_VAL  =SFC20Error,

   DSTBLK  :=ANY_POINTER);

    这些程序并不限制SFC20 BLKMOV的使用,可以在任意块的所有ANY参数中使用它。

    举例:如果要写一个复制块,用于在数据块中复制数据区。源操作数区和目标操作数区将被参数化。使用SFC 20 BLKMOV来复制。该块(一个功能FC)具有下列参数:

   VAR_INPUT

   QDB   :  INT;   //Source data block

   SSTA  :  INT;   //Source starting address

   NUMB  :  INT;   //Number of bytes

   DDB   :  INT;   //Destination data block

   DSTA  :  INT;   //destination starting address

   END_VAR

    功能值将包含SFC 20的出错信息,并且如果直接使用SFC 20,功能值可以参与计算。另外,在错误事件中,状态位BR将设为“0”。

    两个ANY变量,一个作为源操作数区的指针,一个作为目标操作数区的指针,对于块局部数据来说足够用了。

   VAR_TEMP

   SANY  :  ANY;   //ANY pointer source

   DANY  :  ANY;    //ANYpointer destination

   END_VAR

    由于知道暂态局部数据中ANY指针的地址,就可以使用其绝对地址来编程,比如源指针的准备:

   L    W#16#1002  ;   //Type  BYTE

   T    LW 0;

   L    NUMB;    //Number ofbytes

   T    LW 2

   L    QDB;    //Source DB

   T    LW4

   L    SSTA;    //Start of the source

   SLD 3;

   OD  DW#16#8400_0000;

   T    LD 6

    起始地址为LB 10的目标指针也用同样的方式来准备。它仅用于初始化SFC 20:

   CALL SFC20  (

   SRCBLK  =SANY,

   RET_VAL  =RET_VAL,

   DSTBLK  =DANY)

   SFC 20的功能值RET_VAL使用功能FCRET_VAL来初始化。

    在原书磁盘上可以找到这个完整的小实例(程序“General Examples”中的功能FC 47)。

    这样,可以给ANY指针赋任意值,可以在WORD2或区指针中变换不同的类型,所以,从原理上来说,可以寻址任意变量或数据区,比如位存储区。

    注意:如果暂态局部数据中的ANY指针指向的变量也位于所调用块的暂态局部数据中,必须输入V作为地址区,因为从被调用块的观点来看,这个变量位于前任块的暂态局部数据中。

(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:艾特贸易网客服为您服务