4.2.2 跳轉(zhuǎn)、循環(huán)和子程序調(diào)用指令
跳轉(zhuǎn)、循環(huán)和子程序調(diào)用指令程序執(zhí)行順序的控制指令格式如表4-7所示。
1.程序跳轉(zhuǎn)指令(JMP)
跳轉(zhuǎn)指令(JMP)和跳轉(zhuǎn)地址標號指令(LBL)配合實現(xiàn)程序的跳轉(zhuǎn)。使能輸入有效時,程序跳轉(zhuǎn)到指定標號n處執(zhí)行(在同一程序內(nèi)),跳轉(zhuǎn)標號n=0~255。使能輸入無效時,程序順序執(zhí)行。
2.循環(huán)控制指令(FOR)
循環(huán)結構用于描述一段程序的重復循環(huán)執(zhí)行。由FOR和NEXT指令構成程序的循環(huán)體。FOR指令標記循環(huán)的開始,NEXT指令為循環(huán)體的結束指令。
FOR指令為指令盒格式,主要參數(shù)有使能輸入EN,當前值計數(shù)器INDX(數(shù)據(jù)類型為字),循環(huán)次數(shù)初始值INIT,循環(huán)計數(shù)終止值FINAL。
表4-7 跳轉(zhuǎn)、循環(huán)和子程序調(diào)用指令程序
工作原理:使能輸入EN有效,循環(huán)體開始執(zhí)行,執(zhí)行到NEXT指令時返回,每執(zhí)行一次循環(huán)體,當前計數(shù)器INDX增1,達到終值FINAL時,循環(huán)結束。
例如FINAL為10,使能有效時,執(zhí)行循環(huán)體,同時INDX從1開始計數(shù),每執(zhí)行一次循環(huán)體,INDX當前值加1,執(zhí)行到10次時,當前值也為10,循環(huán)結束。
使能輸入無效時,循環(huán)體程序不執(zhí)行。每次使能輸入有效,指令自動將各參數(shù)復位。FOR/NEXT指令必須成對使用,循環(huán)可以嵌套,最多為8層。
3.子程序調(diào)用指令(SBR)
通常將具有特定功能、并且多次使用的程序段作為子程序。子程序可以被多次調(diào)用,也可以嵌套(最多8套),還可以遞歸調(diào)用(自己調(diào)用自己)。
子程序有子程序調(diào)用和子程序返回兩大類指令,子程序返回又分條件返回和無條件返回。子程序調(diào)用指令(SBR-N)用在主程序或其他調(diào)用子程序的程序中,子程序的無條件返回指令(RET)在子程序的最后網(wǎng)絡段,梯形圖指令系統(tǒng)能自動生成子程序的無條件返回指令,用戶無需輸入;條件返回指令(CRET)需要運行條件滿足時才執(zhí)行。
建立子程序的方法:在編程軟件的程序數(shù)據(jù)窗口的下方有主程序(MAIN)、子程序(SBR-0)、中斷服務程序(INT-0)的標簽,點擊子程序標簽即可進入SBR-0子程序顯示區(qū)。也可以通過指令樹的項目進入子程序SBR-0顯示區(qū)。添加一個子程序時,可以用編輯菜單的插入項增加一個子程序,子程序編號n從0開始自動向上生成,其范圍是0~63。
【例4-14】循環(huán)、跳轉(zhuǎn)及子程序調(diào)用指令應用程序,如圖4-23所示。
圖4-23 跳轉(zhuǎn)、循環(huán)、子程序調(diào)用指令應用
4.帶參數(shù)的子程序調(diào)用指令
子程序可能有要傳遞的參數(shù)(變量和數(shù)據(jù)),這時可以在子程序調(diào)用指令中包含相應參數(shù),可以在子程序與調(diào)用程序之間傳送。參數(shù)(變量和數(shù)據(jù))必須有符號名(最多8個字符)、變量和數(shù)據(jù)類型等內(nèi)容。子程序最多可以傳遞6個參數(shù)。傳遞的參數(shù)在子程序局部變量表中定義。局部變量表中的變量有IN、OUT、IN/OUT和TEMP4種類型。
IN類:將指定位置的參數(shù)傳入子程序。參數(shù)的尋址方式可以是直接尋址(如VB10),間接尋址(如*AC1),立即數(shù)(如#1234),也可以將數(shù)據(jù)的地址值(指針)傳入子程序(&VB100)。
OUT類型:從子程序的結果值(數(shù)據(jù))傳入到指定參數(shù)位置,常數(shù)不允許作為輸入?yún)?shù)。
IN/OUT類型:將指定位置的參數(shù)傳到子程序,從子程序來的結果值被返回到同樣的地址。
TEMP類型:局部存儲器只能用作子程序內(nèi)部的暫時存儲器,不能用來傳遞參數(shù)。
局部變量表的數(shù)據(jù)類型可以是能流、布爾(位)、字節(jié)、子、雙字、整數(shù)、雙整數(shù)和實數(shù)型。能流是指僅允許對位輸入操作的布爾能流(布爾型),梯形圖表達形式為用觸點(位輸入)將電源母線和指令盒連接起來。
局部變量表隱藏在程序顯示區(qū),將梯形圖顯示區(qū)向下拖動,可以露出局部變量表,如圖4-24所示,在局部變量表中輸入變量名稱、變量類型、數(shù)據(jù)類型等參數(shù)以后,雙擊指令樹中子程序(或選擇點擊方框快捷按扭,在彈出的菜單中選擇子程序項)。在梯形圖顯示區(qū)顯示出帶參數(shù)的子程序調(diào)用指令盒。
圖4-24 局部變量表示意圖
局部變量表變量類型的修改方法:用光標選中變量類型區(qū),點擊鼠標右鍵得到一個下拉菜單,選擇插入項,彈出一個下拉菜單,點擊選中的類型,在變量類型區(qū)光標所在處可以得到選中的類型。
帶參數(shù)子程序調(diào)用指令格式及程序應用示例如圖4-25所示。
圖4-25 帶參數(shù)子程序調(diào)用示例
其語句表如下:
表中梯形圖的EN和INX的輸入為布爾型能流輸入,地址參數(shù)VW0是把一個字的(無符號)值傳遞到子程序。
給子程序傳遞參數(shù)時,它們放在子程序的局部存儲器(L)中,局部變量表最左列是每個被傳遞參數(shù)的局部存儲器地址。
子程序調(diào)用時,輸入?yún)?shù)被拷貝到局部存儲器。子程序完成時,從局部存儲器拷貝輸出參數(shù)到指定的輸出參數(shù)地址。
免責聲明:以上內(nèi)容源自網(wǎng)絡,版權歸原作者所有,如有侵犯您的原創(chuàng)版權請告知,我們將盡快刪除相關內(nèi)容。