PLC产生脉冲信号的两种方法
脉冲信号在PLC编程中会经常用到,比如:通信过程中的心跳脉冲、蜂鸣器/指示灯的报警脉冲等等。这些脉冲信号可以来自硬件(组态),也可以来自软件(编程)。今天这篇文章,给大家介绍下两种产生脉冲信号的方法,包括:
CPU的时钟脉冲;扩展函数LGF_Frequency;1、CPU的时钟脉冲
CPU的时钟脉冲可以产生8个不同频率的脉冲信号(占空比1:1)。在CPU的硬件组态中找到【系统和时钟存储器】,勾选【启用时钟存储器字节】,在时钟存储器字节的地址中输入位存储器的地址(默认为MB0),那么CPU的硬件(严格来说是操作系统)会将相应频率的脉冲写入到该位存储器字节的相应位。比如下面这张图:M0.1是5Hz的时钟脉冲,M0.5是1Hz的时钟脉冲。
这种配置脉冲信号的方法很简单,不过其缺点在于会降低程序的通用性。比如:有的人使用MB0作为时钟存储器字节,有的人使用MB10或者其它的位存储区作为时钟存储器字节,这在不同的项目程序移植时会造成一些困难。为了提高程序的通用性,可以使用通用扩展函数库中的LGF_Frequency函数。
2、LGF_Frequency
扩展函数LGF_Frequency可以产生指定频率及占空比的脉冲信号,在全局库【信号发生器】中可以找到该函数,其初始添加状态如下图所示:
函数LGF_Frequency有两个输入参数和两个输出参数:
输入参数包括:
frequency:实数,发生器的输出频率,单位Hz;脉冲的周期为频率的倒数,假设频率设置为0.5,则该脉冲的周期为2s;PulsePauseRatio:实数,输出脉冲的占空比,即高电平持续时间与低电平持续时间的比值;假设占空比为3.0,则高电平持续时间/低电平持续时间=3/1;输出参数包括:
clock:布尔型,脉冲输出地址;countdown:TIME型,当前状态的剩余时间;使用LGF_Frequency函数可以产生与硬件无关的脉冲信号。比如,
下面的代码(FB2_ClockTest)分别产生一个1Hz、10Hz、0.5Hz且占空比为1:1的脉冲信号。
这些信号存放在全局数据块DB10_GlobalPulse的变量中:
执行该函数块的Trace数据如下图所示:
这种通过函数块和数据块实现的脉冲信号提高了程序的可读性,并且能产生任意需要的周期及占空比的脉冲信号,缺点是需要手动编程,相比CPU的脉冲信号复杂一点;
说明:其实之前介绍过LGF_Frequency及通用函数库,可以看看文章:博途扩展函数库LGF系列教程(1)-LGF_Frequency
好了,关于PLC产生脉冲信号的两种方法就先介绍到这里。
我的书《西门子S7-200 SMART PLC应用技术——编程、通信、装调、案例》已经出版,欢迎点击下面的链接查看:
#pgc-card .pgc-card-href { text-decoration: none; outline: none; display: block; width: 100%; height: 100%; } #pgc-card .pgc-card-href:hover { text-decoration: none; } /*pc 样式*/ .pgc-card { box-sizing: border-box; height: 164px; border: 1px solid #e8e8e8; position: relative; padding: 20px 94px 12px 180px; overflow: hidden; } .pgc-card::after { content: " "; display: block; border-left: 1px solid #e8e8e8; height: 120px; position: absolute; right: 76px; top: 20px; } .pgc-cover { position: absolute; width: 162px; height: 162px; top: 0; left: 0; background-size: cover; } .pgc-content { overflow: hidden; position: relative; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .pgc-content-title { font-size: 18px; color: #222; line-height: 1; font-weight: bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .pgc-content-desc { font-size: 14px; color: #444; overflow: hidden; text-overflow: ellipsis; padding-top: 9px; overflow: hidden; line-height: 1.2em; display: -webkit-inline-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .pgc-content-price { font-size: 22px; color: #f85959; padding-top: 18px; line-height: 1em; } .pgc-card-buy { width: 75px; position: absolute; right: 0; top: 50px; color: #406599; font-size: 14px; text-align: center; } .pgc-buy-text { padding-top: 10px; } .pgc-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); } S7-200 SMART PLC应用技术 ¥88 购买S7-1200 PLC基本指令之脉冲类指令
S7-1200的位逻辑指令,这也是我们在学习PLC编程时最先接触到的指令,最基本的指令。
位逻辑运算指令是对二进制位进行操作的指令,数据类型是BOOL型,这其中又包括了触点指令与赋值指令、置位与复位指令、沿脉冲检测指令这三个部分。
在前面两篇文章中,我们介绍了触点与赋值指令、置位复位指令,那么这篇文章就介绍一下S7-1200 PLC的沿脉冲类指令。
什么是沿脉冲指令呢?
沿脉冲是指程序执行中只接通一个扫描周期时间,也可以理解为是一瞬间的很短的一个时间。我们的沿指令分为上升沿和下降沿,当信号从0变成1的时候称为上升沿,当信号从1变成0的时候称为下降沿。
S7-1200 PLC提供了四种沿脉冲指令,包括扫描操作数信号边沿指令、在信号边沿置位操作数指令、扫描RLO的信号边沿指令,以及检测信号边沿指令。下面我们就分别来学习一下这些指令吧。
一、扫描操作数信号边沿指令
触点中间带P的指令是扫描操作数上升沿指令,触点中间带N的指令是扫描操作数下降沿指令。我们看一下程序段1的程序,当检测到I0.0从0变为1时,那么Q0.0就置位为1,那指令下方的M0.0是什么意思呢?
如果有用过S7-200/200 SMART PLC的话,都知道在这些PLC里面的沿指令上方和下方是没有操作数的,这也是我们S7-200/200 SMART PLC与S7-1200 PLC的区别,大家要特别注意了。
其实指令下方的M0.0是边沿存储位,是用来存储上一次扫描循环时I0.0的状态的,PLC会通过对I0.0的当前状态和上一次循环状态的结果进行对比,判断是否有变化。
如果上一次循环状态为0,也就是M0.0为0的话,I0.0的当前状态为1,就说明产生了上升沿信号,这个触点就会接通,就可以置位Q0.0。同理,对于下降沿指令,如果上一次循环状态结果为1,也就是M0.1为1的话,I0.1的当前状态为0,就说明产生了下降沿。
二、在信号边沿置位操作数的指令
线圈指令中间带P的指令是在信号上升沿置位操作数指令,线圈指令中间带N的指令是在信号下降沿置位操作数指令。
同样的,这两个指令的下方也是有操作数的,比如下图程序中的M0.0和M0.1都是用来存储上一次的逻辑运算结果的。
如果上一次的逻辑运算结果是0,也就是M0.0为0的话,当I0.0从0变成1的时候(I0.3常闭为1),说明产生了上升沿,M10.0会接通一个扫描周期时间,同时将Q0.0置为1。这里需要注意的是,Q0.0的为1为0的状态是受前面的逻辑运算结果影响的,如果前面的逻辑运算结果为0,那么Q0.0就断开,如果前面的逻辑运算结果为1,那么Q0.0就接通。
同理,在信号下降沿置位操作数指令也是一样的,这里就不再赘述了。
三、扫描RLO的信号边沿指令
P_TRIG是扫描RLO的信号上升沿指令,N_TRIG是扫描RLO的信号下降沿指令。同样的,这两个指令的下方也是有操作数的,比如下图程序中的M0.0和M0.1都是用来存储上一次的逻辑运算结果的。
我们可以看到P_TRIG和N_TRIG指令还有一个管脚叫CLK,CLK是逻辑运算结果的输入端。
我们看下图的程序,如果前一个扫描周期的逻辑运算结果为0,也就是M0.0为0的话,当I0.0从0变成1的时候(I0.3常闭为1),说明产生了上升沿,M10.0会接通一个扫描周期时间,同时将Q0.0置位为1。
当扫描到前一个扫描周期的逻辑运算结果为1,也就是M0.1为1的话,当I0.3接通,常闭点断开,说明产生了下降沿,M0.1会接通一个扫描周期时间,同时将Q0.0复位为0。
四、检测信号边沿指令
R_TRIG是检测信号上升沿指令,F_TRIG是检测信号下降沿指令,这两个指令其实是FB块,我们在使用的时候是需要给它分配背景DB块的,调用的时候,也会自动弹出下图这个页面。
我们看下图的程序,CLK是逻辑运算结果的输入端,R_TRIG指令的上一次逻辑运算结果是存储在背景DB块的“Stat_Bit”这个变量中的。
如果前一个扫描周期的逻辑运算结果为0,也就是Stat_Bit为0的话,当前CLK输入端的逻辑运算结果为1时,那么Q管脚的输出M10.0会输出为1一个扫描周期的时间。
同理,F_TRIG检测信号下降沿指令也是一样的,这里就不再赘述了。
以上就是S7-1200 PLC基本指令中的脉冲类指令介绍,我们跟S7-200/200 SMART PLC对比,会发现S7-1200 PLC的脉冲类指令多了好几个,使用上也会相对复杂一些,不同的地方我们要重点分析和学习哦。
通过本文的讲解,不知道你学会了吗?
(技成培训网原创,作者:蔡慧荥,未经授权不得转载,违者必究)
⇩领取资料
相关问答
欧姆龙plc脉冲输入怎么接线?
欧姆龙PLC的脉冲输入通常用于接收外部设备的脉冲信号,例如编码器、计数器等。接线方法如下:1.在PLC的输入模块上找到脉冲输入终端,通常标有"X"。这些终端用...
脉冲信号接PLC?
三极管起到的是开关和驱动作用PLC输出的脉冲信号驱动能力有限所以外扩三极管做功率开关。如果功率较大的话三极管依然会发热,可以加散热器,也可以两级...
欧姆龙plc1秒时钟脉冲编程器怎么写入-懂得
输入“C”后,然后在地址中输入一个"P"然后往下选择,找到一秒脉冲确认就行了。或者直接添加一个触点,输入地址“CF102”就好了。输入“C”后,然后在...
求西门子200PLC脉冲输入输出程序实例?
控制脉冲紧急停止或者正常停止的程序脉冲输出的是Q0.0SM0.1触发脉冲使用包络0控制脉冲紧急停止或者正常停止的程序脉冲输出的是Q0.0SM0.1触发脉冲使用...
松下plc怎么写脉冲?
在松下PLC编程中,写脉冲通常是指控制输出一个特定的脉冲信号。以下是一些常见的松下PLC编程方法:1.使用MOV指令:MOV指令可以将一个固定的数值赋值给一个寄存...
PLC如何实现脉冲暂停?
PLC可以通过编程实现脉冲暂停功能。在PLC程序中,可以设置一个计数器来计数输入脉冲的次数,当计数器达到设定值时,程序可以暂停接收脉冲信号,直到某个条件满足...
plc怎么分配脉冲和方向?
PLC可以通过控制输出信号的频率和方向来分配脉冲和方向。在PLC程序中,可以编写相应的指令来控制脉冲和方向的输出,例如使用计数器指令或者PWM指令控制脉冲的频...
plc输入脉冲频率多少合适?
跟要求的精度,速度有关系。1—10khz都可以。假设一个电机带一条10MM螺距的丝杆,要求最高转速是1200转/分钟,如果把齿轮比设定为1000个脉冲一转,PLC发20K的频...
欧姆龙CP1Eplc驱动步进电机程序怎么编?那位大侠知道?
比如走1000个脉冲,每个脉冲0.1MM,1000个脉冲走100MM.下面例子是600000个脉冲.指令里有几个参数,发脉冲的PLC输出点,两个点,一般是脉冲+方向.当前脉冲数,目...
请教三菱PLC检测脉冲输入频率并输出相应频率的程序_汽配人问答
[最佳回答]是三菱的Q系列PLC吗?首先得选一块高速计数模块,把编码器的线接到模块对应端子上然后根据模块位置对应的起始IO进行初始化设定,定义对应的寄存器地址...