定时器指令介绍
西门子SCL语言中的定时器指令都是使用IEC定时器,其指令包括:脉冲定时器(TP)、延时接通定时器(TON)、延时断开定时器(TOF)、保持型延时接通定时器(TONR)、复位定时器(RESET_TIMER)及定时器预设值设置(PRESET_TIMER)指令,下面我们来一一介绍。
1、脉冲定时器(TP)指令
脉冲定时器(TP)指令的作用是用来产生脉冲信号。从指令列表中添加TP指令时会自动生成背景数据块(默认名称IEC_Timer_0_DB),指令初始状态如下:
脉冲定时器(TP)指令有四个引脚参数:
1、IN:布尔型变量,输入值,当该引脚信号从0变为1时(上升沿)定时器开始计时;
2、PT:时间型变量,输入值,Preset Time,表示定时器的预设时间值;
3、Q:布尔型变量,输出值,定时器标志位;
4、ET:时间型变量,输出值,表示定时器的当前时间;
脉冲定时器的工作过程如下:
1、IN参数的上升沿信号启动定时器开始计时,此时Q输出信号的值为1;随着时间的流逝,当定时器的当前值大于预设值PT时,即使IN的信号仍然为1,这时候输出信号Q的值也为0;
2、当定时器激活后,无论输入参数IN的值是否发生变化,定时器都将持续计时,直到预设的时间值走完;
3、定时器计时结束后,IN参数信号的上升沿会重新激活定时器;
脉冲定时器(TP)的时序图如下:
2、延时接通定时器(TON)指令
延时接通定时器(TON)指令用于信号的延时接通。从指令列表中添加该指令时会自动生成背景数据块(默认名称IEC_Timer_0_DB),指令初始状态如下:
TON指令也有四个引脚,其含义与之前介绍的TP(脉冲定时器)指令的引脚参数相同。
延时接通定时器的工作过程如下:
1、引脚IN的上升沿信号(0变为1)启动定时器开始计时,此时输出引脚Q的值为0;
2、随着时间的流逝,当定时器的当前值大于预设的时间值,并且输入引脚IN的信号值仍保持为1时,输出引脚Q的值从0变为1;
3、如果在计时的过程中,输入参数IN的值从1变为0,则定时器停止计时;直到下一次上升沿(从0变为1)后重新计时;延时接通定时器(TON)的时序图如下:
3、延时断开定时器(TOF)指令
延时断开定时器指令TOF用于信号的延时断开。从指令列表中添加该指令时会自动生成背景数据块(默认名称IEC_Timer_0_DB)I指令初始状态如下:
延时断开定时器(TOF) 指令也有四个引脚,其含义与之前介绍的TP(脉冲定时器)指令的引脚参数相同。
延时断开定时器(TOF)指令的工作过程如下:
1、当输入信号IN从0变为1时,定时器使能,此时输出Q的值为1;
2、当输入信号IN从1变为0时,定时器开始计时,输出Q的值保持为1;
3、随着时间的流逝,当时间值ET大于预设值PT并且输入信号IN的值保持为0时,输出Q的值变为0;
4、若在计时过程中,输入信号IN的值从0变为1,则定时器复位;再次从1变为0时,定时器重新开始计时。延时断开定时器时序图如下:
4、保持型延时接通定时器(TONR)指令
保持型延时接通定时器指令TONR可以起到时间累加的作用。
从指令列表中添加TONR指令时会自动生成背景数据块(默认名称 IEC_Timer_0_DB),指令的初始状态如下:
TONR指令有五个引脚参数,其中IN、PT、Q、ET四个引脚含义与之前介绍的 TP (脉冲定时器)指令的引脚参数相同。
R为复位信号引脚,当其信号值从0变为1时,当前时间ET值和输出Q的值均复位为0;
保持型延时接通定时器可以对输入信号IN的状态1信号进行累加。
当输入信号IN从0变为1时,定时器开始计时,此时输出Q的值为0。定时器计时的过程中,流逝的时间被记录在ET中。若在到达预设值PT之前,输入信号从1变为0,则定时器停止计时。当下次输入信号IN从0变为1时,定时器从上次记录的 ET值开始继续计时,直到ET累计的时间大于或等于PT时,输出Q变为1;
当输出Q变为1时,无论输入IN的信号怎么变化,都保持为1;当复位信号R从0变为1时,输出Q和时间流逝值ET均被复位为0;保持型延时接通定时器的时序图如下:
5、复位定时器指令RESET_TIMER
RESET_TIMER可用于IEC定时器的复位,指令的初始状态如下:
建议将其放入IF语句中,以便在可控的条件下进行复位。该指令执行后,定时器的当前值及输出值均复位为0;
IF #started = false THEN
"IEC_Timer_0_DB_3".TON(IN:="Tag_Start",
PT := "Tag_PresetTime",
Q => "Tag_Status(1)",
ET => "Tag_ElapsedTime");
#started := true;
END_IF;
IF "IEC_Timer_0_DB_3".ET < T#25s THEN
RESET_TIMER(TIMER := "IEC_Timer_0_DB_3");
#started := false;
END_IF;
代码解析:
当变量 #started 的信号状态为“0”时,则在操作数“Tag_Start”上出现信号上升沿时执行“接通延时”指令。存储在背景数据块“IEC_Timer_0_DB_3”中的 IEC 定时器启动,持续操作数“Tag_PresetTime”中已指定的一段时间。// 如果超出“Tag_PresetTime”操作数中指定的持续时间,则置位操作数 Tag_Status(1)。// 只要操作数“Tag_Start”的信号状态为“1”,则参数 Q 将保持置位。启动输入的信号状态从“1”变为“0”时,复位参数 Q 的操作数。
如果 IEC 定时器“IEC_Timer_0_DB_3”的超出时间小于 25s,则执行“复位定时器”指令,并复位存储在“IEC_Timer_0_DB_3”背景数据块中的定时器。
6、定时器预设值设置指令PRESET TIMER
PRESET_TIMER可用于设置IEC定时器的预设时间值,指令初始状态如下:
其中:
参数PT为需要设置的时间值;
TIMER: 为IEC定时器名称/编号;
代码案例如下:
IF #started = false THEN
"IEC_Timer_0_DB_3".TON (IN := "Tag_Start",
PT := "Tag_PresetTime",
Q => "Tag_Status(1)",
ET => "Tag_ElapsedTime");
#started := true;
#preset:=true;
END_IF;
IF "IEC_Timer_0_DB_3".ET < T#10s AND #preset = true THEN
PRESET_TIMER(PT := T#25s,
TIMER := "IEC_Timer_0_DB_3");
#preset := false;
END_IF;
代码解析:
当变量 #started 的信号状态为“0”时,则在操作数“Tag_Start”上出现信号上升沿时执行“接通延时”指令。存储在背景数据块“IEC_Timer_0_DB_3”中的 IEC 定时器启动,持续操作数“Tag_PresetTime”中已指定的一段时间。// 如果超出“Tag_PresetTime”操作数中指定的持续时间 PT,则置位操作数 Tag_Status(1)。// 只要操作数“Tag_Start”的信号状态为“1”,则参数 Q 将保持置位。启动输入的信号状态从“1”变为“0”时,复位参数 Q 的操作数。
当 IEC 定时器“TON_DB”的超出时间小于 10s,且变量 #preset 的信号状态为“1”时,执行“加载持续时间”指令。该指令将参数 PT 处指定的持续时间写入背景数据块“IEC_Timer_0_DB_3”中,因此将覆盖背景数据块中操作数“Tag_PresetTime”的时间值。因此,在下一次查询或访问“IEC_Timer_0_DB_3”.Q 或“IEC_Timer_0_DB_3”.ET 时,定时器状态的信号状态可能会发生变化。
好了,关于SCL的定时器指令就先聊到这里。