plc子程序和循环指令的举例说明,带你走进plc高级编程
今天有同学问到这样一个问题,如下图中的四个半径数据D0~D3,分别求取4个数值的面积,并对其求和,要求是必须采用循环指令和采用子程序来完成。
问题描述
从外面顺控编程来看,这个问题很简单,D0*D0*3.14=D10,...,D3*D3*3.14=D16,D10+D12+D14+D16=D100,按照顺序编写即可完成最后的计算结果。但是如实数据量较多,比如20个,50个的数据求面积,我们难道要编写梯形图重复50多次,显然不合理,所以这位同学的要求很是很好的,今天我们就来介绍下循环指令和子程序的使用。
循环指令,从FOR指令开始到NEXT(FNC 09)指令之间的程序按指定次数重复运行,重复了指定次数后,执行NEXT指令后的步处理,可以对FOR-NEXT指令进行嵌套编程,最多嵌套5层。
循环指令
子程序,在顺控程序中,对想要共同处理的程序进行调用的指令,可以减少程序的步数,更加有效地设计程序。当指令输入为ON时,执行CALL指令,向标记指针Pn跳转,接着,执行标记Pn处的子程序,执行SERT指令后返回CALL指令的下一步,在主程序的最后用FEND指令编程。
子程序
说明了这两个指令,我们开始分析编写梯形图程序,因为是4个数据,所以循环次数是4,首先是第一次循环计算D0数据的面积,这里因为要求子程序,我们把计算面积的公式作为子程序编程,把D0传送到D20并调用子程序把计算结果传送到D10中,并对面积进行一次加法结果保存到D100中,这时候第一次循环就结束了,开始第二次循环,计算D1的面积同上,这里我们采用变址寄存器V对数据D0V0进行软元件的修改,方便我们循环,这个D0V0是什么意思呢,如果V0的值等于1,则D0V0表示D1,V0=3,D0V0表示D3,在D0软元件的编号上加V0值。每次循环完成,对V进行加1或者加2,这样就可以用D0V0和D10V1表示D0~D3,D10~D16。
分析了以上的情况,我们开始变形梯形图,总共有100步,第1步到第8步是数据的初始化,包括变址寄存器V0、V1和总面积D100的清零操作。FOR K4就是循环4次,每一次循环计算一个数值的面积并累积总面积。CALL P1就是调用计算面积的子程序,面积计算完成返回到循环内,把数据进行浮点转整数的int指令并传送到D10,接着对变址寄存器V0加1,V2加2,以及累积面积D100,这样一次完整的计算循环就完成了,接着进行下一次循环,知道循环4次。P1处到END指令就是计算面积的子程序。
计算梯形图
编写完成我们分别对D0~D3(3、4、5、6)进行赋值验算看程序计算是否正确,计算结果是269,忽略3.14浮点的误差。
以上就是三菱plc采用循环指令和子程序去计算多个面积的举例说明,你理解了吗?欢迎留言讨论!
PLC案例详解子程序调用,图文并茂,太实用啦
今天我们以三菱PLC为例,学习一下什么是子程序。
一套程序可以分为主程序区,还有子程序区,中断程序区等等,主程序区的程序是无时无刻都会扫描执行的,而子程序还有中断程序就必须触发某些条件,子程序才会执行。
那么问题来了,为什么不在主程序里面,加一个常开触点,触点闭合时就执行相应的程序段,这样不是也能够达到一样的效果么?为什么要出现子程序这样的东西呢?
那是由于PLC的扫描周期引起的,PLC运行的速度,也就是扫描周期,受到I/O数量、通讯、还有程序的大小限制。单独谈论程序大小,扫描的程序越多,扫描周期越长。下面我们拿三菱FX3U-16MT这款plc做了测试。
如上图,监控PLC的2个特殊寄存器,D8011是扫描程序的最短时间,D8012是扫描程序的最长时间,底下是程序的步数,没有写程序时,扫描周期平均需要5ms,随着程序增加,扫描周期不断变长;到16000步时,平均的扫描周期达到了25ms。由此可见减少扫描程序的必要性,下面我们来看一下,子程序的具体使用方法。
这段程序分为主程序区和P0子程序两个部分,从程序第一行开始到FEND指令,这些都是主程序,FEND是主程序的结束标志。左边的P0编号到SRET子程序结束指令,这是每一段完整的子程序必有的内容。
该程序中,当M2常开触点触发CALL P0指令时,P0子程序区的程序才能够执行,这时可以触发M1常开触点,Y4线圈会导通;这时有一个需要非常注意的点,在触发Y4的时候,断开M2,也就是停下P0子程序的运行,Y4会保持输出的状态,就算这时M1断开了,Y4也保持输出。除非再次触发P0子程序检测到M1断开了,Y4才会断开。
子程序的调用除了普通的用法,还可以多层嵌套,如下图:
通过X001调用子程序P11,运行P11时,通过触发X2按钮,调用P12子程序。这样的写法最多支持5层的嵌套。
那么,子程序一般用在哪里呢?比如下面一条传送带,有很多个工艺,假如其中有一些工艺有些人需要,有一些人不需要,那么,就可以采用子程序的用法,在需要时我们就调用相应的工艺程序,不需要时,就不调用
比如下面的一个分检机构,通过前面的感应器区分大中小部件,然后把部件放到相应的箱子里面,这时候我们也可以使用子程序调用,分别把大中小部件分别写一段子程序。检测到对应的部件时就调用相应的子程序。
再比如下面这个项目,按下按钮第1、2、3下分别执行不同的控制,我们可以调用不同的子程序进行控制,这题目里面还有用到的知识点还有左循环指令,计数器、位组合元件等用法。
(本文为技成原创, 作者:陈育鑫,未经授权不得转载,违者必究!)
往期优秀文章回顾:
WinCC通讯的案例讲解,图文都有
相关问答
plc如何新建子程序?
主程序放在子程序前面,主程序以FEND结束,FEND之后就可以编写子程序了,如果使用WPLsoft编程,子程序开始给出地址指针就可以了,比如:主程序CALLP1CALLP2...
plc怎样添加子程序?
子程序调用指令CALL的编号为FNC01。操作数为P0~P127,此指令占用3个程序步。子程序返回指令SRET的编号为FNC02。无操作数,占用1个程序步。如果X0接通,则转到...
三菱plc主程序跟子程序怎么写?
在三菱PLC中,主程序和子程序都需要采用梯形图形式进行写作。主程序主要包括整个PLC系统的初始化、输入输出控制、程序循环等,一般采用主梯形图的形式编写。子...
西门子plc怎么把子程序做成块?
在FB的局部变量表中,建立块内使用的各种变量,INPUT,OUTPUT,TEMP,等。还需要自建一些UDT类型,变量引用。自己做块程序,需要一些实际编程经验才行。FB块程序调...
信捷plc怎么建立子程序?
你好,建立子程序的步骤如下:1.在信捷PLC编程软件中,打开主程序。2.在主程序中选择需要建立子程序的函数或程序段。3.右键单击选中的函数或程序段,在弹...
plc子程序怎么回到主程序?
在PLC编程中,子程序是一段独立的代码,可以在主程序中被调用和执行。当子程序执行完毕后,需要返回到主程序继续执行。下面是一种常见的方法来实现子程序返回到...
西门子s7-200程序中怎么从子程序跳转到主程序,谢谢_齐家装...
先执行的主程序,遇到子程序且调用条件满足进入子程序,子程序执行完以后跳出子程序,继续执行余下的主程序。m0.0得电程序在进入子程序之前,子程序调...
plc主程序和子程序的区别?
PLC(可编程逻辑控制器)主程序和子程序是两种不同的程序结构,它们在PLC控制系统中发挥着不同的作用。主程序是PLC控制系统中最大的程序单元,它在整个控制...
西门子起保停怎么编写子程序?
1.结论:编写西门子起保停子程序的步骤可以分为三个部分:定义变量、编写PLC程序、调试程序。2.解释原因:在工业自动化系统中,经常需要通过PLC对机器或生产...
西门子plc主程序和子程序区别?
在西门子plc200中,程序是先运行主程序的,在主程序里如果遇到调用子程序的指令时,如果该指令被激活那么就跳到子程序运行里面的程序,主程序停止运行,在plc300...