看别人程序里发现对指针上面有点不懂。
里面有语句
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
希望你能明白些了。
图片说明:
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc200226.html