一文详解PLC子程序与子程序指令

电子说

1.2w人已加入

描述

子程序

在编程时经常会遇到相同的程序段需要多次执行的情况,如图6-39所示,程序段A要执行两次,编程时要写两段相同的程序段,这样比较麻烦。解决这个问题的方法是将需要多次执行的程序段从主程序中分离出来,单独写成一个程序,这个程序称为子程序,然后在主程序相应的位置进行子程序调用即可。

编辑器

图6-39 两种程序结构

在编写复杂的PLC程序时,可以将全部的控制功能划分为几个功能块,每个功能块的控制功能可用子程序来实现,这样会使整个程序的结构清晰简单,易于调试、查找错误和维护。

子程序指令

子程序指令有两条:子程序调用指令(CALL)和子程序条件返回指令(CRET)。

1.指令说明

子程序指令说明如表6-56所示。

表6-56 子程序指令说明

编辑器

子程序指令使用要点:CRET指令多用于子程序内部,该指令是否执行取决于它前面的条件,该指令执行的结果是结束当前的子程序返回调用程序。子程序允许嵌套使用,即在一个子程序内部可以调用另一个子程序,但子程序的嵌套深度最多为9级。当子程序在一个扫描周期内被多次调用时,在子程序中不能使用上升沿、下降沿、定时器和计数器指令。在子程序中不能使用END(结束)指令。

2.子程序的建立

编写子程序要在编程软件中进行,打开STEP7-Micro/WINSMART编程软件,在程序编辑器上方有“MAIN(主程序)”“SBR_0(子程序)”“INT_0(中断程序)”三个标签,默认打开主程序编辑器。单击“SBR_0”标签即可切换到子程序编辑器,如图6-40(a)所示,在下面的编缉器中可以编写名称为“SBR_0”的子程序。另外,在项目指令树区域双击“程序块”内的“SBR_0”,也可以在右边切换到子程序编辑器。

如果需要编写两个或更多的子程序,可在“SBR_0”标签上右击,在弹出的快捷菜单中选择“插入”→“子程序”,就会新建一个名称为“SBR_1”的子程序(在程序编辑器上方多出一个“SBR_1”标签),如图6-40(b)所示。在项目指令树区域的“程序块”内也新增了一个“SBR_1”程序块,选中“程序块”内的“SBR_1”,再按键盘上的“Delete”键可将“SBR_1”程序块删除。

编辑器

图6-40 切换与建立子程序

3.子程序指令使用举例

下面以主程序调用两个子程序为例,来说明子程序指令的使用。先用图6-40(b)所示的方法建立一个SBR_1子程序块(可先不写具体程序),这样在项目指令树区域的“调用子例程”指令包内新增了一个调用SBR_1子程序的指令,如图6-41(a)所示。在编写主程序时,双击该指令即可将其插入程序中;主程序编写完成后,再编写子程序。图6-41(b)为编写好的主程序(MAIN),图6-41(c)、(d)分别为子程序0(SBR_0)和子程序1(SBR_1)。

编辑器

图6-41 子程序指令使用举例

主、子程序执行的过程是:

当主程序(MAIN)中的I0.0触点闭合时,调用SBR_0指令执行,转入执行子程序SBR_0。在SBR_0程序中,如果I0.1触点闭合,则将Q0.0线圈置位,然后又返回主程序,开始执行调用SBR_0指令的下一条指令(即程序段2)。当程序运行到程序段3时,如果I0.3触点闭合,则调用子程序SBR_1指令执行,转入执行SBR_1程序;如果I0.3触点断开,则执行程序段4的指令,不会执行SBR_1。若I0.3触点闭合,转入执行SBR_1后,如果SBR_1程序中的I0.5触点处于闭合状态,则条件返回指令执行,提前从SBR_1返回主程序,SBR_1中的程序段2的指令无法执行。

6.12.3 带参数的子程序调用指令子程序调用指令可以带参数,使用带参数的子程序调用指令可以扩大子程序的使用范围。在子程序调用时,如果存在数据传递,通常要求子程序调用指令带有相应的参数。

1.参数的输入

子程序调用指令默认是不带参数的,也无法在指令梯形图符号上直接输入参数,使用子程序编辑器下方的变量表可给子程序调用指令设置参数。

子程序调用指令参数的设置方法是:打打开STEP 7-Micro/WIN SMART编程软件,单击程序编辑器上方的“SBR_0”标签,切换到SBR_0子程序编辑器,在编辑器下方有一个空变量表,如图6-42(a)所示;如果变量表被关闭,可执行菜单命令“视图”→“组件”→“变量表”打开变量表,再按图6-42(b)所示在变量表内填写输入、输出参数的符号并选择数据类型。输入型参数要填写在变量类型为IN的行内,输入/输出型参数要填写在变量类型为IN_OUT类型的行内,输出型参数要填写在变量类型为OUT的行内,表中参数的地址LB0、LB1等是自动生成的。在变量表的左上角有“插入行”和“删除行”两个工具,可以对变量表进行插入行和删除行操作。变量表填写后,切换到主程序编辑器,在主程序中输入子程序调用指令,该子程序调用指令自动按变量表生成输入/输出参数,如图6-42(c)所示。

编辑器

图6-42 子程序调用指令参数的设置

2.指令参数说明

子程序调用指令最多可以设置16个参数,每个参数包括变量名(又称符号)、变量类型、数据类型和注释四部分,注释部分不是必需的。

1)变量名

变量名在局部变量表中称作符号,它需要直接输入,变量名最多可用23个字符表示,并且第一个字符不能为数字。

2)变量类型

变量类型是根据参数传递方向来划分的,它可分为四种类型:IN(传入子程序)、IN_OUT(传入和传出子程序)、OUT(传出子程序)和TEMP(暂变量)。参数的四种变量类型详细说明如表6-57所示。

表6-57 参数的四种变量类型详细说明

编辑器

3)数据类型

参数的数据类型有布尔型(BOOL)、字节型(BYTE)、字型(WORD)、双字型(DWORD)、整数型(INT)、双整数型(DINT)、实数型(REAL)和字符型(STRING)。

指令使用注意事项

在使用带参数子程序调用指令时,要注意以下事项。常数参数必须指明数据类型。例如,输入一个无符号双字常数12345时,该常数必须指定为DW#12345,如果遗漏常数的数据类型,该常数可能会当作不同的类型使用。输入或输出参数没有自动数据类型转换功能。例如,局部变量表明一个参数为实数型,而在调用时使用一个双字,子程序中的值就是双字。在带参数调用的子程序指令中,参数必须按照一定顺序排列,参数排列顺序依次是:输入、输入/输出、输出和暂变量。如果用语句表编程,CALL指令的格式是:

CALL 子程序号,参数1,参数2,…,参数n

4.指令使用举例

带参数的子程序调用指令的使用如图6-43所示,图6-43(a)为主程序,图6-43(b)为子程序及局部变量表,主、子程序可以实现Y=(X+20)×3÷8运算。

程序执行过程为:在主程序中,常ON触点SM0.0处于闭合状态,首先执行第一个带参数子程序调用指令,转入执行子程序,同时将VW0单元中的数据作为X值传入子程序的LW0单元(局部变量存储器)。在子程序中,ADD_I指令先将LW0中的值+20,结果存入LW10中;然后MUL_I指令将LW10中的值×3,结果存入LW12中;DIV_I指令再将LW12中的值÷8,结果存入LW2中;最后子程序结束返回主程序,同时子程序LW2中的数据作为Y值被传入主程序的VW10单元中。子程序返回主程序后,接着执行主程序中的第二个带参数子程序调用指令,又将VW2中的数据作为X值传入子程序进行(X+20)×3÷8运算,运算结果作为Y值返回到VW20单元中。

编辑器

图6-43 带参数的子程序调用指令的使用

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分