1.建立子程序
可用編程軟件Edit菜單中的Insert選項,選擇Subroutine,以建立或插入一個新的子程序,同時在指令樹窗口可以看到新建的子程序圖標,默認的程序名是SBR_n,編號n從0開始按遞增順序生成,可以在圖標上直接更改子程序的程序名。在指令樹窗口雙擊子程序的圖標就可對它進行編輯。
2.子程序調(diào)用
子程序可以多次被調(diào)用,也可以嵌套(最多8層),還可以遞歸調(diào)用(自己調(diào)用自己)。
CALL SBR0 //子程序調(diào)用
CRET //條件返回
RET //無條件返回(自動)
【例4-18】循環(huán)、跳轉(zhuǎn)及子程序調(diào)用指令應用程序,循環(huán)、跳轉(zhuǎn)的梯形圖程序如圖4-45所示,子程序調(diào)用的梯形圖程序如圖4-46所示。


圖4-45 循環(huán)、跳轉(zhuǎn)指令的應用


圖4-46 子程序調(diào)用指令的應用
STL指令如下:
LDW>= AC0,+100
JMP 10 //跳轉(zhuǎn)
LD M0.0
FOR VW100,+1,+20 //循環(huán)開始
LD I0.0
CAIL SBR_0 //調(diào)用子程序
NEXT //循環(huán)返回
LD I0.1
SQ0.0,1 //位置1
LBL 10 //標號
子程序SBR0如下:
LD SM0.0
INCW VW200 //VW200增1
LD 10.2
CRET //條件返回
3.帶參數(shù)的子程序調(diào)用指令
子程序可能有要傳遞的參數(shù)(變量和數(shù)據(jù)),這時可以在子程序調(diào)用指令中包含相應參數(shù),它可以在子程序與調(diào)用程序之間傳送。參數(shù)在子程序的局部變量表中定義,定義參數(shù)時必須指定參數(shù)的符號名稱(最多23個英文字符)、變量類型和數(shù)據(jù)類型。一個子程序最多可以傳送16個參數(shù)。
局部變量表中的變量有IN、OUT、IN/OUT和TEMP等4種類型。
帶參數(shù)子程序調(diào)用指令示例如圖4-47(b)所示,EN和INI的輸人為布爾型能流輸入。


圖4-47 帶參數(shù)的子程序及其調(diào)用的應用
(a)帶參數(shù)的子程序及其變量表;(b)主程序調(diào)用
子程序調(diào)用時,輸人參數(shù)被拷貝到局部存儲器。子程序完成時,從局部存儲器拷貝輸出參數(shù)到指定的輸出參數(shù)地址。
IN類型:將指定位置的參數(shù)傳人子程序。
OUT類型:從子程序的結(jié)果值(數(shù)據(jù))傳人到指定參數(shù)位置。
IN/OUT類型:將指定位置的參數(shù)傳到子程序,從子程序來的結(jié)果值被返回到同樣的地址。
TEMP類型:局部存儲器只用作子程序內(nèi)部的暫時存儲器,不能用來傳遞參數(shù)。
在局部變量表中定義的變量表和帶參數(shù)的子程序如圖4-47 (a)所示。