Цитата Сообщение от Виталий Андреев Посмотреть сообщение
вроде бы должно оказаться 200х4=800 ?
Это зависит от программы обработки.
В этой:
Phase.0:=A;
Phase.1:=B;
CASE OldPhase OF
2: CASE Phase OF
3: NewEnc:=OldEnc + 1;
0: NewEnc:=OldEnc - 1;
END_CASE;
0: CASE Phase OF
2: NewEnc:=OldEnc + 1;
1: NewEnc:=OldEnc - 1;
END_CASE;
1: CASE Phase OF
0: NewEnc:=OldEnc + 1;
3: NewEnc:=OldEnc - 1;
END_CASE;
3: CASE Phase OF
1: NewEnc:=OldEnc + 1;
2: NewEnc:=OldEnc - 1;
END_CASE;
END_CASE;
OldPhase:=Phase;
OldEnc:=NewEnc;
IF Z =TRUE THEN Enc:=0; END_IF;
будет умножение разрешения энкодера на 4
В этой:
in:=SysPortIn(0);
IF in.0<>Old_in THEN
IF in.0=TRUE THEN
IF in.1=TRUE THEN
Enc:=Enc+1;
ELSE
Enc:=Enc-1;
END_IF;
END_IF;
END_IF;
Old_in:=in.0;
IF in.0=TRUE AND in.1=TRUE AND in.2=TRUE THEN Enc:=0; (*Сброс показаний энкодера*)
END_IF;
умножения не будет.
Первая версия медленная, для низкооборотистых применений, вторая быстрая. Оба алгоритма работают на реальных машинах, если что.