Цитата:
FUNCTION_BLOCK UpDown
VAR_INPUT
PointerVar: POINTER TO WORD; (*Указатель на переменную для коррекции*)
LowerLimit: WORD; (*Нижняя граница шкалы*)
UpperLimit: WORD; (*Верхняя граница шкалы*)
END_VAR
VAR_OUTPUT
END_VAR
VAR
ScrolTime: TIME:= T#500ms; (*Период*)
UpTOF:TOF;
UpRTrig: R_TRIG;
DownTOF:TOF;
DownRTrig: R_TRIG;
END_VAR
Цитата:
UpTOF(IN:=bIpUp AND NOT bIpDown AND NOT UpTOF.Q, PT:=ScrolTime);
UpRTrig(CLK:=UpTOF.Q);
IF UpRTrig.Q THEN
IF PointerVar^<UpperLimit THEN
PointerVar^:=PointerVar^+1;
ELSIF PointerVar^=UpperLimit THEN
PointerVar^:=LowerLimit;
END_IF;
END_IF;
DownTOF(IN:=bIpDown AND NOT bIpUp AND NOT DownTOF.Q, PT:=ScrolTime);
DownRTrig(CLK:=DownTOF.Q);
IF DownRTrig.Q THEN
IF PointerVar^>LowerLimit THEN
PointerVar^:=PointerVar^-1;
ELSIF PointerVar^=LowerLimit THEN
PointerVar^:=UpperLimit;
END_IF;
END_IF;
В вашем случае