S71200 MOVE指令详解Word格式文档下载.docx
《S71200 MOVE指令详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《S71200 MOVE指令详解Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。
(4)如果MOVE两边是基本数据类型,则可以在满足以下兼容条件时传送,参见表1。
表1MOVE的传送条件
传送源(IN)
传送目标(OUT1)
进行IEC检查
不进行IEC检查
BYTE
BYTE、WORD、DWORD
BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、TIME、DATE、TOD、CHAR
WORD
WORD、DWORD
DWORD
BYTE、WORD、DWORD、SINT、USINT、INT、UINT、DINT、UDINT、REAL、TIME、DATE、TOD、CHAR
SINT
BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,TIME,DATE,TOD
USINT
USINT,UINT,UDINT
INT
UINT
USINT,UINT
DINT
UDINT
REAL
DWORD,REAL
LREAL
TIME
BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,TIME
DATE
BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,DATE
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中的字符
WString中的字符
1.如果输入IN数据类型的位长度超出输出OUT数据类型的位长度,则源值的高位会丢失。
如果输入IN数据类型的位长度低于输出OUT数据类型的位长度,则目标值的高位会被改写为0。
2.REAL传送至DWORD时是按位传送,不是取整。
如果需要取整,可以使用ROUND、CONVERT_REAL_TO_DINT等指令。
3.(不)进行IEC检查是指,在MOVE指令所在的OB/FC/FB属性中的"
IEC检查"
选项,仅在此块中生效。
默认的"
不激活。
设置如图2所示。
图2IEC检查的设置
MOVE的使用
图3DB25
1.单个基本类型变量的传送
图4单个基本类型变量的传送
2.数组的传送
图5数组的传送
3.UDT的传送
图6UDT的传送
4.String中的字符的传送
图7String中的字符的传送
5.DTL中的变量的传送
图8DTL中的变量的传送
6.DB整体之间的传送
条件:
DB块为非优化块,或者将优化DB块的存储器预留区域与预留可保持性存储器设置为0字节(如图9所示),并且两个DB块结构完全相同。
1.IN和OUT的DB必须同时为优化DB或者非优化DB。
2.不允许同时输出到多个DB,即图4的形式。
图9存储器预留区域设置
图10DB整体传送
图11DB整体传送程序
(U)MOVE_BLK
LAD和SCL均为(U)MOVE_BLK指令。
(U)MOVE_BLK指令是当EN条件满足时,实现相同数组之间部分元素的传送。
MOVE_BLK和UMOVE_BLK的区别是UMOVE_BLK不会被中断打断,并且最多16kB的数据量。
图12程序位置
图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的使用
实现功能:
将"
.Static_1[0]开始的4个元素传送至"
.Static_2[4]开始的数组中。
图14程序使用
图15运行结果
MOVE_BLK_VARIANT
LAD和SCL均为MOVE_BLK_VARIANT指令。
MOVE_BLK_VARIANT的基本功能是数组之间部分元素的传送,并且是可以处理Variant类型的变量的指令之一,适合处理Variant指向的变长数组。
从TIAV13SP1,S7-1200V4.0开始支持该指令。
图16指令位置
图17指令详情
表2参数说明
参数
声明
数据类型
SRC
Input
Variant、Array、其他(不包括Bool,ArrayofBool)
COUNT
SRC_INDEX
DEST_INDEX
DEST
Output
RET_VAL
Return
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区
图18运行结果
需要注意的是将DB块改为非优化,M区和DB区均是16Byte,SRC和DEST可以是P#BYTE16,P#WORD8,P#DWORD4等都可以,但是要注意COUNT和元素数相同(P#BYTE16,COUNT=16;
P#WORD8,COUNT=8;
P#DWORD4,COUNT=4),SRC和DEST结构一致即可。
图19程序详情
2.实现变长数组的处理
功能:
FC15处理MBV类型变量,该变量作为InOut,FC14中输入MBV类型变量的变长数组,在其内部判断数组大小,然后数组元素逐个执行FC15指令,最后送回变长数组。
图20指令详情