Страница 1 из 1

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

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

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

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

net spindel-on halui.spindle.start <= xhc-hb04.button-spindle
также и выключить можно выставив halui.spindle.stop в 1

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

Добавлено: 23 мар 2016, 13:31
Serg
С помощью триггера это делается.
http://linuxcnc.org/docs/devel/html/man ... lop.9.html

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

Добавлено: 23 мар 2016, 15:54
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, есть где хорошие ресурсы в сети с примерами ?

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

Добавлено: 24 мар 2016, 00:56
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 К сожалению тема развития не получила...

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

Добавлено: 24 мар 2016, 14:46
sergfrezer
Я б посоветовал освоить построение цифровых логических схем на типовых логических элементах типа И, ИЛИ, НЕ и т.п.
С этим проблем нет, проблемы в правильности описания нужных операций в HAL файле.
Допустим как описать чтобы при нажатии на кнопку spindel триггер менял состояние на выходе на котором весит включение шпинделя и инвертер NOT на выходе которого весит выключение шпинделя. В графическом виде это описать просто а вот тут с первого тычка не получается. Можете пример сделать какой нибудь? Спасибо за помощь.

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

Добавлено: 24 мар 2016, 14:53
nkp
sergfrezer писал(а):графическом виде это описать просто
тогда ClassicLadder в помощь))
там только графика+логика)

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

Добавлено: 24 мар 2016, 15:01
Сергей Саныч
Сигнал с выхода триггера через инвертор заведите на вход data этого же триггера. Сигнал от кнопки - на вход clk.
Состояние триггера будет меняться на противоположное при каждом нажатии.

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

Добавлено: 24 мар 2016, 17:13
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
Помогите, чего я тут не так делаю.. ошибка вылезает.. немогу побороть.

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

Добавлено: 24 мар 2016, 17:17
Serg
Ошибка-то какая?

P.S. Одного инвертора достаточно.

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

Добавлено: 24 мар 2016, 17:29
sergfrezer
Скриншот с ошибкой.

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

Добавлено: 24 мар 2016, 18:20
Serg
Достаточно просто текст скопипастить...

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

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

Добавлено: 24 мар 2016, 20:06
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

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

Добавлено: 27 апр 2016, 15:00
jo_key
А если сюда еще подвязать аппаратную кнопку (например на hm2_5i25.0.7i77.0.0.input-22) как должен выглядеть ХАЛ?

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

Добавлено: 21 июн 2016, 15:51
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

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

Добавлено: 21 июн 2016, 16:24
Nick
Да, toogle - хороший вариант. Там еще и debounce встроенный есть.

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

Добавлено: 21 июн 2016, 16:38
nkp
Выделение_038.png (4636 просмотров) <a class='original' href='./download/file.php?id=83046&mode=view' target=_blank>Загрузить оригинал (51.72 КБ)</a>

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

Добавлено: 04 июл 2016, 14:16
jo_key
Да, ЛинуксЦНЦ это блин, "нифига себе конструктор", которые одни и те же вещи можно решать кучей способов )))

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

Добавлено: 06 апр 2017, 16:18
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