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

STEP 7间接寻址的ANY指针

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

简介除了 DB 指针之外, ANY 指针还包含数据类型和重复系数,这使得它可以指向一个数据区。 ANY 指针有两个有效的版本:具有数据类型的变量和具有参数类型的变量。如果需要指向一个具

    除了DB指针之外,ANY指针还包含数据类型和重复系数,这使得它可以指向一个数据区。

   ANY指针有两个有效的版本:具有数据类型的变量和具有参数类型的变量。如果需要指向一个具有数据类型的变量,ANY指针包含了DB指针、类型和重复系数。如果需要指向一个具有参数类型的变量,除了数据类型之外,则它仅包含一个数字而不是DB指针。对于定时器或计数器功能,字节(n+6)中重复包含了数据类型,字节(n+7)包含了B#16#00。对于其他情况,这两个字节包含的值为W#16#0000

   ANY指针的第一个字节包含了语法ID,在STEP 7中,通常为10H。类型定义了ANY指针所指变量的数据类型。基本数据类型的变量、DTSTRING接收图1中给出的数据类型,数量为1

    如果将数据类型为ARRAYSTRUCT的变量应用到ANY参数,编辑器生成一个指向数组或结构的ANY指针。这个ANY指针包含了数据类型和数量,其中类型为占用一个字节(02H)的标识符,数量为由字节数确定的变量长度。

    在这里,单个数组组件或结构组件的数据类型是无关紧要的。ANY指针指向WORD数组,其长度为字节数的两倍。例外:指向由数据类型为CHAR的组件组成的数组的指针,可以应用到CHAR类型(03H)

    如果要指向一个变量或地址区,就可以在参数类型为ANY的块参数中应用ANY指针(不适用于SCL)。

    数据类型的常量表达式如下:

   P#[数据块.]地址类型数量

    比如:

    P#DB 11DBX 30.0 INT12

    来自DBB 30DB 11中具有12字的区域。

    P#M 16.0BYTE 8

    来自MB 16的具有8字节的区域。

    P#E 18.0WORD 1

    输入字IW 18

    P#E 1.0BOOL1

    输入I 1.0

    对于参数类型,按照下列格式写指针:

   L#序号类型数量

    比如:

    L# 10 TIMER1    定时器功能T10

    L#2 COUNTER1    计数器功能Z2

    编辑器将应用一个与常量表达式中指定的类型和数量相符的ANY指针。注意,数据类型在ANY指针中的存储单元必须是一个位地址。

    如果需要存取一个没有声明任何变量的数据区,定义一个ANY指针常量就显得很有必要了。从原理上讲,ANY参数可以是变量或地址。比如,表达式“P#1 1.0 BOOL 1”等同于“I 1.0”或相关的符号地址。

    使用ANY类型的参数,可以在暂态局部数据中声明一个变量。使用这些变量创建一个可以在运行时修改的ANY指针。

    当在一个功能块中声明一个ANY参数时,如果不指定任何预赋值。编辑器将会给语法ID分配10H,给剩余字节分配OOH。然后它才表示这些(空的)ANY指针(从数据角度看),从而P#P0.0 VOID 0