movs 数据传送指令

您所在的位置:网站首页 博图软件程序块里系统块怎么找不到了 movs 数据传送指令

movs 数据传送指令

2024-07-17 11:45| 来源: 网络整理| 查看: 265

在博途中MOVE指令是比较常用的指令,在LAD中是MOVE指令,在SCL编程中用“:=”来表示。

dcd0b9e818fbd5f6f8dbfad0c46e25c8.png

比较常用的是MOVE(移动值),MOVE_BLK(移动块),MOVE_BLK_VARIANT(存储区移动)

一、MOVE移动值指令

3c0a419e35a0273146adf805e1672e16.png

将DB1中数组移动给DB_MOVE数据块中。指令很简单,也很好理解

注意:

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

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

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

9ae821b812a5e2248fec2df5c4ca244a.png

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

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

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

二、MOVE_BLK移动块指令

LAD和SCL均为MOVE_BLK指令。

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

f026deeddaaa0834c73014427a5af8bf.png

在上图中"DB1_MOVE_BLK".Static_1和"DB2_MOVE_BLK".Static_1均为BOOL类型数组

程序将"DB1_MOVE_BLK".Static_1[0]开始的4个数组元素移动至"DB2_MOVE_BLK".Static_1[4]开始的4个数组元素

SCL程序如下:

06a68bf1c60d4f6dd2d07fba724b9295.png

注意:

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

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

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

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

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

三、MOVE_BLK_VARIANT

LAD和SCL均为MOVE_BLK_VARIANT指令。

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

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

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数组元素编号上限,超出范围将报错并且不传送任何数据。

如下面这个例子:

5e788edaf394f1dd25ce79dfb70b7a6a.png

上图中:

"DB3_MOVE_BLK_VARIANT".Static_1和"DB4_MOVE_BLK_VARIANT".Static_1均为相同结构类型的数组

程序将"DB3_MOVE_BLK_VARIANT".Static_1的第1个数组元素(即SRC_INDEX)开始的2个元素(即COUNT)移动到"DB4_MOVE_BLK_VARIANT".Static_1的第5个数组元素(即DEST_INDEX)开始的2个元素(即COUNT),Temp_1为错误代码

43afaef430ec402a4004f701935068fe.png

上图中:可以将P#M100.0 BYTE 16当做MB100开始的由16个BYTE元素组成的数组

DB5为非优化的数据块,其中的变量可以是任意类型,DB5中的变量数量>=16个字节

同样也可以将P#DB5.DBX0.0 BYTE 16当做DB5.DBB0开始的由16个BYTE元素组成的数组,

通过该段程序实现将MB100~MB115的数值移动至DB5.DBB0~DB5.DBB15,COUNT=16为移动的BYTE元素数量,SRC_INDEX=0即移动源从MB100开始,DEST_INDEX=0即移动目的从DB5.DBB0开始,Temp_1为错误代码

上面程序对应的SCL

9b2f9c4163c81d480fe9a856eca881ce.png


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3