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)所示。