恭喜,你发布的帖子
发布于 2022-07-18 14:50:16
4楼
给你一个启发,定时器可以这样做
通电延时( ODT)
FUNCTION FC1 : VOID
TITLE = 'Block Title'
//
// Block Comment...
//
VERSION: '1.0'
AUTHOR: BAIKAI
NAME: T_ODT
FAMILY: baikai
know_how_protect
VAR_INPUT
//ODT
Input_Condition:BOOL:=false;
FP_1Sec:BOOL;
reset:BOOL;
Timer_Setpoint:INT:=0;
END_VAR
VAR_IN_OUT
Impls_1Sec_Aux:BOOL;
END_VAR
VAR_OUTPUT
Impls_1Sec:BOOL;
Output_Delay:BOOL:=false;
Timer_Actual:INT:=0;
END_VAR
//通电延时,不带保持
Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux);
Impls_1Sec_Aux:= FP_1Sec;
IF NOT reset THEN
IF (NOT Input_Condition) THEN
Timer_Actual:= 0;
Output_Delay:= 0;
ELSE
IF (Impls_1Sec AND NOT Output_Delay) THEN
Timer_Actual:= Timer_Actual +1;
END_IF;
Output_Delay:= Timer_Actual >= Timer_Setpoint;
END_IF;
ELSE
Impls_1Sec:=false;
Timer_Actual:= 0;
Output_Delay:= false;
END_IF;
END_FUNCTION
//通电延时,保持
Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux);
Impls_1Sec_Aux:= FP_1Sec;
IF NOT reset THEN
IF Input_Condition THEN
Output_Aux:=1;
END_IF;
IF (NOT Output_Aux) THEN
Timer_Actual:=0;
Output_Delay:=false;
ELSE
IF (Impls_1Sec AND NOT Output_Delay) THEN
Timer_Actual:= Timer_Actual +1;
END_IF;
Output_Delay:= Timer_Actual >= Timer_Setpoint;
END_IF;
ELSE
Impls_1Sec:=false;
Output_Aux:=false;
Timer_Actual:= 0;
Output_Delay:= false;
//以上为简单思路制作,定时器。 我一般用于数组较多,就是一次做几十个同类的定时器。
这个是我后来写的
请填写推广理由:
分享
只看
楼主