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


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


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


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