Доброе время суток.
Нашел на производстве намоточный станок и решил его восстановить. Начальство эту инициативу одобрило, правда с минимальными финансами.
Прошу знающих дать советы по управляющему алгоритму.
Станок для намотки проволоки на пластмассовые катушки. Вал шпинделя приводится во вращение асинхронным двигателем. За перемещение укладчика отвечает шаговый мотор. Управляет всем эти контроллер Дельта серии DVP-SA2. Индуктивный датчик Д1 определяет ноль позиции укладчика. На валу шпинделя установлен диск с 20 рисками и два индуктивных датчика Д2 и Д3, работают как энкодер (установлены со смещением сигнала 90 градусов). Точки А и Б программные концевики, задаются по щечкам катушки. АД управляется через частотник, ШД - через драйвер. Упрощенная схема на рисунке.
Принцип работы должен быть следующим. При вращении катушки укладчик распределяет равномерно проволоку в соответствии с устанавливаем шагом на 1 оборот, например шаг 0,5 мм и за десять оборотов катушки укладчик должен переместится на 5 мм. И далее с реверсом укладчика (между точками А и Б) пока не намотается вся катушка. Шпиндель, допустим плавно разгоняется до установившейся скорости и плавно тормозит до остановки, когда намотается заданное количество витков. А укладчик следит за скоростью (перемещением) шпинделя и соответственно перемещается.
Почитал в сети и нашел, что есть 2 варинта управлением укладчика:
Первый - укладчик перемещается на расстояние шага после каждого полного оборота шпинделя. Т.е. дискретное перемещение между полными оборотами с заданной скоростью, нужно фиксировать оборот шпинделя (при этом время перемещения укладчика меньше времени полного оборота).
Второй - укладчик перемещается с некоторой скоростью относительно скорости вращения шпинделя, что также соответствует перемещению на шаг за один оборот. Нужно определять скорость шпинделя и менять скорость укладчика.
Все это дело нужно запрограммировать на LD. Софт WPLSoft.
На первый взгляд все просто, но что-то никак не придумаю, как запрограммировать движения . По отдельности вроде все понятно. Как привязать движения укладчика к шпинделю, а может наоборот? Как реверсировать укладчик между программными точками А и Б, счетчиками? Как узнать текущую координату между А и Б, заводить сигнал от импульсного выхода (поступающий на драйвер ШД) на вход ПЛК.
Заранее всем спасибо. Поделитесь мыслями.
Управление намоткой
Управление намоткой
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Re: Управление намоткой
Все просто. У DVP-SA2 есть готовая библиотека для этого - Motion Control (управление движением).TamTam писал(а):Как привязать движения укладчика к шпинделю, а может наоборот? Как реверсировать укладчик между программными точками А и Б, счетчиками? Как узнать текущую координату между А и Б, заводить сигнал от импульсного выхода (поступающий на драйвер ШД) на вход ПЛК.
Посмотрите функции позиционирования DZRN, DDRVA, DDRVI, DPLSV и прочие.DVP-SA2 2-е поколение компактных ПЛК с расширенными возможностями. Компактный ПЛК с возможностью управления движением Поддержка двухосевой линейной/дуговой интерполяции
Для этого тоже готовые функции используют. High-speed counters (высокоскоростные счетчики) называется. Эти функции используют так называемые "быстрые входы" - обычные дискретные входы, но они могут вести счет с высокой скоростью - до десятков-сотен килогерц, вне зависимости от загрузки процессора.TamTam писал(а):два индуктивных датчика Д2 и Д3, работают как энкодер (установлены со смещением сигнала 90 градусов).
Посмотрите счетчики C251, C252, C254.
Re: Управление намоткой
Скорость шпинделя может быть различной. Например, шпиндель (катушка) разгоняется от 0 до 100 об/мин, укладчик между точками А и Б также движется с увеличивающейся скоростью, далее вращение идет на постоянной скорости, а при остановке с уменьшением скорости.
Не все функции импульсного выхода поддерживают изменение частоты во время выполнения (читаю русский мануал). Посмотрел функции, которые поддерживают изменение задания частоты импульсов во время выполнения: PLSY(57) и PLSV(157). Пока попробую с ними.
Мне кажется, что функции управлением движением предполагается использовать с сервоприводами, которые имеют свои обратные связи по положению, а контроллер дает задание. Нет?
Как узнать текущую (мгновенную) скорость шпинделя? Допустим, высокоскоростной счетчик будет считать импульсы от датчика Д2. Как измерить время между импульсами или пачкой импульсов? Поставить фиксированное время цикла, например 10 мс, и сравнивать показания счетчика в предыдущих двух циклах, так можно? Есть функция SPD(56) определение скорости, но это нужно задействовать еще один вход, а их и так мало.
Думаю дальше.
Не все функции импульсного выхода поддерживают изменение частоты во время выполнения (читаю русский мануал). Посмотрел функции, которые поддерживают изменение задания частоты импульсов во время выполнения: PLSY(57) и PLSV(157). Пока попробую с ними.
Мне кажется, что функции управлением движением предполагается использовать с сервоприводами, которые имеют свои обратные связи по положению, а контроллер дает задание. Нет?
Как узнать текущую (мгновенную) скорость шпинделя? Допустим, высокоскоростной счетчик будет считать импульсы от датчика Д2. Как измерить время между импульсами или пачкой импульсов? Поставить фиксированное время цикла, например 10 мс, и сравнивать показания счетчика в предыдущих двух циклах, так можно? Есть функция SPD(56) определение скорости, но это нужно задействовать еще один вход, а их и так мало.
Думаю дальше.
Re: Управление намоткой
У нас тут есть человек, который решал подобную задачу. Он указал на такой подводный камень: нужно использовать следящий привод, а не привод позиционирования. В чем разница? Привод позиционирования - это привод, который из точки А перемещается в точку Б с некоторой заданной скоростью, при этом выдерживает рампы разгона и торможения. Следящий же привод просто повторяет положение (угол поворота) ведущего привода, у него нет какой-либо заданной скорости и лимитов ускорения/торможения. Еще эту функцию называют электронный кулачок (CAM). Чисто технически разница в задатчике интенсивности и в типе регулятора (привод позиционирования - П-регулятор, следящий привод - ПИ-регулятор). Как-то так.TamTam писал(а):Скорость шпинделя может быть различной. Например, шпиндель (катушка) разгоняется от 0 до 100 об/мин, укладчик между точками А и Б также движется с увеличивающейся скоростью, далее вращение идет на постоянной скорости, а при остановке с уменьшением скорости.
Не все функции импульсного выхода поддерживают изменение частоты во время выполнения (читаю русский мануал). Посмотрел функции, которые поддерживают изменение задания частоты импульсов во время выполнения: PLSY(57) и PLSV(157). Пока попробую с ними.
А так да, motion control не совсем подходит. Но можно попробовать надстроить нечто над motion control, так как быстрые выхода все равно нужно как-то использовать. Управляйте скоростью с помощью функции DPLSV и некоего ПИ-регулятора. Мое мнение. Я как-то добавлял работу с обратной связью по положению в motion control, хотя изначально она там отсутствует.
Почему? Для управления шаговиками - либо без обратной связи, либо с нею.TamTam писал(а):Мне кажется, что функции управлением движением предполагается использовать с сервоприводами, которые имеют свои обратные связи по положению, а контроллер дает задание. Нет?
Зачем измерять мгновенную скорость? Для управления намоткой надо знать положение, а не скорость.TamTam писал(а):Как узнать текущую (мгновенную) скорость шпинделя? Допустим, высокоскоростной счетчик будет считать импульсы от датчика Д2.
Re: Управление намоткой
Вернулся к работе над станком. Заменил псевдоэнкодер на валу катушки (датчики Д1 и Д2) энкодером на 1000 имп./об.
Датчик Д2 теперь считает оборот по метке на диске.
Управляю шаговиком функцией PLSY. Принцип такой: определяю скорость шпинделя по энкодеру, рассчитываю по ней требуемую скорость для укладчика. В принципе работает хорошо, но только для первого ряда. Дальше что-то идет не так. Причину никак не найду. Мне же надо намотать 30-100 рядов в зависимости от диаметра. 2-3 ряда еще можно, дальше намотка сбивается, цепляется за соседние витки. Предполагаю, либо что-то не успевает, либо вперед бежит.
Если считать импульсы энкодера быстрым счетчиком с уставкой 10, далее его сбрасывать. Но не потеряются ли импульсы во время сброса счетчика? Или считать счетчиком все импульсы, а в каждом цикле сравнивать набранное значение (складывать с уже отработанными?). А дальше запустить команду PLSY и выдать 1 импульс, но тут вроде как все равно один цикл контроллера требуется для запуска PLSY. А может получиться, что функция PLSY выполняется, а уже приходит следующий запрос на команду PLSY. Т.о. PLSY может "потеряться" или выполниться с опозданием.
Да и с реверсом укладчика я упростил. Сравниваю текущее значение импульсов с заданным (программный концевик) и соответственно включаю/отключаю выход ПЛК для команды направления драйвера ШД. На глаз не сбивается, но внутренний голос шепчет, что схалтурил .
В общем нужна идея, как. Направьте на путь.
Всем участвующим и отписавшимся заранее спасибо.
Датчик Д2 теперь считает оборот по метке на диске.
Управляю шаговиком функцией PLSY. Принцип такой: определяю скорость шпинделя по энкодеру, рассчитываю по ней требуемую скорость для укладчика. В принципе работает хорошо, но только для первого ряда. Дальше что-то идет не так. Причину никак не найду. Мне же надо намотать 30-100 рядов в зависимости от диаметра. 2-3 ряда еще можно, дальше намотка сбивается, цепляется за соседние витки. Предполагаю, либо что-то не успевает, либо вперед бежит.
Поискал по форуму, есть похожая тема, но задача несколько другая как мне показалось (или не ту нашел). И что такое И (интегральная часть в ПИД) составляющая в физическом смысле будет? Как я понимаю И составляющая сглаживает изменение натяжения.Михайло писал(а):У нас тут есть человек, который решал подобную задачу. Он указал на такой подводный камень: нужно использовать следящий привод, а не привод позиционирования. В чем разница? Привод позиционирования - это привод, который из точки А перемещается в точку Б с некоторой заданной скоростью, при этом выдерживает рампы разгона и торможения. Следящий же привод просто повторяет положение (угол поворота) ведущего привода, у него нет какой-либо заданной скорости и лимитов ускорения/торможения. Еще эту функцию называют электронный кулачок (CAM). Чисто технически разница в задатчике интенсивности и в типе регулятора (привод позиционирования - П-регулятор, следящий привод - ПИ-регулятор). Как-то так.
Вот и не знаю как это сделать. Допустим, мне надо на десять импульсов от энкодера выдать один импульс на шаговик, т.е. повернулась катушка на 1 градус, переместил укладчик на 0,1 мм. Как такое запрограммировать?Михайло писал(а):Зачем измерять мгновенную скорость? Для управления намоткой надо знать положение, а не скорость.
Если считать импульсы энкодера быстрым счетчиком с уставкой 10, далее его сбрасывать. Но не потеряются ли импульсы во время сброса счетчика? Или считать счетчиком все импульсы, а в каждом цикле сравнивать набранное значение (складывать с уже отработанными?). А дальше запустить команду PLSY и выдать 1 импульс, но тут вроде как все равно один цикл контроллера требуется для запуска PLSY. А может получиться, что функция PLSY выполняется, а уже приходит следующий запрос на команду PLSY. Т.о. PLSY может "потеряться" или выполниться с опозданием.
Да и с реверсом укладчика я упростил. Сравниваю текущее значение импульсов с заданным (программный концевик) и соответственно включаю/отключаю выход ПЛК для команды направления драйвера ШД. На глаз не сбивается, но внутренний голос шепчет, что схалтурил .
В общем нужна идея, как. Направьте на путь.
Всем участвующим и отписавшимся заранее спасибо.
Re: Управление намоткой
С каждым намотанным рядом у Вас увеличивается радиус R, поэтому следует замедлять угловую скорость в R/R0 раз, чтобы линейная скорость осталась прежней. В Вашей задаче важен баланс линейных скоростей: "сколько м/мин выдало, столько и намотало". R0 - это начальный радиус намотки (при пустой катушке). R считать по намотанной длине: R = R0 + k*L, где L - намотанная длина, k - некий коэффициент, учитывающий толщину материала и ширину ряда.TamTam писал(а):В принципе работает хорошо, но только для первого ряда. Дальше что-то идет не так. Причину никак не найду. Мне же надо намотать 30-100 рядов в зависимости от диаметра. 2-3 ряда еще можно, дальше намотка сбивается, цепляется за соседние витки. Предполагаю, либо что-то не успевает, либо вперед бежит.
Не, не сглаживание. Правильнее понимать как скорость "рыскания": увеличение или уменьшение искомой (регулируемой) величины для нахождения баланса (достижения цели управления). Но не во всех задачах управления "рыскание" применимо.TamTam писал(а):Как я понимаю И составляющая сглаживает изменение натяжения.
Это сложно. Вы требуете жестко связать входную и выходную величины, однако фактически Вас должна устроить мягкая связь. Вы можете вместо 1:10 получать значения 1:8, 1:9, 1:10, 1:11, 1:12 и т.д., но важно, что при рассмотрении более длительного периода времени соотношение стремится к 1:10, например, 10:99 или 10:101 или 1000:10015. Это будет достигаться за счет обратной связи.TamTam писал(а):Вот и не знаю как это сделать. Допустим, мне надо на десять импульсов от энкодера выдать один импульс на шаговик, т.е. повернулась катушка на 1 градус, переместил укладчик на 0,1 мм. Как такое запрограммировать?
См. выше. Запоздание на миллисекунды не имеет значения, главное, чтобы соотношение импульсов за более длительный период выдерживалось.TamTam писал(а):Если считать импульсы энкодера быстрым счетчиком с уставкой 10, далее его сбрасывать. Но не потеряются ли импульсы во время сброса счетчика? Или считать счетчиком все импульсы, а в каждом цикле сравнивать набранное значение (складывать с уже отработанными?). А дальше запустить команду PLSY и выдать 1 импульс, но тут вроде как все равно один цикл контроллера требуется для запуска PLSY. А может получиться, что функция PLSY выполняется, а уже приходит следующий запрос на команду PLSY. Т.о. PLSY может "потеряться" или выполниться с опозданием.
Не сводите задачу к жесткому соотношению скоростей. Еще раз повторю: важна не скорость, а положение (длина). Измеряйте выданную длину и старайтесь наматывать столько же. "Старайтесь" означает буквально, что от Вас не требуется жесткого соблюдения правила, допускается кратковременное отклонение.