S7-1200中,MOVE_BLK指令只能针对Array进行操作。假如我有一个数组数据Array[0].Array[1]到Array[99],这100个Real要移动到MD0、MD4、MD396。或者是要将数据MB0-MB99移动到MB100-MB199.像这种情况该用哪个指令,怎么操作!谢谢!
最佳答案
POKE_BLK:写入存储区S7-1200,S7-1500
词汇表
输入SCL指令
编辑SCL指令
有效数据类型概述
存储区
说明
“写入存储区”指令用于在不指定数据类型的情况下将存储区内容复制到另一个存储区。
如果在AREA参数中指定数据块的16#84区域,则只能通过块属性“标准”访问数据块。
说明
该指令仅用于访问“标准”存储区。
语法
“写入存储区”指令的语法如下所示:
SCL将以下程序代码复制到剪贴板。
POKE_BLK(AREA_SRC:=<操作数>,
DBNUMBER_SRC:=<操作数>,
BYTEOFFSET_SRC:=<操作数>,
AREA_DEST:=<操作数>,
DBNUMBER_DEST:=<操作数>,
BYTEOFFSET_DEST:=<操作数>,
COUNT:=<操作数>)
clipboard
该指令的语法由以下部分组成:
参数
声明
数据类型
存储区
说明
AREA_SRC
Input
BYTE
I、Q、M、D、L
可以在源存储区中选择以下区域:
16#81:Input
16#82:OuTPut
16#83:位存储区
16#84:DB
DBNUMBER_SRC
Input
DINT,DB_ANY
D
如果AREA=DB,则为源存储区中的数据块数量,否则为“0”
BYTEOFFSET_SRC
Input
DINT
I、Q、M、D、L
源存储区中待写入的地址
仅使用16个最低有效位。
AREA_DEST
Input
BYTE
I、Q、M、D、L
可以在目的存储区中选择以下区域:
16#81:Input
16#82:Output
16#83:位存储区
16#84:DB
DBNUMBER_DEST
Input
DINT,DB_ANY
D
如果AREA=DB,则为目的存储区中的数据块数量,否则为“0”
BYTEOFFSET_DEST
Input
DINT
I、Q、M、D、L
目的存储区中待写入的地址
仅使用16个最低有效位。
COUNT
Input
DINT
I、Q、M、D、L
已复制的字节数目
有关有效数据类型的更多信息,请参见“另请参见”。
说明
如果要将存储地址写入输入、输出或位存储区,则必须将参数DBNUMBER的值设置为“0”,否则指令将无效。
示例
以下示例说明了该指令的工作原理:
SCL将以下程序代码复制到剪贴板。
POKE_BLK(AREA_SRC:="Tag_SourCE_Area",
DBNUMBER_SRC:="Tag_Source_DBNumber",
BYTEOFFSET_SRC:="Tag_Source_Byte"),
AREA_DEST:="Tag_Destination_Area",
DBNUMBER_DEST:="Tag_Destination_DBNumber",
BYTEOFFSET_DEST:="Tag_Destination_Byte",
COUNT:="Tag_Count");
clipboard
下表将通过具体的操作数值对该指令的工作原理进行说明:
参数
操作数
值
AREA_SRC
Tag_Source_Area
16#84
DBNUMBER_SRC
Tag_Source_DBNumber
5
BYTEOFFSET_SRC
Tag_Source_Byte
20
AREA_DEST
Tag_Destination_Area
16#83
DBNUMBER_DEST
Tag_Destination_DBNumber
0
BYTEOFFSET_DEST
Tag_Destination_Byte
30
COUNT
Tag_Count
100
该指令将数据块“5”中从地址“20”开始的100个字节写入位存储器中从地址“30”开始的存储区内。
提问者对于答案的评价:
谢谢!用POKE指令解决!
专家置评
已阅,最佳答案正确。
POKE指令或者MOVE_BLK_VARIANT指令