對於很多初學西門子PLC的朋友來說很容易對FC和FB相混淆,很可能認為FB僅僅是比FC多了一個背景數據塊,其實,這種誤解是非常危險的,很容易在你編寫的程序中造成意外。
在STEP7中關於FC的描述是這樣的;
FC是一個沒有存儲空間的邏輯快,FC的臨時變量存儲在本地數據堆棧中,這些數據在FC執行完畢後將會丟失,要永久保存數據,必須使用共享數據塊DB。
所以呢,由於FC沒有存儲空間,必須要給FC的參數指定實參。這也就是為什麼FC塊的輸入輸出變量必須填寫參數的原因。
同時FC的臨時變量是無法指定初始值的。
舉個例子來說:
我們建立兩個FC功能,
在FC1中新建兩個臨時變量,並做加法運算如下圖所示:
在FC2中新建兩個變量,並對兩個變量賦值:
在OB1中先調用FC2,接著調用FC1就會發現一個意想不到的結果
先看看結果:如下圖所示:
我在FC2中賦值,在FC1中的臨時變量卻得到了賦值結果,這是為什麼呢?
其實這是因為對於FC或FB的臨時變量來說,不要希望將本次調用的數值可以存儲在裡面來供下次程序調用使用,因為,這些臨時變量所使用的L堆棧控制在FC或FB調用結束後就會釋放給系統了,其他後續的程序可以任意使用。
這就解釋了為什麼在FC2中的賦值,缺在FC1中使用。
針對這一特點,儘量避免:
a、將臨時變量用於上升/下降沿指令。
b、將臨時變量用於自保持邏輯。
c、臨時變量未在所在程序段中賦值,直接使用。
閱讀更多 跟我動手學電氣 的文章