新人求问,关于累加器,地址寄存器,临时变量。

L     P##Bits_Temp
      LAR1  
      L     LB [AR1,P#0.0]
      T     #Schalt_punkte
求助,这段代码什么意思。越详细越好,尤其是第一句和第三句,这其中Bits_Temp是16位word,比如说是CF5F,那么 P##Bits_Temp的值是什么?另外,AR1地址寄存器有什么特殊意义,为什么要把值传到AR1,LB又是什么?求解,越详细越好,知道是什么但是实在不明白这么做的意义

最佳答案

首先建议你去了解西门子间接寻址和指针(百度下就有)。。假设此段程序是在FC1里面的。。
L     P##Bits_Temp//在这里,#Bits_Temp是个临时变量,在调用FC1时系统会根据变量申明表(里面有关于此变量的起始地址和数据类型)给此变量在L堆栈里分配个地址。此条指令就是把这个变量的地址装入到ACCU1中。
LAR1 
L     LB [AR1,P#0.0]
T     #Schalt_punkte
至于其他的几条指令楼上说的是对的。。下面我说说 为啥要这样编程:从程序中可以看出变量#Schalt_punte为字节型(8位),而变量#Bits_Temp为字型(有2个字节),此程序的目的在于把变量#Bits_Temp的第一个字节里面的数据赋给变量#Schalt_punte。。因为两个变量的数据类型对不上,所以不可能直接传送,因此只有先找到这个变量的存储位置,才能把它的第一个字节拿出来赋给变量#Schalt_punte。。
还有建议你去百度下“西门子间接寻址和指针”,把这个弄清楚再结合我说的你就明白了。。

提问者对于答案的评价:
你回答的很好 谢谢

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午1:09
下一篇 2018年12月1日 下午1:09

相关推荐