首页 百科知识 循环和子程序调用指令

循环和子程序调用指令

时间:2022-10-16 百科知识 版权反馈
【摘要】:由FOR和NEXT指令构成程序的循环体。子程序有子程序调用和子程序返回两大类指令,子程序返回又分条件返回和无条件返回。添加一个子程序时,可以用编辑菜单的插入项增加一个子程序,子程序编号n从0开始自动向上生成,其范围是0~63。子程序可能有要传递的参数,这时可以在子程序调用指令中包含相应参数,可以在子程序与调用程序之间传送。在梯形图显示区显示出带参数的子程序调用指令盒。子程序调用时,输入参数被拷贝到局部存储器。

4.2.2 跳转、循环和子程序调用指令

跳转、循环和子程序调用指令程序执行顺序的控制指令格式如表4-7所示。

1.程序跳转指令(JMP)

跳转指令(JMP)和跳转地址标号指令(LBL)配合实现程序的跳转。使能输入有效时,程序跳转到指定标号n处执行(在同一程序内),跳转标号n=0~255。使能输入无效时,程序顺序执行。

2.循环控制指令(FOR)

循环结构用于描述一段程序的重复循环执行。由FOR和NEXT指令构成程序的循环体。FOR指令标记循环的开始,NEXT指令为循环体的结束指令。

FOR指令为指令盒格式,主要参数有使能输入EN,当前值计数器INDX(数据类型为字),循环次数初始值INIT,循环计数终止值FINAL。

表4-7 跳转、循环和子程序调用指令程序

img106

工作原理:使能输入EN有效,循环体开始执行,执行到NEXT指令时返回,每执行一次循环体,当前计数器INDX增1,达到终值FINAL时,循环结束。

例如FINAL为10,使能有效时,执行循环体,同时INDX从1开始计数,每执行一次循环体,INDX当前值加1,执行到10次时,当前值也为10,循环结束。

使能输入无效时,循环体程序不执行。每次使能输入有效,指令自动将各参数复位。FOR/NEXT指令必须成对使用,循环可以嵌套,最多为8层。

3.子程序调用指令(SBR)

通常将具有特定功能、并且多次使用的程序段作为子程序。子程序可以被多次调用,也可以嵌套(最多8套),还可以递归调用(自己调用自己)。

子程序有子程序调用和子程序返回两大类指令,子程序返回又分条件返回和无条件返回。子程序调用指令(SBR-N)用在主程序或其他调用子程序的程序中,子程序的无条件返回指令(RET)在子程序的最后网络段,梯形图指令系统能自动生成子程序的无条件返回指令,用户无需输入;条件返回指令(CRET)需要运行条件满足时才执行。

建立子程序的方法:在编程软件的程序数据窗口的下方有主程序(MAIN)、子程序(SBR-0)、中断服务程序(INT-0)的标签,点击子程序标签即可进入SBR-0子程序显示区。也可以通过指令树的项目进入子程序SBR-0显示区。添加一个子程序时,可以用编辑菜单的插入项增加一个子程序,子程序编号n从0开始自动向上生成,其范围是0~63。

【例4-14】循环、跳转及子程序调用指令应用程序,如图4-23所示。

img107

图4-23 跳转、循环、子程序调用指令应用

4.带参数的子程序调用指令

子程序可能有要传递的参数(变量和数据),这时可以在子程序调用指令中包含相应参数,可以在子程序与调用程序之间传送。参数(变量和数据)必须有符号名(最多8个字符)、变量和数据类型等内容。子程序最多可以传递6个参数。传递的参数在子程序局部变量表中定义。局部变量表中的变量有IN、OUT、IN/OUT和TEMP4种类型。

IN类:将指定位置的参数传入子程序。参数的寻址方式可以是直接寻址(如VB10),间接寻址(如*AC1),立即数(如#1234),也可以将数据的地址值(指针)传入子程序(&VB100)。

OUT类型:从子程序的结果值(数据)传入到指定参数位置,常数不允许作为输入参数。

IN/OUT类型:将指定位置的参数传到子程序,从子程序来的结果值被返回到同样的地址。

TEMP类型:局部存储器只能用作子程序内部的暂时存储器,不能用来传递参数。

局部变量表的数据类型可以是能流、布尔(位)、字节、子、双字、整数、双整数和实数型。能流是指仅允许对位输入操作的布尔能流(布尔型),梯形图表达形式为用触点(位输入)将电源母线和指令盒连接起来。

局部变量表隐藏在程序显示区,将梯形图显示区向下拖动,可以露出局部变量表,如图4-24所示,在局部变量表中输入变量名称、变量类型、数据类型等参数以后,双击指令树中子程序(或选择点击方框快捷按扭,在弹出的菜单中选择子程序项)。在梯形图显示区显示出带参数的子程序调用指令盒。

img108

图4-24 局部变量表示意图

局部变量表变量类型的修改方法:用光标选中变量类型区,点击鼠标右键得到一个下拉菜单,选择插入项,弹出一个下拉菜单,点击选中的类型,在变量类型区光标所在处可以得到选中的类型。

带参数子程序调用指令格式及程序应用示例如图4-25所示。

img109

图4-25 带参数子程序调用示例

其语句表如下:

img110

表中梯形图的EN和INX的输入为布尔型能流输入,地址参数VW0是把一个字的(无符号)值传递到子程序。

给子程序传递参数时,它们放在子程序的局部存储器(L)中,局部变量表最左列是每个被传递参数的局部存储器地址。

子程序调用时,输入参数被拷贝到局部存储器。子程序完成时,从局部存储器拷贝输出参数到指定的输出参数地址。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈