fb靜態區域 西門子 PLC FC和FB用法講解

2021-10-16 14:33:22 字數 2758 閱讀 7572

本是專門為1200 plc講解開闢的專題,想來應該適合所有tia poral支援的plc,所以把1200從標題中去掉。

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

fc塊講解

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

注:db塊 全稱datablock 資料儲存區域,類似資料庫中關係表結構。

那首先什麼函式呢?

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

圖一 變數宣告

圖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函式,得到如下執行結果:

圖3 程式執行結果

圖4 db塊值監控

程式解讀:

由於plc程式是從左到右執行,所以"func"函式塊的左側是輸入介面,右側是輸出介面。觀察函式塊的內部變數名字,發現和函式中的宣告一一對應,除了變數。ret_val是return介面變數的別名,由於每個函式的名字都不一樣,所以統一用作為函式返回值變數的名稱。

程式一是對模擬量值進行轉換,取樣的解析度下限是0,上限為27648,取樣的數字量值15000,通過呼叫指定函式把轉換出來的值放在變數,得到轉換值為0.5425347.

把變數放在fc函式的inout介面中,利用plc的掃瞄週期,通過db塊可以看到最終值5.425347。若不放在inout,把其放在input介面,我們必須在output介面再宣告乙個變數,用於儲存最終的轉換值。這樣宣告就可以節省plc的記憶體空間了,同樣使程式看起來更簡潔。

fb塊講解

要了解fb和fc的區別,讓我們剖析一下這兩個模組的變數宣告結構:

圖5 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是否類似。

圖7 定時器db背景塊結構

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

3、fb塊沒有return介面

由於可以通過output介面儲存返回值,所以沒有return介面影響不大。

圖8 fb程式增加部分

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

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

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

結束語

西門子S7 200的VB VW和VD

位元組 字或雙字訪問 欲訪問位元組 字或雙字,指定位址,位址包含區域識別符號,指定資料大小的字母以及位址號碼。vb200 訪問v記憶體位址位元組200 vw200 訪問v記憶體位址位元組200和201 vd200 訪問v記憶體位址位元組200 201 202和203 也就是說,vb可以當位元組變數來...

西門子PLC與感測器 NPN和PNP 接線

s7 1200輸入端既支援漏型也支援源型,所以既可以接npn感測器也可以接pnp的感測器。電流走向 24v com端 i0.0 電流從i點流出 感測器out端 感測器0v端 0v,如下圖 電流走向 24v 感測器24v 感測器out端 i0.0 電流流入i點 com 0v,如下圖 當導通時,訊號輸出...

谷歌獲得諾基亞和西門子支援 共同反對歐盟反壟斷處罰

10月11日訊息,據外媒報道,因被控存在打壓競爭對手的反競爭商業行為,谷歌被歐盟委員會處以43.4億歐元的鉅額罰款,谷歌正在歐洲第二高等法院general court對這項處罰發起挑戰。general court在當地時間周四公布的乙份檔案中表示,德國gigaset 原西門子品牌 和芬蘭hmd gl...