六合洒霖雨 万物无凋枯
服务热线: 400-662-0602
关于我们
联系我们

联系人:程经理

联系电话:400-662-0602

邮  箱:13933620602@163.com

地址:河北省秦皇岛市海港区

新闻中心

西门子博途SCL: SCL中间接寻址

作者: 秦皇岛六合科技开发有限公司发布时间:2024-05-07 09:24:05点击:257 

简介

在 S7-1500 中,统一了所有编程语言的间接寻址选项,因此在移植过程中将部分转换 S7-300/400 中支持的间接寻址。

下表简要列出了转换的选项。下面详细介绍了各种语言结构的移植。


间接寻址

S7-300/400

S7-1500

间接寻址 DB

"BLOCK_DB" 数据类型

“DB_ANY”数据类型

间接寻址 DB 变量

#block.%DBW3

PEEK”/“POKE”指令

WORD_TO_BLOCK_DB(#myWord).%DBW3

PEEK”/“POKE”指令

#block.DW(IDX := #myInt)

PEEK”/“POKE”指令

WORD_TO_BLOCK_DB(#myWord).DW(IDX:=#myInt)

PEEK”/“POKE”指令

%DB1.DW(IDX :=#myInt)

PEEK”/“POKE”指令

间接寻址 I/O

QB(IDX :=#myInt):P

PEEK”/“POKE”指令

间接寻址 PLC 变量

IX(IDX :=#myInt1,Bit:=#myInt2)

PEEK”/“POKE”指令

QB(IDX :=#myInt)

PEEK”/“POKE”指令

MW(IDX :=#myInt)

PEEK”/“POKE”指令


"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(#myBlock));

//...

#myDBANY:= UINT_TO_DB_ANY(WORD_TO_UINT(#myWord));


移植 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

#myWord := PEEK(area:=16#83,dbNumber:=0,byteOffset:=#myInt);

相关标签:  西门子,博途SCL