找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 17821|回復(fù): 0
收起左側(cè)

背景數(shù)據(jù)塊和全局?jǐn)?shù)據(jù)塊的區(qū)別,CALL 調(diào)用如何影響 DB 寄存器?

[復(fù)制鏈接]
ID:26188 發(fā)表于 2015-5-28 01:21 | 顯示全部樓層 |閱讀模式
全局?jǐn)?shù)據(jù)塊和背景數(shù)據(jù)塊的區(qū)別

對(duì)于全局?jǐn)?shù)據(jù)塊而言,所有的程序塊 (FB,F(xiàn)C 和 OB)均可以讀寫該數(shù)據(jù)塊中的數(shù)據(jù)。而背景數(shù)據(jù)塊被分配給特定的功能塊,包含所分配的FB的本地?cái)?shù)據(jù)。
全局?jǐn)?shù)據(jù)塊背景數(shù)據(jù)塊
所有的程序塊 (FB,F(xiàn)C 和 OB)可以訪問(wèn)程序中全局?jǐn)?shù)據(jù)塊中的數(shù)據(jù)背景數(shù)據(jù)塊 DB 被指定到一個(gè) FB
在程序中能夠獨(dú)立地創(chuàng)建全局?jǐn)?shù)據(jù)塊在程序中只能夠?qū)ο嚓P(guān)聯(lián)的 FB 創(chuàng)建背景數(shù)據(jù)塊
不能創(chuàng)建靜態(tài)變量在FB中可以定義靜態(tài)變量,當(dāng)數(shù)據(jù)塊建立完成并且已經(jīng)被保留了幾個(gè)循環(huán)之后,存儲(chǔ)的本地靜態(tài)數(shù)據(jù)不會(huì)丟失,除非數(shù)據(jù)再次被更改
在數(shù)據(jù)塊中添加,刪除,改變變量在相關(guān)的功能塊中添加或刪除變量,改變變量
可以改變初始值和當(dāng)前值不能改變變量的初始值和當(dāng)前值
全局?jǐn)?shù)據(jù)塊的結(jié)構(gòu)能夠被指定在相關(guān)的FB中預(yù)定義數(shù)據(jù)塊的結(jié)構(gòu)
表 1

注意
在 CPU 中的 STEP7 程序?qū)θ趾捅尘皵?shù)據(jù)塊有相等的讀寫權(quán)利。




圖 01

不同 FB 的數(shù)據(jù)可以存儲(chǔ)在單個(gè)背景數(shù)據(jù)塊中  (多重背景)。圖 02 給出了一個(gè)例子,說(shuō)明了在 FB1 中 FB5 和 FB6 如何作為多重背景的。兩個(gè) FB 將它們的背景數(shù)據(jù)保存在調(diào)用它們的 FB1 的背景數(shù)據(jù)塊 DB1中。在 FB1 的聲明中,多重背景塊保存為靜態(tài)變量。

圖 02

更多信息可以參考 STEP 7 在線幫助以下部分
  • “背景數(shù)據(jù)塊”
  • “創(chuàng)建數(shù)據(jù)塊 (DB)”
  • “數(shù)據(jù)塊 (DB) 的結(jié)構(gòu)”
  • “使用多重背景”
從 STEP 7 V4.02 升級(jí)到 V5.x 需要注意
當(dāng)升級(jí) STEP 7 V4.02 到 V5.x 版本時(shí),在 LAD/STL/FBD 編輯器中可能會(huì)在調(diào)用 CALL 功能時(shí)出現(xiàn)紅色。這種現(xiàn)象的原因是塊中調(diào)用的一個(gè)背景數(shù)據(jù)塊已經(jīng)在符號(hào)表里被聲明為全局?jǐn)?shù)據(jù)塊。在 STEP7 編程規(guī)則中這是不允許的,并且在 STEP7 V5.x 版本中也是不能被接受的。
補(bǔ)救措施
可以按照下列步驟來(lái)修改發(fā)生錯(cuò)誤的數(shù)據(jù)塊:
  • 在符號(hào)表中刪除聲明錯(cuò)誤的 DB 所在行。
  • 然后刪除錯(cuò)誤的 DB 塊。
  • 打開調(diào)用的塊然后重新生成背景數(shù)據(jù)塊。
調(diào)用 CALL 功能如何影響 DB 寄存器
當(dāng)程序塊在 STEP 5 或 STEP 7 中被調(diào)用時(shí),DB1 和 DB2 寄存器的初始內(nèi)容被恢復(fù)。已經(jīng)打開的數(shù)據(jù)塊會(huì)一直保持有效直到另一個(gè)數(shù)據(jù)塊被打開。DB 寄存器的內(nèi)容反映了當(dāng)前打開的數(shù)據(jù)塊(DB / DI)。
然后,必須明確,不是所有的 S7 編輯器/編譯器對(duì) DB 寄存器的改變對(duì)用戶來(lái)說(shuō)都是明顯的。例如,當(dāng)使用 CALL 指令調(diào)用 FC 時(shí),如果給 FC 形參分配的是完整的數(shù)據(jù)塊變量地址,編譯器會(huì)打開指定的數(shù)據(jù)塊。當(dāng) FC 調(diào)用完成時(shí),DB 號(hào)仍然保存在 DB1 寄存器中。在 FC 中改變 DB 寄存器不會(huì)影響調(diào)用完成后 DB 寄存器的值。
舉例:
DB1 寄存器
AUF DB1
1
L DBB 0
CALL FC1
Input1:= DB2.DBB0
Input2:= DB3.DBB0
L DBB 0
3
表 2

如果調(diào)用功能塊和相關(guān)的背景數(shù)據(jù)塊,調(diào)用 CALL 指令后,背景數(shù)據(jù)塊號(hào)保存在 DB1 寄存器中。傳輸完整的數(shù)據(jù)塊變量地址給 FB,在 FB 中更改 DB 寄存器不會(huì)影響 DB1 寄存器的內(nèi)容。
舉例:
DB1 寄存器
AUF DB1
1
L DBB 0
CALL FB1, DB10
Input1:= MW0
Input2:= DB3.DBB0
L DBB 0
10
表 3

調(diào)用系統(tǒng)功能塊后 (SFB),相應(yīng)的背景數(shù)據(jù)塊號(hào)保存在 DB1 寄存器中。然而,使用 UC 或 CC 指令后,數(shù)據(jù)寄存器始終保持不變,這是由于這些調(diào)用沒(méi)有指定參數(shù)和背景數(shù)據(jù)塊。
注意
為了避免在 STEP 編程過(guò)程中處理數(shù)據(jù)塊時(shí)出現(xiàn)區(qū)域長(zhǎng)度錯(cuò)誤和訪問(wèn)錯(cuò)誤,盡量只使用完整的地址訪問(wèn) DB 中變量。(如 DBx.DBBy 或符號(hào)名 "DBName".Variable_name)。




回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表