P指针问题

看别人程序里发现对指针上面有点不懂。
里面有语句
L P#50.0
LAR1
L P#M50.0
LAR2 
等类似的语句的,不知道L  P#50.0 和L P#M50.0 的具体区别是什么
执行之类的语句后AR1,AR2里面的值是多少了?

最佳答案

首先,你必须明白SIEMENS PLC 里面的间接寻址的用法。
在SIEMENS PLC 里面间接寻址大概分为3类用法。存取器间接寻址,区域内寄存器间接寻址和区域间寄存器间接寻址。
比如L MW[MD0] 就是存储器间接寻址。L MW[AR1,P#0.0]就是 区域内寄存器间接寻址,L W[AR1,P#0.0]就是区域间寄存器间接寻址

首先AR1和MD0 都是32位指针,里面类容既包括了 地址信息页包括了寻址的区域信息,地址寄存器的类容如下
区域类型+地址 具体请查看STEP7里的帮助文件(比如你可以搜索POINTER 找到POINTER 和ANY 类型里面就有关于指针和存储区域的说明
b#16#80     P            I/O area
 b#16#81      I         Input area
 b#16#82    Q         Output area
 b#16#83     M       Bit memory area
 b#16#84    DB      Data block
 b#16#85   DI       Instance data block
 b#16#86     L        Local data (L stack)
 b#16#87     V       Previous local data

然后就是P指针,P#50.0  就是一个指针常数。
你程序里面 L P#50.0  LAR1 指令执行后 AR1 类容为 16#xx000190 (xx代表不相干)
                           L P#M50.0 LAR1 指令执行后 AR1类容里除了地址信息 还多了区域信息16#83000190
比如 你要把 MB50 移到 MB100中去你 可以用三种方法实现
1:存取器寻址
L 50
SLD 3
T MD0
L MB[MD0]
T MB100
2:区域内寄存器间接寻址
L P#50.0
LAR1
L MB[AR1,P#0.0]
T MB100 
3:区域间寄存器间接寻址
L P#M50.0
LAR1
L B[AR1,P#0.0]  //注意由于AR1 里面包含了区域M的信息 所以可以省略M直接以B[AR1,P#0.0}
T MB100 
希望你能明白些了。

图片说明:

P指针问题  

提问者对于答案的评价:

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc200226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年10月29日
下一篇 2017年10月29日

相关推荐