IN 調用POU提供的輸入參數。
OUT 返回調用POU的輸出參數。
IN_OUT 數值由調用POU提供的參數,由子程序修改,然後返回調用POU。
TEMPORARY 臨時保存在局部數據堆棧中的臨時變量。一旦POU完全執行,臨時變量數值則無法再用。在兩次P0U執行之間,臨時變量不保持其數值。
局部變量是分配給每個子程序的臨時存貯區。
當子程序被調用時,係統分配局部變量區給子程序;子程序執行完成後,該局部變量區被釋放。釋放時其中存貯的值也同時丟失,不能再下一掃描周期再被子程序使用。
局部變量區的大小為64個字節,其中最後4個字節被係統所占用,實際可供子程序使用的為60個字節。
由於局部變量區的數據不能帶到上一掃描周期,因此隻能用於存迪程序運算中的中間值,可以減少對全局變量區的占用。
由於局部變量區在子程序被調用時才被分配,且分配時並不對數據區進行初始化,所以其初始值是不確定的。因此在程序中用到這些存貯區的值的指令前,必須有對該存貯區地址的賦值操作,否則可能會出現錯誤的執行結果。尤其在子程序中存在大量的跳轉指令時,很容易出現漏掉對局部變量賦值的情況,要格外注意。
每個子程序調用的輸入/輸出參數的最大限製是16,如果您嚐試下載的程序超過此一限製,IN和out加起來共16個超過16個就會出錯,本人做一個程序的時候發現了這個問題,在這裏提醒各位同行。
1、子程序或者中斷程序不能訪問分配給主程序的局部存儲器。子程序不能訪問分配給主程序、中斷程序或者其他子程序的局部存儲器。同樣的,中斷程序也不能訪問分配給主程序或子程序的局部存儲器。
2、有關局部變量:S7-200有64個字節的局部存儲器,其中60個可以用作臨時存儲器或者給子程序傳遞參數。
如果用梯形圖或功能方塊圖編程,STEP7--Micro/WIN保留這些局部存儲器的最後四個字節。
局部存儲器和變量存儲器很相似,但隻有一處區別。變量存儲器是全局有效的,而局部存儲器隻在局部有效。全局是指同一個存儲器可以被任何程序存取(包括主程序、子程序和中斷中斷程序程序)。局部是指存儲器區和特定的程序相關聯。S7--200給主程序分配64個局部存儲器;給每一級子程序嵌套分配64個字節局部存儲器;同樣給中斷程序分配64個字節局部存儲器。
子程序或者中斷程序不能訪問分配給主程序的局部存儲器。子程序不能訪問分配給主程序、中斷程序或者其他子程序的局部存儲器。同樣的,中斷程序也不能訪問分配給主程序或子程序的局部存儲器。S7--200 plc根據需要分配局部存儲器。也就是說,當主程序執行時,分配給子程序或中斷程序的局部存儲器是不存在的。當發生中斷或者調用一個子程序時,需要分配局部存儲器。新的局部存儲器地址可能會覆蓋另一個子程序或中斷程序的局部存儲器地址。
局部存儲器在分配時PLC不進行初始化,初值可能是任意的。當在子程序調用中傳遞參數時,在被調用子程序的局部存儲器中,由CPU替換其被傳遞的參數的值。局部存儲器在參數傳遞過程中不傳遞值,在分配時不被初始化,可能包含任意數值。
3、CPU226的項目中最多可以創建128個子程序,其他CUP可以創建64個子程序。子程序可以嵌套調用,即在子程序中調用別的子程序,一共可以嵌套8層。在中斷程序中調用的子程序不能再調用別的子程序。不禁止遞歸調用(子程序調用自己),但是應慎重使用遞歸調用。
4、子程序中的定時器:停止調用子程序時,線圈在子程序內的位元件的ON/OFF狀態保持不變。如果在停止調用時子程序中的定時器正在定時,100ms定時器將停止定時,當前值保持不變,重新調用時繼續定時;但是1ms定時器和10ms定時器將繼續定時,定時時間到時,它們的定時器位變為1狀態,並且可以在子程序之外起作用。
如何輸入第一個局部變量賦值欲在局部變量表中賦值,請遵循以下步驟:
1. 確保正確的POU在程序編輯器窗口中顯示,如有必要,點擊所需的POU標記。(因為每個POU都有自己的局部變量表,您需要確保對正確的POU賦值。)
2. 如果局部變量表處於隱藏狀態,下拉水平分裂條,顯示局部變量表。
3. 為需要定義的變量選擇具有正確說明類型的行,在"名稱"域中為該變量鍵入一個名稱。(如果您在OB1或中斷例行程序中賦值,局部變量表隻包含TEMP變量。如果您在子程序中賦值,局部變量表包含IN、IN_OUT、OUT和TEMP變量。)您不需要在局部變量表中的變量名前加井號。井號隻用在程序代碼中的局部變量前。
注釋:
* 局部變量名最多可包含23個字母數字字符和下劃號,也可包含擴展字符(ASCII 128至 ASCII 255)。第一個字符隻能是字母或擴展字符。將關鍵字用作符號名屬於非法,名稱的第一個字符是數字,或名稱包含非字母數字字符或擴展字符集中的字符也屬於非法。
** 局部變量表變量名被下載並存儲於CPU內存中,使用較長的變量名可能減少用於存儲程序的內存空間。
4. 在"數據類型"域中點擊鼠標指針,並使用列表框為局部變量選擇適當的數據類型。
注釋:
當您將局部變量指定為子程序的參數時,您必須保證為局部變量指定的數據類型不與子程序調用中使用的操作數發生衝突。為"名稱"和"數據類型"域提供數值後,程序編輯器會自動為局部變量指定L內存地址。
如何在局部變量表中輸入附加賦值
對於OB1和中斷例行程序,局部變量表顯示一組已被預先定義為TEMP變量的行。在OB1或中斷例行程序中,隻能使用這種說明類型。欲在表中增加更多行,隻需點擊最後一行中的一個單元格,然後使用ENTER鍵移過該行並向下移動,即自動生成一個新行。
對於子程序,局部變量表顯示按照以下順序預先定義說明類型的一組行:IN、IN_OUT、OUT和TEMP。您不能改變該順序。局部變量在該表中的順序必須符合當您為子程序調用指令進行操作數賦值時對應的操作數順序。如果您希望增加附加局部變量,必須用鼠標右鍵點擊現有行,並使用彈出菜單插入與點擊行類型相同的另一局部變量。選擇插入(Insert)> 行(Row),在所選行的上方插入新行,或選擇插入(Insert)> 行下方(Below Row),在所選行下方插入新行。