一、定时器
说到定时器,其实我们生活中就有很多它的应用,例如洗衣机的定时选择,烤箱的定时旋钮、空调的定时遥控、定时炸弹(这个还是算了)等。当然,还有电工朋友们比较熟悉的时间继电器也算是一种定时器。而PLC的定时器是一种编程元件,其实它就相当于继电控制系统中的时间继电器。为了便于学习PLC的定时器,我们先来了解一下时间继电器。
在继电控制电路中,如果要用到时间控制,就必须要用到时间继电器,其实我对时间继电器不熟悉,因为我对继电控制电路的接触本来就不多,但是我说过,我是专门去学习了接触器的,时间继电器和接触器有点类似,只不过接触器不能进行时间控制罢了。
要驱动接触器的常开、常闭触点动作,就必须给接触器的线圈通电,同样的,在控制电路中,要使时间继电器的各种触点动作,也是需要驱动条件的,即线圈得电。这让我想起了我平时在家打游戏的时候,如果是其他人叫我吃饭,那我肯定是专注游戏,纹丝不动的,但如果是老妈的狮子吼,还管什么游戏,小命要紧,这里的老妈狮子吼就是驱动条件,而我去吃饭就是触点动作,可以说非常形象了。根据变化的不同,时间继电器有三种类型触点:瞬时动作、通电延时、断电延时。结合时间继电器常开触点动作时序图,我们可以更为直观的看出其触点的动作过程,特别是“通电延时”和“断电延时”。
通电延时,也就是线圈得电,但触点延时动作,线圈失电,触点马上动作。这就像是我们上课,上课铃响,大家磨磨蹭蹭的挪向教室,但下课铃声一响,大家就跟长跑运动员一样瞬时就不见人影了。断电延时,也就是线圈得电,触点马上动作,线圈失电,触点延时动作。这也像是上课,如果说通电延时是上数学课,那断电延时就是上体育课,上课铃响,大家奔向操场放飞自我,但下课铃响,大家像是七老八十一样慢慢挪回教室。这时的上课铃和下课铃就像线圈的得电与失电,而学生的上课和下课就是触点动作。
在PLC中,定时器作用其实和时间继电器相差无几,都是用于对时间的控制,特别是延时控制,且都需要驱动条件,但PLC的定时器只能进行瞬时动作和通电延时的控制,要实现断电延时,就得通过程序编制。我在前面的文章说过,定时器是字(16位)元件,所以可以对时钟脉冲计数并保存数值,也因为它是16位元件,所以定时的时长是有范围的。
三菱FX2N PLC的定时器分为通用型定时器和积算型定时器。通用型定时器又称非积算定型时器或常规定时器,积算型定时器又称断电保持型定时器。接下来,我们一起看看它们两者有什么不同吧。
1、通用型定时器T0~T245
通用型定时器根据计数时钟脉冲不同分为100ms定时器和10ms定时器。
从上图我们也可以看出,定时器的时钟脉冲是由它们的编号区分的,其中T0~T199为时钟脉冲100ms的定时器,共200个;T200~T245为时钟脉冲10ms的定时器,共46个。例如选用T20这个定时器,那就表示选用了时钟脉冲为100ms的定时器,K20表示十进制数的20,所以T20 K20就表示定时器的定时时间为20个脉冲,即20×100=2s。
因为PLC的定时器类似于继电控制电路的时间继电器,所以,在梯形图中,我们把定时器作为线圈处理,如上图所示,定时器的驱动元件为X1触点,当X1触点闭合,定时器T20(线圈)得电,经过定时时间2s后,定时器的常开触点闭合。
定时器的脉冲数除了可以用十进制数表示外,还可以用数据寄存器D的内容来表示。D就像是一个口袋,里面装着一个数(16位的二进制数),这个数就是计数器的脉冲个数,例如T20 D0,D0里存的数是H10,转换为十进制就是16,这时计数器T20的定时时间就为16×100=1.6s。
这里要注意的是,当通用计数器的驱动信号断开,此时不管计数器的计时时间是否达到设定值,计数器都会复位,计时清零,直到再次被驱动,才开始重新计时。这也是通用型定时器和断电保持型定时器的区别。
2、积算型定时器(断电保持型定时器)T246~T255
顾名思义,断电保持型定时器是指在定时过程中,当驱动信号断开,定时器虽然不能继续计时,但能保持当前计时值,等驱动信号再次恢复,定时器在原来的计时基础上继续计时,直到累积时间达到设定值,对应触点开始动作。换句话说,就是断电保持型定时器不会自动复位,所以我们想要它复位时,只能用RST指令进行强制复位。
积算型定时器按时钟脉冲不同也可以分为两种。显然这个的数量比通用型的少很多,可能是它比较少用吧。
积算型定时器的工作原理图如上图所示,定时器T250的定时时间为60×100ms=6s,当驱动条件成立,也就是X1接通,定时器T250的线圈得电,开始计时,计到2s时X1断开,虽然定时器的线圈失电,但它的计时依然保持在2s;直到X1再次接通,定时器在2s的基础上继续计时,计到6s后,定时器的常开触点闭合。又因为定时器不会自动复位,所以,就是X1断开,定时器的线圈失电,但它的计时保持在6s,常开触点一直闭合,直到X2触点闭合,RST指令强制复位定时器,定时器的常开触点才会断开。
总的来说就是,通用型定时器只需一个信号就可以控制线圈和触点的通断。而积算型定时器必须要两个信号加上RST指令才能控制其线圈和触点的通断,真麻烦,怪不得比较少用。
定时器在梯形图中非常常用,所以在课程中,李老师举了好几个典型的实例,为了节省大家的阅读时间(并不是为了偷懒哦),我就抽其中一个例子吧。
每一个定时器的定时时间是有限制的,那么,如果我们需要的定时时间超过定时器的最长定时时间,怎么办呢?简单,一个不够,两个来凑。如下图所示,一个定时器最多可以累计32767个时钟脉冲,为了好看,我们就取3万个吧,然后把几个定时器进行接力。这时候,从X0闭合到线圈Y0得电,此间的定时时长就为30000×3×100ms=150min,也就是两个半小时,这也太久了吧。
定时器的各种玩法,我在这就不一一解说啦,大家感兴趣的,可以去看看李老师的课程,或者自己编程试试,反正是用软件编程,也玩不坏。看清了定时器的真面目,我们继续来“探索”计数器吧。
二、计数器
说到计数器,我本来想在淘宝上找一些计数器的图片,然后发现,刷出来的是算盘哈哈,所以,算盘也算是一种计数器吧,我们日常生活中,需要用到计数器的实例好像不多,但在PLC中,计数器的使用也是非常频繁的。
三菱FX2N PLC的内部计数器分为普通计数器和高速计数器两类,课程只介绍了普通型的,所以我也只学了普通型,至于高速型的,可能以后在其他课程再学习了。
在继电控制电路中,计数器作为一种仪表在电路中使用。其基本功能是对输入开关量信号进行计数。类似的,PLC中的计数器也是对内部编程元件(X、Y、M、S、T、C)的信号进行计数,当然,这些信号从接通到断开的时长应长过PLC内部的扫描周期。
就普通计数器而言,PLC内部信号计数器也有两类:16位加计数器和32加/减位计数器。现在,我们就来一一欣赏它们。
1、16位加计数器
16位加计数器又叫16位增量计数器,类似于定时器,也分为通用型和断电保持型,共200个。至于到底是通用型还是断电保持型,和定时器一样,也是通过计数器的编号来区分。而且计数器在梯形图中也是作为线圈处理,总而言之,计数器和定时器的工作原理差不多,区别只不过是在于:定时器计一般的是时钟脉冲信号的个数,而计数器计的是编程元件通断信号(触点脉冲信号)的个数。
如上图所示,C0计数器的设定值是K10,也就是说触点X11通断10次,计数器的触点才会动作。类似于定时器,当PLC断电,通用计数器会自动复位,但和定时器不同的是,定时器的驱动信号断开,定时器也会复位,但计数器前的触点断开,如上图的X11,计时器会进行计数,而不是复位。
其实,16位加计数器和定时器的差别真的不大,所以,这里也不再赘述啦。
2、32位加/减计数器
32位加/减计数器又称双向计数器,它可以从0开始增1计数到设定值,也可以设定值开始减1到0。和16位的一样,32位加/减计数器也有通用型和断电保持型两类,不过个数比较少,可能也是因为它比较少用吧。
和定时器一样,计数器的设定值除了可以用十进制数K来表示外,也可以用数据寄存器D的内容来表示,不过这里要注意的是,16位加计数器的设定值用一个D就可以寄存,而32位加/减计数器就需要两个相邻的D才行,如D0、D1,且D1为高位,D0为低位。因为D也是16位的,要寄存32位的数,也只能用两个D。
既然32位加/减计数器可以双向计数,那怎样设定它的方向呢?这就要借用特殊辅助继电器M8×××了。怎么借用?别急,我们马上看看到底是什么回事。
如上图所示,该梯形图中用了计数器C200,所以特殊辅助继电器就是M8200。也就是说,特殊辅助继电器的编号要与计数器的编号一一对应,M8后面的编号要和C后面的编号相同。例如你用的计数器是C220,那么对应的特殊辅助继电器就是M8220,依次类推。
当M8200断开(为OFF)时,C200作加法计数,当M8200接通(为ON)时,C200作减法计数。类似于开车,M8200就像是倒车挡,一旦挂倒挡,踩了油门,车子就后退,退出倒车挡,车子就恢复为前进。
另外,32位加/减计数器还有不同于16位加计数器的一点是:在16位计数器中,当计数值达到设定值后,触点动作,就算此后信号脉冲依然在增加,计数器的计数值仍然保持在设定值不变,触点状态也保持不变;而在32位加/减计数器中,当计数值达到设定值后,触点动作,如果此后继续有信号脉冲输入,计数器也会继续计数,但触点状态保持不变。
那32位加/减计数器什么时候触点状态才会再次变化呢?简单,我们还是以上图为例,信号脉冲持续输入,当计数器C200作加法计数达到设定值3后,其常开触点闭合,计数器继续计数3+1+1=5,常开触点保持闭合,此时接通M8200改变计数器的计数方向,计数器开始从5-1-1=3,计数器再次回到设定值3,其常开触点动作从而断开,计数器继续做减1计数,直到达到计数器的阈值或M8200断开。
关于计数器的编程实例,李老师在课程中也列举了几个例子,可能是我脑子比较笨,我觉得这些例都好难理解啊,所以我还要多看几遍,在这里我就不班门弄斧了,以免被一些大神取笑。
那么,这次的分享就到这里,各位读者,下次再会,告辞。