在回答這個(gè)問題之前,有必要對變量聲明表有一個(gè)基本了解。在step7中有兩種用來定義符號地址的表格形式:符號表(共享符號)和變量聲明表(局域符號),其本質(zhì)都是為了建立絕對地址與符號地址之間的內(nèi)在聯(lián)系,但表格針對的對象不同。共享符號是整個(gè)程序所使用的共同符號(用于全局符號定義的表為符號表);而局域符號是某一特定邏輯快(ob、fb、fc等)所使用的臨時(shí)性標(biāo)記,只能在特定的邏輯塊中進(jìn)行臨時(shí)性定義。用于臨時(shí)性的、局域符號定義的表被稱為變量聲明表,又稱局部變量聲明表。
局部變量聲明表分為參數(shù)(輸入?yún)?shù)in、輸出參數(shù)out、輸入/輸出參數(shù)in_out)和局部變量。局部變量又包括靜態(tài)變量(stat)和臨時(shí)變量(temp)兩種。參數(shù)可在調(diào)用塊(邏輯塊,塊中的形參)和被調(diào)用塊(功能fb有自己自動(dòng)生成的背景數(shù)據(jù)塊di,而功能fc只能使用共享數(shù)據(jù)塊,提供調(diào)用塊的形參的實(shí)際參數(shù)值,與調(diào)用塊形式參數(shù)一一對應(yīng),數(shù)據(jù)類型必需一致)。靜態(tài)變量和臨時(shí)變量是僅供邏輯塊本身使用數(shù)據(jù),不能用作不同程序塊之間的數(shù)據(jù)接口。
通過以上分析,我們知道所謂局部變量(包括靜態(tài)變量和暫態(tài)變量)都是指對特定的邏輯塊而言的,局部變量只是在它所在的塊中有效,離開具體的邏輯塊談上述變量是沒有意義的,你不能在其他塊中調(diào)用利用變量(包括靜態(tài)變量和暫態(tài)變量),這是與共享符號不一致的,共享符號可以被任意塊調(diào)用。在每個(gè)邏輯塊的前上面部分就是變量聲明表的區(qū)域,在變量聲明表中,用戶聲明本塊中專用的變量,即局部變量包括塊的形參和參數(shù)的系統(tǒng)屬性。你可以在不同的塊中使用相同的局部變量符號不會(huì)產(chǎn)生沖突。
靜態(tài)變量(stat)在plc運(yùn)行期間始終被存儲(chǔ)。s7將靜態(tài)變量定義在背景數(shù)據(jù)塊(針對fb而言,fc和ob無靜態(tài)變量),當(dāng)被調(diào)用塊運(yùn)行時(shí),能讀出或修改靜態(tài)變量;被調(diào)用塊結(jié)束后,靜態(tài)變量保留在數(shù)據(jù)塊中;
臨時(shí)變量(temp)是一種在塊執(zhí)行時(shí),用來暫時(shí)存儲(chǔ)數(shù)據(jù)的變量,這些數(shù)據(jù)存儲(chǔ)在cpu工作存儲(chǔ)區(qū)的局部數(shù)據(jù)堆棧(l堆棧)中。臨時(shí)變量可以在組織快ob、功能fc和功能塊fb中使用,當(dāng)塊執(zhí)行時(shí)它們被用來臨時(shí)存儲(chǔ)數(shù)據(jù),一旦塊執(zhí)行介紹,堆棧重新分配,臨時(shí)變量中的數(shù)據(jù)將丟失。
在程序塊中,如果在塊的變量聲明表中有局部變量符號,編程是step7軟化自動(dòng)在局部變量名前加一個(gè)“#”號,如果要訪問與局部變量重名的全局變量(在符號表中定義),則全局變量必須使用雙引號(如“symbol”)