temp(臨時(shí)變量)為暫時(shí)保存在局部數(shù)據(jù)區(qū)中的變量。只有在執(zhí)行該pou時(shí),定義的臨時(shí)變量才被使用,pou執(zhí)行完后,不再使用臨時(shí)變量的數(shù)值。在主程序或中斷程序中,局部變量表只包含temp變量。子程序的局部變量表中還有三種變量:in(輸入變量)、out(輸出變量)、in_out(輸入/輸出變量)。
在局部變量表中賦值時(shí),只需指定聲明局部變量的類型(temp、in、in_out或out)和數(shù)據(jù)類型(參見(jiàn)simatic和iec1131-3的數(shù)據(jù)類型),但不指定存儲(chǔ)器地址,程序編輯器自動(dòng)地在l存儲(chǔ)區(qū)中為所有局部變量指定存儲(chǔ)器位置。起始地址為lo,每字節(jié)8位,能訪問(wèn)到位。字節(jié)、字和雙字在局部存儲(chǔ)器中按字節(jié)順序分配,例如lbx、lwx或ldx。
局部變量作為參數(shù)向子程序傳遞時(shí),在該子程序的局部變量表中指定的數(shù)據(jù)類型必須與調(diào)用pou中的數(shù)據(jù)類型值匹配。例如,在主程序ob1中調(diào)用子程序sbr0,使用名為input1的全局符號(hào)作為子程序的輸入?yún)?shù)。在sbr0的局部變量表中,已經(jīng)定義了一個(gè)名為first的局部變量作為該輸入?yún)?shù)。當(dāng)ob1調(diào)用sbro時(shí),input1的數(shù)值被傳入first,input1和first的數(shù)據(jù)類型必須匹配。
在程序中使用符號(hào)名時(shí),程序編輯器首先檢查有關(guān)pou的局部變量表,然后檢查符號(hào)表/全局變量表。如果某符號(hào)名在兩處都沒(méi)有定義,程序編輯器則將其視為全局符號(hào),程序編輯器指定一條綠色波浪狀下劃線,并將名稱括在雙引號(hào)中,例如“undefinedlocalvar”(未定義的局部變量)。如果后來(lái)對(duì)該符號(hào)名賦了值,則程序編輯器不會(huì)自動(dòng)再次讀取局部變量表并修改它。為了將該符號(hào)名作為局部變量使用,必須手工刪除程序代碼中的引號(hào),并在符號(hào)名前插入#號(hào),例如改為#undefinedlocalvar。
各子程序最多可調(diào)用16個(gè)輸入/輸出參數(shù),如果超出16個(gè),將返回錯(cuò)誤。選擇希望的變量類型所在的行,并在名稱域中鍵入變量名稱,在數(shù)據(jù)類型域中鍵入數(shù)據(jù)類型。不需在局部變量表中的變量名稱前加#號(hào),#號(hào)只在程序代碼中的局部變量名之前使用。
局部變量名可包含數(shù)字、字母和下劃線(_),也可以包含擴(kuò)展字符(ascii128~255)。第一個(gè)字符必須是字母或擴(kuò)展字符,關(guān)鍵字不能作為符號(hào)名。
局部變量表中的變量名被下載和存儲(chǔ)在cpu存儲(chǔ)器中,使用較長(zhǎng)的變量名將占用較多的存儲(chǔ)空間。