关于S7-1200中使用STL编程时,间接寻址中的 双字左移指令的作用?

有一段程序,对于为什么要使用双字左移指令不是很理解,正好大家讨论左移、和右移指令存在的意义?
程序段如下:
L  #Index    //将操作数#Index的值加载进累加器1
L   1            //将#Index的值加载进累加器2,将操作数1的值加载进累加器1
–     I           //用累加器2中的值-累加器1的值,并将差值存入累加器1
SLD   5       //将累加器1中的值(内容:#Index-1)左移5位

L      P# #Store    //将#Store作为指针装入累加器1,将左移5位的值存入累加器2
+      D         //将累加器1和累加器2相加(累加器1+累加器2)

L AR1     //将相加后的值存在累加器1中,并将累加器1中的值 加载进地址寄存器1

L  #Data     //将操作数#Data的值加载进累加器1

T   DID  [AR1,P#0.0]     //将累加器1中的值(即#Data)传送进以AR1地址寄存器为起始地         址,                              0.0为偏移量的地址中
———————————————————————————————————–
以上是我个人对STL代码添加的注释,不对之处大家讨论改正,对于第4句  SLD 5  偏移5位的作用请知道其作用的大神给出一个详细的说明,谢谢!

最佳答案

至少要左移3位,即SLD 3,这是由于地址指针的格式决定的,和P#4.0类似,最低3位表示位,其他位表示地址,即xxx—xxxxx.xxx。

所以如果SLD 5
index=1时,地址指针是4.0;(B100.000)
index=2时,地址指针是8.0;(B1000.000)
因为用的是双字寻址,故左移5位

当然具体地址是多少,还要看index内容及P# #Store。

提问者对于答案的评价:
谢谢您的解答!我就是不明白这里为什么要写一句SLD 5,双字左移5位,您说的指针格式决定,是从哪里看出来的呢,是从SLD  或者SLW  语句中的D  ,W看出来的吗?

最佳答案作者回复:
如果SLD 3后
index=1-1=0时,地址指针是0.0;(B#0000  000)31–3位是二进制0000,对应的是0
index=2-1=1时,地址指针是1.0;(B#0001  000)31–3位是二进制0001,对应的是1
index=3-1=2时,地址指针是2.0;(B#0010  000)31–3位是二进制0010,对应的是2
双字地址表示成DBD0,DBD1,DBD2,这样表示的话地址就重复了,
所以要左移5后就表示成DBD0,DBD4,DBD8了
从上面也知道为什么index需要减1了。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日
下一篇 2021年7月4日

相关推荐

发表回复

登录后才能评论