Страница 1 из 1
Как передать в hal информацию о выполняемой команде
Добавлено: 02 май 2013, 09:08
Сергей Саныч
Как можно получить в hal информацию о том, что выполняется конкретная команда G-кода?
Например, чтобы изменить реакцию системы на срабатывание датчиков в зависимости от того, какая команда выполняется. Скажем, если датчик длины инструмента вдруг сработал не во время команды G38, а при выполнении команд движения, то это надо расценивать, как аварийную ситуацию со всеми вытекающими последствиями.
Кстати, при выполнении MDI такая реакция уже реализована в Axis. А вот при выполнении программы - нет.
Re: Как передать в hal информацию о выполняемой команде
Добавлено: 02 май 2013, 15:05
nkp
вариантов наверно много (в силу гибкости емс) - но что в голову сразу пришло :
перед "нужным" кодом вставлять М-код с активацией определенного пина:
M105
Код: Выделить всё
#!/bin/bash
halcmd setp mcode.00.activate 1
exit 0
после отработки операции пин деактивируем...
в хал (или ладдере) построить какой нибудь логический элемент (с motion.probe-input )
---------
или если это касается конкретно G38 - то можно написать компонент , в котором использовать питон-интерфейс:
Код: Выделить всё
import linuxcnc
s = linuxcnc.stat()
s.poll()
print s.probing
тут
s.poll() выдает True или False в зависимости от состояния прцесса
probingа
Re: Как передать в hal информацию о выполняемой команде
Добавлено: 02 май 2013, 15:41
Сергей Саныч
nkp писал(а):перед "нужным" кодом вставлять М-код с активацией определенного пина:
Да, пожалуй, это вполне приемлемый вариант. Потому, что G38 используются, как правило, в составе подпрограмм, а в основном G-коде только вызовы.
nkp писал(а):или если это касается конкретно G38 - то можно написать компонент , в котором использовать питон-интерфейс:
Да, это касается только G38. Но с Питоном я пока что очень на "Вы", поэтому желательно расшифровать каждую строчку. я правильно понял, что при G38 LCNC (и только тогда) находится в состоянии probing, что мы и отлавливаем? А кто должен вызывать этот компонент?
ЗЫ: Дошло, вроде. Это комонент hal, он вызывается регулярно, скажем по servo thread?
Re: Как передать в hal информацию о выполняемой команде
Добавлено: 02 май 2013, 16:12
nkp
Serg-tmn писал(а):пожалуй, это вполне приемлемый вариант
дополню (может кому то пригодится

):
пропишем в файл M105 активацию пина:
Код: Выделить всё
#!/bin/bash
halcmd setp mcode.00.activate 1
exit 0
а в M106 - деактивацию :
Код: Выделить всё
#!/bin/bash
halcmd setp mcode.00.activate 0
exit 0
(оба файла положить в папку , прописанную в ини в "PROGRAM_PREFIX = ") и сделать исполняемыми
перезагрузить емс ...(если был запущен)
а в фильтре в ини прописать замену "нужного кода" - допустим G38 , на :
Код: Выделить всё
[FILTER]
PROGRAM_EXTENSION = .ngc Script sed
ngc = sed 's/G38/M105 G38 M106/i'
тут емс может ругнуться по моему на два м-кода в одной строке - но работать будет - надо наверно вставить символ перевода строки ( не проверял)
тогда не придется что то изменять в программах и постпроцессорах ...
==============
по поводу питона:
пишем компонент
Python Interface
Serg-tmn писал(а):Это комонент hal, он вызывается регулярно, скажем по servo thread?
точно...
Re: Как передать в hal информацию о выполняемой команде
Добавлено: 02 май 2013, 16:23
Сергей Саныч
Спасибо! Буду разбираться
