在我前边的文章《从西门子的PLC程序来看三菱FX5U的PLC程序》中,把西门子和三菱FX5UPLC的程序做了个对比,说三菱PLC中数据的编排方法和西门子的不一样,但是没有深入展开来讲,因此这篇文章,就来再细致的说一下!
西门子和PLC中的数据组合构成是一样的,因此这篇就上一个西门子PLC程序的截图来说明问题:
西门子STEP7软件中的一段程序截图
这段程序很简单,全部是MOVE指令,将16进制的1,3,5,7分别传送到MB0,MB1,MB2,MB3中;将MW0,MW2,MD0传送到几个临时变量中,这里的临时变量不重要,主要是让大家看到他们中的值是多少!
16进制的对应关系不是那么直观,因此还是在变量表中看一下二进制数据:
STEP7变量表截图和西门子数据结构关系
从我做的这个图片上可以看到:
MB0=2#,
MB1=2#,
MB2=2#,
MB3=2#,
图片上我用了不同的颜色来区分,因此就能很明确的看出来MW0就是MB0和MB1的组合,MW2就是MB2和MB3的组合;16位的MW0和16位的MW2又组合在一起组合成一个32位的双字MD0。
---图片中的对应关系就是西门子PLC中的数据对应关系,这个编排关系可以说是和三菱中的字双字的编排关系相反的!
为了更好的对比,还是上一个三菱FX5U的程序:
GXWORKS3中的程序截图
三菱的这段程序也很简单,把16进制的3,因为10进制下还是3,所以是把3传送到D0,7传送到D1;然后用一个32位的传送指令DMOV把D0和D1的值传送到D2和D3中;MOV指令是16位的传送,再把D2传到D10,D3传到D20!
可以看到D0→D2→D10他们的值都是3,D1→D3→D20他们的值都是7。这里是没有问题的,说明的DMOV,确实是把D0和D1一起传送给了D2和D3,且对应关系挺好!---但是,这还不是要我说的重点,我要说的是D2和D3组合成一个32位数据的时候他们的存储关系!
从程序中可以看到D0和D2的10进制值都是,看下边的变量表中双字32位的D0的二进制值是
2#00000000,000000000001---这段数值从我中间逗号那里分开的话,其实就是7,3,也就是说D1--D0的形式,D1在左边,D0在右边!
再多看一点监控值:
32位的D0和16位D0以及D1的关系
这个图片可以看到D0的值为3,是因为D0.0和D0.1这两个位的值为1;D1的值为7是因为D1.0,D1.1,D1.2这三个位的值为1。也因此确定了32位视图下的D0是D1链接D0这样的方式,而西门子中是32位的MD0是由MW0链接MW2的方式!他们是有点相反的意思!
上边所说的到最后就汇总成一张图片:
三菱PLC和西门子PLC分别的数据对应关系
本文到此就结束了,和前边的文章对比来看,应该是容易看懂的,希望对朋友们有点帮助,谢谢!