很多初學者容易將 FC 及FB 相混淆,認為 FB 僅僅是比 FC 多了一個背景數(shù)據(jù)塊,這種認識是非常危險的。在 STEP7 的關(guān)于 FC 的描述是這樣的:
FC 是一個沒有存儲空間的邏輯塊。FC 的臨時變量存儲在本地數(shù)據(jù)堆棧中,這些數(shù)據(jù)在 FC 執(zhí)行完畢后將會丟失。為了永久的保存數(shù)據(jù),F(xiàn)C 可以使用共享數(shù)據(jù)塊。
由于 FC 沒有自己的存儲空間,所以必須指定實參給它的參數(shù)(這就是為什么 FC 的輸入輸出管腳必須填寫參數(shù)的原因)。FC 的臨時變量(位于本地數(shù)據(jù)堆棧中)是無法指定初始值的(由于本地數(shù)據(jù)堆棧是由系統(tǒng)自動動態(tài)使用的)。為了更形象的說明這一點,我們來看下面的例子,此例子對 L 堆棧在程序調(diào)用時的分配進行了詳細的講解:
L 堆棧永遠以地址“0”開始。在 L 堆棧中,會為每個 FC 提供一定地址空間,作為存放每個塊所擁有的固有數(shù)據(jù)或局部數(shù)據(jù)。當某個塊終止時,那么它的空間隨之也被重新釋放出來。指針總是指向當前打開塊的第一個字節(jié)。
運行等級 | L 堆棧中的字節(jié)數(shù) | 指針 | |
調(diào)用OB1(帶有 20 個字節(jié)的系統(tǒng)固有數(shù)據(jù)和局部數(shù)據(jù)的 10 個附加字節(jié)) | 30 | 0 | |
調(diào)用 FC1(帶有 30 個字節(jié)的局部數(shù)據(jù)) 30 個字節(jié) (OB1) + 30 個字節(jié) (FC1) |
60 | 30 | |
調(diào)用 FC20(帶有 20 個字節(jié)的局部數(shù)據(jù)) 60 個字節(jié) (OB1 + FC1) +20 個字節(jié) FC10 |
80 | 60 | |
調(diào)用 FC21(帶有 20 個字節(jié)的局部數(shù)據(jù)) 60 個字節(jié) (OB1 + FC1) +20 個字節(jié) FC11 |
80 | 60 | |
調(diào)用 FC2(帶有 50 個字節(jié)的局部數(shù)據(jù)) 30 個字節(jié) (OB1) +50 個字節(jié) (FC2) |
80 | 30 | |
調(diào)用 FC30(帶有 10 個字節(jié)的局部數(shù)據(jù)) 80 個字節(jié) (OB1 + FC2) +10 個字節(jié) FC20 |
90 | 80 |
由上面的例子可以看出:對于FC20 曾經(jīng)使用過的系統(tǒng)中 L 堆棧 60-80 區(qū)間(FC20 中地址范圍為 LB0-LB19)在 FC20 調(diào)用結(jié)束后,被提供給 FC21 使用(FC21 中地址范圍同樣為 LB0-LB19)。 對于 FC 的臨時變量認識不清晰,用戶在對臨時變量的使用當中,也經(jīng)常會出現(xiàn)一些錯誤,下面將使用一個例子非常直觀地說明上面的問題
程序原目的:
在 OB1 在程序中調(diào)用FC20 后立即調(diào)用 FC21
FC20 中將 20 賦值給臨時變量 FC20_TEMP1,將 21 賦值給臨時變量 FC20_TEMP2FC21 中將 FC21_TEMP1,F(xiàn)C21_TEMP2 相加
程序分析:我們發(fā)現(xiàn) FC20 中的臨時變量曾經(jīng)出現(xiàn)的數(shù)值(20,21)被 FC21 中的臨時變量FC21_TEMP1, FC21_TEMP2 得到了,如果直接使用這兩個臨時變量進行加法操作,可以得到結(jié)果 41。對于編程人員來說,臨時變量必須要在所在程序段中賦值,而后使用。用戶對此例中的 FC21_TEMP1, FC21_TEMP2 必須先做清零處理,否則其在使用前即可能擁有數(shù)值。
結(jié)論:對于 FC 或 FB 中的臨時變量,不要希望將本次調(diào)用的數(shù)值可以存儲在里面以供下次程序調(diào)用使用,因為這些臨時變量所使用的 L 堆??臻g在 FC 或 FB 調(diào)用結(jié)束就釋放給系統(tǒng)了,其它后續(xù)程序可以任意使用。所以下列用法都是錯誤的:
將臨時變量用于上升/下降沿指令
將臨時變量用于自保持邏輯
臨時變量未在所在程序段中賦值,直接使用
審核編輯:郭婷
-
存儲
+關(guān)注
關(guān)注
13文章
4122瀏覽量
85272 -
堆棧
+關(guān)注
關(guān)注
0文章
176瀏覽量
19668
原文標題:FC 中臨時變量的使用:
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論