找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9180|回復: 0
打印 上一主題 下一主題
收起左側(cè)

S7-200子程序 局部變量說明

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:26188 發(fā)表于 2015-5-28 00:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


                            IN                       調(diào)用POU提供的輸入?yún)?shù)。

                            OUT                   返回調(diào)用POU的輸出參數(shù)。
                            IN_OUT              數(shù)值由調(diào)用POU提供的參數(shù),由子程序修改,然后返回調(diào)用POU。

                            TEMPORARY    臨時保存在局部數(shù)據(jù)堆棧中的臨時變量。一旦POU完全執(zhí)行,臨時變量數(shù)值則無法再用。在兩次P0U執(zhí)行之間,臨時變量不保持其數(shù)值。


    局部變量是分配給每個子程序的臨時存貯區(qū)。

    當子程序被調(diào)用時,系統(tǒng)分配局部變量區(qū)給子程序;子程序執(zhí)行完成后,該局部變量區(qū)被釋放。釋放時其中存貯的值也同時丟失,不能再下一掃描周期再被子程序使用。

    局部變量區(qū)的大小為64個字節(jié),其中最后4個字節(jié)被系統(tǒng)所占用,實際可供子程序使用的為60個字節(jié)。

    由于局部變量區(qū)的數(shù)據(jù)不能帶到上一掃描周期,因此只能用于存迪程序運算中的中間值,可以減少對全局變量區(qū)的占用。
    由于局部變量區(qū)在子程序被調(diào)用時才被分配,且分配時并不對數(shù)據(jù)區(qū)進行初始化,所以其初始值是不確定的。因此在程序中用到這些存貯區(qū)的值的指令前,必須有對該存貯區(qū)地址的賦值操作,否則可能會出現(xiàn)錯誤的執(zhí)行結(jié)果。尤其在子程序中存在大量的跳轉(zhuǎn)指令時,很容易出現(xiàn)漏掉對局部變量賦值的情況,要格外注意。

    每個子程序調(diào)用的輸入/輸出參數(shù)的最大限制是16,如果您嘗試下載的程序超過此一限制,INout加起來共16個超過16個就會出錯,本人做一個程序的時候發(fā)現(xiàn)了這個問題,在這里提醒各位同行。

    1、子程序或者中斷程序不能訪問分配給主程序的局部存儲器。子程序不能訪問分配給主程序、中斷程序或者其他子程序的局部存儲器。同樣的,中斷程序也不能訪問分配給主程序或子程序的局部存儲器。

    2、有關(guān)局部變量:S7-200有64個字節(jié)的局部存儲器,其中60個可以用作臨時存儲器或者給子程序傳遞參數(shù)。

    如果用梯形圖或功能方塊圖編程,STEP7--Micro/WIN保留這些局部存儲器的最后四個字節(jié)。

    局部存儲器和變量存儲器很相似,但只有一處區(qū)別。變量存儲器是全局有效的,而局部存儲器只在局部有效。全局是指同一個存儲器可以被任何程序存取(包括主程序、子程序和中斷中斷程序程序)。局部是指存儲器區(qū)和特定的程序相關(guān)聯(lián)。S7--200給主程序分配64個局部存儲器;給每一級子程序嵌套分配64個字節(jié)局部存儲器;同樣給中斷程序分配64個字節(jié)局部存儲器。

    子程序或者中斷程序不能訪問分配給主程序的局部存儲器。子程序不能訪問分配給主程序、中斷程序或者其他子程序的局部存儲器。同樣的,中斷程序也不能訪問分配給主程序或子程序的局部存儲器。S7--200 PLC根據(jù)需要分配局部存儲器。也就是說,當主程序執(zhí)行時,分配給子程序或中斷程序的局部存儲器是不存在的。當發(fā)生中斷或者調(diào)用一個子程序時,需要分配局部存儲器。新的局部存儲器地址可能會覆蓋另一個子程序或中斷程序的局部存儲器地址。

    局部存儲器在分配時PLC不進行初始化,初值可能是任意的。當在子程序調(diào)用中傳遞參數(shù)時,在被調(diào)用子程序的局部存儲器中,由CPU替換其被傳遞的參數(shù)的值。局部存儲器在參數(shù)傳遞過程中不傳遞值,在分配時不被初始化,可能包含任意數(shù)值。

   3、CPU
226的項目中最多可以創(chuàng)建128個子程序,其他CUP可以創(chuàng)建64個子程序。子程序可以嵌套調(diào)用,即在子程序中調(diào)用別的子程序,一共可以嵌套8層。在中斷程序中調(diào)用的子程序不能再調(diào)用別的子程序。不禁止遞歸調(diào)用(子程序調(diào)用自己),但是應(yīng)慎重使用遞歸調(diào)用。

   4、
子程序中的定時器:
停止調(diào)用子程序時,線圈在子程序內(nèi)的位元件的ON/OFF狀態(tài)保持不變。如果在停止調(diào)用時子程序中的定時器正在定時,100ms定時器將停止定時,當前值保持不變,重新調(diào)用時繼續(xù)定時;但是1ms定時器和10ms定時器將繼續(xù)定時,定時時間到時,它們的定時器位變?yōu)?狀態(tài),并且可以在子程序之外起作用。


    如何輸入第一個局部變量賦值欲在局部變量表中賦值,請遵循以下步驟:
    1.    確保正確的POU在程序編輯器窗口中顯示,如有必要,點擊所需的POU標記。(因為每個POU都有自己的局部變量表,您需要確保對正確的POU賦值。)
    2.    如果局部變量表處于隱藏狀態(tài),下拉水平分裂條,顯示局部變量表。
    3.    為需要定義的變量選擇具有正確說明類型的行,在"名稱"域中為該變量鍵入一個名稱。(如果您在OB1或中斷例行程序中賦值,局部變量表只包含TEMP變量。如果您在子程序中賦值,局部變量表包含IN、IN_OUT、OUT和TEMP變量。)您不需要在局部變量表中的變量名前加井號。井號只用在程序代碼中的局部變量前。
    注釋:
   *  局部變量名最多可包含23個字母數(shù)字字符和下劃號,也可包含擴展字符(ASCII 128至 ASCII 255)。第一個字符只能是字母或擴展字符。將關(guān)鍵字用作符號名屬于非法,名稱的第一個字符是數(shù)字,或名稱包含非字母數(shù)字字符或擴展字符集中的字符也屬于非法。
   **  局部變量表變量名被下載并存儲于CPU內(nèi)存中,使用較長的變量名可能減少用于存儲程序的內(nèi)存空間。
    4.    在"數(shù)據(jù)類型"域中點擊鼠標指針,并使用列表框為局部變量選擇適當?shù)臄?shù)據(jù)類型。
    注釋:
    當您將局部變量指定為子程序的參數(shù)時,您必須保證為局部變量指定的數(shù)據(jù)類型不與子程序調(diào)用中使用的操作數(shù)發(fā)生沖突。為"名稱"和"數(shù)據(jù)類型"域提供數(shù)值后,程序編輯器會自動為局部變量指定L內(nèi)存地址。
如何在局部變量表中輸入附加賦值
   對于OB1和中斷例行程序,局部變量表顯示一組已被預先定義為TEMP變量的行。在OB1或中斷例行程序中,只能使用這種說明類型。欲在表中增加更多行,只需點擊最后一行中的一個單元格,然后使用ENTER鍵移過該行并向下移動,即自動生成一個新行。
   對于子程序,局部變量表顯示按照以下順序預先定義說明類型的一組行:IN、IN_OUT、OUT和TEMP。您不能改變該順序。局部變量在該表中的順序必須符合當您為子程序調(diào)用指令進行操作數(shù)賦值時對應(yīng)的操作數(shù)順序。如果您希望增加附加局部變量,必須用鼠標右鍵點擊現(xiàn)有行,并使用彈出菜單插入與點擊行類型相同的另一局部變量。選擇插入(Insert)> 行(
Row),在所選行的上方插入新行,或選擇插入(Insert> 行下方(Below Row),在所選行下方插入新行。
  






分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表