在S7-1200PLC中,可以使用MOVE_BLK指令将数据从一个存储区域(源范围)移动到另一存储区域(目标范围)。使用输入COUNT 指定要移入目标范围的元素数量。您可以通过在IN 中输入元素的宽度来定义要移动的元素的宽度。仅当源范围和目标范围具有相同数据类型时才能执行该指令。
如果满足以下条件之一,则使能输出ENO 返回信号状态“0”:
条件1:使能输入EN 的信号状态为“0”。
条件2:移动的数据量超过输入IN或输出OUT可容纳的数据量。
复制ARRAY of BOOL 时,溢出使能输出ENO 将设置为“1”,直到超出ARRAY 结构的字节限制。如果COUNT 输入的值超出ARRAY 结构的字节限制,则使能输出ENO 将重置为“0”。
TIPS: 1. IN 和OUT 是源区和目标区等待复制的第一个元素,但不要求是数组的第一个元素。前提是数组的数据类型必须一致;参见下图1。展示;
2. MOVE_BLK 指令仅适用于移动数据块中的数组,不能移动非数据块的内存。此时,可以在SCL编程中使用POKE_BLK指令。操作方法如图2所示。
例如,以下命令用于将MB100-MB109的数据移动到QB0-QB9。
POKE_BLK(area_src:=16#83,//源操作数的内存类型;16#83代表M区;
dbNumber_src:=0, //源操作数的DB块地址。如果操作数不是DB块,则默认值为0;
byteOffset_src:=50,//源操作数的起始地址;
area_dest:=16#82,//目标操作数的内存类型; 16#82代表Q区;
dbNumber_dest:=0, //目标操作数的DB块地址。如果目标操作数不是DB块,则默认值为0;
byteOffset_dest:=0,//目标操作数的起始地址;
count:=10);//源操作数写入目标操作数的地址个数;
其中,使用POKE_BLK指令进行编程时,操作数以十六进制表示;输入过程映像区I (16#81)、输出过程映像区Q (16#82)、位存储区M (16#83)、DB 块(16#84);
审稿人:刘庆