REMAP в LinuxCNC 2.6

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

REMAP в LinuxCNC 2.6

Сообщение NightV »

для начала есть идея зажигать светофор на станке по окончании програмы,
а точнее при отработке М30 или М02

я так понимаю нужно сделать так в ini

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

[RS274NGC]
PARAMETER_FILE = linuxcnc.var
TOPLEVEL=/home/vl/linuxcnc/configs/wabeco/python/toplevel.py
APPEND=/home/vl/linuxcnc/configs/wabeco/python
# тут будут наши ремапы
REMAP=M30 modalgroup=1 epilog=M30_epilog
REMAP=M02 modalgroup=1 epilog=M02_epilog
тоесть как я понял epilog отработает ПОСЛЕ основной работы М30 или М02

а вот теперь нуна описать нужные процедуры в файле stdglue.py или в toplevel.py

что-то типа

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

def g30_epilog(self,**words):
бла бла
вот в этих "бла бла" и нужно дернуть ножкой например в classiclader.
из BASH я дергал напрямую..

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

#!/bin/bash
halcmd setp classicladder.0.in-05 True
exit 0
или

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

#!/bin/bash
halcmd setp classicladder.0.in-05 False
exit 0
это работает

как это делается в питоне?
ман на ремап тут

пример ремапа из stdglue.py

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

# REMAP=F   prolog=setfeed_prolog  ngc=setfeed epilog=setfeed_epilog
# exposed parameter: #<feed>

def setfeed_prolog(self,**words):
    try:
        c = self.blocks[self.remap_level]
        if not c.f_flag:
            self.set_errormsg("F requires a value") 
            return INTERP_ERROR
        self.params["feed"] = c.f_number
    except Exception,e:
        self.set_errormsg("F/setfeed_prolog: %s)" % (e))
        return INTERP_ERROR
    return INTERP_OK    

def setfeed_epilog(self,**words):
    try:
        if not self.value_returned:
            r = self.blocks[self.remap_level].executing_remap
            self.set_errormsg("the %s remap procedure %s did not return a value"
                             % (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
            return INTERP_ERROR
        if self.blocks[self.remap_level].builtin_used:
            pass
            #print "---------- F builtin recursion, nothing to do"
        else:
            self.feed_rate = self.params["feed"]
            emccanon.enqueue_SET_FEED_RATE(self.feed_rate)
        return INTERP_OK
    except Exception,e:
        self.set_errormsg("F/setfeed_epilog: %s)" % (e))
        return INTERP_ERROR
    return INTERP_OK    
Всё просто! если знаешь КАК!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение nkp »

как вариант:
from subprocess import Popen, PIPE
a= Popen('halcmd setp classicladder.0.in-05', shell=True, stdout=PIPE).stdout.read()

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

Re: REMAP в LinuxCNC 2.6

Сообщение Nick »

А зачем это делать именно через REMAP, разве нет подходящих пинов в halui?

PS тема по remap безусловна интересна, и надо ее развивать!

ЗЫ если надо пин ищ питона поменять, то лучше создать компонент и в нем менять свои пины!
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение NightV »

Nick писал(а):разве нет подходящих пинов в halui?
для "светофора" нет,
Nick писал(а):зачем это делать именно через REMAP
чтоб конечный пользователь не видел лишних файлов в директории nc_files и лишних Gкодов в программе типа М102
Nick писал(а):PS тема по remap безусловна интересна, и надо ее развивать!
поэтому и начал эту тему :)
Nick писал(а):ЗЫ если надо пин ищ питона поменять, то лучше создать компонент и в нем менять свои пины!
иии....
Всё просто! если знаешь КАК!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение Nick »

NightV писал(а):для "светофора" нет
Хммм... такой светофор (начала есть идея зажигать светофор на станке по окончании програмы) можно сделать через halui.program.is-running + edge...
NightV писал(а):иии....
И http://linuxcnc.org/docs/html/hal/halmodule.html :)
Там вроде все просто...
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение NightV »

пока там мало че понял :hehehe:
нужно еще гасить лампу.
на пром станках лампа гаснет почти при любом чихе, например переход из авто в mdi или manual режим.
хочется просто осветить и изучить тему remap :think:
да по моему и проще
Всё просто! если знаешь КАК!
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение Serg »

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

Re: REMAP в LinuxCNC 2.6

Сообщение Nick »

NightV писал(а):да по моему и проще
Это вообще не очень хорошо - т.к. появляется нестандартная реакция на стандартные Gкоды....
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение NightV »

UAVpilot писал(а):Кто-то мешает положить их в папку с hal и ini?..
linuxcnc мешает, он их в PROGRAM_PREFIX ищет :evil: nkp подтвердит
Nick писал(а): появляется нестандартная реакция на стандартные Gкоды
так чтоб небыло не стандартной реакции я и хочу применить epilog (в данном случае с лампой)
перелопачивать полностью функции пока не собираюсь, силенкав моловато :hehehe: мягко выражаясь
Всё просто! если знаешь КАК!
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение NightV »

nkp писал(а):там разве только питон можно??
можно кстате и Gcode, но это надо создать Digital пин и через G64 G65 (кажется) по нему пинать.
1) но я не хочу усложнять,
2) Gcode хранится в папке со всеми прогами (nc_files), и кажется заменяет всю процедуру команды, а мне же нужно сделать дополнительную операцию по окончании основной что заложено в интерпритаторе

вызывается так
REMAP=M400 modalgroup=10 argspec=Pq ngc=myprocedure

воноска с мана
ngc=<ngc_basename>
Basename of an O-word subroutine file name. Do not specify an .ngc extension. Searched for in the directories specified in the directory specified in [DISPLAY]PROGRAM_PREFIX, then in [RS274NGC]SUBROUTINE_PATH. Mutually exclusive with python=. It is an error to omit both ngc= and python=.

python=<Python function name>
Instead of calling an ngc O-word procedure call a Python function. The function is expected to be defined in the module_basename.oword module. Mutually exclusive with ngc=.

prolog=<Python function name>
Before executing an ngc procedure, call this Python function. The function is expected to be defined in the module_basename.remap module. Optional.

epilog=<Python function name>
After executing an ngc procedure, call this Python function. The function is expected to be defined in the module_basename.remap module. Optional.
тоесть весь вопрос в том КАК ПИНАТЬ по пину из питона (а не создавать новый)
Всё просто! если знаешь КАК!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение nkp »

NightV писал(а):тоесть весь вопрос в том КАК ПИНАТЬ по пину из питона (а не создавать новый)
так вроде бы уже написал...(#2)
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение NightV »

nkp писал(а):from subprocess import Popen, PIPE
a= Popen('halcmd setp classicladder.0.in-05', shell=True, stdout=PIPE).stdout.read()
тоесть в шапку суем

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

from subprocess import Popen, PIPE
а потом

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

def g30_epilog(self,**words):
    a= Popen('halcmd setp classicladder.0.in-05', shell=True, stdout=PIPE).stdout.read()
просто я пока вообще не вьехал в тему :wik:
Всё просто! если знаешь КАК!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение nkp »

NightV писал(а):просто я пока вообще не вьехал в тему
не смотрел пока - куда и зачем все это - но если выполнить эту строку в питоне - то
он как бы выполнит команду в терминале...
"в шапке" (from subprocess import Popen, PIPE) - импорт модуля(библиотеки)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение Serg »

NightV писал(а):linuxcnc мешает, он их в PROGRAM_PREFIX ищет :evil: nkp подтвердит
Эт не linuxcnc мешает, а нежелание почитать мануал. :yawn:
http://linuxcnc.org/docs/html/config/in ... _section_a

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

Re: REMAP в LinuxCNC 2.6

Сообщение Nick »

О, какую штуку нашел:

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

python
help(hal)
...
FUNCTIONS
...
    connect(...)
        connect pin to signal
    set_p(...)
        set pin value

И оно работает! :cheesy:
Т.е. вот так работает:

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

hal.set_p("or2.0.in0","0")
Только одно но, оно зачем-то требует сначала компопнет создать :idiot: . Причем походу любой:

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

>>> import hal
>>> hal.set_p("or2.0.in0","1")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Cannot call before creating component
>>> 
>>> 
>>> c = hal.component("c")
>>> hal.set_p("or2.0.in0","1")
False
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение Serg »

Nick писал(а):О, какую штуку нашел:
В linuxcnc столько кода на питоне - было б удивительно, если б пользовали только exec(halcmd ...). :)
Nick писал(а):Только одно но, оно зачем-то требует сначала компопнет создать :idiot: . Причем походу любой:
Ну а как ещё __init__ позвать?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: REMAP в LinuxCNC 2.6

Сообщение NightV »

короче выяснил что М30 и М02 переремапить нельзя, разраб пока не сделал, а может и не будет делать, на М00 и М01 его попросили он сделал.
придется мудрить зажигание светофора в ладере, наверно с програм-ран и програм-идл и парой переменных
Всё просто! если знаешь КАК!
Ответить

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