西门子PLC编程中的寄存器使用问题

如题所述

你的问题我也发现了,我先用前两条指令做了一下,没有出现你说的这种现象,当我写你的第三条指令时,发生了这种情况。。。然后我又把第三条指令给去除了,这种现象也随之消失了,所以,我的初步结论是,与你的第三条指令的地址分配有关。。。我建议你了解一下西门子200PLC的寻址方式,我也给你查了一下,但是,只是针对今天的这个问题。其实这个问题是这样的,在西门子200PLC中VW100就是VB100+VB101,其中,VB100为高位,VB101为低位,你可以参看下图:
按照这种编程原则,我们所谓的1或2,实际是存在VB101中的
你指令中的VW101实际的地址应该为VB101+VB102,而1或2是存在VB102中,虽然在一个字的单元中,高位字节并没有数值,可是因为是一个字的单元,高位部分会自然补零的,所以数值会因为赋值VB101中,而将VW100中的VB101赋值为0,所以你会看到的都是零。。
以我的经验,这种以字的形式的赋值方法,尽量应注意错开存储空间,这个还是程序比较少的,如果是一个大型的程序,可能整个工程进度都会遭到破坏,一般我使用时,都是用跳跃式的方法如VW101、VW103、VW105宁可跳一下,也别总是因为这个栽跟头,以前我用GE
PLC就遇到过这种情况,有时候,很难发现。。。像这种情况你也可以该为以MOV_B作为传送指令,如果数据不大于255。如果大于255再用MOV_W指令。还是多看看手册吧。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-18
1、VW100是整型数,占用2个字节,即VB100和VB101,其中VB101是它的低8位,VB100是它的高8位。你前面的两个网段,把1或2送给了VW100,就是写入了VW100的低8位,用二进制表示,VW100应该是00000000
00000001或00000000
00000010。
这时,你再用VW101,VB101又变成了VW101的高八位,当然程序执行的最后结果应该就是0.
所以,如果用整数,一定要两个字节两个字节(这个应该是英文中的BYTE),否则就乱了。
2、用实数型的也是一样,如VD1000,它占4个BYTE,定义下一个时,就应该是VD1004.
3、你说程序执行监控中你能看到是对的,那是在因为扫描过程中,按顺序扫描,扫描很快的,当网段3扫描完成立即就是网段1,所以会是你看到的结果。
第2个回答  2019-06-11
在VW和VD时只能是偶数(它们是连续用的,VW两个连续字节也就是VB100和VB101,VD四个连续字节也就是VB100,VB101,VB102,VB103),在VB时就可以VB101
相似回答