PDA

Просмотр полной версии : Энкодер и алгоритм



Deanisii
26.03.2019, 01:11
Здравствуйте.
Я новичек в программировании при этом взялся написать программу для управления деревообрабатывающим станком. :)
Станок мой. Пишу ради интереса. :)
Управление осями написал, и дошел до самой главной части и тут полный затык. Абсолютный.
Понимаю, что задача простая но я не вижу решения. :(

Мой тупик, это калибровка осей.
Алгоритм достаточно простой, но при этом я в полной прострации.
Это должно работать так.
Ось движется в определенном направлении.
Энкодер дает неизвестное кол-во импульсов на оборот, при этом в энкодере есть выход Z срабатывающий на полный оборот винта. Оборотов много.
1. Нужно вычислить кол-во импульсов на оборот и запомнить это значение. пусть будет (Х). (Энкодеров несколько, они с разным кол-м импульсов, но принцип работы одинаков, хочу написать FB)
2. Каждый раз при срабатывании входа (Z) счетчик импульсов со входа (А) обнуляется.
Есть концевой выключатель, при срабатывании которого и начинается процесс калибровки.
2. После сработки концевика нужно вычислить сколько импульсов осталось выдать энкодеру на выходе (А) до завершения полного оборота. От (Х) отнимем текущее показание счетчика и получим остаток импульсов (Y) до полного оборота и нулевого положения.
3. отнимаем от (Y)-(T), где Т- кол-во импульсов для компенсации инерции двигателя. При достижении счетчиком значения (Y-T) останавливаем двигатель и ось долетает до нужного нам нуля по инерции. (в симуляторе T будет =0).



Привод.
Асинхронник 1230 об/мин с тормозом и редуктор 1/40. Энкодер на винте после редуктора.

Буду благодарен за помощь.

Фото станочка. :)
41913

lara197a
26.03.2019, 12:33
На ПЛК Овен вы этого не сделаете, т.к. нет прерываний и в цикле обработать позиционирование не получится.
Для прерываний по таймеру 20 мкс не получится, т.к. можно выполнять в подпрограмме только простые функции.
Возьмите для этого ПЛК с поддержкой позиционирования по осям.
Или лучше программу для управления и ПК.
к примеру тут
https://purelogic.ru/
https://darxton.ru/

Владимир Ситников
26.03.2019, 12:39
Если есть ПЛК110-М02-К, то на нём это без проблем делается. Лучшим ПЛК для движения он, явно, не является, но "посчитать количество импульсов на оборот" и "вовремя выдать команду на останов" -- вообще не проблема.
Hardella и PRU -- будет вам управление быстрыми входами/выходами. Но их, конечно, немного.

Deanisii
26.03.2019, 13:01
Спасибо за проявленный интерес.

Оборудование выбрал следующее.
Головное СПК107
Модуль ввода МВ210-202 они имеет быстрые входы для трех энкодеров. Столько из у меня на станке.
Модули вывода МУ210 2 штуки.

Винты с энкодерами вращаются макс 0,5об/сек. Энкодер дает 400 импульсов на оборот. В общем все очень медленно. Мне кажется задача выполнима для СПК Овен.

Позиционирование оси это линейное перемещение в определенную точку и все оси находятся на своих местах пока выполняется цикл фрезерования.



Позиционирование я написал, все работает.

Траблы именно с калибровкой.

Могу выложить файл проекта (только не ругать сильно, помним, я не программист) если кому охота глянуть.

lara197a
26.03.2019, 14:17
я вам писал, что не будет работать.
Связь обрабатывается только в цикле.
Владимир Вам написал, что только при прямом подключении ко входам ПЛК и при использовании стороннего (его) ПО.
При этом как вы будете модель вводить?
Проще через автокад в джикодах или вы хотите пальцем программы набирать.

Deanisii
26.03.2019, 16:57
Я видимо не очень понятно объяснил суть вопроса.
Мне не нужно в станке ни каких моделей. Задача одно. поставить ось на нужную высоту и стоять там неподвижно. Все. Во время цикла ось никуда не движется, энкодеры не крутятся, только каретка с деталью проезжает от одного концевика до другого и возвращается обратно. Затем каретка стоит на месте, ось меняет позицию, останавливается и каретка опять отрабатывает по концевикам. Все очень просто. У меня проблема только с колибровкой оси и все. Все остальное я написал и оно работает.

Владимир Ситников
26.03.2019, 21:06
Во время цикла ось никуда не движется, энкодеры не крутятся, только каретка с деталью проезжает от одного концевика до другого и возвращается обратно
Учитывайте, что при работе с модулями появляется задержка: приём сигнала от модуля, отправка команды в модуль, непредсказуемость времени срабатывания физического выхода на модуле.

Про первые две можно почитать в теме https://www.owen.ru/forum/showthread.php?t=21940
Про последнюю -- в руководстве на модуль (~15мс для простых, небыстрых выходов)

Пальцем в небо -- у вас будет разброс ~20-50мс. Иными словами, если вы будете повторять одну и ту же калибровку, то в зависимости от фазы луны выход будет выключаться то раньше, то позже.

0.05сек * 0.5об/сек == 0.03 об == 9 градусов. По сути, это минимально достижимый разброс вала, с учётом того, что механика отрабатывает каждый раз одинаково.

Если устраивает -- пробуйте. Но это с учётом того, что вы по хардкору подошли и всё настроили.
Если же "как обычно", то, возможно, и большая погрешность будет, т.к. "само собой" оно вряд ли хорошо заработает.

Deanisii
26.03.2019, 21:24
...
Про последнюю -- в руководстве на модуль (~15мс для простых, небыстрых выходов).....
По ссылке почитаю.
На модуле ввода что я выбрал обмен с спк идет по изернету и на бору модуля быстрые входы для трех энкодеров. Неужели не будет работать? Если так, то это более чем странно. :(

Тем временем у меня получилось написать некий алгоритм калибровки. :)
В эмуляции все работает как нужно. Прикрутить поправку на инерцию уже не сложно.

Поеду завтра за СПК и остальным борахлишком.
Прям интересно, сможет чайник, запустить станок самостоятельно или нет?

Владимир Ситников
26.03.2019, 22:35
Поеду завтра за СПК и остальным борахлишком.
Кстати, у СПК время цикла ещё больше гулять будет, чем у ПЛК.


На модуле ввода что я выбрал обмен с спк идет по изернету и на бору модуля быстрые входы для трех энкодеров
А выходы где? Или выходы на самом СПК?


Прикрутить поправку на инерцию уже не сложно.
Тут вопрос не только в поправке на инерцию, но и в том, что есть *случайная* составляющая. И её вы просто так не сможете компенсировать.

Deanisii
26.03.2019, 22:58
Конечно случайность есть.
Сейчас на станке это реализовано и работает. Точность позиционирования 0,1мм, если в градусах поворота винта то это 1,8 градуса.
Повторяемость 100%.
Калибровка осей работает по концевику и останавливается в нулях в 100 из 100 повторений. Контроллеру 18 лет. На платах выходов омроновские релюшки, дальше реле симменс и затем пускатель симменс. Цепочка механических связей от компьютера до двигателя оси содержит минимум 3 звена с механическим приводом контактов. При этом все работает.
Как они это смогли реализовать?
Как мне видится это можно сделать только подсчетом импульсом и внесение програмных коррекций на стоп оси. По моему все.
Там нет больше ни каких механизмов контроля позиционирования. Только энкодер и мотор с тормозом.
Может есть другие способы получить нужный результат?

ps
Частотников тоже нет.

Владимир Ситников
26.03.2019, 23:06
если в градусах поворота винта то это 1,8 градуса
Это градусы ДО или после редуктора?

Вы писали про редуктор 1/40.

Deanisii
26.03.2019, 23:07
После редуктора.

Владимир Ситников
27.03.2019, 13:45
Если после редуктора, то, похоже, может и получиться.

Иными словами, если мои 10 "пальцем в небо" градусов поделить на 40, то получается 0.3 градуса, что более-менее похоже на ваши градус-два.

Deanisii
27.03.2019, 23:30
Если после редуктора, то, похоже, может и получиться.

Иными словами, если мои 10 "пальцем в небо" градусов поделить на 40, то получается 0.3 градуса, что более-менее похоже на ваши градус-два.
В принципе это и хотел услышать. Спасибо за вселенную надежду. :)
Дело потиху движется. Алгоритм весь написал. Впереди рецепты. Там массивы?
Для меня что массивы данных, что темный лес одинаково. :) Буду с нуля разбираться.
Не могу найти главного, для меня, принципа построения рецептов. Механизм понятен, но вопросов много.
Как это должно быть.
Нужно создать около 40 инструментов (это комбинация положений всех трех осей) и из их комбинаций сделать циклы. Циклов не определенное количество. В реальности это от 4 до 400-+ различных циклов.
Как это реализуется в СПК? Задается фиксированное кол-во рецептов, по максимуму и пустые строки не идут в цикл? Или это может быть динамический список, зависящий от загруженного задания?

Осилю за приемлемое время, дней 5-6? Или там реально темный лес?

ivg67
08.04.2019, 15:03
Добрый день. Есть вопрос по датчикам. Они выдают только ипульс за один оборот или импульсы по каналам А и В сдвинутых относительно друг друга на 90 гр.? Если у вас стандартный инкрементальный датчик с А и В импульсами то можно использовать специализированный модуль обработки инкрементальных датчиков. К которому с одной стороны подсоединяется инкрементальный датчик а другой стороной через Modbus RTU к контроллеру овен. В результате в ячейках Modbus по соответствующим адресам вы получите накопленные значения счетчиков по каналу А и В, а так же разность этих значений. Т.е. вы сможете добиться точного позиционирования.

Deanisii
12.04.2019, 11:22
Спасибо за совет.
Модули ввода МВ210-202 умею работать с энкодерами. Ни каких доп модулей не нужно. Счетчик увеличивает или уменьшает значение в зависимости от направления вращения энкодера.