> 文章列表 > CODOSYS之结构化文本(ST)——中级篇(一)计时器的应用

CODOSYS之结构化文本(ST)——中级篇(一)计时器的应用

CODOSYS之结构化文本(ST)——中级篇(一)计时器的应用

标准库中常用的计时器有如下四个(部分环境还支持高精度计时器如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。

Example:

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;