首页 百科知识 子程序指令怎么用,子程序指令使用方法

子程序指令怎么用,子程序指令使用方法

时间:2023-10-26 百科知识 版权反馈
【摘要】:子程序的使用主要有两种情况。S7-200PLC的控制程序由主程序OB1、子程序和中断程序组成。可以在主程序、其他子程序或中断程序中调用子程序,子程序调用指令将程序控制权交给子程序,子程序执行完成后,控制权返回到调用子程序的指令的下一条指令。带参数的子程序调用可以扩大子程序的使用范围,增加调用的灵活性。子程序的调用过程如果存在数据的传递,则在调用指令中应包含相应的参数。它将从子程序返回的结果值送到指定参数的位置。

6.7 子程序指令

采用子程序是在结构化程序设计中的一种方便有效的方法。子程序的使用主要有两种情况。一种是程序比较长,为了使其结构清楚,将其分为若干段,每一段写出一个子程序;另一种是某些程序段需要反复执行,将其写成子程序形式,可以减小代码长度,降低系统内存资源的占用,提高程序的效率和结构化程度。

S7-200PLC的指令系统具有简单、方便、灵活的子程序调用功能,与子程序有关的操作有子程序的创建、子程序的调用和子程序的返回。

6.7.1 子程序的创建

S7-200PLC的控制程序由主程序OB1、子程序和中断程序组成。STEP 7-Micro/WIN编程软件在程序编辑器窗口为每个POU(程序组织单元)提供一个独立的页。主程序总是在第一页,后面是子程序或中断程序。

创建子程序的步骤是:打开程序编辑器,在“编辑”菜单中的“插入”选项选择“子程序”;或右击指令树中的子程序,程序编辑器将自动生成子程序。在一个程序中,可以有多个子程序,其地址序号为SBR0~SBRn,其默认的程序名是SBR_0~SBR_n,用户也可以在图标上直接更改子程序的程序名。

子程序可以不带参数调用,也可以带参数调用。

带参数调用时,参数在子程序的局部变量表中定义,最多可以传递16个参数,变量名最多用23个字符表示。

例如,被命名为“模拟量计算”的子程序如图6-23所示,在该子程序的局部变量表中,定义了“转换值”、“系数1”和“系数2”为输入变量(IN),数据类型分别为“INT”、“INT”和“DINT”;定义“模拟值”为输出变量(OUT),数据类型为“DINT”;定义“暂存1”为临时变量(TEMP),数据类型为“DINT”。局部变量表最左边一列是编程软件自动分配给每个参数在局部存储器L中的地址。

子程序变量名中的“#”表示局部变量,由编程软件自动添加,输入局部变量时不用输入“#”号。

6.7.2 子程序的调用

1.子程序调用和返回指令

可以在主程序、其他子程序或中断程序中调用子程序,子程序调用指令将程序控制权交给子程序,子程序执行完成后,控制权返回到调用子程序的指令的下一条指令。

img238


图6-23 局部变量表与模拟量计算子程序

(1)子程序调用指令CALL:在使能输入有效时,主程序将程序控制权交给子程序。子程序的调用可以带参数,也可以不带参数。梯形图中,以指令盒的形式编程。

(2)子程序条件返回指令CRET:在使能输入有效时,结束子程序的执行,返回主程序,到调用该子程序的下一条指令。梯形图中,以线圈的形式编程,指令没有操作数。

其指令格式如表6-25所示。


表6-25 子程序调用和返回指令格式

img239

表中,参数n为字型常数,对于CPU221、CPU222、CPU224,n=0~63;对于CPU224XP和CPU226,n=0~127,m=1~16。

使用说明如下。

(1)CRET指令多用于子程序的内部,由判断条件决定是否结束子程序的调用,RET用于子程序的结束。用编程软件编程时,在子程序的结尾不需要手工输入RET指令,编程软件会自动加上,但不显示出来。

(2)如果在一个子程序内部又调用另一个子程序,这种调用称为子程序嵌套。S7-200PLC具有子程序嵌套调用功能,最多可以嵌套8层,但在中断子程序中只能调用一次子程序。

(3)当子程序在一个扫描周期内被多次调用时,在子程序中不能使用上升沿、下降沿、定时器和计数器指令。

2.不带参数的子程序调用

对于较简单的程序设计,一般调用子程序是不带参数的。图6-24所示的为子程序的嵌套调用举例。

img240


图6-24 子程序嵌套调用举例

在程序中,编程软件自动将子程序命名为SBR_0和SBR_1。该程序的语句表如下。

img241

img242

3.带参数的子程序调用

带参数的子程序调用可以扩大子程序的使用范围,增加调用的灵活性。子程序的调用过程如果存在数据的传递,则在调用指令中应包含相应的参数。

子程序的参数应在局部变量表中定义,参数包括的信息有变量地址、变量名(符号)、变量类型和数据类型等(见图6-23)。

局部变量表中的变量类型是按变量对应数据的传递方向来划分的,有四种类型,其变量类型的参数在局部变量表中的位置必须按以下顺序排列。

(1)传入子程序参数IN。

IN可以是直接寻址数据(如VB100)、间接寻址数据(如*AC0)、常数(如16#5678)或地址值(如&VB200)。

(2)传入/传出子程序参数IN/OUT。

在调用子程序时,将指定参数位置的值传到子程序;子程序返回时,从子程序得到的结果被返回到指定参数的地址。

(3)传出子程序参数OUT。

它将从子程序返回的结果值送到指定参数的位置。输出参数可以采用直接地址和间接地址,但不能是常数和地址值(如&VB200)。

(4)暂存变量TEMP。

它是暂时保存在局部数据区中的变量,不能用来传递参数。

当创建图6-23所示的子程序后,编程软件在指令树最下面的“调用子程序”文件夹中自动生成刚创建的子程序“模拟量计算”对应的图标。对于梯形图程序,在子程序局部变量表中该子程序定义参数后,将生成可视化指令盒(见图6-25),指令盒中自动包含了子程序的输入参数和输出参数。

img243


图6-25 主程序中调用子程序

在梯形图程序中插入子程序调用指令时,先将矩形光标置于需要调用子程序的地方,然后双击已打开的指令树最下面“模拟量计算”对应的图标,子程序的指令盒会自动出现在光标所在的位置。

如果用语句表编程时,图6-25所示梯形图对应的语句表为:

LD I0.0

CALL模拟量计算,AIW0,VW20,+2356,VD100

在语句表中调用带参数的子程序时,参数必须按一定的顺序排列,传入子程序参数IN在最前面,其次是传入/传出子程序参数IN/OUT,最后是传出子程序参数OUT。

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

我要反馈