标准库中常用的计时器有如下四个(部分环境还支持高精度计时器如LTON等等):
.RTC
.TON
.TOF
.TP
本文将对将对上述四个计时器进行简单的讲解。
.RTC:
RunTime 时钟定时器,返回启动时间,当前时间和日期。
Inputs:
EN : BOOL; 一个上升沿启动 CDT 中时间统计。
PDT : DATE_AND_TIME; 计数将要启动的时间和日期。
Outputs:
Q : BOOL; 当 CDT 开始计数输出为 TRUE 。
CDT : DATE_AND_TIME; 当前计数时间和日期的状态
VarBOOL2:=RTC(EN, PDT, Q, CDT) 表示:当EN为 FALS,输出变量 Q 以及 CDT 为 FALSE 相关时间为 DT#1970-01-01-00:00:00。
一旦 EN 为 TRUE (上升沿),PDT给予的时间将会被设置,并且将会以秒进行计数一旦 EN 为TRUE 将返回 CDT 。一旦 EN 被复位为 FALSE, CDT 将会被复位为初始值 DT#1970-01-01-00:00:00。
Variable definition
VAR
My_RTC: RTC; (* instance of FB RTC *)
My_EN: BOOL; (* PDT will be loaded, if EN
gets a rising edge *)
My_PDT: DATE_AND_TIME; (* date and time preset *)
My_Result: BOOL; (* copy of EN *)
My_CDT: DATE_AND_TIME; (* present time and date,
valid: EN = 1 *)
END_VAR
Function call ST
My_RTC(EN := My_EN, PDT := My_PDT);
My_Result := My_RTC.Q;
My_CDT := My_RTC.CDT;
.TON
定时器功能块,实现一个定时。当输入为 TRUE,将会启动一个定时器知道输出为 TRUE。
Inputs:
IN : BOOL; 上升沿启动 ET 端定时。
PT : TIME; 定时 ET (延迟时间) 的上限。
Outputs:
Q : BOOL; 一旦 ET 到达显示时间 PV 输出将会变为 TRUE (定时时间结束)。
ET : 定时时间的当前状态
TON(IN, PT, Q, ET) 表示: 如果 IN 为 FALSE, Q 将会为 FALSE 并且 ET 为 0。
一旦 IN 为 TRUE,时间将会在 ET 端以毫秒进行计时知道等于 PT值。然后将会保持一个常量。
当 IN 为 TRUE 并且 ET 等于 PT 时 Q 为TRUE,否则为 FALSE。
因此,当定义时间 PT 按照毫秒运行结束时 Q 将会得到一个上升沿。
Example:
VAR
My_TON: TON; (* instance of FB TON *)
My_IN: BOOL; (* starts timer with a rising edge,
resets timer with a falling edge *)
My_PT: TIME; (* time that must elapse, before Q
is set *)
My_Puls: BOOL; (* pulse TRUE, as soon as delay has
elapsed *)
My_Time: TIME; (* elapsed duration of the delay
(between 0 and PT) *)
END_VAR
Function call ST
My_TON(IN := My_IN, PT := My_PT);
My_Puls := My_TON.Q;
My_Time := My_TON.ET;
.TOF
定时器功能块,用于一个关闭延时。当输入从 TRUE 到 FALSE (下降沿),在一段时间滞后输出将会被置为 FALSE。
Inputs:
IN : BOOL; 下降沿启动 ET 端计时。
PT : TIME; ET端计时上限值 (延迟时间)。
Outputs:
Q : BOOL; 一旦 ET 到达上限值 PV 那么将会得到一个下降沿(延时时间结束)。
ET : 当前延时定时器状态。
TOF(IN, PT, Q, ET) 表示:如果 IN 为 TRUE,输出将会为 TRUE 。
一旦 IN 为 FALSE,在 ET 端时间将按照毫秒的形式开始计时直到 ET 的值等于 PT 的值。然后将保持一个常量。
当 IN 为 FALSE 并且 ET 等于 PT Q 为 FALSE 。否则为 TRUE。
因此,当 PT 以毫秒到达指定时间后 Q 将会得到一个下降沿。
Example:
VAR
My_TOF: TOF; (* instance of FB TOF *)
My_IN: BOOL; (* starts timer with a falling edge,
resets timer with a rising edge *)
My_PT: TIME; (* time that must elapse, before Q
is set *)
My_Puls: BOOL; (* pulse FALSE, as soon as delay has
elapsed *)
My_Time: TIME; (* elapsed duration of the delay
(between 0 and PT) *)
END_VAR
Function call ST
My_TOF(IN := My_IN, PT := My_PT);
My_Puls := My_TOF.Q;
My_Time := My_TOF.ET;
.TP
定时器功能块,作为一个触发器。时间将会增加知道到达指定时间。在计时过程中为 TRUE 其他时候为 FALSE。
Inputs:
IN : BOOL; 一个上升沿将启动 ET 端计时器。
PT : TIME; 定时时间
Outputs:
Q : BOOL; 时间计时到 ET 输出为 TRUE。
ET : TIME; 当前时间状态
TP(IN, PT, Q, ET) 表示:如果 IN 为 FALSE, Q 将会变为 FALSE 并且 ET将为 0
一旦输入 IN 变为 TRUE,时间将按照毫秒开始从 ET 端进行计时知道时间值到达 PT。然后将保持一个常量。
IN 为 TRUE 并且ET 小于 PT 时 Q 为 TRUE 。否则为 FALSE。
Q 返回到达时间 PT 的信号。
Example:
Variable definition
VAR
My_TP: TP; (* instance of FB TP is created *)
My_IN: BOOL; (* trigger for the start signal *)
My_PT: TIME; (* length of the high signal in 10 ms *)
My_Puls: BOOL; (* pulse TRUE, as long as timer is
running *)
My_Time: TIME; (* elapsed time (between 0 and PT) *)
END_VAR
Function call ST
My_TP(IN := My_IN, PT := My_PT);
My_Puls := My_TP.Q;
My_Time := My_TP.ET;