關於西門子S7的FC功能臨時變量使用的一些小誤區

對於很多初學西門子PLC的朋友來說很容易對FC和FB相混淆,很可能認為FB僅僅是比FC多了一個背景數據塊,其實,這種誤解是非常危險的,很容易在你編寫的程序中造成意外。

在STEP7中關於FC的描述是這樣的;

FC是一個沒有存儲空間的邏輯快,FC的臨時變量存儲在本地數據堆棧中,這些數據在FC執行完畢後將會丟失,要永久保存數據,必須使用共享數據塊DB。

所以呢,由於FC沒有存儲空間,必須要給FC的參數指定實參。這也就是為什麼FC塊的輸入輸出變量必須填寫參數的原因。

同時FC的臨時變量是無法指定初始值的。

舉個例子來說:

我們建立兩個FC功能,

在FC1中新建兩個臨時變量,並做加法運算如下圖所示:

關於西門子S7的FC功能臨時變量使用的一些小誤區


在FC2中新建兩個變量,並對兩個變量賦值:


關於西門子S7的FC功能臨時變量使用的一些小誤區

在OB1中先調用FC2,接著調用FC1就會發現一個意想不到的結果

關於西門子S7的FC功能臨時變量使用的一些小誤區

先看看結果:如下圖所示:


關於西門子S7的FC功能臨時變量使用的一些小誤區

我在FC2中賦值,在FC1中的臨時變量卻得到了賦值結果,這是為什麼呢?

其實這是因為對於FC或FB的臨時變量來說,不要希望將本次調用的數值可以存儲在裡面來供下次程序調用使用,因為,這些臨時變量所使用的L堆棧控制在FC或FB調用結束後就會釋放給系統了,其他後續的程序可以任意使用。

這就解釋了為什麼在FC2中的賦值,缺在FC1中使用。

針對這一特點,儘量避免:

a、將臨時變量用於上升/下降沿指令。

b、將臨時變量用於自保持邏輯。

c、臨時變量未在所在程序段中賦值,直接使用。


分享到:


相關文章: