登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:急急急,谁能告诉我?

点击:680 回复:6

附件
有谁能告诉我,为什么经过MOVW之后,输出的数值变成40了?
13-01-17 14:11

引用 wfhao666 在 2013/1/17 14:11:40 发言【内容省略】

这就是地址混合使用的典型~~~~~
10378转换为2进制为  0010 1000 1000 1010 从AIW中写入VW1时,由于VW1又VB1与VB2组成,VB2是VW1的低字节,VB1是VW1的高字节,至此,VW1的值仍然是10378
接下来楼主执行了VW向VD的转换,此时问题来了:
VW1中的10378被扩展到了32位,也就是其二进制已经变成了0000 0000 0000 0000 0010 1000 1000 1010了,此时的结果没有变化,被存入了VD0,就在存入的瞬间,魔法开始了。
VD0包含了VW0以及VW2,也就是说,VD0由VB0,VB1,VB2,VB3组成,而VW1由VB1,VB2组成,因此此时的VW1中的值实际上由VB1,VB2中组成,也就是说,此时的VW1的值是0000 0000 0010 1000,而这不正是10进制的40了么。
而因为监视值需要保持值得一致性,因此你才会在前面MOV-W指令中看到VW1的值为40。
总结:这是典型的程序员地址混用的错误!!!!!!!!!!!!!!!!!!!!!!!!!!正如我在你的令一贴中的结论一样。
专业的回答是成为CVLSAM马甲的重要因素。
Good Luck~
13-01-17 14:28
VD0里面包含了有VB0-VB3    VW1里面包含了VB1-VB2    这地址使用重复了    有问题的哦
13-01-17 15:38
地址重复       AIW0传 VW0  ,VW0转VD2 呢表情
13-01-17 20:55
学习阶段,向高手学习,Q1845957301
13-01-18 10:24
VW1作为一个容器传递数据用,在其地方一定也有类似的应用,也是用的VW1,这里监控显示的VW1是程序最后的数据。程序执行到你这步时能够正确执行,只是监控显示不正常,这样用可以,不是错误。
13-01-19 11:46
地址重复了,VD0里面包含了VW1
13-03-14 11:51

工控新闻

更多新闻资讯