在工业控制中,经常会使用到变址运算的功能。那在S7-1200中,我们需要怎么实现变址的效果呢?PEEK/POKE指令为我们提供了一个实现方法。
让我们先认识一下PEEK/POKE指令吧。
在S7-1200里面,PEEK/POKE指令仅在SCL中可用。指令位于“基本指令”--“移动操作”--“读/写存储器”中。如“图1”所示。
图1 PEEK/POKE指令位置
PEEK:读取存储地址,可读取Byte、Word、Dword类型的数据寄存器;
PEEK_BOOL:读取位存储地址,可读取Bool类型的数据寄存器;
指令格式如下:
#Peeker := PEEK(AREA := 16#84,
DBNUMBER:= 1,
BYTEOFFSET:= 2);
#Peeker_BOOL := PEEK_BOOL(AREA := 16#84,
DBNUMBER := 1,
BYTEOFFSET :=2,
BITOFFSET := 1);
其中#Peeker、#Peeker_BOOL为PEEK指令读取返回出来的寄存器值。
AREA为读取的寄存器区域:16#81对应输入I区;16#82对应输出Q区;16#83对应位存储区M区;16#84对应数据块DB区。
DBNUMBER为读取的数据块DB编号。当AREA为“16#84”时,如读取“DB10”,则“DBNUMER”为10。如果AREA不是“16#84”,则DBNUMER应设为“0”。
BYTEOFFSET为字节偏移量,决定读取寄存器的起始地址。如读取DB10.DBD56,则BYTEOFFSET为“56”。
BITOFFSET为位偏移量,PEEK_BOOL指令中需要填写。如读取DB1.DBX5.3,则BYTEOFFSET为“5”,BITOFFSET为“3”。
POKE(AREA := 16#84,
DBNUMBER:= 1,
BYTEOFFSET:= 2,
VALUE:= BYTE#7);
POKE(AREA := 16#84,
DBNUMBER:= 1,
BYTEOFFSET:= 2,
BITOFFSET:= 4,
VALUE:= TRUE);
其中AREA、DBNUMBER、BYTEOFFSET、BITOFFSET这些引脚和PEEK指令是一致的。VALUE为写入到寄存器中的值。