首页 理论教育 循环指令和子程序调用规则及示例

循环指令和子程序调用规则及示例

时间:2023-06-18 理论教育 版权反馈
【摘要】:表3-9-2循环指令的LAD 和STL 格式及功能2) 循环指令的规则使用循环指令的规则如下。表3-9-3子程序调用和子程序条件返回指令的格式及功能子程序可以多次被调用, 也可以嵌套, 还可以递归调用。若添加完子程序调用指令后, 局部变量表发生了改变, 则需要删掉该指令重新添加。图3-9-5带参数子程序调用指令的示例

循环指令和子程序调用规则及示例

1. 跳转(JMP) 与标号(LBL) 指令

跳转和标号指令有LAD 和STL 格式, 如表3 -9 -1 所示。

表3-9-1 跳转和标号指令的LAD 和STL 格式

跳转和标号指令配合实现程序的跳转。 使能端输入有效时, 跳转指令可使程序流程转到同一程序中的跳转标号n 处(在同一程序内), 跳转标号n =0 ~255; 标号指令标记跳转目的地的位置n。 使能端输入无效时, 程序按顺序执行。

跳转和标号指令编程示例如图3 -9 -2 所示。

图3-9-2 跳转和标号指令编程示例

(a) 梯形图; (b) 语句表

2. 循环(FOR/NEXT) 指令

循环指令用于描述一段程序的重复循环执行。 由循环指令构成程序的循环体。 FOR 标记循环开始, NEXT 为循环体结束。 循环指令为指令盒格式, 主要参数有使能端(EN)、 当前值计数器(INDX)、 循环次数初始值(INIT)、 循环计数终值(FINAL)。

1) 循环指令工作原理

工作原理为: 使能端输入有效, 循环体开始执行, 执行到NEXT 时返回, 每执行一次循环体, 当前值计数器增1, 达到循环计数终值时, 循环结束。 循环指令的LAD 和STL 格式及功能如表3 -9 -2 所示。

表3-9-2 循环指令的LAD 和STL 格式及功能

2) 循环指令的规则

使用循环指令的规则如下。

(1) 如果允许循环指令循环, 循环体就一直循环直到循环结束, 除非在循环体内部修改了循环计数终值。 在循环指令执行的过程中可以修改其参数值。

(2) 当循环指令再次允许时, 它把初始值拷贝指针值中(当前循环次数)。 当下一次允许时, 循环指令复位它自己。

(3) 循环指令可以嵌套使用, 即一个循环指令循环在另一个循环指令之内。 循环指令嵌套的深度可达8 层。

循环指令编程示例如图3 -9 -3 所示。

图3-9-3 循环指令编程示例(www.xing528.com)

(a) 梯形图; (b) 语句表

3. 子程序调用、 子程序返回指令

通常将具有特定功能, 并且多次使用的程序段作为子程序。 子程序有子程序调用和子程序返回两大类指令, 子程序返回指令又分子程序条件返回指令和子程序无条件返回指令两种。

建立子程序是通过编程软件来完成的。 在编程软件的程序数据窗口的下方有主程序(OB1)、 子程序(SUB0)、 中断服务程序(INT0) 的标签, 单击子程序标签即可进入子程序显示区, 也可以通过指令树的项目进入子程序显示区。 添加一个子程序时, 可以用编辑菜单的插入项增加一个子程序, 子程序编号n 从0 开始自动向上生成。 子程序调用和子程序条件返回指令的格式及功能如表3 -9 -3 所示。

表3-9-3 子程序调用和子程序条件返回指令的格式及功能

子程序可以多次被调用, 也可以嵌套(最多8 层), 还可以递归调用(自己调自己)。语句表表达时, CRET 指令对应子程序条件返回指令, RET 指令对应子程序无条件返回指令, RET 指令无须输入, 由编程软件STEP 7 -Micro/WIN 32 自动在程序末尾添加。

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

子程序可能有要传递的参数(变量和数据), 这时可以在子程序调用指令中包含相应参数, 它可以在子程序与调用程序之间传送。 子程序最多可传递16 个参数, 传递的参数在局部变量表中定义。 局部变量表在子程序显示区上方。 局部变量表如图3 -9 -4 所示, 其变量有IN、 OUT、 IN/OUT 和TEMP 共4 种类型, 具体如下。

(1) IN 类型: 将指定位置的参数传入子程序。

(2) OUT 类型: 子程序的结果值(数据) 传入到指定参数位置。

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

(4) TEMP 类型: 局部变量存储器只用做子程序内部的暂时存储器, 不能用来传递参数。

图3-9-4 局部变量表

在局部变量表中插入变量可以通过这样的方法进行: 将光标选中所需插入的变量类型行, 双击变量名称(符号) 空白区, 填写变量名称, 选择数据类型即可。 初始状态下每种变量类型只有一行可用, 当添加一个变量后, 系统会自动增加一个相同变量类型的行。

局部变量表的数据类型可以是能流、 布尔(位)、 字节、 字、 双字、 整数、 双整数和实数型。

局部变量表中的变量名称可以是英文或中文(需汉化版软件支持)。

子程序调用时, 输入参数被拷贝到局部变量存储器(L) 中, 局部变量表最左列是每个被传递参数的局部变量存储器地址。 子程序完成时, 从局部变量存储器拷贝并输出到指定的输出参数地址。

在局部变量表输入变量名称、 变量类型、 数据类型后, 即可在主程序(或上一级子程序) 中使用子程序调用指令, 从而在梯形图显示区中显示出带参数子程序调用指令盒。 若添加完子程序调用指令后, 局部变量表发生了改变, 则需要删掉该指令重新添加。

图3 -9 -5 为带参数子程序调用指令的示例。 其中EN 和IN1 的输入为布尔型能流输入, 地址参数&VB100是将一个双字无符号的值(VB100 的地址) 传递到子程序。

图3-9-5 带参数子程序调用指令的示例

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

我要反馈