You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
512 lines
11 KiB
512 lines
11 KiB
FUNCTION_BLOCK TimerForm
|
|
VAR_EXTERNAL
|
|
|
|
END_VAR
|
|
|
|
VAR_INPUT
|
|
OnH1st :INT:=0;
|
|
OnM1st :INT:=0;
|
|
OffH1st :INT:=0;
|
|
OffM1st :INT:=0;
|
|
Enable1st :BOOL:=FALSE;
|
|
|
|
|
|
OnH2nd :INT:=0;
|
|
OnM2nd :INT:=0;
|
|
OffH2nd :INT:=0;
|
|
OffM2nd :INT:=0;
|
|
Enable2nd :BOOL:=FALSE;
|
|
|
|
OnH3rd :INT:=0;
|
|
OnM3rd :INT:=0;
|
|
OffH3rd :INT:=0;
|
|
OffM3rd :INT:=0;
|
|
Enable3rd :BOOL:=FALSE;
|
|
|
|
OnH4th :INT:=0;
|
|
OnM4th :INT:=0;
|
|
OffH4th :INT:=0;
|
|
OffM4th :INT:=0;
|
|
Enable4th :BOOL:=FALSE;
|
|
|
|
OnH5th :INT:=0;
|
|
OnM5th :INT:=0;
|
|
OffH5th :INT:=0;
|
|
OffM5th :INT:=0;
|
|
Enable5th :BOOL:=FALSE;
|
|
|
|
OnH6th :INT:=0;
|
|
OnM6th :INT:=0;
|
|
OffH6th :INT:=0;
|
|
OffM6th :INT:=0;
|
|
Enable6th :BOOL:=FALSE;
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
TimeSw1 :BOOL;
|
|
TimeSw2 :BOOL;
|
|
TimeSw3 :BOOL;
|
|
TimeSw4 :BOOL;
|
|
TimeSw5 :BOOL;
|
|
TimeSw6 :BOOL;
|
|
OUT_Z :bool;
|
|
END_VAR
|
|
|
|
VAR
|
|
|
|
|
|
|
|
HOUR : byte;
|
|
YEAR : word;
|
|
MON : byte;
|
|
DAY : byte;
|
|
MI : byte;
|
|
SEC : byte;
|
|
WEEK : byte;
|
|
WD_HOUR :INT;
|
|
WD_MI :INT;
|
|
|
|
SetCompare1st :bool; (*开启设定时间大于关闭设定时间为1,反之为0*)
|
|
TrueSetCloseCompare1st :bool; (*关闭设定时间大于实际时间为1,反之为0*)
|
|
TrueSetOpenCompare1st :bool; (*开启设定时间大于实际时间为1,反之为0*)
|
|
|
|
SetCompare2nd :bool; (*开启设定时间大于关闭设定时间为1,反之为0*)
|
|
TrueSetCloseCompare2nd :bool; (*关闭设定时间大于实际时间为1,反之为0*)
|
|
TrueSetOpenCompare2nd :bool; (*开启设定时间大于实际时间为1,反之为0*)
|
|
|
|
SetCompare3rd :bool; (*开启设定时间大于关闭设定时间为1,反之为0*)
|
|
TrueSetCloseCompare3rd :bool; (*关闭设定时间大于实际时间为1,反之为0*)
|
|
TrueSetOpenCompare3rd :bool; (*开启设定时间大于实际时间为1,反之为0*)
|
|
|
|
SetCompare4th :bool; (*开启设定时间大于关闭设定时间为1,反之为0*)
|
|
TrueSetCloseCompare4th :bool; (*关闭设定时间大于实际时间为1,反之为0*)
|
|
TrueSetOpenCompare4th :bool; (*开启设定时间大于实际时间为1,反之为0*)
|
|
|
|
SetCompare5th :bool; (*开启设定时间大于关闭设定时间为1,反之为0*)
|
|
TrueSetCloseCompare5th :bool; (*关闭设定时间大于实际时间为1,反之为0*)
|
|
TrueSetOpenCompare5th :bool; (*开启设定时间大于实际时间为1,反之为0*)
|
|
|
|
SetCompare6th :bool; (*开启设定时间大于关闭设定时间为1,反之为0*)
|
|
TrueSetCloseCompare6th :bool; (*关闭设定时间大于实际时间为1,反之为0*)
|
|
TrueSetOpenCompare6th :bool; (*开启设定时间大于实际时间为1,反之为0*)
|
|
|
|
|
|
Clock : NW_DateTimeGet;
|
|
p1,p2 : pointer;
|
|
v2v : NW_MemCopy;
|
|
END_VAR
|
|
Clock( EN:=1 , B_TWELVE_HOUR:=0 | YEAR:= W_YEAR, MON:= BY_MONTH, DAY:= BY_DAY, HOUR:= BY_HOUR,MI := BY_MIN, SEC:= BY_SEC,WEEK := BY_WDAY );
|
|
|
|
WD_HOUR:=BYTE_TO_int(HOUR);
|
|
WD_MI:=BYTE_TO_int(MI);
|
|
|
|
|
|
IF Enable1st=TRUE AND (NOT(OnH1st=OffH1st AND OnM1st=OffM1st)) THEN(*开关时间一致则无效*)
|
|
(*1判断开关设定时间之间的大小*)
|
|
IF OnH1st>OffH1st THEN
|
|
SetCompare1st := 1;
|
|
END_IF;
|
|
IF OnH1st<OffH1st THEN
|
|
SetCompare1st := 0;
|
|
END_IF;
|
|
IF OnH1st=OffH1st THEN
|
|
IF OnM1st>OffM1st THEN
|
|
SetCompare1st := 1;
|
|
ELSE
|
|
SetCompare1st := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*1判断开设定时间与实际时间之间的大小*)
|
|
IF OnH1st>WD_HOUR THEN
|
|
TrueSetOpenCompare1st := 1;
|
|
END_IF;
|
|
IF OnH1st<WD_HOUR THEN
|
|
TrueSetOpenCompare1st := 0;
|
|
END_IF;
|
|
IF OnH1st=WD_HOUR THEN
|
|
IF OnM1st>=WD_MI THEN
|
|
TrueSetOpenCompare1st := 1;
|
|
ELSE
|
|
TrueSetOpenCompare1st := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*1判断关设定时间与实际时间之间的大小*)
|
|
IF OffH1st>WD_HOUR THEN
|
|
TrueSetCloseCompare1st := 1;
|
|
END_IF;
|
|
IF OffH1st<WD_HOUR THEN
|
|
TrueSetCloseCompare1st := 0;
|
|
END_IF;
|
|
IF OffH1st=WD_HOUR THEN
|
|
IF OffM1st>=WD_MI THEN
|
|
TrueSetCloseCompare1st := 1;
|
|
ELSE
|
|
TrueSetCloseCompare1st := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*1控制输出*)
|
|
IF SetCompare1st THEN(*开启设定时间大于关闭设定时间为1*)
|
|
IF TrueSetOpenCompare1st AND NOT (TrueSetCloseCompare1st) THEN
|
|
TimeSw1:=0;
|
|
ELSE
|
|
TimeSw1:=1;
|
|
END_IF;
|
|
ELSE
|
|
|
|
IF TrueSetCloseCompare1st AND NOT (TrueSetOpenCompare1st) THEN
|
|
TimeSw1:=1;
|
|
ELSE
|
|
TimeSw1:=0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
ELSE
|
|
TimeSw1:=0;
|
|
END_IF;
|
|
|
|
|
|
IF Enable2nd=TRUE AND (NOT(OnH2nd=OffH2nd AND OnM2nd=OffM2nd)) THEN(*开关时间一致则无效*)
|
|
(*2判断开关设定时间之间的大小*)
|
|
IF OnH2nd>OffH2nd THEN
|
|
SetCompare2nd := 1;
|
|
END_IF;
|
|
IF OnH2nd<OffH2nd THEN
|
|
SetCompare2nd := 0;
|
|
END_IF;
|
|
IF OnH2nd=OffH2nd THEN
|
|
IF OnM2nd>OffM2nd THEN
|
|
SetCompare2nd := 1;
|
|
ELSE
|
|
SetCompare2nd := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*2判断开设定时间与实际时间之间的大小*)
|
|
IF OnH2nd>WD_HOUR THEN
|
|
TrueSetOpenCompare2nd := 1;
|
|
END_IF;
|
|
IF OnH2nd<WD_HOUR THEN
|
|
TrueSetOpenCompare2nd := 0;
|
|
END_IF;
|
|
IF OnH2nd=WD_HOUR THEN
|
|
IF OnM2nd>=WD_MI THEN
|
|
TrueSetOpenCompare2nd := 1;
|
|
ELSE
|
|
TrueSetOpenCompare2nd := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*2判断关设定时间与实际时间之间的大小*)
|
|
IF OffH2nd>WD_HOUR THEN
|
|
TrueSetCloseCompare2nd := 1;
|
|
END_IF;
|
|
IF OffH2nd<WD_HOUR THEN
|
|
TrueSetCloseCompare2nd := 0;
|
|
END_IF;
|
|
IF OffH2nd=WD_HOUR THEN
|
|
IF OffM2nd>=WD_MI THEN
|
|
TrueSetCloseCompare2nd := 1;
|
|
ELSE
|
|
TrueSetCloseCompare2nd := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*2控制输出*)
|
|
IF SetCompare2nd THEN(*开启设定时间大于关闭设定时间为1*)
|
|
IF TrueSetOpenCompare2nd AND NOT (TrueSetCloseCompare2nd) THEN
|
|
TimeSw2:=0;
|
|
ELSE
|
|
TimeSw2:=1;
|
|
END_IF;
|
|
ELSE
|
|
|
|
IF TrueSetCloseCompare2nd AND NOT (TrueSetOpenCompare2nd) THEN
|
|
TimeSw2:=1;
|
|
ELSE
|
|
TimeSw2:=0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
ELSE
|
|
TimeSw2:=0;
|
|
END_IF;
|
|
|
|
|
|
|
|
IF Enable3rd=TRUE AND (NOT(OnH3rd=OffH3rd AND OnM3rd=OffM3rd)) THEN(*开关时间一致则无效*)
|
|
(*3判断开关设定时间之间的大小*)
|
|
IF OnH3rd>OffH3rd THEN
|
|
SetCompare3rd := 1;
|
|
END_IF;
|
|
IF OnH3rd<OffH3rd THEN
|
|
SetCompare3rd := 0;
|
|
END_IF;
|
|
IF OnH3rd=OffH3rd THEN
|
|
IF OnM3rd>OffM3rd THEN
|
|
SetCompare3rd := 1;
|
|
ELSE
|
|
SetCompare3rd := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*3判断开设定时间与实际时间之间的大小*)
|
|
IF OnH3rd>WD_HOUR THEN
|
|
TrueSetOpenCompare3rd := 1;
|
|
END_IF;
|
|
IF OnH3rd<WD_HOUR THEN
|
|
TrueSetOpenCompare3rd := 0;
|
|
END_IF;
|
|
IF OnH3rd=WD_HOUR THEN
|
|
IF OnM3rd>=WD_MI THEN
|
|
TrueSetOpenCompare3rd := 1;
|
|
ELSE
|
|
TrueSetOpenCompare3rd := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*3判断关设定时间与实际时间之间的大小*)
|
|
IF OffH3rd>WD_HOUR THEN
|
|
TrueSetCloseCompare3rd := 1;
|
|
END_IF;
|
|
IF OffH3rd<WD_HOUR THEN
|
|
TrueSetCloseCompare3rd := 0;
|
|
END_IF;
|
|
IF OffH3rd=WD_HOUR THEN
|
|
IF OffM3rd>=WD_MI THEN
|
|
TrueSetCloseCompare3rd := 1;
|
|
ELSE
|
|
TrueSetCloseCompare3rd := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*3控制输出*)
|
|
IF SetCompare3rd THEN(*开启设定时间大于关闭设定时间为1*)
|
|
IF TrueSetOpenCompare3rd AND NOT (TrueSetCloseCompare3rd) THEN
|
|
TimeSw3:=0;
|
|
ELSE
|
|
TimeSw3:=1;
|
|
END_IF;
|
|
ELSE
|
|
|
|
IF TrueSetCloseCompare3rd AND NOT (TrueSetOpenCompare3rd) THEN
|
|
TimeSw3:=1;
|
|
ELSE
|
|
TimeSw3:=0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
ELSE
|
|
TimeSw3:=0;
|
|
END_IF;
|
|
|
|
|
|
|
|
IF Enable4th=TRUE AND (NOT(OnH4th=OffH4th AND OnM4th=OffM4th)) THEN(*开关时间一致则无效*)
|
|
(*4判断开关设定时间之间的大小*)
|
|
IF OnH4th>OffH4th THEN
|
|
SetCompare4th := 1;
|
|
END_IF;
|
|
IF OnH4th<OffH4th THEN
|
|
SetCompare4th := 0;
|
|
END_IF;
|
|
IF OnH4th=OffH4th THEN
|
|
IF OnM4th>OffM4th THEN
|
|
SetCompare4th := 1;
|
|
ELSE
|
|
SetCompare4th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*4判断开设定时间与实际时间之间的大小*)
|
|
IF OnH4th>WD_HOUR THEN
|
|
TrueSetOpenCompare4th := 1;
|
|
END_IF;
|
|
IF OnH4th<WD_HOUR THEN
|
|
TrueSetOpenCompare4th := 0;
|
|
END_IF;
|
|
IF OnH4th=WD_HOUR THEN
|
|
IF OnM4th>=WD_MI THEN
|
|
TrueSetOpenCompare4th := 1;
|
|
ELSE
|
|
TrueSetOpenCompare4th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*4判断关设定时间与实际时间之间的大小*)
|
|
IF OffH4th>WD_HOUR THEN
|
|
TrueSetCloseCompare4th := 1;
|
|
END_IF;
|
|
IF OffH4th<WD_HOUR THEN
|
|
TrueSetCloseCompare4th := 0;
|
|
END_IF;
|
|
IF OffH4th=WD_HOUR THEN
|
|
IF OffM4th>=WD_MI THEN
|
|
TrueSetCloseCompare4th := 1;
|
|
ELSE
|
|
TrueSetCloseCompare4th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*4控制输出*)
|
|
IF SetCompare4th THEN(*开启设定时间大于关闭设定时间为1*)
|
|
IF TrueSetOpenCompare4th AND NOT (TrueSetCloseCompare4th) THEN
|
|
TimeSw4:=0;
|
|
ELSE
|
|
TimeSw4:=1;
|
|
END_IF;
|
|
ELSE
|
|
|
|
IF TrueSetCloseCompare4th AND NOT (TrueSetOpenCompare4th) THEN
|
|
TimeSw4:=1;
|
|
ELSE
|
|
TimeSw4:=0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
ELSE
|
|
TimeSw4:=0;
|
|
END_IF;
|
|
|
|
IF Enable5th=TRUE AND (NOT(OnH5th=OffH5th AND OnM5th=OffM5th)) THEN(*开关时间一致则无效*)
|
|
(*5判断开关设定时间之间的大小*)
|
|
IF OnH5th>OffH5th THEN
|
|
SetCompare5th := 1;
|
|
END_IF;
|
|
IF OnH5th<OffH5th THEN
|
|
SetCompare5th := 0;
|
|
END_IF;
|
|
IF OnH5th=OffH5th THEN
|
|
IF OnM5th>OffM5th THEN
|
|
SetCompare5th := 1;
|
|
ELSE
|
|
SetCompare5th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*5判断开设定时间与实际时间之间的大小*)
|
|
IF OnH5th>WD_HOUR THEN
|
|
TrueSetOpenCompare5th := 1;
|
|
END_IF;
|
|
IF OnH5th<WD_HOUR THEN
|
|
TrueSetOpenCompare5th := 0;
|
|
END_IF;
|
|
IF OnH5th=WD_HOUR THEN
|
|
IF OnM5th>=WD_MI THEN
|
|
TrueSetOpenCompare5th := 1;
|
|
ELSE
|
|
TrueSetOpenCompare5th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*5判断关设定时间与实际时间之间的大小*)
|
|
IF OffH5th>WD_HOUR THEN
|
|
TrueSetCloseCompare5th := 1;
|
|
END_IF;
|
|
IF OffH5th<WD_HOUR THEN
|
|
TrueSetCloseCompare5th := 0;
|
|
END_IF;
|
|
IF OffH5th=WD_HOUR THEN
|
|
IF OffM5th>=WD_MI THEN
|
|
TrueSetCloseCompare5th := 1;
|
|
ELSE
|
|
TrueSetCloseCompare5th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*5控制输出*)
|
|
IF SetCompare5th THEN(*开启设定时间大于关闭设定时间为1*)
|
|
IF TrueSetOpenCompare5th AND NOT (TrueSetCloseCompare5th) THEN
|
|
TimeSw5:=0;
|
|
ELSE
|
|
TimeSw5:=1;
|
|
END_IF;
|
|
ELSE
|
|
|
|
IF TrueSetCloseCompare5th AND NOT (TrueSetOpenCompare5th) THEN
|
|
TimeSw5:=1;
|
|
ELSE
|
|
TimeSw5:=0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
ELSE
|
|
TimeSw5:=0;
|
|
END_IF;
|
|
|
|
|
|
IF Enable6th=TRUE AND (NOT(OnH6th=OffH6th AND OnM6th=OffM6th)) THEN(*开关时间一致则无效*)
|
|
(*6判断开关设定时间之间的大小*)
|
|
IF OnH6th>OffH6th THEN
|
|
SetCompare6th := 1;
|
|
END_IF;
|
|
IF OnH6th<OffH6th THEN
|
|
SetCompare6th := 0;
|
|
END_IF;
|
|
IF OnH6th=OffH6th THEN
|
|
IF OnM6th>OffM6th THEN
|
|
SetCompare6th := 1;
|
|
ELSE
|
|
SetCompare6th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*6判断开设定时间与实际时间之间的大小*)
|
|
IF OnH6th>WD_HOUR THEN
|
|
TrueSetOpenCompare6th := 1;
|
|
END_IF;
|
|
IF OnH6th<WD_HOUR THEN
|
|
TrueSetOpenCompare6th := 0;
|
|
END_IF;
|
|
IF OnH6th=WD_HOUR THEN
|
|
IF OnM6th>=WD_MI THEN
|
|
TrueSetOpenCompare6th := 1;
|
|
ELSE
|
|
TrueSetOpenCompare6th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*判断关设定时间与实际时间之间的大小*)
|
|
IF OffH6th>WD_HOUR THEN
|
|
TrueSetCloseCompare6th := 1;
|
|
END_IF;
|
|
IF OffH6th<WD_HOUR THEN
|
|
TrueSetCloseCompare6th := 0;
|
|
END_IF;
|
|
IF OffH6th=WD_HOUR THEN
|
|
IF OffM6th>=WD_MI THEN
|
|
TrueSetCloseCompare6th := 1;
|
|
ELSE
|
|
TrueSetCloseCompare6th := 0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
(*6控制输出*)
|
|
IF SetCompare6th THEN(*开启设定时间大于关闭设定时间为1*)
|
|
IF TrueSetOpenCompare6th AND NOT (TrueSetCloseCompare6th) THEN
|
|
TimeSw6:=0;
|
|
ELSE
|
|
TimeSw6:=1;
|
|
END_IF;
|
|
ELSE
|
|
|
|
IF TrueSetCloseCompare6th AND NOT (TrueSetOpenCompare6th) THEN
|
|
TimeSw6:=1;
|
|
ELSE
|
|
TimeSw6:=0;
|
|
END_IF;
|
|
END_IF;
|
|
|
|
ELSE
|
|
TimeSw6:=0;
|
|
END_IF;
|
|
|
|
|
|
if TimeSw1 or TimeSw2 or TimeSw3 or TimeSw4 or TimeSw5 or TimeSw6 then
|
|
OUT_Z:=1;
|
|
else
|
|
OUT_Z:=0;
|
|
end_if;
|
|
END_FUNCTION_BLOCK
|