POINTER

说明

POINTER 类型的参数是一个可指向特定变量的指针。它在存储器中占用 6 个字节(48 位),可能包含以下变量信息:

下图显示了 POINTER 参数类型的结构:

西门子plc指针嵌套比较大小(西门子PLC数据类型)(1)

指针类型

根据相关信息,可以使用 POINTER 参数类型声明以下四种类型的指针:

下表显示的是声明各种指针类型的格式:

P#BYTERepresentation

格式

输入值示例

说明

符号

P#Byte.Bit

"MyTag"

内部区域指针

P#OperandAreaByte.Bit

"MyTag"

跨区域指针

P#Data_block.Data_operand

"MyDB"."MyTag"

DB 指针

P#零值

-

零指针

绝对

P#Byte.Bit

P#20.0

内部区域指针

P#OperandAreaByte.Bit

P#M20.0

跨区域指针

P#Data_block.Data_operand

P#DB10.DBX20.0

DB 指针

P#零值

P#0.0, ZERO

零指针

说明

块类型

“优化”访问模式

“标准”访问模式

函数 (FC)

在程序代码中,不能使用带前缀 P# 的变量。

在程序代码中,可以使用以下带前缀 P# 的变量。

  • 在块接口的 InOut 区域中声明变量的结构变量。

声明基本数据类型的变量不能使用前缀 P#。

函数块 (FB)

在程序代码中,不能使用带前缀 P# 的变量。

在程序代码中,可以使用以下带前缀 P# 的变量。

  • 在块接口的 Static、Input 和 Output 区域声明的变量。
  • 在块接口的 InOut 区域中声明的 PLC 数据类型 (UDT) 变量。

存储区

下表列出了 POINTER 参数类型的存储区的十六进制代码:

十六进制代码

存储区

说明

B#16#801)

P

CPU S7-300/400 的外围设备

16#1

P

CPU S7-1500 的外围输入

16#2

P

CPU S7-1500 的外围输出

B#16#81

I

输入存储区

B#16#82

Q

输出存储区

B#16#83

M

位存储的存储区

B#16#84

DBX

数据块

B#16#85

DIX

背景数据块

B#16#86

L

本地数据

B#16#87

V

先前的本地数据

1) 这些数据类型只能用于 CPU S7-300/400 上的 POINTER 指针。

ANY

说明

ANY 类型的参数指向数据区的起始位置,并指定其长度。ANY 指针使用存储器中的 10 个字节,可能包含以下信息:

说明

指向 STRING 的 ANY 指针

如果在 LAD/FBD/STL 或 SCL 程序段中通过赋值字符串生成一个 ANY 指针,则系统将创建一个 BYTE 数据类型的 ANY 指针和重复系数 maxstringlen。

如果在 SCL 块中通过赋值字符串生成一个 ANY 指针,则系统将创建一个指向 STRING 的 ANY 指针。

例如,通过将指针从 SCL 块传送到 LAD 程序段中,或在指针上叠加一个 AT 结构并手动设置数据类型 STRING,即可创建这种类型的指针。

在编程语言 SCL 和 STL 中,如果在块参数中设定了一个 ANY 指针,则任意类型的存储器都可以在块调用时传递。

但是,ANY 指针不能存储有关存储器结构的任何信息。例如,ANY 指针不能保存指向 PLC 数据类型变量的信息。ANY 指针将其作为 BYTE 类型的 ARRAY。

ANY 数据类型的参数可以被传递到系统函数块 (SFB) 或系统函数 (SFC)。

下图给出了 ANY 指针的结构:

西门子plc指针嵌套比较大小(西门子PLC数据类型)(2)

ANY 指针不能指向结构,只能分配给局部变量。

下表列出了声名 ANY 指针的格式:

表示法

格式

输入值示例

说明

符号

P#DataBlock.MemoryArea DataAddress Type Number

"MyDB".StructTag.InitialComponents

全局 DB11 中从 DBB20.0 开始带有 10 个字的区域

P#MemoryArea DataAddress Type Number

"MyMarkerTag"

以 MB 20.0 开始包含 4 个字节的区域

"MyTag"

输入 I1.0

P#零值

-

零值

绝对

P#DataBlock.MemoryArea DataAddress Type Number

P#DB11.DBX20.0 INT 10

全局 DB11 中从 DBB20.0 开始带有 10 个字的区域

P#MemoryArea DataAddress Type Number

P#M20.0 BYTE 10

以 MB 20.0 开始包含 10 个字节的区域

P#I1.0 BOOL 8

包含来自输入 I1.0 的 8 个位的范围(指定的范围长度必须可被 8 除尽)。

P#零值

P#P0.0 VOID 0, Null 1)

零值

1) 在编程语言 LAD 和 FBD 中,只有 NULL 才是零值的值条目。

数据类型的编码

下表列出了 ANY 指针的数据类型编码。

十六进制代码

数据类型

说明

B#16#00

NIL

Null 指针

B#16#011)

BOOL

B#16#02

BYTE

字节,8 位

B#16#03

CHAR

8 位字符

B#16#04

WORD

16 位字

B#16#05

INT

16 位整数

B#16#06

DWORD

32 位字

B#16#07

DINT

32 位整数

B#16#08

REAL

32 位浮点数

B#16#0B

TIME

持续时间

B#16#0C

S5TIME

持续时间

B#16#09

DATE

日期

B#16#0A

TOD

日期和时间

B#16#0E

DT

日期和时间

B#16#13

STRING

字符串

B#16#171)

BLOCK_FB

函数块

B#16#181)

BLOCK_FC

函数

B#16#191)

BLOCK_DB

数据块

B#16#1A1)

BLOCK_SDB

系统数据块

B#16#1C1)

COUNTER

计数器

B#16#1D1)

TIMER

定时器

1) 这些数据类型只能用于 CPU S7-300/400 上的 ANY 指针。

存储区的编码

下表列出了 ANY 指针的存储区编码。

十六进制代码

区域

说明

B#16#801)

P

I/O

B#16#81

I

输入存储区

B#16#82

Q

输出存储区

B#16#83

M

位存储的存储区

B#16#84

DBX

数据块

B#16#851)

DIX

背景数据块

B#16#86

L

本地数据

B#16#87

V

先前的本地数据

1) 这些存储区只能用于 S7-300/400 CPU 上的 ANY 指针。

,