单词“peek”在英语中表示“偷看,瞥一眼”,在计算机编程中表示“读取数据”。
在西门子SCL编程中,PEEK指令可以用来读取输入缓存区(I)、输出缓存区(Q)、位存储区(M)及数据块(DB)中的数据,常用作间接寻址。今天这篇文章,我们来学习下PEEK指令。
PEEK指令支持以位(Bit)、字节(Byte)、字(Word)及双字(Double Word)的形式进行操作,如果PEEK指令的后面不指定数据类型,则默认为对字节型数据进行操作。可以在【基本指令(Basic instructions)】-【移动操作(move operations)】-【读写内存(Read/Write memory)】中找到该指令,如下图:
在FB/FC中添加PEEK指令并将其赋值给字节型变量temp_byte的代码如下图:
可以看到,PEEK指令有三个参数:area ,dbNumber及byteOffset,各参数的含义如下:
1、area:字节型数据(Byte),用来指定访问存储区的类型。16#81表示输入缓存区(I)、16#82表示输出缓存区(Q)、16#83表示位存储区(M)、16#84表示数据块(DB)、16#1表示外设输入(PI)。其中,16#84只能访问“标准的”数据块;16#1对外设的读取,只能在S7-1500系列PLC中使用。
2、dbNumber:双整型数据(DINT),用来指定数据块的编号,仅在访问数据块时使用;访问其它存储区时设置为0;
3、byteOffse:双整型数据(DINT),用来指定读取数据的地址偏移量;
举个例子:
假设我们要读取输入缓存区(I)的第9个字节到位存储区(M)的第20个字节,则可以使用如下的代码:
PEEK_BOOL指令来读取布尔型数据,其返回值是布尔型变量。从指令列表中添加PEEK_BOOL指令的初始状态如下:
该指令有四个参数:
area,dbNumber,byteOffset和bitOffset。
前三个参数的含义与PEEK指令中介绍的相同,第四个参数bitOffset表示要读取的位的偏移,其取值范围为0~7。
举个例子,假设我们要读取M0.7的值,并将其赋值给Q0.0,则可以使用如下的代码:
PEEK_WORD指令用来读取字(WORD)类型数据。
假设我们要读取DB100的第20个字节开始的字到MW10中,则可以使用如下的代码:
PEEK_DWORD指令用来读取双字(Double WORD)类型数据。
假设我们要读取DB100的第10个字节开始的双字到MD0中,则可以使用如下的代码:
好了,关于西门子SCL语言中的PEEK指令就先介绍到这里。