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