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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

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

Сообщение VAV77 »

Необходимо продублировать через LPT порт кнопки "ПУСК ПРОГРАММЫ" (на клавиатуре кнопка "R"), "СТОП ПРОГРАММЫ" (на клавиатуре кнопка "ESC") и "ПРОДОЛЖИТЬ" (на клавиатуре кнопка "S"). Как это можно прописать? В программе настройки я на эти пины поставил "программируемая кнопка". Я догадываюсь, что нужно прописать в hal файле, но что писать - не знаю. И еще, если можно так сделать, объединить кнопку "ПУСК ПРОГРАММЫ" (на клавиатуре кнопка "R") и команду "ПРИОСТАНОВИТЬ" (на клавиатуре кнопка "P"). Т.е. во время выполнения программы кнопка работает как "ПРИОСТАНОВИТЬ" и "ПРОДОЛЖИТЬ", а если программа закончилась отрабатываться, то кнопка работает как "ПУСК ПРОГРАММЫ".
Последний раз редактировалось VAV77 06 июл 2013, 09:29, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

для этого можно использовать пины halui...
первое :
в ini-файле в рабочей конфигурации в секции [HAL] пропишем HALUI = halui (если такой строки там нет):
Выделение(028).jpg (3048 просмотров) <a class='original' href='./download/file.php?id=16084&mode=view' target=_blank>Загрузить оригинал (287.83 КБ)</a>
в емс появятся пины halui :
Рабочий стол 1(011).jpg (3048 просмотров) <a class='original' href='./download/file.php?id=16085&mode=view' target=_blank>Загрузить оригинал (163.43 КБ)</a>
Выделение(026).jpg (3048 просмотров) <a class='original' href='./download/file.php?id=16082&mode=view' target=_blank>Загрузить оригинал (140.65 КБ)</a>
теперь их можно коннектить к пинам парпорта,например:
net run parport.0.pin-10-in halui.program.run
(это пишем в .hal )
теперь подав сигнал на 10-ю ногу LPT мы запускаем программу на выполнение
идентично любой другой пин halui присоеденяем
два обязательных условия:
используемый пин порта должен быть свободен
имя сигнала (в примере run) - должно быть уникальным (не повторяться)...
это способ: " одна команда - одна кнопка "
=============
сейчас найду описание совмещения кнопок...
вот и ...
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

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

Сообщение VAV77 »

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

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

Сообщение Nick »

Сделай просто как nkp написал - в файл название-станка.hal, или custom.hal добавляешь
nkp писал(а):net run parport.0.pin-10-in halui.program.run
вместо pin-10-in номер пина с кнопкой.
Так же можно сделать с пинами
halui.program.pause (bit, in) - пин для приостановки программы.
halui.program.resume (bit, in) - пин для возобновления программы
halui.program.run (bit, in) - пин для запуска программы.
halui.program.step (bit, in) - пин для выполнения программы пошагово.
halui.program.stop (bit, in) - пин для остановки программы.

Чтобы в одной кнопке совместить несколько функций надо их пропустить через логические компоненты.

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

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

Сообщение VAV77 »

Nick писал(а):Напиши, что будет делать каждая физическая кнопка и при каких условиях
У меня всего две кнопки, поэтому я хотел прописать на одну "run"(запуск программы - когда программа не запущена), а когда программа отрабатывается, то при первом нажатии "pause"(приостановка), а при повторном нажатии "resume"(возобновление). А вторая кнопка просто "stop" (остановка).
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Тогда нужно настроить только кнопку пуска, стоп и так настроен:
А кнопку пуск/пауза/продолжить настраиваем так:

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

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

net run-button <= parport.0.pin-14-in
net run-button => and2.0.in0 and2.1.in0 and2.2.in0 

net is-idle <= halui.program.is-idle => and2.0.in1
net is-running <= halui.program.is-running => and2.1.in1
net is-paused <= halui.program.is-paused => and2.2.in1

net run <= and2.0.out => halui.program.run
net pause <= and2.1.out => halui.program.pause
net resume <= and2.2.out => halui.program.resume
Попробуй так, хотя, может понадобится добавить oneshot, чтобы кнопка срабатывала только на нажатие и не генерировала события по 1000 раз в секунду.
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

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

Сообщение VAV77 »

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

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

Сообщение Nick »

вот это:
net run-button <= parport.0.pin-14-in
замени на:

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

loadrt edge
addf edge.0 servo-thread

loadrt debounce cfg=1
addf debounce.0 servo-thread

setp debounce.0.delay 10
net  button <= parport.0.pin-14-in => debounce.0.0.in
net debounced <= debounce.0.0.out => edge.0.in
net run-button <= edge.0.out
Это мы убрали дребезг на контакте и реагируем только на нажатие, а не пока кнопка нажата.
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

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

Сообщение VAV77 »

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

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

Сообщение VAV77 »

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

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

Сообщение Nick »

надо включить режим auto... попробуй добавить
halui.mode.auto к
net run <= and2.0.out => halui.program.run
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

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

Сообщение VAV77 »

Nick писал(а): попробуй добавить
halui.mode.auto к
net run <= and2.0.out => halui.program.run
Это так?
net run <= and2.0.out => halui.program.run halui.mode.auto
или просто отдельной строкой?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

net run <= and2.0.out => halui.mode.auto halui.program.run
да - так по идее должно работать...
VAV77
Кандидат
Сообщения: 43
Зарегистрирован: 28 мар 2013, 08:55
Репутация: 0
Контактная информация:

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

Сообщение VAV77 »

А у меня еще возник вопрос, но не по теме.
Возможно как-то сделать, что при загрузке LinuxCNC на указанный пин подавался сигнал? Объясню почему - просто при заргузке на пинах происходит что угодно и у меня иногда даже проходит сварка. Пока решил проблему тем, что на плату согласования питающее напряжение подаю через реле, а реле включаю кнопкой без фиксации, плюс одну группу контактов сделал для само подхвата. И сейчас включаю машину, потом кнопкой включаю системник, а после загрузки кнопкой подаю питание на плату согласования. А хотелось питание подавать автоматически, но через LPT, как я понимаю, это не все равно не получится, т.к. на этот пин при загрузке может податься случайно сигнал еще при загрузке. Может можно это решить через СОМ-порт или USB?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

напиши в хал файл:
setp parport.0.pin-01-out 1
и при загрузке указанный пин порта будет активным
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Самый надёжный вариант - это использовать небольшое устройство на МК, подключаемое к любому свободному порту (COM, USB, ...), устройство будет включать питание по какой-либо команде, тот-же modbus хорошо подойдёт и пригодится для расширения.

Самый простой - выделить один пин порта и подключить на него несложное устройство, которое будет включать реле при наличии импульсов на входе. В linuxcnc повесисть на этот пин генератор.
nkp писал(а):и при загрузке указанный пин порта будет активным
А какое у него будет состояние до того, как запустится linuxcnc?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

UAVpilot писал(а):А какое у него будет состояние до того, как запустится linuxcnc?
одному только компьютерному богу известно...))))
я только ответил
VAV77 писал(а):Возможно как-то сделать, что при загрузке LinuxCNC на указанный пин подавался сигнал?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

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

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

UAVpilot писал(а):Самый простой - выделить один пин порта и подключить на него несложное устройство, которое будет включать реле при наличии импульсов на входе. В linuxcnc повесисть на этот пин генератор.
Самый распространенный вариант, и вполне работоспособный. Даже специальный компонент-генератор есть в LinuxCNC - chargepump. При запуске выдает меандр с частотой basethread/2. И простенькая аналоговая схемка, которая эту импульсную последовательность обнаруживает.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Какой у тебя контроллер? Просто на некоторых контроллерах бывает встроенный chargepump он как раз и нужен, чтобы такого не происходило.
Ответить

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