STEP7——POINTER指针详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参数类型POINTER的格式
下图给出了存储在每个字节中的数据类型。
参数类型POINTER存储下列信息:
∙DB编号(或0,如果数据没有存储在DB中)
∙CPU中的存储区域(下表给出了参数类型POINTER存储器区的十六进制代码)
十六进制代码存储区描述
b#16#81I输入区域
b#16#82Q输出区域
b#16#83M位存储区域
b#16#84DB数据块
b#16#85DI背景数据块
b#16#86L本地的数据(L堆栈)
b#16#87V先前的本地数据
∙数据的地址(格式为字节.位)
STEP7提供指针格式:p#memory_area byte.bit_address.(如果形式参数被声明为参数类型POINTER,只需要指出存储区域和地址。
STEP7将自动地重定输入指针的格式。
)下面的实例说明如何为以M50.0开始的数据输入参数类型POINTER:
∙P#M50.0
∙M50.0(如果形式参数声明为POINTER)。
使用参数类型POINTER
指针用于指向地址。
这种寻址方式的优点是可以在程序处理期间动态地修改语句的地址。
存储器间接寻址的指针
使用存储器间接寻址的程序语句由指令、地址标识符和偏移量组成(偏移量必须在方括号内给出)。
双字格式指针的实例:
L P#8.7装载指针的值到累加器1。
T MD2传送指针到MD2。
A I[MD2]询问输入位I8.7的信号状态,并
=Q[MD2]将信号状态分配给输出位Q8.7。
区域内部和区域交叉寻址的指针
使用这些寻址方式的程序语句包含指令和下列部分:地址标识符、地址寄存器标识符、偏移量。
地址寄存器(AR1/2)和偏移量必须在方括号内一起指定。
区域内部寻址的实例
指针不包含存储器区的指示:
L P#8.7装载指针的值到累加器1。
LAR1将指针从累加器1装载到AR1。
A I[AR1,P#0.0]询问输入位I8.7的信号状态,并
=Q[AR1,P#1.1]将信号状态分配给输出位Q10.0。
偏移量0.0没有影响。
输出10.0由8.7(AR1)加上偏移量1.1计算出来。
结果是10.0而不是9.8,参见指针格式。
区域交叉寻址的实例
在区域交叉寻址中,存储区域在指针中指出(在实例I和Q中)。
L P#I8.7将指针的值和区域标识装载到累加器1中。
LAR1装载存储器区I和地址8.7到AR1中。
L P#Q8.7将指针的值和区域标识装载到累加器1中。
LAR2装载存储器区Q和地址8.7到AR2中。
A[AR1,P#0.0]询问输入位I8.7的信号状态,并
=[AR2,P#1.1]将信号状态分配给输出位Q10.0。
偏移量0.0没有影响。
输出10.0由8.7(AR2)加上偏移量1.1计算出来。
结果是
10.0而不是9.8,参见指针格式。