详解几个使用频率较高的S7-200SMART PLC传送指令,PLC编程不慌张
在编写程序的过程中,经常会碰到存储区中的数值需要改变,或者数据在PLC中存储位置需要改变,这就需要用到传送指令。
首先我们介绍一下标准的一对一传送指令:MOV指令 ;将IN端输入数据复制一份移至OUT输出端,数据类型不同需要用的传送指令也不同,有如下几种。
说明:
1.只要检测到EN条件闭合,就发生数据传送,每个扫描周期执行一次。
2.值的传送过程为IN复制到OUT,OUT中原本数据被覆盖掉,IN中数据仍然保留。
3.对IN的参数可以是常数也可以是变量,对OUT必须是变量。IN为常数时,通常称为赋值。
4.每种指令对应的数据类型必须匹配,否则会发生错误。
5.对定时器和计数器用字传送指令,传送的是当前值。
6.实数传送即浮点数传送,因为浮点数都是32位,所以操作数也为VD。不能与双字传送混用。
7.ENO为能流输出,可以再接其它指令,如常开,常闭,输出,置位,复位等。不接指令时不得延长否则编译报错。
立即传送指令
移动字节立即读取指令读取物理输入 IN 的状态,并将结果写入存储器地址 OUT 中,但不更新过程映像寄存器。
传送字节立即写入指令从存储器地址 IN 读取数据,并将其写入物理输出 OUT 以及相应的过程映像位置。
块传送指令
将相邻的几个数据同时传送到另外几个相邻的寄存器中。块传送应避免地址重叠,否则容易发送数据传输错误。
以BLKMOV_B为例说明指令的执行过程:将IN(VB0)开始的N(5)个数据复制到OUT(VB5)开始的N(5)个寄存器中,N为1-255。三种块传送原理相同,只是存储空间大小不同而已。
字填充指令
将IN中字类型的存储器或常数写入从地址OUT开始的N个字寄存器中。N的范围是1—255。
典型应用:批量清零,初始化。
交换指令
每执行一次,将IN中的字寄存器的高字节和低字节交换一下。
字交换方法:两个字要进行互换,没有直接指令,可以使用传送指令进行交换。
比如要将VW100和VW102中的数据互换,可用如下程序实现:
免责声明:本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系删除,谢谢!
搞不懂PLC中的高字节、低字位是啥?看完这篇文章就懂了!
我是电控阿甘,从事电气工作十余年,专注分享【电工基础知识+自动化控制知识】,助力电工入门和电工进阶电气工程师,点击右上方“关注”我,让我们共同进步,实现薪高一筹!
全文大约2000字,知识类文章阅读和休闲娱乐类文章阅读不同,需要阅读者在阅读过程中进行一定的耐心和思考,阅读过程可能不会带给你短暂的快乐,但是认真看完,知识可以带给你长久的满足。
以下为正文在PLC使用过程中经常会听到高字节、低字位这种说法,并且还不止这一种叫法,还有什么大头端、小头端,大端模式、小端模式等等一堆叫法。初学者总是一脸迷茫,搞不清楚什么意思,其实他们说的都是一个概念,一回事,只要搞清楚一个概念即可。
西门子200SMART PLC
为什么我们要搞清楚这个概念呢,平时PLC编程的时候确实用得不太多,也不用太在意。但是在牵涉到与别的品牌的PLC或者上位机软件及仪表通信时,如果搞不清楚这个概念,很容易会导致传送的数据解析不正确,得不到我们想要的数据,加上有的说明书写得不详细,此类故障如果没有这个概念意识,经常会得到一个莫名其妙的数,并且一时还不知道问题出在哪里,那么今天我们就来分析一下这个高字节、低字位是什么意思。
高字节、低字位本质上讲的就是数据在以字节为单位的存储空间中存储的次序问题, 不同家的PLC对该次序定义可能不同,但无非就是高字节、低字位和高字节、高字位两种,如果双方交换数据时没有将该次序统一就会出现数据解析不正确的问题。
西门子PLC中字、双字组成
我们在上一篇文章中详细讲过数据在PLC中是如何存储的,并且讲解了字节、字、双字的定义等概念,这里不再对上述知识进行重复讲解,如果还不清楚地可以参考往期这篇文章:
想要PLC编程水平更进一步?搞懂直接寻址和间接寻址是基础!
那既然说了高字节、低字位对应描述对象是以字节为单位,那就只有比字节大的存储单位进行数据存储时才存在这种说法,具体到PLC中就是字和双字,我们都知道一个字是由两个连续的字节组成,如VW100就是由VB100和VB101两个字节组成,因为VB101比VB100的底层地址编号大,并且西门子定义的编号101也比100大,因此称VB101为高字节,VB100为低字节。
那么低字位指的又是什么意思呢?我们知道一个字也是由16个位组成的,通常其16个位的编号为0-15,15为高位编号,0为低位编号。同样以VW100为例,其16个位排列如下图所示:
VW100组成
可以看到最左边是高位15,最右边是低位0,但是注意哈,其左边高的8个位编号为15-8的位是VB100的8个位,其右边低的8个位编号为7-0的位则是VB101的8个位。这就很好玩了,高的字节编号VB101这个字节在VW100这个字中反而放在了最右边充当低的7-0位编号,而低的字节编号VB100这个字节在VW100这个字中则实现了逆袭,放在了最左边充当高的15-8位编号,这就是高字节、低字位这个叫法的来源了,如果你愿意也可以叫成低字节、高字位,一样的道理,当然我们最好还是遵循习惯叫法叫作高字节、低字位。
同样的道理对于双字VD100而言,其从左到右、从高到底位编号为31-0、字节组成则是由VB100、VB101、VB102、VB103,此时低字节VB100依然占据高8位编号,充当高字位,而VB103则乖乖接受分配的低8位编号,充当低字位。
那么一个具体的数字在字存储空间如何存储的呢?我们以无符号整数12345这数字为例看一下,先看下其进制转换后,16进制为16#3039,二进制则为2#0011 0000 0011 1001,如下图:
整数12345的不同进制显示
那么在PLC中VW100中如何存储,监控如下图,可以看到VB100中数值为16#30,VB101中的数值为16#39,确实是VB100中存储高位值,VB101中存储低位值,对于双字也是同样道理,在此不再赘述,有兴趣的朋友可以自己试验一下看看双字中如何储存数据。
VW100中数据存储方式
当我们的PLC与别的PLC或者上位机软件及仪表通信时,对方如果采用高字节、高字位的存储方式,那么同样是16#3039我们接收过来数据就变成了16#3930,转换成无符号整数就变成了14640,这不是我们想要的数据,因此当碰到通信及接收数据正常而显示数据异常时,要着重考虑是否为双方数据存储方式不一样所导致的,解决办法就是要么发送数据前让对方处理好数据再发送,要么就自己接收完数据后再自行处理。
而同样的所谓的小端模式、小头端也是一个意思,对应的就是高字节、低字位这种存储方式,相应的大端模式、大头端对应的就是高字节、高字位的存储方式,原理完全相同,叫法不同而已,理解了原理,下次看到不同的叫法也会很快理解。
好了,关于高字节、低字位这个概念今天就给大家聊到这里,希望可以给大家的PLC学习带来帮助。另外我的主页中有很多关于PLC基础知识的文章和视频,都是一些学习PLC必要的知识,同时考虑到初学者初次理解困难,全部采用大白话讲解的,有兴趣的可以去看下,希望这些文章和视频够帮到大家,如果还有其它关于电工和PLC的问题,可以下方留言讨论,谢谢大家。
相关问答
plc编程中的字节,字,双字,整数,双整数,实数,之间到底是什么关系?
1字节=8位1字=2字节=16位1双字=2字=32位整数一般是1字,双整数是2字,不能表示小数实数是32位,浮点数1字节=8位1字=2字节=16位1双字=2字=32位整数一般是1字,双...