在 S7-1500 中,统一了所有编程语言的间接寻址选项,在移植过程中将部分转换S7-300/400 中支持的间接寻址。
下表简要列出了转换的选项。下面详细介绍了各种语言结构的移植。
"BLOCK_DB" 数据类型到 "DB_ANY" 的移植
"BLOCK_DB" 数据类型在 S7-1500 中不可用。这种数据类型的变量将通过移植转换为 "DB_ANY"数据类型。 "BLOCK_DB_TO_WORD"和 "WORD_TO_BLOCK_DB" 转换函数将通过移植转换为
"UINT_TO_WORD(DB_ANY_TO_UINT)" 和"UINT_TO_DB_ANY(WORD_TO_UINT)"。
以下举例说明如何移植 "BLOCK_DB" 数据类型。
在第一个表中,为移植前的三个程序段:
SCL
#myBlock //数据类型 BLOCK_DB;
//...
#myWord :=BLOCK_DB_TO_WORD(#myBlock);
//...
#myBlockDB := WORD_TO_BLOCK_DB(#myWord);
在第二个表中,为移植后的三个程序段:
SCL
#myBlock //Datentyp DB_Any;
//...
#myWord := UINT_TO_WORD(DB_ANY_TO_UINT(#my‐
Block));
//...
#myDBANY:= UINT_TO_DB_ANY(WORD_TO_UINT(#my‐
Word));
移植 DB 变量的间接寻址
在 S7-1500 中,通过“PEEK”/“POKE”指令间接指定数据块或 DB变量。在移植过程中将自动转换为间接
寻址。
以下举例说明了如何移植 DB 变量的间接寻址。
在第一个表中,为移植前的程序段:
SCL
#myWord := %DB1.DW(IDX :=#myInt);
//...
#myBool:=%DB1.DX(IDX :=#myByteOffset,Bit:=#myBitOffset);
//...
%DB1.DW(IDX := #myInt) := 12;
//...
在第二个表中,为移植后的程序段:
SCL
#myWord:=PEEK_WORD(area:=16#84,dbNumber:=1,byteOffset:=#myInt);
//...
#myBool:=PEEK_BOOL(area:=16#84,dbNumber:=1,byteOffset:=#myByteOffset,
bitOffset:=#myBitOffset);
//...
POKE(area:=16#84,dbNumber:=1,byteOffset:=#myInt,value:=12);
//...
移植 PLC 变量的间接寻址
在 S7-1500 中,通过“PEEK”/“POKE”指令间接指定 PLC变量。在移植过程中将自动转换为间接寻址。
以下举例说明了如何移植 DB 变量的间接寻址。
在第一个表中,为移植前的程序段:
SCL
#myWord := MW(IDX := #myInt);
在第二个表中,为移植后的程序段:
SCL
在 SCL 中间接寻址 (S7-1500)
#myWord:= PEEK(area:=16#83,dbNumber:=0,byteOffset:=#
myInt);
POKE:写入存储地址 (S7-1200, S7-1500)
POKE_BOOL:写入存储位 (S7-1200, S7-1500)
PEEK:读取存储地址 (S7-1200, S7-1500)
PEEK_BOOL:读取存储位 (S7-1200, S7-1500)
POKE_BLK:写入存储区 (S7-1200, S7-1500)