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 OnH1stOffM1st THEN SetCompare1st := 1; ELSE SetCompare1st := 0; END_IF; END_IF; (*1判断开设定时间与实际时间之间的大小*) IF OnH1st>WD_HOUR THEN TrueSetOpenCompare1st := 1; END_IF; IF OnH1st=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_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 OnH2ndOffM2nd THEN SetCompare2nd := 1; ELSE SetCompare2nd := 0; END_IF; END_IF; (*2判断开设定时间与实际时间之间的大小*) IF OnH2nd>WD_HOUR THEN TrueSetOpenCompare2nd := 1; END_IF; IF OnH2nd=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_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 OnH3rdOffM3rd THEN SetCompare3rd := 1; ELSE SetCompare3rd := 0; END_IF; END_IF; (*3判断开设定时间与实际时间之间的大小*) IF OnH3rd>WD_HOUR THEN TrueSetOpenCompare3rd := 1; END_IF; IF OnH3rd=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_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 OnH4thOffM4th THEN SetCompare4th := 1; ELSE SetCompare4th := 0; END_IF; END_IF; (*4判断开设定时间与实际时间之间的大小*) IF OnH4th>WD_HOUR THEN TrueSetOpenCompare4th := 1; END_IF; IF OnH4th=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_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 OnH5thOffM5th THEN SetCompare5th := 1; ELSE SetCompare5th := 0; END_IF; END_IF; (*5判断开设定时间与实际时间之间的大小*) IF OnH5th>WD_HOUR THEN TrueSetOpenCompare5th := 1; END_IF; IF OnH5th=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_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 OnH6thOffM6th THEN SetCompare6th := 1; ELSE SetCompare6th := 0; END_IF; END_IF; (*6判断开设定时间与实际时间之间的大小*) IF OnH6th>WD_HOUR THEN TrueSetOpenCompare6th := 1; END_IF; IF OnH6th=WD_MI THEN TrueSetOpenCompare6th := 1; ELSE TrueSetOpenCompare6th := 0; END_IF; END_IF; (*判断关设定时间与实际时间之间的大小*) IF OffH6th>WD_HOUR THEN TrueSetCloseCompare6th := 1; END_IF; IF OffH6th=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