PDA

Просмотр полной версии : ПЛК 210-02, энкодер AB и переполнение DINT



roskmv
19.04.2025, 17:18
83280
83281
Добрый день!
Прошу разъяснить.
У меня ПЛК 210-02 и энкодер ABZ. Я подключаю его к ПЛК и конфигурирую как AB энкодер. Привязываю переменную в конфигурации к соответствующему каналу для считывания импульсов энкодера. На скрине все видно. Да и сам вопрос на скрине есть. У меня цепь вращается вперед, как я понял счет будет идти "бесконечно" и в какой-то момент времени все равно произойдет переполнение этого канала и переменной типа DINT. Какое значение покажет тут энкодер при этом и как его сбрасывать? Мне бы хотелось сбрасывать значение энкодера по датчику, у меня при вращении метка на цепи проходит мимо датчика, он как раз и должен определять 0 положение цепи, начальная точка, вот по нему я и хотел обнулять энкодер. Подскажите, возможно ли это и как мне лучше поступить, дайте совет? Может кто из своего опыта что подскажет?

Евгений Кислов
19.04.2025, 18:33
Добрый день.


Какое значение покажет тут энкодер при этом

0


как его сбрасывать? Мне бы хотелось сбрасывать значение энкодера по датчику, у меня при вращении метка на цепи проходит мимо датчика, он как раз и должен определять 0 положение цепи, начальная точка, вот по нему я и хотел обнулять энкодер

Сделайте по аналогии с примером:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_Plc21xx_RetainCountersWithReset_3517v1.pro jectarchive

roskmv
20.04.2025, 00:19
Вы пишите, что покажет энкодер 0 при переполнении DINT и потом снова начнет отсчет с 0? Но судя по 83286 этой картинке должен уйти в отрицательные значения, или для энкодера в данном случае работает не так?
Да, и вот еще подумал, а если начать с 0 и крутить в обратную стороны, что будет со значением энкодера, уйдет в минусовые значения?

roskmv
20.04.2025, 00:52
Добрый день.



0



Сделайте по аналогии с примером:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/11_Other/Example_Plc21xx_RetainCountersWithReset_3517v1.pro jectarchive

Но в этом примере используется ПЛК 210-11, а у меня 210-02. У моего нет отдельно сброса значения счетчика поканально, есть только сброс при загрузке проекта, а это не то что мне надо.

Евгений Кислов
20.04.2025, 07:36
или для энкодера в данном случае работает не так?

Не так.


Да, и вот еще подумал, а если начать с 0 и крутить в обратную стороны, что будет со значением энкодера, уйдет в минусовые значения?

Да.


Но в этом примере используется ПЛК 210-11, а у меня 210-02. У моего нет отдельно сброса значения счетчика поканально, есть только сброс при загрузке проекта, а это не то что мне надо

В рамках примера - вы можете "cбросить" счетчик путем изменения значения udiOffset_Di01.
Мы в ближайшие дни отредактируем пример, чтобы сделать его более универсальным.

roskmv
20.04.2025, 09:18
по поводу "крутить в обратную сторону от 0" и значение уйдет в минус... Вот это тоже беспокоит, как с этим быть, а именно с переходом через 0 в обратную сторону? В моем механизме обратное движение тоже допускается

Евгений Кислов
20.04.2025, 09:39
Вот это тоже беспокоит, как с этим быть, а именно с переходом через 0 в обратную сторону?

В чем причина беспокойства и почему с этим надо "как-то быть"?

roskmv
20.04.2025, 14:20
просто не понятно как работать с этим отрицательным значением?
вот мой код, для обработки и накопления значения с энкодера

IF ChainEnc_Imp > old_enc THEN (* Движение вперед *)
ChainEnc := ChainEnc + (ChainEnc_Imp - old_enc);
ELSIF idChainEnc_Imp < old_enc THEN (* Движение назад *)
ChainEnc := ChainEnc - (old_enc - ChainEnc_Imp);
END_IF

ChainEnc_Imp - это переменная энкодера
old_enc - значение энкодера с предыдущего цикла ПЛК
ChainEnc - сохраняемое Retain переменная для положения цепи (ну, я его потом преобразую в мм.)

и вот тут мне не нравится, что если обратный счет, то при переходе через 0 может быть такая ситуация, когда old_enc еще положительное, а ChainEnc_Imp тут уже отрицательное число, и вот в этот момент все нарушается. То есть если в пределах диапазона DINT , то код должен работать нормально, а вот при переполнениях DINT вверху или внизу диапазона все нарушается. Пока не пойму как мне сделать?!

Евгений Кислов
20.04.2025, 14:33
ChainEnc_Imp - это переменная энкодера

...счетчика импульсов энкодера

Поэтому


мой код, для обработки и накопления

вот эта задумка мне не очень понятна.

Я могу только ещё раз посоветовать изучить устройство примера по ссылке выше.

roskmv
20.04.2025, 18:02
Хорошо, еще подумаю над примером, но все равно пока мне не понятно, как реализовать счет, если вращение в обратную сторону и происходит переход через 0 и потом в "таргетовом счетчике" появляются отрицательные значения...

roskmv
20.04.2025, 18:06
Не так.
В рамках примера - вы можете "cбросить" счетчик путем изменения значения udiOffset_Di01.
Мы в ближайшие дни отредактируем пример, чтобы сделать его более универсальным.

вот тут еще не понял о сбросе какого счетчика речь? Вы имеете ввиду "программный" счетчик, т.к. как я понял "таргетовый" сбросить не возможно (ну только при перезагрузке проекта). Кстати, а "таргетовый счетчик " может быть сброшен при перезагрузке ПЛК, или только при перезаливке проекта?

Евгений Кислов
20.04.2025, 18:17
Вы имеете ввиду "программный" счетчик,

Да, его.


Кстати, а "таргетовый счетчик " может быть сброшен при перезагрузке ПЛК,

Да, он сбросится после перезагрузки ПЛК.

roskmv
20.04.2025, 21:18
А вот еще такой вопрос есть. Если использовать ABZ энкодер и в конфигурации активировать именно как ABZ энкодер, но при этом вместо фазы Z подключить на соответствующий вход ПЛК нужный мне сигнал (например, датчик 0 начального положения цепи). И в определенный момент, как датчик сработает значение счетчика энкодера обнулится или счетчик числа оборотов увеличится на 1 ?

Евгений Кислов
21.04.2025, 06:18
Cчетчик числа оборотов должен увеличиться на 1.

roskmv
21.04.2025, 09:04
Хорошо, еще подумаю над примером, но все равно пока мне не понятно, как реализовать счет, если вращение в обратную сторону и происходит переход через 0 и потом в "таргетовом счетчике" появляются отрицательные значения...
Евгений, вы вот это сообщение пропустили, не ответили. Можете пояснить, подсказать ?

Евгений Кислов
21.04.2025, 09:21
Евгений, вы вот это сообщение пропустили, не ответили. Можете пояснить, подсказать ?

Давайте продолжим общение в рамках вашего запроса на support@owen.ru, который вы недавно отправили.

roskmv
21.04.2025, 09:56
хорошо, спасибо