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采用循环指令和子程序去计算多个面积的举例说明,你理解了吗?欢迎留言讨论!
用S7-1200 PLC实现循环彩灯的控制,含源程序
在S7-1200型PLC的实际编程工作中,无论是经验设计法还是顺序控制设计法对于要求比较复杂的任务都会产生大量的程序段,可读性差。本实例通过常见的循环彩灯控制为例,了解学习S7-1200型PLC程序块的应用。
相关知识:移动操作相关指令
(1) 移动值MOVE指令
MOVE指令用于将IN输入端的源操作数(数值或地址中的数据)赋值给输出端OUT1指定的地址中,指令执行后源操作数保持不变。该指令支持的数据类型为除Bool型数据之外的所有数据类型。
如下图程序段是PLC上电后将Q0口数值清零,一般用于系统的上电复位。
如果输入 IN 数据类型的位长度超出输出 OUT1 数据类型的位长度,则源值的高位会丢失。如果输入 IN 数据类型的位长度低于输出 OUT1 数据类型的位长度,则目标值的高位会被改写为 0。
小提示: 移动指令MOVE一般用于批量给输出寄存器Q赋值,或者在输入信号较多的情况下批量读取输入寄存器I中的数据。
例1:控制Q1.0~Q1.7上连接的8位彩灯隔一跳一点亮
再加一个按位操作的程序进行对比
例2:读取一位拨码开关输入的数值并保存在辅助寄存器M中
再加一个按位操作的程序进行对比
通过以上对比可以看出,在一些特定情况下使用MOVE指令可以可以大量简化程序步骤。
任务布置
选用5个点动按键S0~S4给PLC的输入信号,作为花样功能选择键,8个发光二极管LED0~LED7作为PLC的输出信号,编写程序实现8个发光二极管闪烁花样的切换显示。
按下按键S1,发光二极管点亮1个,并向右循环移动点亮,每秒移动1位;
按下按键S2,发光二极管点亮2个,并向右循环移动点亮,每秒移动1位;
按下按键S3,发光二极管点亮3个,并向右循环移动点亮,每秒移动1位;
按下按键S4,发光二极管点亮4个,并向右循环移动点亮,每秒移动1位;
按下按键S5,发光二极管点亮5个,并向右循环移动点亮,每秒移动1位;
任务实施
(1) 任务分析
1)在实际应用中压力传感器是将水的压力值转换成电压信号输入给PLC、单片机等控制系统,这个输入信号是模拟量。在模块中用可调电位器来模拟了压力传感器,电位器输出的电压范围是0~5V,对应的压力量程为0~0.1MPa。S7-1200PLC集成了两路模拟信号输入,传感器将电压信号输入PLC后会经过A/D转换成范围0~27648的数字量保存在IW64中。所以在本任务中要设法将地址IW64中采集的数字信号值还原成以Pa为单位的压力值。
2)系统要求有手动和自动两种工作模式,不同工作模式由点动按键ME进行切换,因此在梯形图程序编写时采用手动单步运行程序和自动连续运行程序两个函数块进行调用,具体转换条件如下图所示。
(2)I/O地址分配表
该系统共有5个输入,3个输出,资源分配如下表。
按照I/O分配表设置PLC变量,在Portal V13 软件中设置PLC变量表如下图所示
(3)硬件接线图 按照任务控制要求和I/O地址分配表画出硬件接线图并插接导线。
此处就略过不再详细解释了
(4)梯形图程序
重点难点详解:该任务有自动连续运行和手动单步运行两种工作模式,并由点动按键ME作为切换条件,设置以下4个函数功能块:
完整梯形图参考程序
OB1中的程序
FC1 上电初始化
FC4 300ms脉冲信号
FC3跑马灯循环
FC4控制循环次数
相关问答
西门子plc循环指令?
使用这条指令时,当你设定好当前循环计数(INDX)、起始值(INIT)和结束值(FINAL)后,每次I0.1动作,就会执行一次FOR到NEXT之间的循环,循环结束后INDX值就会...使...
plc循环指令例子?
关于这个问题,以下是一个PLC循环指令的例子:假设有一个PLC程序,需要对一个输入设备进行轮询,以确定它是否处于活动状态。程序如下:1.开始2.初始化计数...
plc循环右移指令例子?
关于这个问题,假设PLC中DW0的初始值为0x12345678,执行循环右移指令后结果为0x91234567。循环右移指令的语法为:RORDn,#n其中,Dn表示要进行操作的数据...
西门子300PLC,求一循环指令?
FOR和NEXT指令可以描述需重复进行一定次数的循环体。每条FOR指令必须对应一条NEXT指令。For--Next循环嵌套(一个For--Next循环在另一个For--Next循环之内)深度...
plc比较指令能循环吗?
可以使用循环指令(LOOP)可以多次重复执行包括比较指令的程序段,由累加器1确定重复执行的次数,即以累加器1的低字为循环计数器。LOOP指令执行时,将累加器1字...
plc八个灯循环指令有哪些?
移位指令一共有四个循环右移、循环左移、右移、左移循环移位指令(左、右)八个位是循环移动的也就是说循环左移1位就是向左移动1位最高位移到最低位处循环...
西门子PLC移位与循环指令,怎样应用?
右移字节(SRB)和左移字节(SLB)指令将输入数值(IN)根据移位计数(N)向右或向左移动,并将结果载入输出字节(OUT)。移位指令对每个移出位补0。如果移位数...右移...
三菱plc编程,在for循环中加入跳转指令,能否跳出该循环指令?
For指令在一个周期内执行完毕,你这样做显然是不对的,你需要使用计数器加跳转指令来实现循环4次的功能。For指令在一个周期内执行完毕,你这样做显然是不对的,...
三菱plc循环指令怎样编写书籍?
你好,对于三菱PLC循环指令的书籍,一般需要包含以下内容:1.循环指令的基本概念和原理:介绍循环指令的概念和作用,以及在PLC中的应用场景和原理。2.循环指...
西门子plc200循环指令的使用?
西门子PLC200系列可使用循环指令来简化程序编写。循环指令可以重复执行某些操作,直到满足特定条件时才停止循环。最常见的循环指令是FOR循环。以下是使用FOR...