Цитата Сообщение от spectrum48k Посмотреть сообщение
Код:
FUNCTION_BLOCK TIMER
VAR_INPUT
	iCntUp : BOOL;
	iCntDn : BOOL;
	iCntRes : BOOL;
	iCntSP : TIME;
	(*iIncSP : TIME;----ДОБАВЛЕНО для данного топика: величина периода, который считает/приращивает счетчик*)
END_VAR
VAR_OUTPUT
	OutTime : TIME;
	OutAlm : BOOL;
	(*OutCnt : UINT;----ДОБАВЛЕНО для данного топика: считайте сколько нужно дней/часов/минут/недель*)
END_VAR
VAR
	TimeAct : TIME;
	TimeOld : TIME;
	TimeDelta : TIME;
	DoCalc : UINT;
	Init: BOOL;
	CntUpOld :BOOL;
	CntDnOld : BOOL;
END_VAR



IF iCntRes THEN Init := FALSE; END_IF


(*INIT*)
IF NOT Init THEN
				Init := TRUE;
				iCntUp := iCntDn := CntUpOld := CntDnOld := OutAlm := FALSE;
				TimeAct := TimeOld := TimeDelta := OutTime := t#0ms;
	(*ДОБАВЛЕНО: 		OutCnt := 0;*)
				DoCalc := 0;
				RETURN;
END_IF


(*DOCALC*)
DoCalc := DoCalc +1;

IF (DoCalc MOD 10=0) OR (iCntUp <> CntUpOld) OR (iCntDn <> CntDnOld) THEN


TimeAct :=TIME();

		IF TimeOld > t#0ms THEN
		TimeDelta := TimeAct - TimeOld;

		(*COUNT_UP*)
			IF iCntUp OR (CntUpOld > iCntUp) THEN
						IF iCntSP > OutTime THEN OutTime := OutTime + TimeDelta;
						IF OutTime > iCntSP THEN OutTime := iCntSP; END_IF
						END_IF;
			END_IF

		(*COUNT_DOWN*)
			IF iCntDn OR (CntDnOld > iCntDn) THEN
						IF OutTime > TimeDelta THEN OutTime := OutTime - TimeDelta;
						ELSE OutTime := t#0ms;
						END_IF;
			END_IF

(*ДОБАВЛЕНО:	IF OutTime >= iIncSP THEN OutCnt := OutCnt + 1; OutTime := OutTime - iIncSP; END_IF*)
		OutAlm := iCntSP > t#0ms AND OutTime = iCntSP;

		END_IF

		TimeOld := TimeAct;

END_IF

CntUpOld := iCntUp;
CntDnOld := iCntDn;
Спасибо, решил проблему созданием счетчика из него взял нужное количество дней)