0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍几个常用MOVE系列指令

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 作者:机器人及PLC自动化 2022-07-07 10:48 次阅读

MOVE 系列指令

本文档将介绍几个常用 MOVE 系列指令,链接如下:

MOVE

(U)MOVE_BLK

MOVE_BLK_VARIANT

MOVE

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

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

459a7102-fd34-11ec-ba43-dac502259ad0.jpg

图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。

表1 MOVE的传送条件

传送源 (IN) 传送目标 (OUT1)
进行 IEC 检查 不进行 IEC 检查
BYTE BYTE、WORD、DWORD BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、TIME、DATE、TOD、CHAR
WORD WORD、DWORD BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、TIME、DATE、TOD、CHAR
DWORD DWORD BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、TIME、DATE、TOD、CHAR
SINT SINT BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD
USINT USINT, UINT, UDINT BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD
INT INT BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD
UINT USINT, UINT BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD
DINT DINT BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD
UDINT UDINT BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME, DATE, TOD
REAL REAL DWORD, REAL
LREAL LREAL LREAL
TIME TIME BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TIME
DATE DATE BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, DATE
TOD TOD BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, TOD
CHAR CHAR, String中的字符 BYTE, WORD, DWORD,CHAR,String中的字符
WCHAR WCHAR, WString中的字符 BYTE,WORD,DWORD,CHAR,WCHAR,WString中的字符
String中的字符 CHAR, String中的字符 CHAR, String中的字符
WString中的字符 WCHAR, WString中的字符 WCHAR, WString中的字符

注意:
1.如果输入 IN 数据类型的位长度超出输出 OUT 数据类型的位长度,则源值的高位会丢失。如果输入 IN 数据类型的位长度低于输出 OUT 数据类型的位长度,则目标值的高位会被改写为 0。
2.REAL传送至DWORD时是按位传送,不是取整。如果需要取整,可以使用ROUND、CONVERT_REAL_TO_DINT等指令。
3.(不)进行IEC检查是指,在MOVE指令所在的OB/FC/FB属性中的"IEC检查"选项,仅在此块中生效。默认的"IEC检查"不激活。设置如图2所示。

45afcdea-fd34-11ec-ba43-dac502259ad0.jpg

图2 IEC检查的设置

MOVE的使用

45ce7100-fd34-11ec-ba43-dac502259ad0.jpg

图3 DB25

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

45f7caaa-fd34-11ec-ba43-dac502259ad0.jpg

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

2. 数组的传送

46194a2c-fd34-11ec-ba43-dac502259ad0.jpg

图5 数组的传送

3. UDT的传送

46363092-fd34-11ec-ba43-dac502259ad0.jpg

图6 UDT的传送

4. String中的字符的传送

465498c0-fd34-11ec-ba43-dac502259ad0.jpg

图7 String中的字符的传送

5. DTL中的变量的传送

46650d86-fd34-11ec-ba43-dac502259ad0.jpg

图8 DTL中的变量的传送

6. DB整体之间的传送

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

467e1e98-fd34-11ec-ba43-dac502259ad0.jpg

1. IN和OUT的DB必须同时为优化DB或者非优化DB。

2. 不允许同时输出到多个DB,即图4的形式。

46962510-fd34-11ec-ba43-dac502259ad0.jpg

图9 存储器预留区域设置

46af5a80-fd34-11ec-ba43-dac502259ad0.jpg

图10 DB整体传送

46dc4252-fd34-11ec-ba43-dac502259ad0.jpg

图11 DB整体传送程序

(U)MOVE_BLK

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

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

46f3f834-fd34-11ec-ba43-dac502259ad0.jpg

图12 程序位置

47272196-fd34-11ec-ba43-dac502259ad0.jpg

图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]开始的数组中。

47390136-fd34-11ec-ba43-dac502259ad0.jpg

图14 程序使用

47568ea4-fd34-11ec-ba43-dac502259ad0.jpg

图15 运行结果

MOVE_BLK_VARIANT

LAD和SCL均为MOVE_BLK_VARIANT指令。

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

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

4770e006-fd34-11ec-ba43-dac502259ad0.jpg

图16 指令位置

477d9814-fd34-11ec-ba43-dac502259ad0.jpg

图17 指令详情

表2 参数说明

参数 声明 数据类型
SRC Input Variant、Array、其他(不包括Bool,Array of Bool)
COUNT Input UDINT
SRC_INDEX Input DINT
DEST_INDEX Input DINT
DEST Output Variant、Array、其他(不包括Bool,Array of Bool)
RET_VAL Return INT

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区

47918dc4-fd34-11ec-ba43-dac502259ad0.jpg

图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结构一致即可。

47af11a0-fd34-11ec-ba43-dac502259ad0.jpg

图19 程序详情

2. 实现变长数组的处理

功能:FC15处理MBV类型变量,该变量作为InOut,FC14中输入MBV类型变量的变长数组,在其内部判断数组大小,然后数组元素逐个执行FC15指令,最后送回变长数组。

47c4bfe6-fd34-11ec-ba43-dac502259ad0.jpg

图20 指令详情

------------------------END-----------------------

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 变量
    +关注

    关注

    0

    文章

    588

    浏览量

    28086
  • move
    +关注

    关注

    0

    文章

    12

    浏览量

    7323
  • SCL
    SCL
    +关注

    关注

    1

    文章

    237

    浏览量

    16845

原文标题:博途: MOVE 系列指令

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VR的常用comand指令介绍

    VR 中的常用指令设置及介绍
    发表于 02-13 10:08

    常用ARM指令的功能介绍

    就做个笔记写下自己复习的东西,当然里面很多资料都是网上参考的,不过自己动手输入的,主要是加深印象,虽然这种方法不一定管用呵呵常用ARM指令的功能介绍1.汇编伪指令(1)ENTRYENT
    发表于 05-13 07:45

    几个常用电路

    本文将介绍几个常用电路,详情请看下文。
    的头像 发表于 03-04 15:02 1.6w次阅读
    <b class='flag-5'>几个</b><b class='flag-5'>常用</b>电路

    GSM模块常用AT指令详解

    本文首先介绍了AT指令的概念和AT指令的用法,其次阐述了AT的命令格式,最后对GSM模块常用AT指令进行了汇总。
    的头像 发表于 05-15 11:16 2.4w次阅读
    GSM模块<b class='flag-5'>常用</b>AT<b class='flag-5'>指令</b>详解

    三菱PLC FX系列常用逻辑指令,速存!

    三菱PLC FX系列的基本逻辑指令、FX系列PLC的步进指令
    的头像 发表于 03-07 16:07 9098次阅读

    西门子S7-1200PLC移动操作移动值指令MOVE

    在S7-1200PLC中,常用MOVE指令进行对存储器进行赋值或是把一个存储器的数据复制到另外一个存储器中。
    的头像 发表于 04-06 09:25 3718次阅读

    西门子S7-1200PLC块移动指令MOVE_BLK操作

    在S7-1200PLC中,l利用MOVE_BLK指令可以将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。
    的头像 发表于 04-06 10:29 3610次阅读

    三菱FX系列PLC常用指令大全来了

    想学好三菱FX 系列的plc,需要掌握哪些常用指令呢?作为一名PLC发烧友,这些指令你都掌握了吗?
    的头像 发表于 04-10 11:38 4953次阅读

    西门子PLC程序中常用几个指令介绍

    两个或两个以上的接点串联连接的电路叫串联电路块。串联电路块并联连接时,分支开始用LD、LDN指令,分支结束用OLD指令。OLD指令与后述的ALD指令均为无目标元件
    的头像 发表于 04-13 16:52 3149次阅读

    SIMATIC S7-1500 PLC移动值指令(MOVE)简述

    当允许输入端的状态为“1”时,启动此指令,将IN端的数值输送到OUT端的目的地地址中,IN和OUTx(x为1、2、3)有相同的信号状态,移动值的指令MOVE)及参数见下图1。
    的头像 发表于 05-08 09:33 9870次阅读
    SIMATIC S7-1500 PLC移动值<b class='flag-5'>指令</b>(<b class='flag-5'>MOVE</b>)简述

    博途使用STL中的MOVE指令

    现在,在 S7-1500 CPU 上可使用 STL 中的 MOVE 指令进行编程。
    的头像 发表于 06-06 11:10 3478次阅读
    博途使用STL中的<b class='flag-5'>MOVE</b><b class='flag-5'>指令</b>

    gvim中常用的一些指令介绍

    在 Vim 编辑器中,有一些常用指令可以帮助我们更高效地编辑文本。以下是一些在 gvim 中常用指令
    的头像 发表于 10-10 15:47 800次阅读

    工业机器人ABB编程常用指令

    在之前的文章中,相信你已经对ABB机器人的MOVE指令以及常用专属名词有一定的了解了,而从这篇文章开始,继续学习新的 编程常用指令
    的头像 发表于 10-19 10:40 864次阅读
    工业机器人ABB编程<b class='flag-5'>常用</b><b class='flag-5'>指令</b>

    PLC中Move指令可以实现什么功能?

     Move指令是PLC编程中的基本指令之一,常用于在程序中对数据进行移动和传输。在使用Move指令
    发表于 01-10 15:13 803次阅读

    介绍一下MOVE_BLK_VARIANT指令在使用中应注意的问题

    块移动指令包括两个:MOVE_BLK和MOVE_BLK_VARIANT,实际项目中都经常被用到。
    的头像 发表于 03-04 10:51 393次阅读
    <b class='flag-5'>介绍</b>一下<b class='flag-5'>MOVE</b>_BLK_VARIANT<b class='flag-5'>指令</b>在使用中应注意的问题