S7-1500——(一)西门子PLC编程从入门到精通4、SCL间接寻址
SCL间接寻址
- 一,间接寻址概述
- 1,SCL间接寻址概述
- 1.1,直接寻址
- 1.2,间接寻址
- 2,Pointer 及 Any 指针
- 3,PEEK 及 POKE 指令
- 二,数组指针及限值可变数组
- 1,数组指针
- 2,限值可变数组
- 三,Variant 指针、DB_Any参数类型、引用
- 1,Variant 指针
- 2,DB_Any参数类型
- 3,引用
一,间接寻址概述
学习目标是在掌握博途平台SCL编程语言的基本使用基础之上,进一步了解SCL语言环境下的间接寻址过程,初步具备编写复杂控制程序的能力;
在编写plc程序过程中, 需要对plc中的数据进行访问,这就是寻址;
根据寻址方式的不同,可以分为两种寻址方式:直接寻址,间接寻址;
1,SCL间接寻址概述
1.1,直接寻址
直接寻址
直接寻址就是直接对数据的存储单元进行访问;
根据表达方式的不同,可分为绝对寻址和符号寻址;对于plc中的标准数据存储区包括I
,Q
,M
,T
,C
,L
以及标准数据块
,既可以使用绝对寻址,也可以使用符号寻址;
绝对寻址
在使用绝对寻址时,可以寻址的宽度包括位,字,节字,双字;
在寻址标识符中,根据
IEC- 61131
国际标准的规定
①以%
表示对plc集成的存储单元进行访问;
②寻址区域的区域标识符,比如I
,Q
,M
,DB
等;
③寻址标识符中需要指出寻址的宽度分别用X
,B
,W
,D
表示,寻址宽度为位,字,节字,双字;
④在标识符中还包括了所寻址存储单元的地址(位地址,字节地址,字地址,双字地址);
若寻址宽度为位,还要标识出位地址; 字节地址与位地址之间用.
进行连接
符号寻址
对优化数据存储区,包括优化数据块以及优化的
l
区,只能使用符号寻址;
对于S7-1200及S7-1500新型控制器在进行符号寻址时,还支持slicting片段访问寻址方式;
对寻址变量,按位,字,节字,双字进行拆分访问;
片段访问的寻址标识符格式:所寻址的变量名加
.
连接符。加上 寻址宽度标识符X
,B
,W
,D
以及片段的编号(如下图所示);
以整数类型变量举例。如果需要在程序中判断某个整数变量的符号,只需要利用片段访问的方式访问其
X15
位即可。X15
位为1则为负整数,X15
位为0则为正整数
1.2,间接寻址
间接寻址:利用各种类型的指针,间接对数据的存储单元进行访问;
间接寻址,允许用户寻址在程序运行之前,不计算地址的操作数;
间接寻址过程中所使用的指针通常存储在相应类型的变量当中;
在编程过程中,通过对指针进行适当的变动,可以实现更加灵活的寻址过程;
常用的指针类型包括Pointer
指针,Any
指针,数组指针,Varuant
指针等等。每种类型的指针都有特定的结构, 功能以及适用的场景。
其中
Varuant
指针为博途平台所特有的指针类型。而Pointer
指针,Any
指针,数组指针,既可以在博途平台中使用,也可以在classic平台中使用;
适用的寻址数据区:
以上指针都可以完成对标准数据区的间接寻址;
只有数组指针以及Varuant
指针可以完成对优化数据区的间接寻址;
2,Pointer 及 Any 指针
Pointer 指针
Pointer
指针用于寻址标准数据存储区,其主要作用是为子程序传递复杂数据类型的实参;
通常Pointer
指针由程序编译器自动使用;
Pointer
指针的长度为六个字节,前两个字节用于存储所传递实参的数据块编号,剩余四个字节用于存储所传递实参的32位交叉区域指针;
(即寻址数据的区域标识符+起始存储地址)
Pointer
指针的常数表达格式:P#区域标识符+字节地址+.
+位地址;
由于必须在指针中指定数据存储的起始位地址,因此Pointer
指针只能用于寻址标准数据存储区;
Pointer
指针本质上是指向了数据区中的变量,起始存储位置是一个点,因此被命名为Pointer
Any 指针
ANY
指针也用于为子程序传递复杂数据类型的实参,结构比Pointer
指针复杂, 在Pointer
指针的基础上,可为子程序传递更多的实参信息,更适合用户编程使用;
ANY
指针的长度为十个字节:
第一个字节为any指针的类型标识,16进制的10