高價回收西門子模塊 高價回收西門子模塊
FC 101、DB 42
指針(Pointer) 6 B 在功能塊中定義一個形參,該形參說明的是內(nèi)存的地址指針。例如,調(diào)用時可給形參賦予實參P#M50.0,以訪問內(nèi)存M50.0
ANY 10 B 當(dāng)實參的數(shù)據(jù)類型未知時,可以使用該類型
1) 定時器或計數(shù)器參數(shù)類型
在功能塊中定義一個定時器或計數(shù)器類型的形參,功能塊就能使用一個定時器或計數(shù)器,而不需明確具體的定時器或計數(shù)器,等到調(diào)用該功能塊時再確定定時器或計數(shù)器號。這使用戶程序能靈活性地分配和使用定時器或計數(shù)器。當(dāng)給定時器或計數(shù)器參數(shù)類型形參分配實參時,在“T”或“C”后跟一個有效整數(shù),如T 100。
2) 塊參數(shù)類型
當(dāng)定義一個作為輸入輸出的塊時,參數(shù)聲明決定了塊的類型(FB、FC、DB等)。當(dāng)為塊參數(shù)類型形參分配實參時,可以使用物理地址,如FC 101,也可使用符號地址,如“valve
3) 指針參數(shù)類型
一個指針給出的是變量的地址,而不是變量的數(shù)值大小。在有些功能塊中,可能使用指針編程更為方便。用定義指針類型的形參,就能在功能塊中先使用一個虛設(shè)的指針,待調(diào)用功能塊時再為其賦予確定的地址。當(dāng)為指針參數(shù)類型形參分配實參時,需要指明內(nèi)存地址,例如P#M50.0。
3. 塊調(diào)用過程及內(nèi)存分配
CPU提供塊堆棧(B堆棧)來存儲與處理被中斷塊的有關(guān)信息。當(dāng)發(fā)生塊調(diào)用或有來自更高優(yōu)先級的中斷時,就有相關(guān)的塊信息存儲在B堆棧里,并影響部分內(nèi)存和寄存器。圖5.2顯示了調(diào)用塊時B堆棧與L堆棧的變化。圖5.3提供了關(guān)于STEP 7的塊調(diào)用情況。
1) B堆棧與L堆棧
B堆棧是CPU系統(tǒng)內(nèi)存中的一部分,它存儲以下被中斷塊的數(shù)據(jù):
(1) 塊號、塊類型、優(yōu)先級、被中斷塊的返回地址;
(2) 塊寄存器DB、DI被中斷前的內(nèi)容;
(3) 臨時變量的指針(被中斷塊的L堆棧地址)。
STEP 7中可使用的B堆棧大小是有限制的,對于S7-300 CPU,則可在B堆棧中存儲8個塊的信息。因此,塊調(diào)用嵌套深度也是有限制的,多可同時激活8個塊。
L堆棧是CPU內(nèi)存中的一部分,它在塊調(diào)用時被重新分配。L堆棧用來存儲邏輯塊中定義的臨時變量,也分配給臨時本地數(shù)據(jù)使用。梯形圖的方塊指令與標(biāo)準(zhǔn)功能塊也可能使用L堆棧存儲運(yùn)算的中間結(jié)果。
2) 調(diào)用功能塊FB
當(dāng)調(diào)用功能塊FB時,會有以下事件發(fā)生:
(1) 調(diào)用塊的地址和返回位置存儲在塊堆棧中,調(diào)用塊的臨時變量壓入L堆棧;
(2) 數(shù)據(jù)塊DB寄存器內(nèi)容與DI寄存器內(nèi)容交換;
(3) 新的數(shù)據(jù)塊地址裝入DI寄存器;
(4) 被調(diào)用塊的實參裝入DB和L堆棧上部;
(5) 當(dāng)功能塊FB結(jié)束時,先前塊的現(xiàn)場信息從塊堆棧中彈出,臨時變量彈出L堆棧;
(6) DB和DI寄存器內(nèi)容交換。
當(dāng)調(diào)用功能塊FB時,STEP 7并不一定要求給FB形參賦予實參,除非參數(shù)是復(fù)式數(shù)據(jù)類型的IO形參或參數(shù)類型形參。如果沒有給FB形參賦予實參,則功能塊FB就調(diào)用背景數(shù)據(jù)塊內(nèi)的數(shù)值。該數(shù)值是在功能塊的變量聲明表內(nèi)或背景數(shù)據(jù)塊內(nèi)設(shè)置的形參初始數(shù)值。
3) 調(diào)用功能塊FC
當(dāng)調(diào)用功能塊FC時會有以下事件發(fā)生:
(1) 功能塊FC實參的指針存到調(diào)用塊的L堆棧;
(2) 調(diào)用塊的地址和返回位置存儲在塊堆棧,調(diào)用塊的局部數(shù)據(jù)壓入L堆棧;
(3) 功能塊存儲臨時變量的L堆棧區(qū)被推入L堆棧上部;
(4) 當(dāng)被調(diào)用功能塊FC結(jié)束時,先前塊的信息存儲在塊堆棧中,臨時變量彈出L堆棧。
因為功能塊FC不用背景數(shù)據(jù)塊,不能分配初始數(shù)值給功能塊FC的局部數(shù)據(jù),所以必須給功能塊FC提供實參。