怎样实现S7-1200 数据的区域复制或移动?

通过以下两种方式,实现 S7-1200 数据区域的移动。

  1. 使用指令 MOVE_BLK 和 UMOVE_BLK
  2. 使用 SCL 编程语言中的 POKE_BLK 指令

一、使用指令MOVE_BLK和UMOVE_BLK

这两个指令在 S7-1200 “基本指令”的“移动” 中,适用编程语言 LAD、FBD和SCL。

MOVE_BLK 用于将数据从一个地址区域移动到另一个地址区域,执行过程可以被高优先级事件中断;UMOVE_BLK 同样可以实现数据从一个地址区域到另一个地址区域的移动,不同的是,该指令执行过程,不允许被中断,在执行 UMOVE_BLK 过程中,如果有高优先级事件发生,要等待指令执行完成后再做处理。UMOVE_BLK 指令通常使用于被移动数据有一致性要求的应用。

指令如下,见图一:

图一 MOVE_BLK 和 UMOVE_BLK 指令

MOVE_BLK 和 UMOVE_BLK 参数:

以 MOVE_BLK 为例说明编程方法:
1、双击“添加新块”生成FC1,见图二

图二


在FC1的接口区,定义数组型输入变 量data-in,做被移动数据;UInt变量 amount 为要移动数据的数量。输出数据 Data-out,为数据移动到的目标地址。

在FC1中调用 MOVE_BLK,如图三:

图三 FC1

2、双击“添加新块”生成 DB 块

在源数据块 DB1 中添加数组 data_in。

图四 DB1

目标数据块 DB2 中添加数组 data_out。

图五 DB2

在OB1 中调用 FC1。

图六 OB1

3、查看执行结果

打开数据块DB1 和 DB2 查看程序执行结果。

图七 执行结果

二、使用 SCL 编程语言中的 POKE_BLK 指令

SCL 编程指令 POKE_BLK 写入存储区域,可以实现输入(I)变量、输出(Q)变量、位寄存器(M)、数据块(DB)做区域数据传送。

POKE_BLK 指令程序格式如下,见图八。

图八 POKE_BLK

源地址区域 area _src、目标地址区域 area _dest 取值范围:

当操作数为非 DB 块时,数据块号(dbNumber)为0。

示例一:
用 POKE_BLK 指令实现两个 DB 块的区域写。
在 S7-1200 的项目视图,双击添加新块生成 DB 块 Data_Source 和 Data_Dest。

图九 生成DB块

源数据块 Data_Source 为 DB3,目标数据块 Data_Dest 为 DB4 。

图十

双击添加新块选择SCL语言生成 FC2。

图十一 FC2

在OB1 中调用 FC2。

图十二 OB1

在线查看 DB3 和 DB4。

图十三

示例二:
用 POKE_BLK 指令实现位存储器的区域写。

OB1中调用示例一的FC2:

图十四 OB1

程序执行的结果,MB30 开始的8个字节被传送到 MB100的地址区域内。
使用变量表查看程序执行情况:

图十五 变量表