使用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 指令用来读取输入(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
将 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)
使用 PEEK 指令编写程序 FC3,实现对 DB5 中的数据位、字节、字、双字的读取。
图十三 DB寻址
测试结果如下图:
图十四 DB寻址测试
POKE 指令可以用来对输入(I)、输出(Q)、存储器(M)或数据块(DB)变量地址进行写操作,不仅支持位、字节、字、双字操作,还可以区域操作,实现区域数据移动。
POKE 指令,可在指令体内将结果传递给对应变量。
POKE 位操作:
图十五 POKE 位操作
POKE 字节、字、双字操作:
图十六 POKE字节、字、双字
将源数据块、I/O 或存储区从 byteOffset 开始的“count”个字节,写入目标数据块、I/O 或存储区 byteOffset 开始的区域。
图十七 POKE_BLK
注:
数据区域参数 area,根据要写入的数据所在区域不同有四种取值。
图十八 POKE参数area
使用 POKE 指令编写程序 FC13 ,将 MB2 6的值写入 MB20,程序执行如下:
图十九 POKE写字节
使用 POKE 指令编写程序 FC14 ,将 MW2 的值写入 MW60,程序执行如下:
图二十 POKE字操作
使用 POKE 指令编写程序 FC15 ,将 MD100 的值写入 MD40,程序执行如下:
图二十一 POKE双字操作
使用 POKE_BOO L指令编写程序 FC12 ,将 M0.1 的值写入 M10.1:
图二十二 POKE_BOOL
调用 FC12 执行结果:
图二十三 POKE_BOOL测试结果
使用 POKE_BLK 指令编写程序 FC8,将 DB2.DBB3 2开始的12个字节的值写入 MB100 开始的地址,程序执行如下:
图二十四 POKE_BLK