看别人程序里发现对指针上面有点不懂。
里面有语句
LP#50.0
LAR1
LP#M50.0
LAR2
等类似的语句的,不知道LP#50.0和LP#M50.0的具体区别是什么
执行之类的语句后AR1,AR2里面的值是多少了?
最佳答案
首先,你必须明白SIEMENSPLC里面的间接寻址的用法。
在SIEMENSPLC里面间接寻址大概分为3类用法。存取器间接寻址,区域内寄存器间接寻址和区域间寄存器间接寻址。
比如LMW[MD0]就是存储器间接寻址。LMW[AR1,P#0.0]就是区域内寄存器间接寻址,LW[AR1,P#0.0]就是区域间寄存器间接寻址
首先AR1和MD0都是32位指针,里面类容既包括了地址信息页包括了寻址的区域信息,地址寄存器的类容如下
区域类型+地址具体请查看STEP7里的帮助文件(比如你可以搜索POintER找到POINTER和ANY类型里面就有关于指针和存储区域的说明
b#16#80PI/Oarea
b#16#81IInputarea
b#16#82QOuTPutarea
b#16#83MBitmemoryarea
b#16#84DBDatablock
b#16#85DIInstanCEdatablock
b#16#86LLocaldata(Lstack)
b#16#87VPreviouslocaldata
然后就是P指针,P#50.0就是一个指针常数。
你程序里面LP#50.0LAR1指令执行后AR1类容为16#xx000190(xx代表不相干)
LP#M50.0LAR1指令执行后AR1类容里除了地址信息还多了区域信息16#83000190
比如你要把MB50移到MB100中去你可以用三种方法实现
1:存取器寻址
L50
SLD3
TMD0
LMB[MD0]
TMB100
2:区域内寄存器间接寻址
LP#50.0
LAR1
LMB[AR1,P#0.0]
TMB100
3:区域间寄存器间接寻址
LP#M50.0
LAR1
LB[AR1,P#0.0]//注意由于AR1里面包含了区域M的信息所以可以省略M直接以B[AR1,P#0.0}
TMB100
希望你能明白些了。
图片说明:
提问者对于答案的评价: