move是什么意思(S7-1200 MOVE指令的讲解)

访客4年前黑客工具827

LAD为MOVE指令,SCL使用":="表达式可以完成MOVE的功能(“:=”还可以有其他功能)。

MOVE指令是当EN条件满足时,实现相同数据类型(不包括位、字符串、Variant类型)的变量间的传送。

S7-1200 MOVE指令的讲解

图1 指令位置

注意:

(1)LAD传送字符串需要使用S_MOVE指令(SCL使用“:=”),但是传送字符串中的字符需要使用MOVE指令。

(2)支持通过一个MOVE指令将一个变量传送到多个变量,但是该功能不支持传送复杂数据类型(DTL、结构、数组等)或字符串中的字符。

(3)传送数组时,要求元素数据类型以及元素个数必须完全一样,数组限值可以不同,例如Array[0..1] of Byte可以MOVE到Array[1..2] of Byte。

(4)如果MOVE两边是基本数据类型,则可以在满足以下兼容条件时传送,参见表1。

S7-1200 MOVE指令的讲解

表1 MOVE的传送条件

注意:

1.如果输入 IN 数据类型的位长度超出输出 OUT 数据类型的位长度,则源值的高位会丢失。如果输入 IN 数据类型的位长度低于输出 OUT 数据类型的位长度,则目标值的高位会被改写为 0。

2.REAL传送至DWORD时是按位传送,不是取整。如果需要取整,可以使用ROUND、CONVERT_REAL_TO_DINT等指令。

3.(不)进行IEC检查是指,在MOVE指令所在的OB/FC/FB属性中的"IEC检查"选项,仅在此块中生效。默认的"IEC检查"不激活。设置如图2所示。

S7-1200 MOVE指令的讲解

图2 IEC检查的设置

MOVE的使用

S7-1200 MOVE指令的讲解

图3 DB25

1. 单个基本类型变量的传送

S7-1200 MOVE指令的讲解

图4 单个基本类型变量的传送

2. 数组的传送

S7-1200 MOVE指令的讲解

3. UDT的传送

S7-1200 MOVE指令的讲解

4. String中的字符的传送

S7-1200 MOVE指令的讲解

5. DTL中的变量的传送

S7-1200 MOVE指令的讲解

6. DB整体之间的传送

条件:DB块为非优化块,或者将优化DB块的存储器预留区域与预留可保持性存储器设置为0字节(如图9所示),并且两个DB块结构完全相同。

S7-1200 MOVE指令的讲解

图9 存储器预留区域设置

S7-1200 MOVE指令的讲解

图10 DB整体传送

S7-1200 MOVE指令的讲解

图11 DB整体传送程序

(U)MOVE_BLK

LAD和SCL均为(U)MOVE_BLK指令。

(U)MOVE_BLK指令是当EN条件满足时,实现相同数组之间部分元素的传送。MOVE_BLK和UMOVE_BLK的区别是UMOVE_BLK不会被中断打断,并且最多16kB的数据量。

S7-1200 MOVE指令的讲解

图12 程序位置

S7-1200 MOVE指令的讲解

图13 指令详情

注意:

1. IN和OUT必须是数组的一个元素,例如"DB26".Static_1[0],不能是常数、常量、普通变量,也不能是数组名。

2. IN和OUT类型必须完全相同,并且必须是基本数据类型,不能是UDT、Struct等的数组。

3. IN是源数组中传送的起始元素,OUT是目的数组中接收的起始元素。

4. COUNT是传输个数,可以是正整数的常数,如果是变量,数据类型支持USINT、UINT、UDINT。

5. 如果目的数组接收区域小于源数组的传送区域,则只传送目的数组可接收的区域的数据。如果激活指令的ENO功能,则ENO=False。

(U)MOVE_BLK的使用

实现功能:将"DB26".Static_1[0]开始的4个元素传送至"DB26".Static_2[4]开始的数组中。

S7-1200 MOVE指令的讲解

图14 程序使用

S7-1200 MOVE指令的讲解

图15 运行结果

MOVE_BLK_VARIANT

LAD和SCL均为MOVE_BLK_VARIANT指令。

MOVE_BLK_VARIANT的基本功能是数组之间部分元素的传送,并且是可以处理Variant类型的变量的指令之一,适合处理Variant指向的变长数组。

从TIA V13SP1,S7-1200 V4.0开始支持该指令。

S7-1200 MOVE指令的讲解

图16 指令位置

S7-1200 MOVE指令的讲解S7-1200 MOVE指令的讲解

MOVE_BLK_VARIANT指令通常用于将源数组SRC的部分元素传送至目的数组DEST的部分元素中,SRC与DEST数组元素必须完全相同。COUNT是传送的元素个数,SRC_INDEX是待传送的源数组的起始编号,DEST_INDEX是目的数组接收的起始编号,此处用编号不是下标的意思是,SRC_INDEX和DEST_INDEX都从0开始,对应SRC和DEST的之一个元素。

同样是传送部分数组元素的指令,MOVE_BLK_VARIANT相对MOVE_BLK有以下优点:

1. SRC和DEST不可以是Bool数组,但可以是Struct、UDT等复杂数据类型数组

2. SRC和DEST都可以是普通的单个变量,例如SRC为一个INT变量,DEST作为一个INT数组,此时需要设置COUNT=1,SRC_INDEX=0,然后根据DEST_INDEX的值,传入DEST的指定位置。

3. SRC和DEST填写的通常是数组名,也可以是普通的单个变量,或者数组的一个元素,后两种情况都需要像(2)一样处理。

4. SRC和DEST可以是参数类型Variant的变量,也就是可以直接填写P#指针的格式,指令将会把P#指针看做数组处理(原因)。即使是SRC和DEST都指向Variant类型,其指向的形参的数组元素数据类型也需要相同,所以通常需要在使用指令之前用EQ_ElemType检查其中元素的数据类型。

使用MOVE_BLK_VARIANT指令的注意:

(1)COUNT>=1,否则报错并且不传送任何数据。

(2) COUNT+SRC_INDEX与COUNT+DEST_INDEX决定了SRC与DEST数组元素编号上限,超出范围将报错并且不传送任何数据。

使用举例:

1. 实现功能将结构完全一样的M区数据送入DB区

S7-1200 MOVE指令的讲解

图18 运行结果

需要注意的是将DB块改为非优化,M区和DB区均是16Byte,SRC和DEST可以是P#BYTE 16,P#WORD 8,P#DWORD 4等都可以,但是要注意COUNT和元素数相同(P#BYTE 16,COUNT=16;P#WORD 8,COUNT=8;P#DWORD 4,COUNT=4),SRC和DEST结构一致即可。

S7-1200 MOVE指令的讲解

图19 程序详情

电气相关知识和经验是用来分享,希望本文能对你有帮助。与人玫瑰,手留余香。

欢迎大家关注,点赞,评论及转发。

 

标签: 指令move

相关文章

狗的基本训练有几项(狗狗基本指令训练教程)

狗的基本训练有几项(狗狗基本指令训练教程)

大家一定都听过「狗是人类最好的伙伴」这句话,在历史上,人类饲养、训练狗狗已经有很长一段时间,你知道其实狗狗在两个月大左右就可以开始教基本指令了,而且幼犬比成犬来的容易训练,因为成犬有些坏习惯已经养成的...

骑马与砍杀2有哪些作弊码 骑马与砍杀2作弊指令使用攻略

骑马与砍杀2有哪些作弊码 骑马与砍杀2作弊指令使用攻略

骑马与砍杀2作弊指令如何使用?很多玩家对骑马与砍杀2作弊指令使用方法不是很了解,本文为大家带来骑马与砍杀2作弊指令使用方法介绍,一起来看看吧。 骑马与砍杀2作弊指令使用方法介绍 1、首先玩家打...

我要查我老婆删除微信聊天记录

<-- --> 教孩子说话不是一天就可以练就的,所以教孩子说话的时候要有耐心,但是如果孩子长时间都不会说话呢,还是要去看看,友谊长存小编就来说说吧。 哪些情况要警惕? 每个孩子都有自...

怎样训狗听从主人指令(训狗有什么好技巧)

怎样训狗听从主人指令(训狗有什么好技巧)

很多人说,养一只狗狗就像是养一个孩子一样,这样的比喻其实十分贴切。但它们还是十分幼小的时候,它们就像一个婴儿一样依赖着主人,但是等它长大了,了解了这个世界上的精彩以后,它们就会有自己的想法,有时候会不...

超级排名系统:常见的搜索引擎指令有哪些?

超级排名系统 网站关键词快速排名优化,7-15天关键词排名到首页,PC端和移动端都可以优化,支持百度、搜狗、360、神马等主流搜索引擎。 超级排名系统小编这里给大家列举了一些SEO人员日常使用频率较...

狗狗基础动作训练方法(常见指令动作如何训练

狗狗基础动作训练方法(常见指令动作如何训练

狗狗的训练越早越好,最佳的时期是3个月到七个月,这是狗狗领悟能力最好的时候~训练的时候主人要有耐心哦,需要反复训练狗狗们才能记得住。还有口令要一致、一旦确定了口令就不能更改,否则狗狗会越来越糊涂不知道...