新疆西门子S7-1500PLC模块代理(量大从优)

STEP 7间接寻址的ANY指针
除了DB指针之外,ANY指针还包含数据类型和重复系数,这使得它可以指向一个数据区。
ANY指针有两个有效的版本:具有数据类型的变量和具有参数类型的变量。如果需要指向一个具有数据类型的变量,ANY指针包含了DB指针、类型和重复系数。如果需要指向一个具有参数类型的变量,除了数据类型之外,则它仅包含一个数字而不是DB指针。对于定时器或计数器功能,字节(n+6)中重复包含了数据类型,字节(n+7)包含了B#16#00。对于其他情况,这两个字节包含的值为W#16#0000。
ANY指针的个字节包含了语法ID,在STEP 7中,通常为10H。类型定义了ANY指针所指变量的数据类型。基本数据类型的变量、DT和STRING接收图1中给出的数据类型,数量为1。
如果将数据类型为ARRAY或STRUCT的变量应用到ANY参数,编辑器生成一个指向数组或结构的ANY指针。这个ANY指针包含了数据类型和数量,其中类型为占用一个字节(02H)的标识符,数量为由字节数确定的变量长度。
在这里,单个数组组件或结构组件的数据类型是无关紧要的。ANY指针指向WORD数组,其长度为字节数的两倍。例外:指向由数据类型为CHAR的组件组成的数组的指针,可以应用到CHAR类型(03H)。
如果要指向一个变量或地址区,就可以在参数类型为ANY的块参数中应用ANY指针(不适用于SCL)。
数据类型的常量表达式如下:
P#[数据块.]地址类型数量
比如:
●P#DB 11.DBX 30.0 INT 12
来自DBB 30的DB 11中具有12字的区域。
●P#M 16.0 BYTE 8
来自MB 16的具有8字节的区域。
●P#E 18.0 WORD 1
输入字IW 18。
●P#E 1.0BOOL 1
输入I 1.0。
对于参数类型,按照下列格式写指针:
L#序号类型数量
比如:
●L# 10 TIMER 1 定时器功能T10
●L#2 COUNTER 1 计数器功能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。
除了区指针包含的内容,DB指针还包含了一个正的INT数据作为数据块的序号。它对数据块进行说明,指出区指针包含的是地址区全局数据还是实例数据。对于其他情况,头两个字节包含零。
通过数据地址的全局寻址,用户已经熟悉了指针的符号。这里也一样,数据块和数据地址的指定用一个点号来隔开:P#数据块.数据地址,比如P#DB 10.DBX 20.5。
不能加载这种类型的指针,但是可以将其应用到参数类型为POINTER的块参数中,以使其指向一个数据的地址(不适用于SCL)。在STEP 7内部使用这些指针类型用于传送实参。
区指针包含了地址,如果可能的话,还包含地址区。如果不包含地址区,它就是一个区内指针;如果包含地址区,就是跨区指针。
考虑到它具有32位的长度,因此可以直接寻址区指针,将其装入累加器或地址寄存器。常量表示符号如下:
P#y.x 适用于区内指针(比如P#22.0)
P#Zy.x 适用于跨区指针(比如P#M22.0)
其中,x=位地址,y=字节地址,Z=区域。对于区域,需要指定地址标识符。两种指针类型的第31位的赋值方法有所不同(如图1所示)。
间接寻址的地址必须符合如下结构,包括位地址、字节地址;如果适用的话,还包括地址区。因此它具有特殊的格式,称为指针。一个指针用于“指向”一个地址。
STEP 7认可三种类型的指针:
●区指针:32位的长度,包含一个特殊地址。
●DB指针:48位的长度,除了区指针包含的内容,还包含数据块的序号。
●ANY指针:80位的长度,除了DB指针包含的内容,还包含更进一步的说明,比如地址中的数据类型。
对于间接寻址,只有区指针是重要的。DB指针和ANY指针只有在传送块参数时才能用到。既然这种类型的指针包含了区指针,本文也将对DB指针和ANY指针的结构加以描述。
UDT的面向源文件的输入和STRUCT变量的输入一样,都限定在关键字TYPE和END_TYPE之间。
1.声明
TYPE、END_TYPE、STRUCT和END_STRUCT是关键字,可以用小写字母书写。
udtname是用户自定义数据类型的名称。除了udtname,还可以使用地址UDTn。
komp Iname、komp2name等是单个结构组件的名称。
datatype是单个组件的数据类型。除了POINTER和ANY(甚至是作为一个数组或结构的组件时也不行),所有的数据类型都可使用。
和结构一样,用户自定义的数据类型也是预赋值的,其结构也和结构一样。
当对用户自定义数据类型UDT预赋值时,在STL中写常量的方法同样适用于SCL。
2.块属性
用户自定义数据有一个块标题,包含了块的属性。在编辑器中通过菜单按钮File→Properties,可以查看或修改打开的当前块的属性。
在面向源程序的编程中,可以使用为此属性提供的关键字(如表1所示)。
表1 用户自定义数据类型UDT的编程关键字
新疆西门子S7-1500PLC模块代理(量大从优)