Настройка кнопок через LPT порт

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение nkp »

VAV77 писал(а):Так ведь 10,11,12 и 13 пины - это входа (in).
с рисунками выше как раз и хотел это все объяснить ;)
VAV77 писал(а):кнопка СТОП прекрасно работает.
если есть отдельные пины - сделай все команды на отдельных кнопках...
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение VAV77 »

Отдельных пинов нет. На 10 пине all limit, на 11 пине приходит сигнал с датчика для продолжения отработки G-кода, на 12 хотел повесить ПУСК/ПАУЗА/ПРОДОЛЖИТЬ, а на 13 СТОП.
Прописал кнопку пуск (net run parport.0.pin-12-in halui.program.run) - при нажатии пишет "не могу сделать это (EMC_TASK_PLAN_RUN) в ручном режиме". Прописываю вместо ПУСК кнопку СТОП (net run parport.0.pin-12-in halui.program.stop) - кнопка СТОП работает. Прописываю и ПУСК и СТОП

net run parport.0.pin-12-in halui.program.run
net run parport.0.pin-13-in halui.program.stop

Программа не загружается и выскакивает ошибка

Debug file information:
Can not find -sec MOT -var MOT -num 1
Can not find -sec IO -var IO -num 1
Can not find -sec LINUXCNC -var NML_FILE -num 1
Can not find -sec EMC -var NML_FILE -num 1
MKTP-8f.hal:111: Signal 'run' can not add OUT pin 'parport.0.pin-13-in', it already has OUT pin 'parport.0.pin-12-in'
5575
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение nkp »

если есть два пина (12,13) - то можешь попробовать :
loadrt debounce cfg=2
addf debounce.0 base-thread
setp debounce.0.delay 10

net button12 <= parport.0.pin-12-in => debounce.0.0.in
net button13 <= parport.0.pin-13-in => debounce.0.1.in
net run-button12 <= debounce.0.0.out
net run-button13 <= debounce.0.1.out
net run-button12 => halui.mode.auto halui.program.run
net run-button13 => halui.program.stop
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение VAV77 »

Заработали. Но если я нажимаю на ПУСК еще раз, то отрабатывается команда как СТОП и выбрасывается ошибка "не могу сделать это (EMC_TASK_PLAN_RUN) в ручном режиме". Нажимаю еще раз ПУСК - программа начинает отрабатываться сначала. Если нажимать по очереди ПУСК и СТОП - то ошибка не возникает и если нажать несколько раз подряд кнопку СТОП - то ошибки тоже нет. А можно как то вместо ПУСК вставить код, который был раньше и отрабатывалось ПУСК/ПАУЗА/ПРОДОЛЖИТЬ. А то я в программировании очень плохо понимаю - пытаюсь учиться.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение nkp »

VAV77 писал(а):А можно как то вместо ПУСК вставить код, который был раньше и отрабатывалось ПУСК/ПАУЗА/ПРОДОЛЖИТЬ
сейчас попробовал - у меня тоже как то не уверенно "тройная" кнопка заработала...
не срабатывает edge ...
попозже посмотрим...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение nkp »

вот нашел - делал zilk:

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

loadrt toggle count=2
addf toggle.0 servo-thread
addf toggle.1 servo-thread

loadrt toggle2nist count=2
addf toggle2nist.0 servo-thread
addf toggle2nist.1 servo-thread

loadrt timedelay
addf timedelay.0  servo-thread

loadrt and2 count=3
addf and2.0 servo-thread
addf and2.1 servo-thread
addf and2.2 servo-thread

loadrt not count=2
addf not.0 servo-thread
addf not.1 servo-thread

loadrt or2 count=1
addf or2.0 servo-thread

setp toggle.0.debounce 100
setp toggle.1.debounce 100
setp timedelay.0.on-delay 1

net run-btn     and2.0.in0 and2.1.in0 and2.2.in0 timedelay.0.in <= parport.0.pin-12-in-not
net pause-btn   toggle.0.in <= parport.0.pin-15-in-not
net pause-tgl   toggle.0.out => toggle2nist.0.in
net is-paused   halui.program.is-paused => toggle2nist.0.is-on and2.1.in1 not.1.in
net is-idle     halui.program.is-idle => not.0.in
net delay       timedelay.0.out => and2.2.in1
net pause-not   not.1.out => and2.0.in1
net stop-1      and2.2.out => or2.0.in0
net stop-2      and2.0.out => or2.0.in1
net stop-out    or2.0.out  => toggle.1.in
net stop-tgl    toggle.1.out => toggle2nist.1.in
net idle-not    not.0.out => toggle2nist.1.is-on
net run-sig     toggle2nist.1.on => halui.mode.auto halui.program.run
net stop-sig    toggle2nist.1.off => halui.program.stop  
net step-sig    and2.1.out => halui.program.step
net pause-sig   toggle2nist.0.on => halui.program.pause
net resume-sig  toggle2nist.0.off => halui.program.resume
здесь две кнопки ...
их работа
(я не проверял- пробуй)
сейчас поправлю только - загрузку компонентов надо добавить ....
Последний раз редактировалось nkp 03 авг 2013, 12:06, всего редактировалось 1 раз.
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение VAV77 »

А почему кнопка ПУСК при повторном нажатии (если не нажать СТОП) - срабатывает как СТОП (и на экране показывается, что нажата СТОП). Но что интересно, если еще раз нажать ПУСК, то программа начинает отрабатываться но интересно - машина приезжает на первую точку и стоит (не сбрасываются пины, управляющие релюшками запуска сварки). Когда нажимаю СТОП, то слышен щелчек релюшек и при нажатии ПУСК отработка программы идет нормально. По идее при повторном нажатии кнопки ПУСК ничего не должно происходить?
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение VAV77 »

zilk писал(а):Продолжаем вариации на тему железных кнопок. Для тех джентльменов, которым надоело тыкать мышой в экран, предлагаю к рассмотрению вариант, где двумя кнопками выполняется 5 команд, а именно:
-- кнопка RUN/STOP/STEP:
запускает выполнение программы,
при выполнении программы останавливает программу и хоумит все оси,
в режиме паузы прикаждом нажатии выполняентся один шаг программы,
в режиме паузы при длительном нажатии >1 сек. также останавливает программу и хоумит все оси;
-- кнопка PAUSE/RESUME:
при выполнении программы переводит в режим паузы,
при следующем нажатии вызывает продолжение выполнения программы.
А можно в кнопке RUN/STOP/STEP убрать следующее:
zilk писал(а):при выполнении программы останавливает программу и хоумит все оси
убрать хоумит все оси
zilk писал(а):в режиме паузы при длительном нажатии >1 сек. также останавливает программу и хоумит все оси;
вообще убрать.
А то честно мне тяжело понять что в этом коде за что отвечает.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение nkp »

попытался поправить вверху...
может с ошибками - уже нет времени...)))
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение VAV77 »

Все заработало - спасибо. Только исправил в строке
nkp писал(а):net pause-btn toggle.0.in <= parport.0.pin-15-in-not
pin-15 на pin-13, а то кнопка ПАУЗА не работала.
И еще - что-то в режиме ПАУЗА при нажатии кнопки ПУСК/СТОП происходит не выполнение одного шага программы - а срабатывает как кнопка СТОП.
Но для меня это не важно - то что хотел - получил. А то, что вместо кнопок ПУСК/ПАУЗА/ПРОДОЛЖИТЬ и СТОП у меня сейчас получаются кнопки ПУСК/СТОП и ПАУЗА/ПРОДОЛЖИТЬ - так это даже лучше - меньше путаницы будет.
Еще раз спасибо.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Nick »

Тут похоже вот какая проблема -
halui работает в userspace, и обновляется раз в неизвестно сколько,
edge и все остальные работают в servo-thread, 1000 раз в секунду..

Самая засада - что если подлить сигнал от edge - то можем его обработать дважды от halui.... Т.е. стоим на паузе, нажимаем кнопку, сначала отработает снятие с паузы, а потом, отработает обратная постановка на паузу...
черт, надо что-то хитрое придумать...


т.е. нам надо придумать такую схему:
1. ждем нажатие кнопки
2. выход посылаем на edge (чтобы его обрезать)
3. выход посылаем на 3 and или на 3 toogle2nist
4. выход сбрасываем в halui и надо как то его отрубить через 0.1 с... т.е. еще 1 edge и timedelay...

Сложно как-то выходит, вам не кажется?
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Ворон226 »

Корректнее будет, если все управляющие кнопки будут работать по фронту и после фильтрации дребезга.
Может нужно, наконец, переделать и сигналы halui на "фронтовые"?
Хочешь быть счастливым? Будь им!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Nick »

Это избавит нас только от дополнительного edge+timedelay, остальное останется...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Serg »

Nick писал(а):Сложно как-то выходит, вам не кажется?
Есть-же flipflop: кнопку а clk, на data единицу - на выходе получаем единицу по первому-же фронту.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Nick »

проблема в том,что halui и flip-flop работают в разных потоках... надо сделать так, чтобы поймать фронт, потом его передать в halui, и до тех пор пока halui не отработает больше фронтов не ловить...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Serg »

Триггер ловит только один фронт и все последующие фронты его состояние не изменят, а когда halui отработает он сбросит триггер в исходное состояние (пин reset).
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка кнопок через LPT порт

Сообщение Nick »

А как halui сбросит? Там вроде не было пина изменения состояния... надо делать еще 1 триггер или что-то такое, что будет смотреть за всеми пинами состояний halui , который будет сбрасывать первый триггер...
Ответить

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