S7-1200 SCL PEEK 和 POKE 指令使用

使用S7-1200 SCL 编程语言的 PEEK 和 POKE 指令,可以实现对 I/O、M 存储器和数据块的读取或写入。 而通过 POKE_BLK 指令,还可以实现数据区域的复制或移动。

指令适用条件:

本文生成环境:

一、项目生成方法:

(1)创建 S7-1200 项目文件
在 STEP7 V11 创建新项目 PEEK-POKE,双击“添加新设备”在项目中添加 S7-1200 PLC_1,CPU 1214C DC/DC/DC。

图一 添加新设备

(2)添加 SCL 逻辑块
展开 PLC_1,双击“程序块”中的“添加新块”,选择语言“SCL”,添加 FC 块,名称为 FC_1 。

图二 添加新块

(3)添加 PEEK、POK E指令
双击 FC_1 打开 SCL 逻辑块,将指令的“基本指令 / 移动操作”中 PEEK、POK E指令拖入程序编辑区。

图三 添加指令

二、PEEK 指令

1、指令格式

PEEK 指令用来读取输入(I)、输出(Q)、存储器(M)或数据块(DB)变量,支持位、字节、字、双字操作。PEEK指令将获取的数据值以返回值的方式赋值给对应的变量。

PEEK_BOOL,读位变量,指令格式。

图四 PEEK_BOOL

PEEK (_BYTE) ,读字节变量,指令中BYTE 类型可省略,指令格式。

图五 PEEK_BYTE

PEEK_WORD,读字变量,指令格式。

图六 PEEK_WORD

PEEK_DWORD,读双字变量,指令格式。

图七 PEEK_DWORD

参数area,根据数据所在区域的不同有四种取值。

图八 PEEK参数area

2、示例程序

(1)、PEEK 指令 – M区寻址:

将 M0.1 的状态值读取到 Tag_15(M0.7),执行结果如下:

图九 PEEK_BOOL

如下程序 FC9 是字节寻址,执行 FC9,将 MB10 的值读取到 MB1:

图十 PEEK_Byte(PEEK)

如下序 FC10 是字寻址,执行 FC10,将 MW30 的值读取到 MW32:

图十一 PEEK_Word(PEEK)

将 MD50 的值读取到 MD54 ,程序 FC 11,执行结果如下:

图十二 PEEK_DWord(PEEK)

(2)PEEK 指令 – DB 寻址:

使用 PEEK 指令编写程序 FC3,实现对 DB5 中的数据位、字节、字、双字的读取。

图十三 DB寻址

测试结果如下图:

图十四 DB寻址测试

三、POKE 写指令

1、指令格式

POKE 指令可以用来对输入(I)、输出(Q)、存储器(M)或数据块(DB)变量地址进行写操作,不仅支持位、字节、字、双字操作,还可以区域操作,实现区域数据移动。
POKE 指令,可在指令体内将结果传递给对应变量。

POKE 位操作:

图十五 POKE 位操作

POKE 字节、字、双字操作:

图十六 POKE字节、字、双字

将源数据块、I/O 或存储区从 byteOffset 开始的“count”个字节,写入目标数据块、I/O 或存储区 byteOffset 开始的区域。

图十七 POKE_BLK

注:
数据区域参数 area,根据要写入的数据所在区域不同有四种取值。

图十八 POKE参数area

2、示例

(1)POKE 指令– M 存储器操作:

使用 POKE 指令编写程序 FC13 ,将 MB2 6的值写入 MB20,程序执行如下:

图十九 POKE写字节

使用 POKE 指令编写程序 FC14 ,将 MW2 的值写入 MW60,程序执行如下:

图二十 POKE字操作

使用 POKE 指令编写程序 FC15 ,将 MD100 的值写入 MD40,程序执行如下:

图二十一 POKE双字操作

(2)POKE_BOOL 指令,写M位存储器:

使用 POKE_BOO L指令编写程序 FC12 ,将 M0.1 的值写入 M10.1:

图二十二 POKE_BOOL

调用 FC12 执行结果:

图二十三 POKE_BOOL测试结果

(3)POKE_BLK写存储区示例:

使用 POKE_BLK 指令编写程序 FC8,将 DB2.DBB3 2开始的12个字节的值写入 MB100 开始的地址,程序执行如下:

图二十四 POKE_BLK