局部變量表
1.局部變量與全局變量
程序中的每個POU(Program Organizational Unit,程序組織單元)均有白己的由64字節(jié)L存儲器組成的局部變量表。它們用來定義有范圍限制的變量,局部變量只在它被創(chuàng)建的POU中有效。與之相反,全局符號在各POU中均有效,只能在符號表/全局變量表中定義。全局符號與局部變量名稱相同時,在定義局部變量的POU中,該局部變量的定義優(yōu)先,該全局定義則在兒它POU中使用。
局部變量適用于以下兩種情況:
(1)在子程序中只用局部變量,不用絕對地址或全局符號,子程序可移植到別的項目去。
(2)如果使用臨時變量(TEMP),同一片物理存儲器可在不同的程序中重復使用。
如果不是上述兩種情況,不需要使用局部變量。通過在符號表(SIMATIC)或全局變量表(IEC)中進行定義,可使符號成為全局變量。
全局變量:在I、Q、M、SM、AI、AQ、V、S、T、C、HC地址中的變量為全局變量。在符號表中定義的上述地址區(qū)中的符號為全局符號。
局部變量:每個程序組織單元(POU)中的局部(L)存儲器,共64個字節(jié)。
定義和查看全局變量和局部變量:
然后引用:
局部變量會自動添加“#”。
2.局部變量的類型
TEMP(臨時變量):暫時保存在局部數(shù)據(jù)區(qū)中的變量。只有在執(zhí)行該POU時,定義的臨時變量才被使用,POU執(zhí)行完后,不再使用臨時變量的數(shù)值。在主程序或中斷程序中.局部變量表只包含TEMP變量。子程序中的局部變量表還有下面的3種變量:
IN(輸人變量):由調用它的POU提供的輸人參數(shù)。
OUT(輸出變量);返回給調用它的POU的輸出參數(shù)。
IN_OUT(輸人/輸出變量);其初始值由調用它的POU提供,被子程序修改后返問給調用它的POU。
3.局部變量的賦值
在局部變量表中賦值時,只需指定聲明局部變量的類型(TEMP,IN,IN_OUT或OUT)和數(shù)據(jù)類型(參見SIMATIC和IEC1131-3的數(shù)據(jù)類型),但不指定存儲器地址,程序編輯器自動地在L存儲區(qū)中為所有局部變量指定存儲器位置。
4.在局部變量表中增加新的變量
對于主程序與中斷程序,局部變量表顯示一組已被預先定義為TEMP(臨時)變量的行。要向表中增加行,只需用右鍵單擊表中的某一行,選擇“插人→行"指令,在所選行的上部插人新的行,選擇“插人→行下"指令,在所選行的下部插人新的行。
對于子程序,局部變量表顯示數(shù)據(jù)類型被預先定義為IN、IN_OUT.OUT和TEMP的一系列行,不能改變它們的順序。如果要增加新的局部變量,必須用鼠標右鍵單擊已有的行,并用彈出菜單在所擊行的上下插人相同類型的另一局部變量。
5.局部變量數(shù)據(jù)類型檢查
局部變量作為參數(shù)向子程序傳遞時,在該子程序的局部變量表中指定的數(shù)據(jù)類型必須調用POU中的數(shù)據(jù)類型值匹配。
例如從主程序0B1調用子程序SBR0,使用名為INPUT1的全局符號作為子程序的輸人參數(shù)。在SBRO的局部變量表中,已經(jīng)定義了一個名為FIRST的局部變量作為該輸入?yún)?shù),當0B1調用SBR0時,INPUTI的數(shù)值被傳人FIRST,INPUTI和FIRST的數(shù)據(jù)類型必須匹配。
6.顯示或隱藏局部變量表
將水平分裂條拉至程序編輯器視窗的傾部,則不再疑示局部變量表,但它仍然存在。將分裂條下拉,將再次顯示局部變量表。
7.在局部變量表中進行賦值
在程序中使用符號名時,程序編輯器首先檢查有關POU的局部變量表,然后檢查符號表/全局變量表。如果某符號名在兩處都沒有定義,程序編輯器則將其視為全局符號,程序編輯器指定一條綠色波浪狀下畫線,并將名稱括在雙引號中,例如"UndefinedLocalVar(未定義的局部變量)。如果后來對該符號名賦了值,程序編輯器不會自動再次讀取局部變量表并修改它。為了將該符號名作為局部變量使用,必須手工刪除程序代碼中的引號,并在符號名前插人#號,例如改為#UndefinedLocalVar。
各子程序最多可調用16個輸人/輸出參數(shù),如果超出16個,將返回錯誤。
選擇希望的變量類型所在的行,并在名稱域中鍵人變量名稱,在數(shù)據(jù)類型城中鍵人數(shù)據(jù)類型。不需在局部變量表中的安量名稱前加并號,#號只在程序代碼中的局部變量名之前使用。
局部變量名可包含數(shù)字、字母和下畫號(“_”),也可以包含擴展字符(ASII128-ASCII255)。第一個字符必須是字可或擴展字符,關鍵字不能作為符號名。
局部變量表中的變量名被下載和存儲在CPU存儲器中,使用較長的變量名將占用較多的存儲空問。