S7-300PLC中的FB和FC的分別?FB帶有自己的背景DB而FC沒有自己的背景DB,用FC和FB有什么分別呢,他們都能實(shí)現(xiàn)控制功能,到底該用FB還是該用FC,什么時候用FB什么時候用FC?
FB與FC沒有太大的差別,F(xiàn)B帶有背景數(shù)據(jù)塊,而FC沒有。所以FB帶上不同的數(shù)據(jù)塊,就可以帶上不同的參數(shù)值。這樣就可以用同一FB和不同的背景數(shù)據(jù)塊,被多個對象調(diào)用。
FC和FB像C中的函數(shù),只不過FB可以生成靜態(tài)變量,在下次函數(shù)調(diào)用時數(shù)據(jù)可以保留,而FC的變量只在調(diào)用期內(nèi)有效,下次調(diào)用又重新更換。每次調(diào)用FC的I/O區(qū)域必須要自己每次手動輸入,而FB就不要,省去不少麻煩,如果在上位機(jī)控制直接輸入DB控制地址就可以。
舉個例子來說,有50臺電機(jī)需要控制,這些電機(jī)除了參數(shù)不一樣,控制流程上是一樣的,每個
電機(jī)需要不同的參數(shù)去運(yùn)行,運(yùn)行中的過程參數(shù)要參與到下一次的控制過程中。
這個要求,用FC做的話,你需要針對不同的電機(jī)分配好DB塊,來逐一的確認(rèn)參數(shù)地址,不能混
淆,保存和調(diào)用不能出錯,可以想象會有多麻煩。如果用FB來做呢?寫好控制過程和定義的參
數(shù)的調(diào)用就可以了。針對電機(jī)重復(fù)調(diào)用同一個FB,每次調(diào)用一個獨(dú)立的DB作為背景數(shù)據(jù)塊
,*不必理會背景DB中的數(shù)據(jù)是怎么存儲的。如果功能需要修改,只要修改該FB就行了。
還有其他的例子,比如PID、比如流量累計(jì)等等。
fc就相當(dāng)于流水線,加工完就過去了!沒有任何紀(jì)錄。fb+db不但可以加工,還能記錄數(shù)據(jù)的。
一般有多個設(shè)備的時候,我們編寫一個fb然后多次調(diào)用,自動生成相應(yīng)的db,這樣簡化了我們
的工作。
FB的變量聲明表中有靜態(tài)變量,并可以進(jìn)行多級的參數(shù)傳遞,因此在調(diào)用FB時需生成背景數(shù)據(jù)塊,
而FC則沒有這些.FB可以替代FC,反之則不行.
多級的參數(shù)傳遞即所謂的MULTIINSTANCE,你可以把FB,DB做為另外一個FB中的函數(shù)來調(diào)用,
如在FB2中可以使用FB1中的參數(shù),而終只生成一個背景數(shù)據(jù)塊。
Zane:
FB其實(shí)不會占用過多的資源,因?yàn)橐粋€程序總是有這些變量的,無論是全局的還是局部變量。
我現(xiàn)在,大量使用的是FB,F(xiàn)C只用來編一些邏輯,及簡單的子程序,或僅僅幾個CALL指令調(diào)用
FB。使用FB及局部變量,更有利于程序的模塊化,增加程序的可移植性,就象西門子公司提供的FB
塊.
其實(shí)FB和FC根本的區(qū)別是:FB支持靜態(tài)變量,而FC只支持臨時變量。
靜態(tài)變量:是調(diào)用FB返回時,仍然要為FB保留此變量區(qū),因此不會改變這一區(qū)域的數(shù)據(jù)值。臨
時變量卻沒有這樣的特性。
所以在FC中如果在對臨時數(shù)據(jù)變量處寫入確定的數(shù)據(jù)前,就去讀時就可能產(chǎn)生不可預(yù)見的結(jié)果
,而對于靜態(tài)變量卻不會,因?yàn)樗鼤A裟闵洗螌懭氲慕Y(jié)果。