下面例程示范如何将数据从源数据存储区复制到目标存储区。也可以使用"MOVE"指令复制结构数据,相关信息参考条目ID 78678760.
描述
例1:从一个数据块复制数组变量到另外一个数据块
如果需要从一个数据块复制数据区到另外一个数据块,可以在数据块中创建数组变量。使用数组变量和 "MOVE_BLK"指令,可以实现从一个数据块到另一个数据块的部分移动或者整体移动。 "COUNT"参数定义从源区域移动到目标区域的数据元素数量。
图. 1
图.1显示了用2个DB变量对 "MOVE_BLK"指令的调用和参数化。
形参 "IN"以DB块数组元素变量"Block.Send[5]"进行参数化。
形参"OUT"以DB块数组元素变量 "Data.Receive[10]"进行参数化。
实参"Control.Count" 中的数值5指明了要拷贝的数据数量
这样就将数据从源数据区 "Block.Send[5]...Block.Send[9]" 复制到目标区域"Data.Receive[10]...Data.Receive[14]"
图. 2
例2:从一个数据块复制结构体数据到另外一个数据块,源数据区和目标数据区存在不同 PLC 数据类型
"Copy"功能将结构体数据从DB块 "Source",变量名为"Variable" (PLC数据类型: "Speed")的区域,复制到 DB块"Target",变量名为"Value" (PLC数据类型"Drive")的数据区域。两个存储区存在不同的数据类型。
图. 3
图.4显示了 "Copy"功能的内部程序对"Serialize"和"Deserialize"两个指令的调用及参数化。"Serialize"指令可以将PLC数据类型转化成序列表示的数据并且存放到缓冲区"tempStore"。在网络2,"Deserialize“指令用来将缓冲区"tempStore"中存放的序列表示的数据转换成 PLC 数据类型。
图. 4注意
要满足下列2个要求之一才能使用"Serialize"和 "Deserialize" 功能。
要求1:禁用优化的块访问
-
在项目树中右键点击功能 "Copy"
-
点击"Properties"
-
在右边的列中选择 "Attributes"
-
移除“优化块访问”的复选标记
要求2: 在“Retain”一栏选择“Set in IDB”
-
选择一个FB代替FC
-
保存数组(“tempstore”)为一个静态变量
-
对于数组("tempStore") 在 "Retain"列中选择 "Set in IDB"
例3: 从输入模块复制结构数据到DB块
在下面的例子中(图. 5),输入区域 (IB0, IB1) 和输出区域 (数据块 "DBrange") 定义了PLC数据类型"DataRange"。 输入输出地址有一个更高级的PLC变量,这种将输入输出地址进行结构化编组到更高一级的PLC变量的方式可以使编程更加方便。
图. 5
使用此方法,您也可以将大于64字节的输入区域复制到数据块中。 对于S7-1200 CPU 需要固件版本V4.1或更高。
注意
上述指令可以在 "Basic Instructions" 任务卡中找到:
- 在 "Move" 文件夹中或者
- 用鼠标将 "General" 文件夹中的"Empty box"拖放到程序段中。然后将光标移动到空框中的黄色三角形上,打开下拉列表,在下拉列表中选择所需指令。
更多信息
更多信息参考STEP 7 (TIA 博图) 在线帮助。
关于“指针寻址”的主题的信息可参考条目号 42603286.
创建环境
FAQ 中的截图是在 STEP 7 (TIA Portal) V13 SP1中创建。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc323227.html