S7300臨時變數和靜態變數的區別
TEMP (臨時變數):暫時儲存在區域性資料堆疊中的變數。同一級POU的臨時變數使用區域性資料堆疊中的同一塊物理儲存區,類似於公用的佈告欄,誰都可以往上面貼布告,後貼的佈告將原來的佈告覆蓋掉。每次呼叫POU之後,不再儲存它的臨時變數的值。每次呼叫FC和FB時,首先應初始化它的臨時變數(寫入數值),然後再使用它,簡稱為先賦值後使用。
STAT(靜態變數):儲存在背景資料塊中,背景資料塊相當於每次呼叫功能塊時對應的被控物件的私人資料倉庫。功能塊執行完後,背景資料塊中的資料不會丟失,以供下次執行功能塊時使用。
所以在功能塊執行完後需要儲存的變數應使用靜態變數。
靜態變數:FB背景資料塊特有的變數型別。
1、有絕對地址。
2、有儲存功能。
當作為背景資料塊呼叫後,它有自己的絕對地址.用法可以等價於M.DB。它僅僅作為FB的一種形式引數型別.不同於INT.OUT.IN_OUT的是當FB被呼叫是它不能作為引數進行輸入輸出.
而不同於TEMP的是:TEMP是區域性變數,它只在本塊,本掃描週期內維持資料,沒有記憶功能,而STAT有記憶功能.如果沒有程式去賦值,它的資料將一直儲存.
另外注意一點:如果採用了多重背景資料塊STAT等同於TEMP
在回答你的問題之前,有必要對變數宣告表有一個基本瞭解。在STEP7中有兩種用來定義符號地址的表格形式:符號表(共享符號)和變數宣告表(局域符號),其本質都是為了建立絕對地址與符號地址之間的內在聯絡,但表格針對的物件不同。共享符號是整個程式所使用的共同符號(用於全域性符號定義的表為符號表);而局域符號是某一特定邏輯快(OB、FB、FC等)所使用的臨時性標記,只能在特定的邏輯塊中進行臨時性定義。用於臨時性的、局域符號定義的表被稱為變數宣告表,又稱區域性變數宣告表。
區域性變數宣告表分為引數(輸入引數IN、輸出引數OUT、輸入/輸出引數IN_OUT)和區域性變數。區域性變數又包括靜態變數(STAT)和臨時變數(TEMP)兩種。引數可在呼叫塊(邏輯塊,塊中的形參)和被呼叫塊(功能FB有自己自動生成的背景資料塊DI,而功能FC只能使用共享資料塊,提供呼叫塊的形參的實際引數值,與呼叫塊形式引數一一對應,資料型別必需一致)。靜態變數和臨時變數是僅供邏輯塊本身使用資料,不能用作不同程式塊之間的資料介面。
透過以上分析,我們知道所謂區域性變數(包括靜態變數和暫態變數)都是指對特定的邏輯塊而言的,區域性變數只是在它所在的塊中有效,離開具體的邏輯塊談上述變數是沒有意義的,你不能在其他塊中呼叫利用變數(包括靜態變數和暫態變數),這是與共享符號不一致的,共享符號可以被任意塊呼叫。在每個邏輯塊的前上面部分就是變數宣告表的區域,在變數宣告表中,使用者宣告本塊中專用的變數,即區域性變數包括塊的形參和引數的系統屬性。你可以在不同的塊中使用相同的區域性變數符號不會產生衝突。
靜態變數(STAT)在PLC執行期間始終被儲存。S7 將靜態變數定義在背景資料塊(針對FB而言,FC和OB無靜態變數),當被呼叫塊執行時,能讀出或修改靜態變數;被呼叫塊結束後,靜態變數保留在資料塊中;
臨時變數(TEMP)是一種在塊執行時,用來暫時儲存資料的變數,這些資料儲存在CPU工作儲存區的區域性資料堆疊(L堆疊)中。臨時變數可以在組織快OB、功能FC和功能塊FB中使用,當塊執行時它們被用來臨時儲存資料,一旦塊執行介紹,堆疊重新分配,臨時變數中的資料將丟失。
在程式塊中,如果在塊的變數宣告表中有區域性變數符號,程式設計是STEP7軟化自動在區域性變數名前加一個“#”號,如果要訪問與區域性變數重名的全域性變數(在符號表中定義),則全域性變數必須使用雙引號(如“Symbol”)
S7300臨時變數和靜態變數的區別
TEMP (臨時變數):暫時儲存在區域性資料堆疊中的變數。同一級POU的臨時變數使用區域性資料堆疊中的同一塊物理儲存區,類似於公用的佈告欄,誰都可以往上面貼布告,後貼的佈告將原來的佈告覆蓋掉。每次呼叫POU之後,不再儲存它的臨時變數的值。每次呼叫FC和FB時,首先應初始化它的臨時變數(寫入數值),然後再使用它,簡稱為先賦值後使用。
STAT(靜態變數):儲存在背景資料塊中,背景資料塊相當於每次呼叫功能塊時對應的被控物件的私人資料倉庫。功能塊執行完後,背景資料塊中的資料不會丟失,以供下次執行功能塊時使用。
所以在功能塊執行完後需要儲存的變數應使用靜態變數。
靜態變數:FB背景資料塊特有的變數型別。
1、有絕對地址。
2、有儲存功能。
當作為背景資料塊呼叫後,它有自己的絕對地址.用法可以等價於M.DB。它僅僅作為FB的一種形式引數型別.不同於INT.OUT.IN_OUT的是當FB被呼叫是它不能作為引數進行輸入輸出.
而不同於TEMP的是:TEMP是區域性變數,它只在本塊,本掃描週期內維持資料,沒有記憶功能,而STAT有記憶功能.如果沒有程式去賦值,它的資料將一直儲存.
另外注意一點:如果採用了多重背景資料塊STAT等同於TEMP
在回答你的問題之前,有必要對變數宣告表有一個基本瞭解。在STEP7中有兩種用來定義符號地址的表格形式:符號表(共享符號)和變數宣告表(局域符號),其本質都是為了建立絕對地址與符號地址之間的內在聯絡,但表格針對的物件不同。共享符號是整個程式所使用的共同符號(用於全域性符號定義的表為符號表);而局域符號是某一特定邏輯快(OB、FB、FC等)所使用的臨時性標記,只能在特定的邏輯塊中進行臨時性定義。用於臨時性的、局域符號定義的表被稱為變數宣告表,又稱區域性變數宣告表。
區域性變數宣告表分為引數(輸入引數IN、輸出引數OUT、輸入/輸出引數IN_OUT)和區域性變數。區域性變數又包括靜態變數(STAT)和臨時變數(TEMP)兩種。引數可在呼叫塊(邏輯塊,塊中的形參)和被呼叫塊(功能FB有自己自動生成的背景資料塊DI,而功能FC只能使用共享資料塊,提供呼叫塊的形參的實際引數值,與呼叫塊形式引數一一對應,資料型別必需一致)。靜態變數和臨時變數是僅供邏輯塊本身使用資料,不能用作不同程式塊之間的資料介面。
透過以上分析,我們知道所謂區域性變數(包括靜態變數和暫態變數)都是指對特定的邏輯塊而言的,區域性變數只是在它所在的塊中有效,離開具體的邏輯塊談上述變數是沒有意義的,你不能在其他塊中呼叫利用變數(包括靜態變數和暫態變數),這是與共享符號不一致的,共享符號可以被任意塊呼叫。在每個邏輯塊的前上面部分就是變數宣告表的區域,在變數宣告表中,使用者宣告本塊中專用的變數,即區域性變數包括塊的形參和引數的系統屬性。你可以在不同的塊中使用相同的區域性變數符號不會產生衝突。
靜態變數(STAT)在PLC執行期間始終被儲存。S7 將靜態變數定義在背景資料塊(針對FB而言,FC和OB無靜態變數),當被呼叫塊執行時,能讀出或修改靜態變數;被呼叫塊結束後,靜態變數保留在資料塊中;
臨時變數(TEMP)是一種在塊執行時,用來暫時儲存資料的變數,這些資料儲存在CPU工作儲存區的區域性資料堆疊(L堆疊)中。臨時變數可以在組織快OB、功能FC和功能塊FB中使用,當塊執行時它們被用來臨時儲存資料,一旦塊執行介紹,堆疊重新分配,臨時變數中的資料將丟失。
在程式塊中,如果在塊的變數宣告表中有區域性變數符號,程式設計是STEP7軟化自動在區域性變數名前加一個“#”號,如果要訪問與區域性變數重名的全域性變數(在符號表中定義),則全域性變數必須使用雙引號(如“Symbol”)