1.移动值指令
“移动值”指令MOVE(见图3-45)用于将IN输入端的源数据传送给OUT1输出的目的地址,并且转换为OUT1允许的数据类型(与是否进行IEC检查有关),源数据保持不变。IN和OUT1的数据类型可以是位字符串、整数、浮点数、定时器、日期时间、CHAR、WCHAR、Struct、Array、IEC定时器/计数器数据类型、PLC数据类型等,IN还可以是常数。
可用于S7-1200或S7-1500 CPU的不同数据类型之间的数据传送见MOVE指令的在线帮助。如果输入IN数据类型的位长度超出输出OUT1数据类型的位长度,则源值的高位会丢失。如果输入IN数据类型的位长度小于输出OUT1数据类型的位长度,目标值的高位被改写为0。
图3-45 MOVE与SWAP指令
MOVE指令允许有多个输出,单击“OUT1”前面的,将会增加一个输出,增加的输出的名称为OUT2,以后增加的输出的编号按顺序排列。用鼠标右键单击某个输出端的短线,执行快捷菜单中的“删除”命令,将会删除该输出参数。删除后自动调整剩下的输出的编号。
2.交换指令
IN和OUT为数据类型Word时,“交换”指令SWAP交换输入IN的高、低字节后,保存到OUT指定的地址。IN和OUT为数据类型Dword时,交换4个字节中数据的顺序,交换后保存到OUT指定的地址(见图3-45)。
3.填充存储区指令
生成“数据块_1”(DB3)和“数据块_2”(DB4),在DB3中创建有40个Int元素的数组Source,在DB4中创建有40个Int元素的数组Distin。
“填充存储区”指令FILL_BLK将输入参数IN设置的值填充到输出参数OUT指定起始地址的目标数据区(见图3-46),COUNT为填充的数组元素的个数,源区域和目标区域的数据类型应相同。“Tag_13”(I0.4)的常开触点接通时,常数3527被填充到DB3(数据块_1)的DBW0开始的20个字中。Source是DB3中元素的数据类型为Int的数组。
图3-46 填充存储区指令
“不可中断的存储区填充”指令UFILL_BLK与FILL_BLK指令的功能相同,其区别在于前者的填充操作不会被其他操作系统的任务打断。
4.存储区移动指令
图3-47中的“存储区移动”指令MOVE_BLK用于将源存储区的数据移动到目标存储区。IN和OUT是待复制的源区域和目标区域中的首个元素(并不要求是数组的第一个元素)。
图3-47中的I0.3(Tag_12)的常开触点接通时,MOVE_BLK指令将数据块_1中的数组Source的0号元素开始的20个Int元素的值,复制给数据块_2的数组Distin的0号元素开始的20个元素。COUNT为要传送的数组元素的个数,复制操作按地址增大的方向进行。源区域和目标区域的数据类型应相同。
图3-47 存储区移动指令(www.xing528.com)
除了IN不能取常数外,指令MOVE_BLK和FILL_BLK的参数的数据类型和存储区基本上相同。“不可中断的存储区移动”指令UMOVE_BLK(见图3-47)与MOVE_BLK指令的功能基本上相同,其区别在于前者的复制操作不会被操作系统的其他任务打断。执行该指令时,CPU的报警响应时间将会增大。
“移动块”指令MOVE_BLK_VARIANT将一个存储区(源区域)的数据移动到另一个存储区(目标区域)。可以将一个完整的数组或数组的元素复制到另一个相同数据类型的数组中。源数组和目标数组的大小(元素个数)可能会不同。可以复制一个数组内的多个或单个元素。
5.块填充与块传送指令的实验
生成“数据块_1”(DB3)和“数据块_2”(DB4),在DB3中创建有40个Int元素的数组Source,在DB4中创建有40个Int元素的数组Distin。
将程序下载到CPU,切换到RUN模式后,双击打开项目树中的DB4。单击工具栏上的按钮,启动扩展模式,显示各数组元素。单击按钮,启动监视,“监视值”列是CPU中的变量值。
因为没有设置保持性(Retain)功能,此时DB3和DB4的各数组元素的初始值均为0。
接通I0.4("Tag_13")的常开触点,FILL_BLK与UFILL_BLK指令被执行,DB3中的数组元素Source[0]~Source[19]被填充数据3527,Source[20]~Source[39]被填充数据32153。
接通I0.3("Tag_12")的常开触点,MOVE_BLK与UMOVE_BLK指令被执行,DB3中的数组Source的40个元素被传送给DB4中的数组Distin的40个元素。图3-48是传送给DB4的部分数据。
图3-48 DB4中的部分变量
6.序列化与取消序列化指令
“序列化”指令Serialize将多个PLC数据类型(UDT)转换为顺序表示,而不会丢失部分结构。“取消序列化”指令DeSerialize将PLC数据类型块的顺序表示转换回PLC数据类型,并填充所有内容。
7.Array数据块指令
Array数据块是仅有一个数组数据类型的数据块。数组的元素可以是PLC数据类型或其他任何基本数据类型。无论后期如何声明该数组,它始终从下限“0”开始计数。
指令列表的文件夹“\移动操作\数组DB”中的指令只能用于S7-1500。ReadFromArrayDB指令用于从Array数据块中读取数据并写入目标区域。WriteToArrayDB指令用于将数据写入Array数据块。ReadFromArrayDBL指令用于从装载内存的数组数据块中读取数据。WriteToArrayDBL指令用于将数据写入到装载内存的Array数据块。
8.Variant指令
指令列表的文件夹“\移动操作\变量”中的VariantGet指令用于读取数据类型为Variant的参数SRC指向的变量值,并将其写入参数DST指定的地址。VariantPut指令用于将SRC参数的变量值写入Variant指向的DST参数的变量。CountOfElements指令用于查询数据类型为Variant的参数IN指定的变量所包含的数组元素的个数。
指令列表的文件夹“\移动操作\原有”中还有指令FieldRead(读取域)、FieldWrite(写入域)、BLKMOV(块移动)、UBLKMOV(不可中断的块移动)和FILL(填充块)指令。前两条指令可用于间接寻址,将在4.2.2节介绍。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。