Ветка бестолковая, пусть хотя-бы код для подключения энкодера и увеличения ко-ва импульсов на один оборот тут будет.
Новичкам, таким как я, точно пригодится.
Код:
(*Объявление переменных*)
PROGRAM Incoder
VAR
R_TRIG_A1: R_TRIG;
F_TRIG_A1: F_TRIG;
R_TRIG_B1: R_TRIG;
F_TRIG_B1: F_TRIG;
R_TRIG_A2: R_TRIG;
F_TRIG_A2: F_TRIG;
R_TRIG_B2: R_TRIG;
F_TRIG_B2: F_TRIG;
IN: BYTE; (* Образ байта быстрых входов *)
END_VAR
(* Код програvмы Incoder*)
IN:=SysPortIn(0);
A1:=in.0;
B1:=in.1;
A2:=in.2;
B2:=in.3;
R_TRIG_A1(CLK:=A1 , Q=> );
F_TRIG_A1(CLK:=A1 , Q=> );
R_TRIG_B1(CLK:=B1 , Q=> );
F_TRIG_B1(CLK:=B1, Q=> );
R_TRIG_A2(CLK:=A2 , Q=> );
F_TRIG_A2(CLK:=A2 , Q=> );
R_TRIG_B2(CLK:=B2 , Q=> );
F_TRIG_B2(CLK:=B2 , Q=> );
IF R_TRIG_A2.Q AND NOT B2 THEN (* Одиночные импульсы*)
sh_a2:=sh_a2+1; (*Сложение*)
END_IF
IF R_TRIG_A2.Q AND B2 THEN
sh_a2:=sh_a2-1; (*Вычитание*)
END_IF
IF F_TRIG_A2.Q AND B2 THEN (*Удвоение точности*)
sh_a2:=sh_a2+1;
END_IF
IF F_TRIG_A2.Q AND NOT B2 THEN
sh_a2:=sh_a2-1;
END_IF
IF R_TRIG_B2.Q AND A2 THEN (*Утроение точности*)
sh_a2:=sh_a2+1;
END_IF
IF R_TRIG_B2.Q AND NOT A2 THEN
sh_a2:=sh_a2-1;
END_IF
IF F_TRIG_B2.Q AND A2 THEN (*Повышение ко-ва импульсно на 1 оборот в 4 раза*)
sh_a2:=sh_a2-1;
END_IF
IF F_TRIG_B2.Q AND NOT A2 THEN
sh_a2:=sh_a2+1;
END_IF
Основная программа
Код:
(*Переменная *)
PROGRAM PLC_PRG
VAR
StartPlc: BOOL:=TRUE;
END_VAR
(*Тело программы*)
IF StartPlc THEN
SetIRQ(20);
END_IF
IF in_z2 THEN
sh_a1:=sh_a1+1;
END_IF
StartPlc:=FALSE;
Тригеры объявлены для двух энкодеров, используется в коде только энкодер 2 с фазами А2 и В2.