09.19 西門子PLC FC和FB用法講解

摘要: 很多新手都會問,FC和FB到底什麼區別呢?該怎麼使用呢?其實很簡單啦,仔細閱讀下面內容就能理解哦!FC塊講解首先,我們從兩者的名字就可以進行區分,可以用一個公式即FB=FC+DB來表示,FB是具有DB背景塊的特殊FC,也 ...

很多新手都會問,FC和FB到底什麼區別呢?該怎麼使用呢?其實很簡單啦,仔細閱讀下面內容就能理解哦!

FC塊講解

首先,我們從兩者的名字就可以進行區分,可以用一個公式即FB=FC+DB來表示,FB是具有DB背景塊的特殊FC,也就是說FB具有FC的功能,同時擁有一個DB塊。FC全稱是Function函數。

注:DB塊 全稱DataBlock 數據存儲區域,類似數據庫中關係表結構。

那首先什麼函數呢?

西門子PLC FC和FB用法講解

函數

函數 f(x)就像機器或黑箱,給予輸入值x便產生唯一輸出值f (x)。x是自變量,f(x)是因變量。舉一個我們常見的公式,求圓的面積,s=π*r*r。輸入r值,便得到圓的面積s,這就是最簡單的函數,r是自變量,s是因變量。

西門子PLC FC和FB用法講解

西門子PLC FC和FB用法講解

圖2 FC函數內容

Input:輸入型參數,提供外部輸入接口。類似於函數f(x)中的x,是一個自變量。Input類型參數,是外部變量的拷貝副本,修改其值,外部變量無變化。假設在程序中修改R的值,從圖2編譯信息發現,傳遞的並不是實際參數,所以修改外部接口變量無變化。

Output:輸出型參數,提供外部輸出接口。該類型參數由於直接引用外部變量地址,可以修改其值。

InOut:輸入輸出型參數,既做輸入又做輸出。同Output類型一樣,可以修改外部接口變量的值。在適當地方,使用InOut類型變量,可以減少佔用plc的變量聲明空間。

Temp:局部變量,在函數內部使用,不提供外部的接口。我們常常把temp變量用於數據轉換的中間值,或者用於循環變量,比如用於For 或者While循環。由於Temp是局部變量,它的值是隨機,使用必須初始化,對其賦值。

Constant:常量,在函數內部使用,意思是恆定不變的變量,只能在聲明處修改。比如我們這裡的π圓周率是固定不變的,可能調用的地方有幾十處,若程序中直接引用3.1415,後期修改,需要把每個地方都修改過去,很麻煩。在聲明處修改π值,所有函數中的π變量都會修改。假設我們在程序中修改π常量,從圖2中編譯信息可以發現,常量不能在程序中修改。

Return:函數返回值,存儲計算結果。默認為無返回值,所以聲明為void。在我們的數學知識裡面函數應該是要有返回值的,但是在TIA PORTAL可以沒有返回值,我們把這種無返回類型的函數,稱為procedure(過程)。我們這裡設置為Real類型,返回圓的面積。有讀者可能有疑問,return變量和Output類型都可以用來存儲計算結果,兩者的區別是什麼呢?其中有一個顯著的區別是Output類型輸出參數可以聲明若干個,但是return類型的返回變量,只能聲明一個,且變量名字無法修改。其他區別,等講解SCL的時候,再做解答。

在main[OB1]程序塊裡面拖動FC1函數,得到如下運行結果:

西門子PLC FC和FB用法講解

圖3 程序運行結果

西門子PLC FC和FB用法講解

圖4 DB塊值監控

程序解讀:

由於PLC程序是從左到右執行,所以"Func"函數塊的左側是輸入接口,右側是輸出接口。觀察函數塊的內部變量名字,發現和函數中的聲明一一對應,除了變量。Ret_Val是Return接口<func>變量的別名,由於每個函數的名字都不一樣,所以統一用作為函數返回值變量的名稱。/<func>

程序一是對模擬量值進行轉換,採樣的分辨率下限是0,上限為27648,採樣的數字量值15000,通過調用指定函數把轉換出來的值放在變量,得到轉換值為0.5425347.

把變量放在FC函數的Inout接口中,利用PLC的掃描週期,通過<data>DB塊可以看到最終值5.425347。若不放在Inout,把其放在Input接口,我們必須在OutPut接口再聲明一個變量,用於存儲最終的轉換值。這樣聲明就可以節省PLC的內存空間了,同樣使程序看起來更簡潔。/<data>

FC函數塊的代碼內容比較簡單,請自行閱讀理解,若有問題,可以留言。

FB塊講解

要了解FB和FC的區別,讓我們剖析一下這兩個模塊的變量聲明結構:

西門子PLC FC和FB用法講解

西門子PLC FC和FB用法講解

圖6 FB佔用DB背景塊內部變量

通過FB和FC的變量聲明,我們可以看到三個明顯的區別:

1、FB塊增加了Static靜態區聲明

2、FB增加了保持性和可訪問性選擇

上述兩個區別正好說明了FB=FC+DB公式的成立,因為這兩個特性是DB塊才有的特性哦。我們在普通DB塊裡面聲明的變量都在Static區聲明,不信的話,你可以打開來看看。我們可以通過訪問FB擁有的背景塊來訪問FB中變量的值。

當FC調用結束後,各種接口中聲明的變量值無法保存,FB調用結束後,仍然可以保留變量的值,你可以通過FB的背景DB塊進行訪問。FB的每次調用都會自動生成一個DB塊,想想我們編程當中,進行哪類操作也會有類似行為?其實就是我們用的非常頻繁的定時器操作,每一次拖動定時器都會自動建立一個DB塊。通過查看定時器擁有的DB塊,看看和圖6是否類似。

西門子PLC FC和FB用法講解

圖7 定時器DB背景塊結構

由於定時器擁有背景塊,當我們停止計時後,PLC無論經過多少個掃描週期,還是可以讀取停止計時時刻的值,這就是擁有DB背景塊的好處,FB塊與此類似。

3、FB塊沒有Return接口

由於可以通過Output接口存儲返回值,所以沒有Return接口影響不大。

西門子PLC FC和FB用法講解

圖8 FB程序增加部分

由於程序類似,FB程序只列出增加部分。我們可以看到該程序,每次調用都會把最大電壓值放在<maxvol>變量中,同時添加<checktime>變量,用於記錄改變電壓的時間。在hmi程序上面,我們可以很方便讀取這兩個變量,來實時獲取當前的最大電壓值和修改時間,是不是很方便?/<checktime>/<maxvol>

讀者可能會有疑問,如果我自己寫一個FC函數,然後外部添加一個DB塊,不是一樣可以實現此功能嗎?看上去好像講的很有道理呀,不過這個想法是錯誤的。

如果你在PLC程序中只調用FB塊一次,那麼可以採用此方法。如果你在PLC程序裡面,既要比較電壓,還要比較如電流、溫度和溼度等,如果用同一個FC怎麼實現呢?用FB可以很好的解決此問題,不明白的,可要仔細想想!


分享到:


相關文章: