Кнопка с двумя состояниями в HAL

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
sergfrezer
Новичок
Сообщения: 7
Зарегистрирован: 23 мар 2016, 00:52
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Кнопка с двумя состояниями в HAL

Сообщение sergfrezer »

Пытаюсь разобраться с LInuxCNC.. вроде немного получатся. Решил начать с подключения беспроводного пульта HB04.
Столкнулся с надобностью завести на один внешний сигнал (кнопку) включение и выключение вращения шпинделя. Если использовать две внешних кнопки то все работает а как сделать чтобы шпиндель включался и выключался одной кнопкой пока не понял, может кто сталкивался, подскажите как это сделать.

вот так включаю

Код: Выделить всё

net spindel-on halui.spindle.start <= xhc-hb04.button-spindle
также и выключить можно выставив halui.spindle.stop в 1
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение Serg »

С помощью триггера это делается.
http://linuxcnc.org/docs/devel/html/man ... lop.9.html
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergfrezer
Новичок
Сообщения: 7
Зарегистрирован: 23 мар 2016, 00:52
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение sergfrezer »

Спасибо за помощь.
С первого раза не получилось придумать как сдлеать с помощью триггера, вываливается ошибка. Поправте как правильно.

Код: Выделить всё

loadrt  flipflop
addf flipflop.0 servo-thread
net trigger flipflop.0.clk <= xhc-hb04.button-spindle
net spindel-on flipflop.0.out  => halui.spindle.start
#net spindel-off flipflop.0.reset => halui.spindle.stop (у триггера инверсного выхода не нашел, пока не понял как сделать.)
Только изучаю hal, есть где хорошие ресурсы в сети с примерами ?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение Serg »

sergfrezer писал(а):у триггера инверсного выхода не нашел, пока не понял как сделать.
К выходу прицепите инвертор http://linuxcnc.org/docs/devel/html/man/man9/not.9.html
sergfrezer писал(а):Только изучаю hal, есть где хорошие ресурсы в сети с примерами ?
Я б посоветовал освоить построение цифровых логических схем на типовых логических элементах типа И, ИЛИ, НЕ и т.п., после этого останется только сообразить, что HAL - это по сути язык описания таких схем.
Можно ещё вот эту тему почитать для понимания сути HAL: http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=5751 К сожалению тема развития не получила...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergfrezer
Новичок
Сообщения: 7
Зарегистрирован: 23 мар 2016, 00:52
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение sergfrezer »

Я б посоветовал освоить построение цифровых логических схем на типовых логических элементах типа И, ИЛИ, НЕ и т.п.
С этим проблем нет, проблемы в правильности описания нужных операций в HAL файле.
Допустим как описать чтобы при нажатии на кнопку spindel триггер менял состояние на выходе на котором весит включение шпинделя и инвертер NOT на выходе которого весит выключение шпинделя. В графическом виде это описать просто а вот тут с первого тычка не получается. Можете пример сделать какой нибудь? Спасибо за помощь.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение nkp »

sergfrezer писал(а):графическом виде это описать просто
тогда ClassicLadder в помощь))
там только графика+логика)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение Сергей Саныч »

Сигнал с выхода триггера через инвертор заведите на вход data этого же триггера. Сигнал от кнопки - на вход clk.
Состояние триггера будет меняться на противоположное при каждом нажатии.
Чудес не бывает. Бывают фокусы.
sergfrezer
Новичок
Сообщения: 7
Зарегистрирован: 23 мар 2016, 00:52
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение sergfrezer »

Код: Выделить всё

# Spindle on\off
loadrt not names=not.0,not.1
addf not.0 servo-thread
addf not.1 servo-thread
loadrt flipflop names=flipflop.0
addf flipflop.0 servo-thread
net sig1 flipflop.0.clk <= xhc-hb04.button-spindle
net sig2 flipflop.0.out => not.0.in not.1.in halui.spindle.start 
net sig3 flipflop.0.data <= not.0.out
net sig4 not.1.out => halui.spindle.stop
Помогите, чего я тут не так делаю.. ошибка вылезает.. немогу побороть.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение Serg »

Ошибка-то какая?

P.S. Одного инвертора достаточно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergfrezer
Новичок
Сообщения: 7
Зарегистрирован: 23 мар 2016, 00:52
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение sergfrezer »

Скриншот с ошибкой.
Вложения
Снимок экрана - 24.zip
(59.22 КБ) 385 скачиваний
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение Serg »

Достаточно просто текст скопипастить...

Похоже flipflop уже где-то раньше загружен.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sergfrezer
Новичок
Сообщения: 7
Зарегистрирован: 23 мар 2016, 00:52
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение sergfrezer »

UAVpilot писал(а):Достаточно просто текст скопипастить...

Похоже flipflop уже где-то раньше загружен.

Да , спасибо !
загрузка flipflop была ниже.

Скопировал все в одну загрузку и заработало. :good:

Код: Выделить всё

# Spindle on\off
loadrt not names=not.0
addf not.0 servo-thread
loadrt flipflop names=flipflop_spindel,flipflop_resume,flipflop_pause,flipflop_run

addf flipflop_spindel servo-thread
addf flipflop_resume servo-thread
addf flipflop_pause servo-thread
addf flipflop_run servo-thread

net sig1 flipflop_spindel.clk <= xhc-hb04.button-spindle
net sig2 flipflop_spindel.out => not.0.in halui.spindle.start 
net sig3 flipflop_spindel.data halui.spindle.stop <= not.0.out
jo_key
Почётный участник
Почётный участник
Сообщения: 262
Зарегистрирован: 19 сен 2011, 14:49
Репутация: 30
Настоящее имя: Евгений
Откуда: Украина, Харьков
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение jo_key »

А если сюда еще подвязать аппаратную кнопку (например на hm2_5i25.0.7i77.0.0.input-22) как должен выглядеть ХАЛ?
jo_key
Почётный участник
Почётный участник
Сообщения: 262
Зарегистрирован: 19 сен 2011, 14:49
Репутация: 30
Настоящее имя: Евгений
Откуда: Украина, Харьков
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение jo_key »

Попробовал ентот ФлипФлоп, не совсем понравился. Сделал сдедующим образом (кнопка вкл СОЖ)

net coolant-btn and2.6.in0 <= hm2_5i25.0.7i77.0.0.input-27
net machine-is-on and2.6.in1 <= halui.machine.is-on
net coolant-request toggle.0.in <= and2.6.out
net coolant-toggle toggle2nist.0.in <= toggle.0.out
net coolant-is-on toggle2nist.0.is-on <= halui.flood.is-on
net coolant-on halui.flood.on <= toggle2nist.0.on
net coolant-off halui.flood.off <= toggle2nist.0.off
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение Nick »

Да, toogle - хороший вариант. Там еще и debounce встроенный есть.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение nkp »

Выделение_038.png (4614 просмотров) <a class='original' href='./download/file.php?id=83046&mode=view' target=_blank>Загрузить оригинал (51.72 КБ)</a>
jo_key
Почётный участник
Почётный участник
Сообщения: 262
Зарегистрирован: 19 сен 2011, 14:49
Репутация: 30
Настоящее имя: Евгений
Откуда: Украина, Харьков
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение jo_key »

Да, ЛинуксЦНЦ это блин, "нифига себе конструктор", которые одни и те же вещи можно решать кучей способов )))
jo_key
Почётный участник
Почётный участник
Сообщения: 262
Зарегистрирован: 19 сен 2011, 14:49
Репутация: 30
Настоящее имя: Евгений
Откуда: Украина, Харьков
Контактная информация:

Re: Кнопка с двумя состояниями в HAL

Сообщение jo_key »

так же можно и мультиклик использовать
multiclick.N

multiclick.N.in bit in
multiclick.N.single-click bit out
multiclick.N.single-click-only bit out
multiclick.N.double-click bit out
multiclick.N.double-click-only bit out
multiclick.N.triple-click bit out
multiclick.N.triple-click-only bit out
multiclick.N.quadruple-click bit out
multiclick.N.quadruple-click-only bit out
multiclick.N.state s32 out
Ответить

Вернуться в «LinuxCNC»