Вы пишите в раздел Codesys 2.3, а вопросы задаёте по Codesys 3.5 и ПЛК2хх, повнимательней.
Вид для печати
Потому что ПЛК210-1Х не поддерживают подключение энкодеров.
Характеристики входов ПЛК210-0Х
Вложение 73639
Характеристики входов ПЛК210-1Х
Вложение 73640
Всем спасибо за помощь! Будем писать сами.
В кратком руководстве по эксплуатации на ПЛК210-12 указано, что он поддерживает энкодеры ABZ.
Вложение 73642
Да, большое спасибо. Пример точно не будет лишнем.
Вот попробуйте вот это:
Код:PROGRAM POU_ENCODER
VAR
//Энкодер направления вращения
a: BOOL; //Вход датчика А
b: BOOL; //Вход датчика В
a1: BOOL; //Условие 1го положения
a2: BOOL; //Условие 2го положения
a3: BOOL; //Условие 3го положения
a4: BOOL; //Условие 4го положения
//Энкодер направления вращения
//Направление вращения
c0: BOOL; //Вращение вперед
d0: BOOL; //Вращение назад
//Направление вращения
zIMP1: R_TRIG; //Фронт импульса датчика А
zIMP2: R_TRIG; //Фронт импульса датчика В
zIMP3: F_TRIG; //Спад импульса датчика А
zIMP4: F_TRIG; //Спад импульса датчика В
zIMP5: R_TRIG; //Фронт импульса для "Вращение вперед"
zIMP6: R_TRIG; //Фронт импульса для "Вращение назад"
//Определение импульсов сигнала
i1: DINT; //Количество импульсов сигнала датчика А
i2: DINT; //Количество импульсов сигнала датчика В
iF1: DINT; //Количество накопленных импульсов сигнала датчика А для "Вращение вперед"
iF2: DINT; //Количество накопленных импульсов сигнала датчика В для "Вращение вперед"
iR1: DINT; //Количество накопленных импульсов сигнала датчика А для "Вращение назад"
iR2: DINT; //Количество накопленных импульсов сигнала датчика В для "Вращение назад"
//Определение импульсов сигнала
RESET_BIT: BOOL;
END_VAR
VAR_INPUT
iA1: BOOL; //Входной импульс основного датчика
iA2: BOOL; //Входной импульс вспомогательного датчика
END_VAR
VAR_OUTPUT
oC0: BOOL; //Направление вращения - Вперед
oD0: BOOL; //Направление вращения - Назад
oN1: DINT; //Количество импульсов датчика А
oN2: DINT; //Количество импульсов датчика В
END_VAR
Код://iA1 = 0/1 - Входной импульс основного датчика
a := iA1;
//iA2 = 0/1 - Входной импульс вспомогательного датчика
b := iA2;
//Энкодер направления вращения
IF a AND NOT b THEN a1 := 1; END_IF
IF a AND b THEN a2 := 1; END_IF
IF NOT a AND b THEN a3 := 1; END_IF
IF NOT a AND NOT b THEN a4 := 1; END_IF
IF a1 AND a2 AND a AND b THEN d0 := a3 := a4 := 0; c0 := 1;
ELSIF a2 AND a3 AND NOT a AND b THEN d0 := a4 := a1 := 0; c0 := 1;
ELSIF a3 AND a4 AND NOT a AND NOT b THEN d0 := a1 := a2 := 0; c0 := 1;
ELSIF a4 AND a1 AND a AND NOT b THEN d0 := a2 := a3 := 0; c0 := 1;
ELSIF a1 AND a2 AND a AND NOT b THEN c0 := a3 := a4 := 0; d0 := 1;
ELSIF a2 AND a3 AND a AND b THEN c0 := a4 := a1 := 0; d0 := 1;
ELSIF a3 AND a4 AND NOT a AND b THEN c0 := a1 := a2 := 0; d0 := 1;
ELSIF a4 AND a1 AND NOT a AND NOT b THEN c0 := a2 := a3 := 0; d0 := 1;
END_IF
//Энкодер направления вращения
//Направление вращения
oC0 := c0;
oD0 := d0;
//Направление вращения
zIMP1(CLK := a);
zIMP2(CLK := b);
zIMP3(CLK := a);
zIMP4(CLK := b);
zIMP5(CLK := c0);
zIMP6(CLK := d0);
//Определение импульсов сигнала
IF c0 AND zIMP1.Q THEN i1 := i1 + 1; END_IF
IF d0 AND zIMP3.Q THEN i1 := i1 - 1; END_IF
IF c0 AND zIMP2.Q THEN i2 := i2 + 1; END_IF
IF d0 AND zIMP4.Q THEN i2 := i2 - 1; END_IF
IF c0 AND zIMP1.Q THEN iF1 := iF1 + 1; END_IF
IF zIMP5.Q AND zIMP3.Q THEN iF1 := iF1 - 1; END_IF
IF c0 AND zIMP2.Q THEN iF2 := iF2 + 1; END_IF
IF zIMP5.Q AND zIMP4.Q THEN iF2 := iF2 - 1; END_IF
IF zIMP6.Q AND zIMP1.Q THEN iR1 := iR1 + 1; END_IF
IF d0 AND zIMP3.Q THEN iR1 := iR1 - 1; END_IF
IF zIMP6.Q AND zIMP2.Q THEN iR2 := iR2 + 1; END_IF
IF d0 AND zIMP4.Q THEN iR2 := iR2 - 1; END_IF
//Определение импульсов сигнала
//Количество импульсов
oN1 := i1;
oN2 := i2;
//Количество импульсов
IF RESET_BIT THEN
i1 := i2 := iF1 := iF2 := iR1 := iR2 := 0;
RESET_BIT := a1 := a2 := a3 := a4 := c0 := d0 := 0;
END_IF
reset_bit - онлайн отладка руками? да и комент для него странный