利用PLC定时器和计数器,实现长时间计时的方法
在很多工程应用中,根据控制功能要求,需要对系统进行24小时监控,在经过某一特定时间或遇到紧急情况后给出提醒或预警。为了减少人为因素造成的影响,我们希望系统能自动进行。PLC中的定时器便具有这个功能。
但是,定时器的计数值在PLC的内部使用二进制,一个16位二进制字除去一个符号位后,能表示的最大整数是32767,它将对应定时器的最大定时时间。以100ms定时器为例,32767对应最大定时时间为32767×0.1=3276.7(s),时间不足1小时。这使得在使用单个定时器编制长时间计时程序受到很大制约。
由于定时器的计时时间有限,利用单个定时器达不到长时间计时的目的,要解决问题需要利用软件编程来实现长时间计时。下面以S7-200 PLC为例,通过案例来探讨利用定时器和计数器扩展的方式进行长时间计时,供使用者参考。
1 定时器、计数器的应用
S7-200 PLC有三种类型的定时器,接通延时定时器(TON)、断开延时定时器(TOF)、记忆接通延时定时器(TONR)。以常用的延时接通定时器(TON)为例讨论定时器的基本应用。
图1 定时器基本应用
工作原理:当输入端闭合,即I0.0为“ON”时,定时器T37接通并开始计时,10秒后,定时器T37常开触点接通并保持,输出继电器Q0.0输出。I0.0断开,定时器复位,Q0.0断开。
1.2 计数器基本应用
S7-200 PLC有三种类型的计数器,增计数器(CTU)、减计数器(CTD)、增/减计数器(CTUD)[2]。以常用的增计数器(CTU)为例讨论计数器的基本应用。
图2 计数器的基本应用
工作原理:首先,使I0.1输入端通、断一次,计数器C0复位,即当前值回“0”。然后,每通、断一次I0.0,计数器C0记录1个数,即C0当前值加1,当C0当前值达到10后,计数器C0常开触点接通并保持,输出继电器Q0.0输出,直到I0.1再次闭合,计数器复位,Q0.0断开。
1.3 定时器级联扩展延时
对于分辨率为100ms的延时接通定时器(TON)来讲,其设定值最大为32767,延时时间最长为3276.7秒。当超过该时间,单个定时器则无法完成计时功能。这种情况下,可以利用定时器级联的方式实现延时时间的扩展。
案例1:利用两个定时器级联实现延时1小时
图3 定时器延时1小时
总的延时时间T=T37+T38=1800秒+1800秒=3600秒=1小时。这是单个定时器无法完成的定时时间。
还可以用同样的方法实现三个、四个定时器级联延时。这种扩展方法的计时时间是各个定时器计时时间的总和。
1.4 利用计数器延时
案例2:利用两个计数器实现延时10小时
图4 计数器延时10小时
总的延时时间为:1秒×(6000×6)=36000秒÷3600秒=10小时。
这种扩展延时方法的关键是:(1)在网络1中,首先,利用特殊功能寄存器SM0.5(周期为1秒,占空比为1:1),作为计数器C0的计数输入脉冲,在计数的同时实现计时;第二,将C0的输出作为自身的复位,实现记录6000个脉冲后重新开始。(2)在网络2中,将C0的输出作为C1的输入,实现每记录6000个脉冲触发C1计数1次。
3 案例分析
3.1控制要求
某住宅小区需要24小时昼夜定时报警,早上6:30,电铃每秒响一次,6次后自动停止;9:00-17:00,启动住宅报警系统;晚上18:00打开小区内照明系统;晚上22:00关闭小区内照明系统。
3.2 I/0口分配
表1 I/O 分配表
3.3 接线图
图5 接线图
3.4 梯形图程序
程序说明:
(1) 网络1、网络2 中,I0.0为系统启动开关;I0.1 为快速调整开关; I0.2为系统实验用开关;SM0.1用于上电时系统复位;C0 、C1两个计数器级联,C0形成900秒的计时周期,C1记录96个900秒,共计900×96=86400秒,即24个小时;
(2)网络3用于实现早晨6:30启动电铃,电铃每隔1秒响1次,6次后停止;
(3)网络4用于实现晚上18:00开启小区内照明系统;网络4用于实现晚上22:00关闭小区内照明系统;
(4)网络5用于实现9:00到17:00开启小区内报警系统;
(5)网络7、网络8,形成0.1秒钟震荡信号,用于快速调整系统使用。
图6 梯形图程序
4 结束语
定时器指令和计数器指令是PLC编程的重要指令,掌握好它们的使用方法,使设计格式规范化,可以优化设计程序,对编程水平的提高有十分重要的意义,利用编程实现长时的方法还有很多,案例也不胜枚举,同时,灵活利用定时器和计数器组合进行长时间计时,PLC的编程功能,既可减少硬件设备资源,降低生产成本,又使系统运行灵活可靠。
本文编自《电气技术》,标题为“关于利用PLC定时器和计数器进行长计时功能的探讨”,作者为侯肖霞。
西门子S7-200PLC在流量计量方面的应用,如何计量累积量!
1. 引言
目前,PLC已经广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业。它具有高可靠性、抗干扰能力强、功能强大、灵活、易学易用、体积小、重量轻、价格便宜的特点,在流量计量方面也有着广泛的用途,在用于流量累积时又有其编程的独特之处。下面进行详细的分析和论述,包括在西门子S7-200 CPU上编程的例子。
2. 使用PLC显示流量和计算累积量
流量计输出的信号一般是脉冲信号或4~20mA电流信号,这两种信号输出的都是瞬时流量,我们的目的是在PLC中计算和显示瞬时流量值和计算累积量值,当输入信号是脉冲信号时,在计算瞬时流量的时候,必须按照严格的时间间隔计算才能保证瞬时流量的准确性。因此,计算瞬时流量的时候必须用定时中断来进行。而且,在PLC系统中只能运行这一个中断程序,不允许再产生其它中断(即使是低优先级的中断也不允许运行),以防止干扰定时中断的时间间隔的准确性,计算瞬时流量就是将这个时间段的累计脉冲个数换算成累计流量,再除以时间就是瞬时流量。对于4~20mA输入只需按照其对应的量程进行换算就可以直接得到瞬时流量,而累积流量就是将每个时间段内的累积流量累加起来,在实际使用PLC编程的过程中必须注意以下几个问题:
(1) 输入脉冲频率范围是否超出PLC的接收范围;
(2) PLC高速计数器在达到最大计数值时如何保证计算正确;
(3) 如何保证定时中断不受干扰;
(4) 如何避免计算累积量的误差;
(5) 累积量的最大累积位数;
(6) 如何复位累积量。
下面就最关键的2、4、6问题进行详细的叙述,以西门子S7-200 CPU224为例,S7-200的CPU224具有6个单相最大30kHz的高速计数器,但PLC内部没有提供相应的算法来计算频率,需要使用者自行编程计算,这就需要在PLC高速计数器在达到最大计数值时要保证计算的正确性。实际编程时,对高速计数器初始化以后就使之连续计数,不再对其进行任何干预,其高速计数器的初始化程序如图1所示(此段程序应放到PLC第一个扫描周期执行的程序中执行)。
图一:高速计数器的初始化程序
对于高速计数器是否达到最大计数值时需要判断,S7-200CPU的高速计数器是可以周而复始地进行累计的,最高位为符号位,最小值为7FFFFFFF。由于计数器是一直累加的,不可能出现本次读取的计数值小于上次计数值的情况,因此判断计数器当前值是否小于前一次的计数值,就可以判断计数是否达到最大值的拐点(7FFFFFFF),如果达到,则执行特殊的计算以便消除计算错误,程序如图2所示(此程序应放在定时中断子程序中执行)。
当当前计数值大于等于上次计数值时,两个计数值做差,就得到程序两次扫描时间间隔内的计数差值,同时将当前计数值赋值到上次计数值上;当当前计数值小于上次计数值时,计算上次计数值与7FFFFFFF之间的差值(用减法),以及当前计数值和7FFFFFFF之间的差值(用加法,此时寄存器溢出,数位前移),然后将两个结果相加就是程序两次扫描时间间隔内的计数差值,从而实现对累计计数值达到拐点时的正确计算。
图二:消除计算错误程序
实际上,在现场应用中定时中断子程序是采用250ms中断一次执行的,使用SMB34进行控制的。需要注意的是,系统中必须只保证这个中断是唯一存在的,不会受到其他中断的影响,否则可能会因其它中断的影响使周期性中断不准时,从而影响精度。
通过以上计算就得到了250ms内流量计发过来的脉冲个数,这个数值乘以脉冲当量就是250ms内的流量值,再除以时间就是瞬时流量。另外,在250ms内再执行累加程序就可以计算累积流量了。在计算累积流量过程中需要避免累积过程的计算误差,我们知道,流量累积量是一直累积的一个数值,一般会累积到8位数,而plc内部浮点数的有效位数是6位,当累积量数值很大的时候就会造成一个大数和一个小数相加,势必导致小数的有效位数丢失,造成很大的累积误差,因此,要避免大数和小数相加的情况出现。解决方法是采用多个流量累积器,只允许同数量级的数值相加,从而避免数值有效位数损失,实际编程中采用了5个累积器,根据常用流量情况下,在周期中断时间间隔(250ms)内流过的流量乘以15作为第一个累积器的上限,当达到这个累积器的上限值后,将这个累积器的值累加到第2个累积器中,并把第一个累积器清零,对于第三个累积器也同样处理,第4个累积器用于保存累积量小数部分数值,第5个累积器用于保存累积量整数部分数值,这样在显示总累积量时只需显示整数部分和小数部分就可以了,整个过程充分避免了累积过程中大数与小数相加的情况出现。在实际工程中,需根据流量的大小、周期中断的时间间隔来确定所用累积器的个数,而累积器的整数部分用双整数来表示,双整数的范围是-2,147,483,648到+2,147,483,647,可以使累积器的整数位数达到9位。这样,在显示累积量时就可以最多显示9位整数的累积量和6位小数的累积量,总计15位,从而省略累积器倍乘系数,使读数更简便。
对累积器需要在一定条件下复位,累积到最大数值或手动复位,在中断程序中判断累积量是否达到或超过最大位数,当超过最大数值时,将各个累积器清零,清零的触发信号也可以是手动触发。
3. 结束语
本文列出了在PLC中计算和显示瞬时流量和计算累积量时可能遇到的问题,并以西门子S7-200 CPU224系列探讨了解决办法,值得进行该工作的工程人员借鉴。
相关问答
plc脉冲计数指令?
PLC脉冲就是在PLC的输出端能够输出方波信号,也就是高低电平信号,这个信号的频率可通过PLC内部的脉冲指令来调节,不同品牌的PLC,脉冲指令也不太一样,不过基本...
plc怎么写10万hz脉冲程序?
编写PLC的10万Hz脉冲程序需要经过几个关键步骤。首先,配置适当的输入和输出模块以接收和发送脉冲信号。然后,使用PLC的编程软件创建一个计数器,将其设置为适...
plc脉冲量输入编程实例?
控制脉冲紧急停止或者正常停止的程序脉冲输出的是Q0.0SM0.1触发脉冲使用包络0控制脉冲紧急停止或者正常停止的程序脉冲输出的是Q0.0SM0.1触发脉冲使用...
plc每分钟脉冲100个怎么编写程序?
编写程序需要根据PLC的型号和具体要求来确定。一般情况下,编写程序的步骤如下:可以编写程序实现每分钟100个脉冲。PLC编程主要包括输入输出定义、逻辑控制、定...
西门子PLC肿么编写脉冲程序-ZOL问答
Y=X-6400/25600*100,你的程序就按照这条公式编程就行了。有用(0)回复baidu_chuiguoyan一般直接加上或者减去一个数即可,如果是个常数,直接在plc里编程。如.....
plc脉冲怎么启停控制?
PLC脉冲启停控制是通过设置PLC的输入和输出信号来实现的。首先,将输入信号连接到PLC的数字输入端口,例如按钮或传感器。然后,在PLC程序中设置一个计数器,该...
plc高速脉冲计数做什么用?
通过对进给系统相关参数的计算,合理的选用编码器,让脉冲频率即能在PLC处理的范围内又可以满足进给的精度要求。在进给过程中,让PLC对所接收的脉冲数与设定数...
PLC发多少脉冲给伺服电机转一圈,脉冲频率该怎么算?
要确定PLC发多少脉冲给伺服电机转一圈,需要知道伺服电机的编码器分辨率,也就是每转多少个脉冲。然后,计算出整个系统需要的脉冲数,即脉冲频率。假设伺服电机...
plc脉冲数据类型?
PLC(可编程序控制器)脉冲数据类型通常用于表示具有离散状态的数字信号,例如开关状态或传感器输入。这种数据类型可以用于触发特定的逻辑功能或执行特定的控制...
PLC多段脉冲怎么控制?
主要看被控的伺服电机的运动情况:如果是独立的多个电机,时间上没有冲突,可以一对多,用脉冲切换器去切换被控的伺服驱动器(占用数字量输出口);如果步进...主...