簡介
“OPN DI”或“CDB”指令將數(shù)據(jù)塊加載到 DI 寄存器中。在 S7-300/400 中,此處打開的塊將作為背景數(shù)據(jù)塊。FB 塊接口的局部形參的后續(xù)符號尋址(IN、OUT、InOut、Static)將不再對在塊調(diào)用中指定為背景數(shù)據(jù)塊的數(shù)據(jù)塊進行尋址,而是對位于 DI 寄存器中的數(shù)據(jù)塊進行尋址。要隨后對塊接口中的局部形參進行符號尋址,則必須將背景數(shù)據(jù)塊加載到 DI 寄存器中。
即使在執(zhí)行指令 "L AR2", "+ AR" 和 "TAR" 之后,S7-300/400 中也無法從塊接口對形參進行符號尋址,這是由于這些指令破壞了參數(shù)的訪問方式。
S7-1500 中已修正該錯誤:如果在 S7-1500 中對塊接口中的局部形參進行符號尋址(例如,使用指令 L #myIn),則需始終訪問塊調(diào)用中指定為背景數(shù)據(jù)塊的數(shù)據(jù)塊。雖然 OPN DI L AR2, +AR2, TDB, TAR 指令將更改 DI 或地址寄存器中的數(shù)據(jù),但在對局部形參進行尋址時不會對這些寄存器中的數(shù)據(jù)進行判斷。
對背景數(shù)據(jù)塊中局部變量訪問的移植
移植過程不會更改已編程的訪問方式。但是,如果更改了引用程序中的 OPN DI, L AR2, +AR2, TDB, TAR, 指令,則該程序的定義可能會發(fā)生變更。
要恢復(fù)最初的程序定義,則必須手動更改該程序。通常無需再通過寄存器對數(shù)據(jù)進行尋址。但是,可以使用背景數(shù)據(jù)塊中的 ARRAY 間接索引 ARRAY 中的元素。
示例 1
以下示例說明如何修改 OPN DI 指令的定義:
STL | 說明 |
---|---|
L #MyIn1 L #MyIn2 +I T #MyOut3 |
“L”和“T”指令將尋址塊接口中所聲明的局部變量。變量的值位于塊調(diào)用中所指定的背景數(shù)據(jù)塊中。 |
OPNDI "MyDB" L #MyIn1 L #MyIn2 +I T #MyOut3 |
全局數(shù)據(jù)塊 "MyDB" 將寫入 DI 寄存器中。 移植前,“L”和“T”指令將尋址 "MyDB" 中所聲明的變量。 遷移后,“L”和“T”指令將尋址塊接口中所聲明的變量。在 S7-1500 中,進行訪問時不會判斷 DI 寄存器中的值。 |
示例 2 以下示例說明了如何修改 LAR2 指令的定義:
STL | 說明 |
---|---|
L P#M23.0 | |
LAR2 | 移植前,對 AR2 的分配將破壞參數(shù)的訪問方式。 |
L #MyIn1 | 移植前,無法對 "MyIn1" 進行訪問或會發(fā)生訪問錯誤。 移植后,可正常對形參 "MyIn1" 進行訪問操作。 |
L IW [AR2, P#1.0] | 訪問 %IW24.0 |
A [AR2, P#0.4] | 訪問 %M23.4 |
示例 3 以下示例介紹了在 S7-1500 中如何對 DB 變量進行間接尋址而不使用地址寄存器:
STL | 說明 |
---|---|
OPN "MyDB" L #index LAR1 L DBW [AR1 , P#10.0] | 移植前,使用區(qū)域內(nèi)部的間接寄存器進行尋址。并將變量值 (#index) 加載到地址寄存器 1 中。根據(jù)加載的值,“MyDB”中的一個數(shù)據(jù)字將加載到累加器 1 中。 |
L "MyDB".MyArray1[#index] | 移植后,可以將數(shù)據(jù)值存儲在 ARRAY 的“MyDB”中。 并使用輸入?yún)?shù)“#index”對 ARRAY 中的各元素建立不同的索引。 |
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120224 -
存儲器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163760 -
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18319 -
累加器
+關(guān)注
關(guān)注
0文章
50瀏覽量
9447
原文標(biāo)題:西門子博途:在 STL 中存取背景數(shù)據(jù)塊
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論