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


圖4-45 循環、跳轉指令的應用


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


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