Ветка бестолковая, пусть хотя-бы код для подключения энкодера и увеличения ко-ва импульсов на один оборот тут будет.
Новичкам, таким как я, точно пригодится.
Основная программаКод:(*Объявление переменных*) 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
Тригеры объявлены для двух энкодеров, используется в коде только энкодер 2 с фазами А2 и В2.Код:(*Переменная *) 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;




Ответить с цитированием