移动指令是将数据元素复制到新的存储器地址,并从一种数据类型转换为另一种数据类型,在移动 过程中不更改源数据。常见的移动指令及其功能见表2-25
。
表
2-25
移动指令及其功能

1.MOVE
移动指令
使用如图
2-58
所示的
MOVE
指令,可将
IN
输入端操作数中的内容
%MW20
传送到
OUT1
输出端的操作数%MW40
中,并始终沿地址升序方向传送。表
2-26
列出了
MOVE
指令可传送的类型。

图2-58 MOVE指令
表
2-26 MOVE
指令可传送的类型

在
MOVE
指令中,若
IN
输入端数据类型的位长度超出了
OUT1
输出端数据类型的位长度,则在传送源值中多出来的有效位会丢失。若IN
输入端数据类型的位长度小于
OUT1
输出端数据类型的位长度,则用零填充传送目标值中多出来的有效位。
在初始状态,指令框中包含
1
个输出(
OUT1
),可以用鼠标单击图符扩展输出数目,并按升序顺序排列所添加的输出端,在执行MOVE指令时,可将
IN
输入端操作数中的内容发送到所有可用的输出端。如果传送结构化数据类型(DTL
,
STRUCT
,
ARRAY
)或字符串(
STRING
)的字符,则无法扩展指令框。
MOVE
指令只有在使能输入
EN
的信号状态为
“1”
时才能够执行。在这种情况下,输出
ENO
的信号状态也为“1”
。若
EN
输入端的信号状态为
“0”
,则将
ENO
使能输入复位为
“0”
。
2.MOVE_BLK
块移动指令
如图
2-59
所示,使用
“MOVE_BLK
块移动
”
指令可将存储区(源区域)中的内容移动到其他存储区(目标区域);使用参数COUNT
可以指定待复制到目标区域中的元素个数;可以通过
IN
输入端的元素宽度来指定待复制元素的宽度,并按地址升序顺序执行复制操作。

图
2-59 MOVE_BLK
块移动指令
【练习
2-1
】 相同数据类型数组之间的复制。
首先在
TIA
软件中添加新数据类型,如图
2-60
所示,如定义
a_array
为
10
个字节的数组,
即
Array[0..9]of Byte
。数组的数据类型和数组限值可以通过如图
2-61
所示进行修改。

图
2-60
添加新数据类型

图
2-61
修改数组的数据类型和数组限值
一旦新建数据类型后,即可添加新的数据块,如图
2-62
所示。在添加时,选择刚刚在如图
2-60
所示中定义的数据类型,即a_array
,则
DB1
中就有了一个
a_array
数组。同理,可以新建另外一个数据类型b_array
为
20
个字节的数组,即
Array[0..19]of Byte
,并添加一个
DB2
块。
图
2-63
就是利用
MOVE_BLK
块移动指令将
DB1
中的
a_array[2]
到
a_array[4]
共
3
个数据移动到
DB2
中
的
b_array[7]
开始的
3
个数据中。

图
2-62
添加一个含数组
a_array
的
DB
块

图2-63 MOVE_BLK
块移动指令的工作原理
【练习
2-2
】 不同数据类型数组之间复制。
如果想在数据块中存储不同数据类型的数组(如位、字节、字、双整数或实数),并且将这些数组
复制到另一个数据块中,则必须将数据块结构化,以便有可能将所有数据类型中相同类型的数组依次存储起来。
所有相同数据类型的变量(如字节)必须在数组变量中集成一组后,就可以使用MOVE_BLK
块移动指令将一个数组变量的所有数据复制到另一个数据块中,如图2-64
所示,将
DB3
中的
5
个数据类型块移动到DB4
中。图
2-65
为具体的梯形图程序。

图
2-64 DB3
中的
5
个数据类型块移动到
DB4
中

图
2-65 DB3
中的
5
个数据类型块移动到
DB4
中的程序图
3.UMOVE_BLK
无中断块移动指令
使用如图
2-66
所示的
“UMOVE_BLK
无中断块移动
”
指令可将存储区(源区域)中的内容连续复制到其他存储区(目标区域);使用参数COUNT
可以指定待复制到目标区域中的元素个数;可以通过
IN
输入端的元素宽度指定待复制元素的宽度;源区域内容沿地址升序方向复制到目标区域。

图
2-66 UMOVE_BLK
无中断块移动指令
4.FILL_BLK
填充块指令和
SWAP
交换指令
除上述
3
个指令之外,填充块指令和交换指令也被当作移动指令的特殊情况,见表
2-27
。
表
2-27
填充块指令和交换指令及其功能

续表

使用如图
2-67
所示的
FILL_BLK
填充块指令,用
IN
输入的值填充一个存储区域(目标区域);将以OUT
输出指定的起始地址填充目标区域;可以使用参数
COUNT
指定复制操作的重复次数;执行指令时,将选择IN
输入的值,并复制到目标区域
COUNT
参数中指定的次数。

图
2-67 FILL_BLK
填充块指令
SWAP
交换指令可以更改输入
IN
中字节的顺序,并在输出
OUT
中查询结果。图
2-68
说明了如何使用SWAP
交换指令交换数据类型为
DWORD
的操作数字节。表
2-28
为
SWAP
交换指令的参数。

图
2-68
使用
SWAP
交换指令交换数据类型为
DWORD
的操作数字节
表
2-28 SWAP
交换指令的参数

【练习
2-3
】 请在选择开关
%I0.0
为
ON
时将
%MW20
字的高低字节进行交换,并送入
%MW40
中。
图
2-69
为实现交换的程序图。表
2-29
列出了
SWAP
交换指令如何使用特定操作数值进行运算。如果操作数%I0.0
的信号状态为
“1”
,则执行
SWAP
交换指令。
%MW20
字节的顺序已更改,并存储在操作数%MW40
中。如果成功执行
SWAP
交换指令,则输出
ENO
的信号状态为
“1”
,并将置位输出
%Q0.0
。

图
2-69
实现交换的程序图
表
2-29 SWAP
交换指令如何使用特定操作数值进行运算
