区域间间接寻址问题

#Shiftregister是一个输入变量,里面存了一个地址P#DB1300.DBX0.0

程序如下:

      L     P##Shiftregister
      LAR1  
      L     0
      L     W [AR1,P#0.0]               //DB No.
      ==I   
      JC    END                         //No DB => End

问题:AR1中最终存的是P#DB1300.DBX0.0这个地址,为什么经过L     W [AR1,P#0.0] 就变成DB号了呢?,有点看不懂,请高手详细解读下

图片说明:

区域间间接寻址问题   

钻石用户推荐最佳答案

#Shiftregister 是一个 POINTER 类型的形式参数,它由6个字节构成,其存储结构如图,从图中可以看出此结构的第一个字是 DB 块号。
当将实参 P#DB1300.DBX0.0 传给它时,经过下面两条指令
 L     P##Shiftregister
 LAR1
AR1 中装的指针是指向附图结构的首字节,即DB块号的地址。  经下面的指令
 L     W [AR1,P#0.0]  //就读到了附图结构的第一个字,它就是DB块号。
                                  //就是你所附图中,你看到的 514H,你把514H这个16进制数转换成十进制就是 1300,即DB块号是 1300
参考资料
S7-300和S7-400寻址
https://support.industry.siemens.com/cs/document/79632832
西门子STL间接寻址常问问题集
https://support.industry.siemens.com/cs/document/76492353

图片说明:

区域间间接寻址问题  

提问者对于答案的评价:

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午10:41
下一篇 2020年10月30日 下午10:42

相关推荐