降值计数器
功能块CTD(倒计数)可用于编程计数程序。
输入
倒计数
对于在CD检测到的每个上升沿,从当前值CV减去数值1,除非设置了LD或CV已达到数值0。
载入
LD,计数器状态复位为PV
预置值
是在首个计数程序中用于减法的值
输出
比较输出信号
在CV= 0时设置
当前值
包含当前减法结果(CV =当前值)
通过从编程编辑器写入变量,可以在计数操作过程中改变数值。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
initialize_count: BOOL:=TRUE;
(*for setting the current value
to starting value*)
count: BOOL:=FALSE;
(*1 is subtracted from the current
value for each leading edge
detected at count*)
load: BOOL:=FALSE;
(*sets the curr_value back to
set_value, if TRUE*)
set_value: INT:=2;
(*the starting value*)
output_value: BOOL:=FALSE;
(*is set, if the current value is
zero*)
curr_value: INT:=0;
(*the current_value*)
ctd_1: CTD;
(*instance of the counter*)
END_VAR
如果设置了set(状态=TRUE),preset_value(PV)会载入current_value(CV)。每次在clock检测到上升沿时,会从current_value减去数值1。将重复此程序直到current_value大于/等于0。然后,将设置signal_output。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_FB,CTD!,copy_name,8,2,13,7,,?BCD?BLD?BPV?AQ?ACV);
B(B_VARIN,,output_value,6,5,8,7,);
B(B_VAROUT,,current_value,13,4,15,6,);
B(B_CONTACT,,set,3,4,5,6,);
B(B_CONTACT,,clock,3,2,5,4,);
B(B_COIL,,signal_output,20,3,22,5,);
L(7,4,8,4);
L(1,5,3,5);
L(5,5,8,5);
L(1,3,3,3);
L(5,3,7,3);
L(7,3,7,4);
L(13,4,20,4);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF set THEN (* first cycle *)
load:=TRUE; (* load has to be TRUE,
to set current_value to output_value *)
clock:=FALSE;
END_IF;
copy_name(CD:= clock, LOAD:= set, PV:= output_value, Q=> signal_output, CV=> current_value);
load:=FALSE; (* now current_value got the right value, load doesn't need to be *)
(* TRUE any longer *);