在 STL 中进行不完全地址寻址

2021-07-09 浏览次数:151
在 STL 中进行不完全地址寻址

简介

寻址 DB 变量时未* DB 名称或 DB 编号,称为部分限定寻址。 通过部分限定寻址方式,访问当前存储在 DB 寄存器的数据块中定义的值。

以下限制条件适用于 S7-1500 中的部分限定寻址。

在 S7-1500 中,仅当当前块中显式设置了 DB 寄存器时才可以进行部分限定寻址。 例如,使用“OPN”指令设置 DB 寄存器。 在进行标准访问的数据块中,只能对变量进行部分限定寻址。

在 S7-1500 中,可通过块调用将数据块寄存器置位为“0”。这意味着在一个块中将无法打开数据块,而且也无法在从属块中通过部分限定寻址数据块中的数据元素。 需要先在当前块中设置 DB 寄存器,然后才能对 DB 变量进行部分限定寻址。

每次进行完全限定访问时(例如,%DB10.DBW10),DB 数据块寄存器都将设置为“0”。 需要在进行完全限定访问后设置 DB 寄存器,然后才能对 DB 变量进行部分限定寻址。

在运行时使用部分限定的地址会降低程序的处理速度。

部分限定寻址的移植

在移植过程中,将对 STL 中的部分限定寻址进行以下处理:

必要时,可将部分限定寻址转换为完全限定访问。

如果在调用的代码块中打开该数据块且无法明确标识该 DB,则移植将在被调用块的接口处插入一个“DB_Any”数据类型的参数。 这样,就可将数据块名称传递给该参数。 移植将在被调用块中插入“OPN”指令以打开数据块。

示例

以下举例说明部分限定寻址的移植。

在**个表中,为移植前的程序:

STL
说明
L DBW10
L DBW12
+I
T DBW14
在调用块中打开数据块,并传送到 DB 寄存器。 在当前块中,从 DB 寄存器中当前正打开的数据块中获取“DBW10”、“DBW12”和“DBW14”的值。

下表为移植后的程序:

STL
说明
OPN "PlcmigTempBlockDB"
L DBW10
L DBW12
+I
T DBW14
移植将在被调用块的接口处插入一个“DB_Any”数据类型的参数。这样,就可将数据块名称传递给该参数。 移植在被调用块中插入“OPN”指令以打开通过该接口传递的数据块。



提示

移植部分限定寻址块参数

移植过程中,还会将部分限定寻址 DB 参数转换为完全限定访问参数。 请注意,可以更改传送给被调用块的参数类型,这是因为: 被调用的块可能无法使用完全限定访问直接访问实参,而是使用块调用期间所传送的副本。
请确保所移植程序的自动执行机制与参考程序的相一致。
更多信息,请参见: 在程序执行过程中访问块参数

如果不希望进行调整,则可以使用结构化数据类型的参数而非元素块参数。
将 PLC 数据类型 (UDT) 定义为形参并传送该类型的变量或传递 PLC 数据类型 (UDT) 的 DB。

示例:

CALL "MyFC"
InStruct :="DBofUDT"



CALL "MyFC"
InStruct := "DBArrayOfUDT".a[#i]


shtxjd.cn.b2b168.com/m/
top