说明:本篇文章是为下一篇文章,在触摸屏上演示7段数码管指令而预先讲解的一个指令!

正文:

字节交换指令应该算一个比较重要的指令,特别PLC要和一些HMI设备通讯,在HMI上录入数据的时候,就有可能需要经常使用这个指令。

来看一下西门子200PLC中字节交换指令即SWAP指令在指令树中的位置:

swap 机制分析(SWAP字节交换指令详解)(1)

SWAP指令在指令树的传送目录下

这个指令的字面意思很简单,就是将一个字的2个字节中的内容相互交换一下,严格一点就是将输入字IN的高低字节中的内容相互交换,请看下图:

swap 机制分析(SWAP字节交换指令详解)(2)

SWAP指令只有一个操作数

该图是CPU运行时的监控图,可以看到SWAP指令就只有一个操作数,这里我给的值是MW0。上边的状态表中我监控了3个变量,MB0,MB1和MW0。

一个字长的变量是16位,就包含2个字节长度的变量,因此MW0本身就是MB0和MB1组成的!--这里很有必要强调一个基础但重要的知识(因为我的文章没有就此说明过,所以上图来说明一下):

swap 机制分析(SWAP字节交换指令详解)(3)

西门子PLC中的数据存储格式

这个图片小伙伴们这样看可能觉得没有什么,但是如果换一种方式提问,大家就知道这个表格的重要性了。比如,往MB0中写1的话,请问M0.0--M0.7到底谁是1? 再进一步如果往MW0中写1的话,是M0.0为1还是M1.0为1?

来看一下答案,如下图:

swap 机制分析(SWAP字节交换指令详解)(4)

监控状态表来说明答案

该图片的上边部分是我在MB0中写入1,可以看到M0.0=1;图片的下边部分是我在MW0中写入1,可以看到M1.0=1,而此时M0.0=0。---这说明一个什么问题?

说明了虽然MW0中是包含了MB0的,但是往MB0中写1,和往MW0中写1,对MW0的值的影响是不同的! 蓝色圆圈①处的图片可以看到向MB0中写1后,MW0的值是256;只有向MB1中写1,MW0的值才为1。

数据格式讲完了,还是回归到本文的主题,SWAP指令,通过一个动态图来看一下吧:

swap 机制分析(SWAP字节交换指令详解)(5)

SWAP程序监控动态图

这个动态图的操作有两部分:

第一部分的操作是我在MB0中写入了1,可以看到MB0和MB1的值在0和1之间不断的切换;并且MW0的值在1和256之间不断的切换。原因就是SWAP指令在不断的交换MB0和MB1,因为SM0.0是一直接通的,因此这个指令就在不断的交换交换,这在程序使用中是不建议这样使用的。

来看第二部分的操作,我在VB0中写入了1,此时VB1=0,VW0=256。而当我把M10.0写为1后,SWAP指令就执行了一次,最后的结果就是VB0=0,VB1=1,VW0=1。这里用了上升沿指令,该做法就可以保证只交换一次!

至此西门子200PLC中的字节交换指令就介绍完了,这个指令很简单,但是一个字中哪个是高字节,哪个是低字节这种基础知识,一定要搞清楚明白,不然在程序中看到这样的指令就会比较混乱!

就说这么多了,我以为我西门子200的指令都在文章里边说的差不多,结果还是有一些没有说过,呵呵,继续努力吧!

喜欢的请关注!有问题的请留言,谢谢!

,