Перейти к содержанию
Alan Derby

Mach 3. Как ускорить отклик программы на срабатывание датчика?

Рекомендуемые сообщения

Доброго времени, коллеги!

Столкнулся с проблемой.

Есть подпрограмма, которая должна сработать при нажатии на датчик (кнопка), но не срабатывает.

Если запустить выполнение программы, нажать датчик вручную и придержать его буквально на доли секунды, то он программа видит срабатывание и далее все работает чудесно. Однако, когда программа выполняется автоматически, механизм проскакивает датчик на высокой скорости, в панели Diagnostic успевает мигнуть лампочка подтверждающая, что датчик сработал, но программа продолжает работать так, как будто срабатывания не было.  

К сожалению, замедлить или как-то механически увеличить время нажатия датчика или замедлить механизм, не представляется возможным. 

Отсюда вопрос - как можно заставить срабатывать программу на кратковременное нажатие датчика? 

Поделиться сообщением


Ссылка на сообщение

Не знаю как в Mach3, но в промышленных системах ЧПУ в логике такие вещи прописываются. То есть по кратковременному срабатыванию датчика некий регистр принимает значение "1" и встаёт на самоподхват. По этому регистру и идёт обработка нужного события, после выполнения которого регистр принудительно возвращается в "0".

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

Поделиться сообщением


Ссылка на сообщение

У меня в ПО так же. Прописал, что при срабатывании датчика, счетчик делает +1, а при достижении заданного значения мотор должен включиться на реверс, а потом выключиться. Все это для переключения револьверной головки на токарном. Раньше, когда стоял медленный мотор, все срабатывало отлично, но смотреть на то, как он неспешно переключает инструмент со скоростью 8 оборотов в минуту было невозможно. Для ускорения поставил мотор, который работает в 10 раз быстрее, но теперь беда с датчиком - программа почему-то не реагирует на кратковременное срабатывание датчика. 

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

Поделиться сообщением


Ссылка на сообщение

Возможно скорость опроса входов очень маленькая и поэтому ПО не всегда успевает увидеть срабатывание датчика. Можно ли увеличить скорость опроса я не знаю. Тогда ещё есть варианты.
1. Поставить двигатель помедленнее.
2. Поставить отдельный быстрый контроллер на револьвер и пусть он им рулит. От ПО будет приходить сигнал на сколько позиций повернуть, от контроллера в ПО будут приходить сигналы о выполнении и завершении поворота.

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)
2 часа назад, Alan Derby сказал:

на кратковременное нажатие датчика? 

а  после  датчика ?  поставить Тригер (одновибратор)  и  пусть он  формирует  нужную  длительность ?

или  даже  на  логике

beginner27-5.gif

Изменено пользователем Cerg24

Поделиться сообщением


Ссылка на сообщение

Спасибо за советы!

Написал другую программу, просто для того, чтобы увидеть, какой сигнал получает контроллер. При срабатывании датчика эта программа включает счетчик и выводит его значение на экран. Так вот, получается, что даже при кратковременном срабатывании тдатчика счетчик успевает набрать около 6 тыс. срабатываний. Т.е. он опрашивает датчик с такой скоростью, что за то короткое время пока он включен, успевает набежать такое число.

Но в таком случае не понятно, почему при выполнении смены инструмента кратковременное срабатывание датчика не фиксируется, а продолжительное фиксируется. 

Чувствую, что дело скорее всего не в железе, а в программе. Видимо где-то я туплю. Завтра продолжу дальше ковырять.

Поделиться сообщением


Ссылка на сообщение
1 час назад, Alan Derby сказал:

счетчик успевает набрать около 6 тыс. срабатываний.

так  счётчик  что  считает  ?
1. кол. срабатываний ?   ( дребезг ?? )   6тыш. явно  Не то !
2. длит имп  в чем  в мк/с
3. кол. опросов  датчика  ??

Поделиться сообщением


Ссылка на сообщение

Программа была такая: 

 

Counter=1

If IsActive(input2) then

Counter=Counter+1

Message "Counter =" & Counter

End If

 

Если во время работы программы, даже на короткое время зажать датчик, то Counter накручивает большие значения. Т.е. пока зажат датчик, счетчик работает. 

Написал программу иначе, поставил два опроса - один на зажатие, второй на отпуск датчика, чтобы +1 получался только если нажать и отпустить. Программа имеет такой вид: 

Counter=1

If IsActive(input2) = true then

If IsActive(input2) = false then

Counter=Counter+1

Message "Counter =" & Counter

End If

End If

Теперь счетчик работает правильно, но почему-то не всегда. Т.е. если в процессе работы программы щелкать датчиком, то при каждом щелчке Counter увеличивается на 1, но почему-то срабатывает не каждый раз. Делаешь серию щелчков - все нормально, потом друг несколько пропусков, а потом снова нормально. Ничего не понимаю :(

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

А в чём разница между MACH3 на современном компе и каком -то древнем матобеспечении на антикварной Н-22

советской ? Начинайте с выставки  датчика. Замены его . Продолжайте проверкой переходной платы . Методом 

инженерной перекидки .Настройки MACH . Комп ( порты - штука ненадёжная при неграмотной сборке станка )...

Ну, за ваши макросы,  я не отвечаю ...

Изменено пользователем sermor

Поделиться сообщением


Ссылка на сообщение
10 часов назад, Alan Derby сказал:

If IsActive(input2) = false then

попробуйте конструкцию while ...wend и не вложенную и последовательную. а лучше приведите ваш макрос, или логику его работы словами. и куда подключен макрос(кнопка, сигнал , или команда мХХ), от этого тоже зависит логика работы. И «высокая скорость» это сколько в единицах измерения ? например - сколько мкс или мс нажата кнопка ?

Поделиться сообщением


Ссылка на сообщение

Есть револьверная головка на 6 инструментов для токарного станка (от ТПК-125). На оси установлен диск с выступами, при переключении на следующий инструмент выступ нажимает на кнопку (датчик). Револьверка вращается только в одну сторону, а при вращении в обратную ее фиксирует храповик. 

Логика работы такая: 

1. Получаем текущий номер инструмента. 

2. Сравниваем с целевым. Если номера равны, выходим из подпрограммы

4. Если номера не равны, то запускаем вращение по часовой стрелке. 

5. При срабатывании датчика к текущему номеру инструмента добавляем 1. 

6. Если номер стал = 7, то устанавливаем номер инструмента = 1 (т.к. в револьверке всего 6 инструментов).

7. Сравниваем текущий номер инструмнта с целевым.

8. Если равны, то включаем реверс для фиксации и выходим из подпрограммы, если нет, то возвращаемся на пункт 5 

 

Ранее на револьверке стоял штатный асинхронный двигатель РД-09. Все работало отлично, за исключением того, что очень-очень медленно. Решил поставить мотор пошустрее. Поставил. Теперь револьверка вращается быстро, но такое ощущение, что не видит срабатывание кнопки. 

Поделиться сообщением


Ссылка на сообщение

Alan Derby, а сигнал от датчика заведён на usb/ethernet плату для мача или лпт порт компа?

Поделиться сообщением


Ссылка на сообщение

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

Либо можно использовать промежуточный регистр в логике. По первому срабатыванию датчика он должен вставать на самоподхват на некоторое время. За это время выступ должен сойти с датчика но следующий выступ не должен успеть дойти до до него. Счётчик должен работать от этого регистра, а не от сигнала датчика. В этом варианте "лыжу" на датчике лучше превратить обратно в "горбик".

Удачи :hi: 

Поделиться сообщением


Ссылка на сообщение
42 минуты назад, Alan Derby сказал:

5. При срабатывании датчика к текущему номеру инструмента добавляем 1

Собака может быть зарыта именно на этом шаге.

Надо переписать обработчик срабатывания датчика и защититься от дребезга.

28 минут назад, kaw171983 сказал:

использовать промежуточный регистр в логике

и программную задержку. 

:classic_smile:

Дребезг.JPG

Поделиться сообщением


Ссылка на сообщение

sergeijob, электроника от Purelogic - Контроллер PLCM-E3/E3p, с платой расширения B1. Подключено через Ethernet. У меня такие работают на фрезерном и на токарном до этого все было путем.  

 

12 часов назад, kaw171983 сказал:

Либо можно использовать промежуточный регистр в логике. По первому срабатыванию датчика он должен вставать на самоподхват на некоторое время. За это время выступ должен сойти с датчика но следующий выступ не должен успеть дойти до до него. Счётчик должен работать от этого регистра, а не от сигнала датчика. В этом варианте "лыжу" на датчике лучше превратить обратно в "горбик".

 

12 часов назад, Jeem сказал:

и программную задержку. 

Сегодня хочу как раз все это попробовать. Пока правда не придумал, как это в программный код облечь. Буду думать. Спасибо!

Поделиться сообщением


Ссылка на сообщение
1 час назад, Alan Derby сказал:

Пока правда не придумал, как это в программный код облечь.


Tool=GetCurrentTool()
NewTool = GetSelectedTool()

If Tool=NewTool Then 
Exit Sub ' если менять не надо - выходим
End If
' здесь даете команду на старт двигателя смены инструмента
ActivateSignal(OUTPUT2)
While Tool<>NewTool 
While  IsActive(Input2) = false ' ждем когда закончиться 0 
Sleep(1) ' отдаем время 1 мс системе, поделать другие дела, и защиту бы добавить от зависания 
Wend
While  IsActive(Input2)=true  ' ждем когда закончиться 1
Sleep(1) ' отдаем время 1 мс системе, поделать другие дела и защиту бы добавить от зависания 
Wend
tool=tool+1
If tool > 6 Then 
tool = 1
End If
Wend
' здесь даете команду на стоп двигателя смены инструмента
DeActivateSignal(OUTPUT2)
sleep (500) ' время на останов здесь организуем реверс 
SetCurrentTool( tool )
Message "New tool =" & newtool ' в основном цикле опроса не зовем, т.к. общение с GUI всегда не предсказуемые задержки
 

 

Накидал в качестве идеи, и в general config в debounce interval/index debounce настройкой значений уберите дребезг. (и не было ли здесь больших значений ?)  

И все таки - как долго длиться нажатие микрика в рабочем режиме  ?  (сколько оборотов в секунду делает держатель инструмента, его примерный радиус, примерная длина контактной площадки - далее считаем).

В примере, импульс в 3 мс должен обрабатываться.

 

Поделиться сообщением


Ссылка на сообщение

Вы по сути предлагаете сделать смену не по датчику, а по времени. С таким же успехом можно составить алгоритм таким образом: 

1. Запустить вращение

2. Ожидать х времени

3. Прибавить номер инструмента +1

4. Сравнить с целевым. 

 

Вчера не было возможности позаниматься станком. Сегодня занялся.

Датчик имеет возможность определять как срабатывание так и выключение. Т.е. можно получать два сигнала - сигнал на выкл и сигнал на вкл. Попробую поработать с этим, а так же взял два резистора, попробую замедлить скорость вращения. На данный момент револьверка вращается со скоростью примерно 60 оборотов в минуту или один оборот в секунду. 

 

 

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

Программу написал - она работает как положено, но револьверка не работает как надо.

Долго ковырялся, но в итоге нашел в чем причина проблемы - вращение револьверки происходит слишком быстро и магнитные контакторы, которые переключают направление вращения мотора просто не успевают вовремя включить реверс.  Пока они производят переключение револьверка успевает сделать 0,8-1,2 оборота. 

Таким образом проблема переходит из плоскости механики и программирования в плоскость электрики. Надо какие-то быстрые релюшки найти.  

 

На случай, если кому-то понадобится получить бинарный сигнал с датчика, вне зависимости от длительности его срабатывания, привожу свой вариант программы: 

Программу написал так: 

 

10

Counter = 0 ' дополнительный счетчик, который будет работать при срабатывании датчика. При каждом цикле обнуляется.

If IsActive (Input1) Then ' если датчик активен, то...

Counter = Counter + 1  ' счетчик начинает накручиваться пока идет сигнал от датчика.

End If

 

If Counter > 0 Then ' Далее просто проверяем, если показания счетчика больше, чем 0, то 

Выполняем что нам нужно от сработавшего датчика

End If

 

Goto 10

Изменено пользователем Alan Derby

Поделиться сообщением


Ссылка на сообщение
2 часа назад, Alan Derby сказал:

Надо какие-то быстрые релюшки найти.  

Мотор маломощный, может рассмотреть вариант с ПЧ? Обойдётся в 3-4т.

Поделиться сообщением


Ссылка на сообщение
11 минут назад, sergeijob сказал:

Мотор маломощный, может рассмотреть вариант с ПЧ? Обойдётся в 3-4т.

А что за ПЧ?

Сейчас стоит мотор-редуктор от стеклоочистителя автомобильного. 

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

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)
4 минуты назад, Alan Derby сказал:

Сейчас стоит мотор-редуктор от стеклоочистителя автомобильного. 

Тогда ПЧ не пойдёт, думал Вы асинхронник поставили. Раз мотор на постоянку и небольшое напряжение, то может вместо пускателей поставить электронные ключи? Их сейчас для автоприменения много.

Изменено пользователем sergeijob

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, sergeijob сказал:

Тогда ПЧ не пойдёт, думал Вы асинхронник поставили.

Асинхронник там стоял - штатный РД-09. Все работало отлично, вот только скорость - слезы! Всего 8 оборотов в минуту. Решил, что мало, в итоге станок уже неделю стоит в нерабочем состоянии. Но отступать и переделывать обратно не хочу, ибо, не престало нам пасовать перед железяками неразумными :)

Поделиться сообщением


Ссылка на сообщение
5 минут назад, Alan Derby сказал:

Сейчас стоит мотор-редуктор от стеклоочистителя автомобильного. 

А у Вас якорь закорачивается при снятии питания?

Поделиться сообщением


Ссылка на сообщение

Нет, там же обычный DC-мотор стоит. Если питание отключить, то он ни как не стопорится, а еще примерно один оборот по инерции делает. 

Поделиться сообщением


Ссылка на сообщение

не знаю,может есть смысл сделать закорачивание якоря - как электротормоз. По типу как в сварочных полуавтоматах. Дабы убрать инерционность.

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу


×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.