关于西门子200指针的使用

LD     SM0.1
MOVW   300, VW0
MOVW   0, VW2
MOVW   0, VW12  //上电以上初始化赋值


LD     SM0.0
MOVD   &VB0, VD20   //将VB0开始的初始的地址(vw0)放到VD20
FOR    VW14, 1, 2     //循环2次
+I     *VD20, VW12      //将VD20指向的地址内的数据(vw0)与VW12相加,结果放到VW12
+D     2, VD20         //递增一个字节   


NEXT 
     输出为300吗????????


本程序是我看网上高手改的  不知道对不对    因暂时无PLC测试 还请高手先详解下   感觉西门子的指针和C指针有区别     知道的按我的格式解释下呀

问题补充:
MOVD   &VB0, VD20  //  这里用&VW0有什么区别

+D     2, VD20         //这里地址是VB2的    还是vw2的 (为什么)

最佳答案

LD     SM0.1
MOVW   300, VW0 
MOVW   0, VW2
MOVW   0, VW12  //上电以上初始化赋值

LD     SM0.0
MOVD   &VB0, VD20   //间接寻址将VB0开始的初始的地址(16#08000000)放到VD20,.   VD20的值是134217728.
FOR    VW14, 1, 2     //循环2次。
+I     *VD20, VW12      //将VD20指向的地址内的数据(vw0)与VW12相加,结果放到VW12
+D     2, VD20         //循环一次&VB0+2,结果放到VD20.

NEXT 
     输出为300吗????????不是,下面是我联机监控的数据。
VD20是134217732,VW12是65535,来回跳动。如果修改FOR    VW14, 1, 3 后,VD20是134217734.如果修改FOR    VW14, 1, 5 后,VD20是134217738.

<S7-200 可编程控制器系统手册>下载:
http://www2.ad.siemens.com.cn/download/Upload/AS/manual/1017[2].pdf

补充回答:MOVD   &VB0, VD20  //  这里用&VW0有什么区别,&VW0的间接寻址是VB0了,VB0的值是1。和&VB0区别很大,&VB0的值是16#08000000。


+D     2, VD20         //这里地址是VB2的    还是vw2的 (为什么)都不是,是间接寻址将VB0开始的初始的地址(16#08000000)放到VD20也就是这个MOVD   &VB0, VD20 指令执行后的数据,VD20是134217728.执行+D     2, VD20后,结果VD20是134217732。

手册的解释和这个有很大出入。

提问者对于答案的评价:
理解谢谢大家

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

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

相关推荐