0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

laidenongfhs 来源:中泰PLC自动化教学 作者:中泰PLC自动化教学 2023-12-14 13:33 次阅读

子程序

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

wKgZomV6lQGALimaAAIw4nV5FuQ811.png

图6-39 两种程序结构

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

子程序指令

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

1.指令说明

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

表6-56 子程序指令说明

wKgZomV6lQGAIUkKAALNoHh6bKE768.png

子程序指令使用要点: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”程序块删除。

wKgaomV6lQGAF8XzAAWmcQyroLE515.png

图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)。

wKgaomV6lQGAX-jxAAWdKrE4ADE966.png

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

wKgaomV6lQGAKpVlAAKNxiXYFtw988.png

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

2.指令参数说明

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

1)变量名

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

2)变量类型

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

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

wKgZomV6lQGAfqxPAAGOzQBkOBo217.png

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单元中。

wKgaomV6lQGAN39hAAJFl4rXSQM582.png

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

审核编辑:汤梓红

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

    关注

    4975

    文章

    12254

    浏览量

    454918
  • 指令
    +关注

    关注

    1

    文章

    579

    浏览量

    35377
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79543
  • 编辑器
    +关注

    关注

    1

    文章

    788

    浏览量

    30196

原文标题:PLC子程序与子程序指令

文章出处:【微信号:中泰PLC自动化教学,微信公众号:中泰PLC自动化教学】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    KEIL调试运行到调用子程序指令后,没有跳到子程序里?

    我在用KEIL调试汇编语言时遇到个问题,在用单步调试运行到调用子程序指令后,没有跳到子程序里,这样导致了我无法看到子程序内各条
    发表于 10-12 20:40

    子程序

    子程序又称为过程,它相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时
    发表于 06-30 10:43 735次阅读

    89C2051 实用子程序

    这个包中提供了一些有实际应用价值的子程序供参考选用 SUB1----X25045/43 看门狗/存储器与89C2051接口子程序程序/原理图(21K)X25045.EXE SUB2----AT24C02/04/08/16 串
    发表于 05-27 08:46 434次下载

    ALTERA官方例子程序

    ALTERA官方例子程序,最规范的程序。入门必备
    发表于 10-29 10:46 47次下载

    汇编语言学习课件_子程序与宏指令设计

    第六章 子程序与宏指令设计 6.1 子程序结构及设计方法 6.2 子程序参数传递 6.3 嵌套与递归子程序 6.4 宏 指
    发表于 12-31 10:41 0次下载

    子程序的创建与调用

    【LabVIEW从入门到精通】2.5 子程序的创建与调用
    发表于 01-08 15:43 0次下载

    三菱FX系列PLC条件跳转和子程序指令的应用_赫焕丽

    三菱FX系列PLC条件跳转和子程序指令的应用。
    发表于 05-18 10:42 3次下载

    中断处理和子程序调用概念解析

    子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序子程序在功能上具
    发表于 11-16 11:12 9487次阅读
    中断处理和<b class='flag-5'>子程序</b>调用概念解析

    plc如何停止子程序调用_具体操作解析

    进入子程序请使用CALL指令,即是FUN67指令,在子程序中要使用标签:LBL指令即FUN65,子程序
    发表于 11-16 11:35 1.4w次阅读
    <b class='flag-5'>plc</b>如何停止<b class='flag-5'>子程序</b>调用_具体操作解析

    点阵液晶显示模块字符通用子程序

    1、逐字依次写入方式子程序。2、光标左移写入方式子程序。3、光标右移写入方式子程序。4、画面左滚动写入方式子程序
    发表于 03-13 14:53 1183次阅读
    点阵液晶显示模块字符通用<b class='flag-5'>子程序</b>

    TI中DSP应用开发实用子程序

    DSP应用开发实用子程序
    发表于 04-10 15:48 6次下载

    SMART常用的运动控制子程序的应用详解

    前我们讲解过SMART运动控制向导的组态应用,组态好向导后自动生成运动子程序,只需调用对应功能的子程序进行编程即可,那么今天我们分别学习一下常用的子程序的应用。
    的头像 发表于 03-24 11:16 1.2w次阅读
    SMART常用的运动控制<b class='flag-5'>子程序</b>的应用<b class='flag-5'>详解</b>

    西门子PLC子程序介绍

    STEP7-Micro/Win在程序编辑器窗口中为每个POU提供单独的页面。主程序总是第1页,后面是子程序或中断程序。由于每个程序在编辑器窗
    发表于 12-13 16:28 3290次阅读

    带参数子程序的参数传递过程

    一份程序中建立多个子程序,每个子程序完成相对比较独立的功能。而子程序也是围绕主程序的要求,并且还根据主
    的头像 发表于 10-17 09:50 1886次阅读

    PLC创建库文件与带参数子程序功能该如何使用

    在S7-200SMART系列PLC子程序中,子程序可以分为两类,一类为不带参数的子程序,另一类为带参数的子程序,使用带参数的
    的头像 发表于 10-28 11:06 2893次阅读