收藏 分享(赏)

S7300指针类型与间接寻址.doc

上传人:weiwoduzun 文档编号:5655994 上传时间:2019-03-11 格式:DOC 页数:5 大小:100.50KB
下载 相关 举报
S7300指针类型与间接寻址.doc_第1页
第1页 / 共5页
S7300指针类型与间接寻址.doc_第2页
第2页 / 共5页
S7300指针类型与间接寻址.doc_第3页
第3页 / 共5页
S7300指针类型与间接寻址.doc_第4页
第4页 / 共5页
S7300指针类型与间接寻址.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、西门子指针类型与间接寻址(2012-06-19 17:24:33) 转 载 标签: it分类: 工业自动化在西门子 S7-300和 S7-400的编程中经常需要调用一些系统功能或功能块,在输入参数时经常碰到有指针类型的参数,那么你对指针类型了解吗?我第一次接触指针一词是在学习 C语言的时候,指针和链表是 C语言中的一个重点难点。在 C语言中,指针即存储器地址,在西门子 PLC中的指针也是指地址。下面看看西门子 POINTER类型的结构:参数类型 POINTER存储下列信息:DB 编号(或0,如果数据没有存储在 DB 中)CPU 中的存储区域(下表给出了参数类型 POINTER 存储器区的十六进

2、制代码)十六进制代码 存储区 描述b#16#81 I 输入区域b#16#82 Q 输出区域b#16#83 M 位存储区域b#16#84 DB 数据块b#16#85 DI 背景数据块b#16#86 L 本地的数据(L 堆栈)b#16#87 V 先前的本地数据数据的地址(格式为字节.位)STEP 7提供指针格式:p#memory_area byte.bit_address. (如果形式参数被声明为参数类型 POINTER,只需要指出存储区域和地址。 STEP 7将自动地重定输入指针的格式。) 下面的实例说明如何为以 M50.0开始的数据输入参数类型 POINTER:P#M50.0存储器间接寻址:使

3、用存储器间接寻址的程序语句包含一条指令,后面跟有地址标识符,最后是一个(地址必须括在方括号内)。根据所用的地址标识符,该指令会将存储于指定地址的数据解释为字或双字指针。完整的数据地址由地址标识符和指针构成,如下例所示。间接寻址的优点是能在程序执行期间动态修改指令的数据地址。存储器间接寻址使用以下两部分地址:1. 地址标识符对于由位逻辑运算寻址的位,可分配地址标识符 I、Q、M、L、DIX 或 DBX。对于由装载指令寻址的字节、字和双字,可使用存储区 I、Q、M、L、D 和 PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID 等形式的地址标识符。对

4、于由传送指令寻址的字节、字和双字,可使用存储区 I、Q、M、L、DB、DI 和 PQ,分配 IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD 等形式的地址标识符。要寻址定时器、计数器或块,可使用 T、C、DB、DI、FB、FC 形式的区域标识符。2. 括在方括号“ “内的字或双字指针的地址字指针 - 含有定时器(T)、计数器(C)、数据块(DB、DI)或逻辑块(FC、FB)的标识号的字。字指针是十进制整数。双字指针 - 指含有位、字节、字或双字的确切位置的双字。双字指针的格式为:P#字节.位。指针必须存储在下列区域之一,才能进行存储器间接寻址:M - 位

5、存储器L - 本地数据D - 数据块(DB 或 DI)STAT 静态数据(不是用于具有多重实例能力的块的静态数据)注意如果要寻址使用存储器间接寻址的字节、字或双字,请确保指针的位号为双字格式0。字指针实例:L 5 /将指针值载入 ACCU 1。T MW2 /将指针传送到 MW2中。L TMW2 /将5号定时器的当前时间值载入 ACCU 1。L CMW2 /将5号计数器的当前计数值载入 ACCU 1。OPN DBMW2 /将数据块 DB5作为共享数据块打开。OPN DIMW2 /将数据块 DB5作为背景数据块打开。双字指针实例:L P#8.7 /将指针值载入 ACCU 1。T MD2 /将指针传

6、送到 MD2中。A I MD2 /扫描输入位8.7的状态,并将其= Q MD2 /信号状态分配给输出位 Q 8.7。区域内寄存器间接寻址使用区域内寄存器间接寻址的程序语句包含一条指令和以下组成部分:地址标识符地址寄存器标识符,地址。区域内寄存器间接寻址使用以下两部分地址:1. 地址标识符对于由位逻辑运算寻址的位,可以分配地址标识符 I、Q、M、L、DIX 或 DBX。对于由装载指令寻址的字节、字和双字,可使用存储区 I、Q、M、L、D 和 PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID 等形式的地址标识符。对于由传送指令寻址的字节、字和双字,

7、可使用存储区 I、Q、M、L、DB、DI 和 PQ,分配 IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD 等形式的地址标识符。2. 方括号“ “中的内容包括地址寄存器引用(AR1或 AR2)、逗号分隔符“,“以及双字指针。双字指针 - 指包含位、字节、字或双字的部分地址的双字。双字指针的格式为:P#字节.位。注意请记住您现在使用的是两个格式为“P#字节.位“的指针。一个指针已被精确表示出来。另一个指针通过对地址寄存器 AR1或 AR2的引用来确定。如果要寻址字节、字或双字,请确保指针的位号为0。使用寄存器间接寻址的语句不更改地址寄存器的内容。指针实例L

8、 P#8.7 /将指针值载入 ACCU 1。LAR1 /用 ACCU 1中的指针装载 AR1。A I AR1, P#0.0 /检查输入位 I 8.7并将有符号的状态分配给 Q 10.0。= Q AR1, P#1.1 /确切地址8.7在 AR1中。偏移量不对其产生影响。确切位置10.0由8.7 (AR1)加上1.1 (偏移量)得出,结果是10.0而不是9.8。区域内寄存器间接寻址实例A I AR1,P#4.3 对其位置是由 AR1中的内容加上4个字节,再加上3个位计算得出的输入位,执行逻辑与运算。= DIX AR2, P#0.0 将 RLO位状态分配给位于 AR2中的实例数据位。L IB AR1

9、, P#10.0 将输入字节载入 ACCU 1中。地址由 AR1的内容加上十个字节计算得出。T LD AR2,P#53.0 将 ACCU 1中的内容传送到本地双字中(该双字的位置由 AR2的内容加上53个字节计算得出)。区域内寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的指针均为不含存储区信息(如AR1,P#4.3中 AR1=P#8.7,两个指针都不含有存储区信息) ,否则将会与方括号前的地址标示符表示的存储区冲突。跨区域寄存器间接寻址使用跨区域寄存器间接寻址的程序语句包含一条指令和以下组成部分:地址标识符地址寄存器标识符,地址。跨区域寄存器间接寻址使用以下两部分地址:1. 对已

10、寻址的数据对象(地址标识符)大小的规定数据对象大小规定位(无规定表示是一个位)B 字节W 字D 双字2. 方括号“ “中的内容包括地址寄存器引用(AR1或 AR2)、逗号分隔符“,“以及双字指针。双字指针 - 指包含位、字节、字或双字的部分地址的双字。指针具有以下区域内格式:P#字节.位。注意事先必须已将跨区域双字指针载入到由寄存器间接地址引用的地址寄存器中。跨区域双字指针 - 包含位的部分地址(对于位逻辑指令)或字节、字或双字的部分地址(对于装载和传送指令)的双字。地址前面的区域标识符位于用来指定字节和位。跨区域双字指针格式为:P#区域标识符字节.位。对于由位逻辑指令寻址的位,可以分配跨区域

11、指针区域标识符 I、Q、M、DIX 或 DBX。对于由装载或传送指令寻址的字节、字和双字,可以分配跨区域指针区域标识符I、Q、M、DIX、DBX 或 P。注意要在指针中指定外设输入或 PI区域,请以 P#Px.y形式输入指针。区域被指定为P。在跨区域指针中不能使用外设输出 PQ区域。请记住您正使用两个指针:作为偏移量,直接在地址中表示的区域内双字指针,例如 P#4.0。存储在地址寄存器(AR1或 AR2)中的跨区域双字指针,例如 P#Q4.0。如果要访问通过直接寻址方式进行寻址的字节、字或双字,请确保这两个指针的位号均为0。使用寄存器间接寻址的语句不更改地址寄存器的内容。跨区域寄存器间接寻址的

12、第一个实例:L P# I8.7 /将指针值和区域标识符载入 ACCU 1。LAR1 /将存储区 I和地址8.7存入 AR1。L P# Q8.7 /将指针偏移量和区域标识符载入 ACCU 1。LAR2 /将存储区 Q和地址8.7存入 AR2。A AR1, P#0.0 /检查输入位 I 8.7并将其信号状态分配给输出位 Q 10.0。= AR2, P#1.1 /偏移量0.0没有任何作用。输出位10.0由8.7 (AR2)加上1.1 (偏移量)得出,结果是10.0而不是9.8。跨区域寄存器间接寻址的第二个实例:A I 0.0 JC M002 L P#M10.0 /将指针值和区域标识符载入 ACCU

13、1。LAR1 /将存储区 M和地址10存入 ACCU 1。JU M001 M002: L P#Q0.3 /将指针值和区域标识符载入 ACCU 1。LAR1 /将存储区 Q和地址0.3存入 ACCU 1。M001: A I 0.4 = AR1, P#0.1 /I 0.0用于控制哪个指针用于此语句。将 I 0.4的信号状态分配给存储器位 M 10.1,或者分配给输出 Q 0.4。跨区域寄存器间接寻址实例A AR1,P#4.3 对于其位置是由 AR1中的内容加上4个字节,再加上3个位计算得出的位,执行逻辑与运算。位的存储区在 AR1的位24、25和26中指出。= AR2, P#0.0 将 RLO位信

14、号状态分配给位于 AR2中的位。位的存储区在 AR1的位24、25和26中指出。L B AR1, P#10.0 将字节(其位置由 AR1的内容加上10个字节计算得出)载入 ACCU 1。位的存储区在 AR1的位24、25和26中指出。T D AR2,P#53.0 将 ACCU 1的内容传送到双字(该字的精确位置由 AR2的内容加上53个字节计算得出)。位的存储区在 AR1的位24、25和26中指出。跨区域寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的地址寄存器中包含存储区信息(如AR1,P#4.3中 AR1=P#Q0.3) 。区域内寄存器间接寻址和跨区域寄存器间接寻址的使用相当灵活,可以根据需要选择。由上面的说明可知,区域内寄存器间接寻址是针对存储区固定的间接寻址方式,寻址的存储区是确定的。而跨区域寄存器间接寻址则在指令中不确定存储区,存储区由地址寄存器中存储的指针中的信息确定,因而寻址的存储区是可变的。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报