Страница 40 из 53

Re: GladeVCP и PyVCP для начинающих

Добавлено: 11 сен 2015, 12:20
Serg
Nick писал(а):Кстати, а в твоем test есть компонент? Как он называется?
Не понял?..
Компонент создаётся прогой gladevcp и будет называться gladevcp или любым другим именем, заданным с помощью "-c'.
Проблема в том, что axis желает, чтобы это имя всегда было gladevcp:
Самый простой способ победить - засунуть в .axisrc свой вариант функции:

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

def load_gladevcp_panel():
    gladevcp = inifile.find("DISPLAY", "GLADEVCP")
    if gladevcp:
        from subprocess import Popen

        xid = gladevcp_frame.winfo_id()
        cmd = "halcmd loadusr -Wn gladevcp gladevcp -c gladevcp".split()
        cmd += ['-x', str(xid)] + gladevcp.split()
        child = Popen(cmd)
        _dynamic_childs['gladevcp'] = (child, cmd, True)
Оно в принципе и так работает, только гадит точками...

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 12:11
Nick
А теперь кажется понял. Если ты хочешь панель gladevcp, записываешь ее в раздел gladevcp, то логично, что она будет называться gladevcp.

А если хочешь по другому - то можно через embed_tab или около того, как например в скрине для центроискателя от verser: [WIKI] Работа с центроискателем #1

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 14:50
Serg
Только вот хочется иметь один и тот-же сопутствующий HAL-файлик не зависимо от месторасположения панели...

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 14:55
Nick
А вот, что в доках написано:
The HAL component name of a GladeVCP application started with the the GLADEVCP option is fixed: gladevcp. The command line actually run by Axis in the above configuration is as follows:
halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} <arguments to GLADEVCP>
This means you may add arbitrary gladevcp options here, as long as they dont collide with the above command line options.
http://www.linuxcnc.org/docs/2.5/html/g ... like_pyvcp

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 15:16
Serg
Ограничение понятно, непонятен смысл этого ограничения... Вопрос решается парой дополнительных строчек в функции...

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 15:19
Nick
В любом случае, если ты переименуешь свой компонент, надо поменять -Wn gladevcp, или каждый раз его прописывать в ini.

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 15:26
Serg
Достаточно в функции load_gladevcp_panel отловить в строке "-c name" и подставить этот name и в -Wn.

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 15:44
Nick
Напиши об этом разработчикам :)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 15:46
Serg
В TODO записал. Надо только ещё разобраться с "_dynamic_childs['gladevcp']", в смысле надо-ли её тоже менять или так сойдёт... :)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 16:13
doska
Привет!
Делаю на GladeVCP кастомный GUI для нестандартной машинки.
Мне нужно хранить 20 числовых параметров. С этим проблем нет. Сохраняю все в .json из него же загружаю, все работает.
Но я никак не могу разобраться как мне эти сохраненные параметры передать в программу.
То есть как пользоваться в УП параметрами вида #xxxx я знаю, но вот как их записать в .var (или еще куда) из питона что-то не пойму.
Можно конечно тупо .var файл перезаписывать но это как-то не по феньшуй.

Никто не укажет направление?

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 16:20
Nick
можно через motion.digital-in-XX, или через python in gcode
http://linuxcnc.org/docs/html/remap/str ... ded-Python

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 16:40
doska
Nick писал(а):через python in gcode
Шикарно, спасибо!

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 17:39
verser
doska писал(а): Можно конечно тупо .var файл перезаписывать но это как-то не по феньшуй.
Никто не укажет направление?
Можно еще взять такой готовый класс

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

import os                   # needed to get the paths and directorys
from linuxcnc import ini
import ConfigParser

CONFIGPATH1 = os.environ['CONFIG_DIR']
cp1 = ConfigParser.RawConfigParser

class ps_preferences(cp1):
    types = {
        bool: cp1.getboolean,
        float: cp1.getfloat,
        int: cp1.getint,
        str: cp1.get,
        repr: lambda self, section, option: eval(cp1.get(self, section, option)),
    }

    def __init__(self, path = None):
        cp1.__init__(self)
        if not path:
            path = "~/.toolch_preferences"
        self.fn = os.path.expanduser(path)
        self.read(self.fn)

    def getpref(self, option, default = False, type = bool):
        m = self.types.get(type)
        try:
            o = m(self, "DEFAULT", option)
        except Exception, detail:
            print detail
            self.set("DEFAULT", option, default)
            self.write(open(self.fn, "w"))
            if type in(bool, float, int):
                o = type(default)
            else:
                o = default
        return o

    def putpref(self, option, value, type = bool):
        self.set("DEFAULT", option, type(value))
        self.write(open(self.fn, "w"))

тогда создать экземпляр класса(с использованием доп. функции, читающей имя файла преференций из .ini файла)

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

    inipath = os.environ["INI_FILE_NAME"]
    self.inifile = ini(inipath)
    if not self.inifile:
        print("**** probe_screen GETINIINFO **** \n Error, no INI File given !!")
        sys.exit()

    def get_preference_file_path(self):
        # we get the preference file, if there is none given in the INI
        # we use toolchange2.pref in the config dir
        temp = self.inifile.find("DISPLAY", "PREFERENCE_FILE_PATH")
        if not temp:
            machinename = self.inifile.find("EMC", "MACHINE")
            if not machinename:
                temp = os.path.join(CONFIGPATH1, "probe_screen.pref")
            else:
                machinename = machinename.replace(" ", "_")
                temp = os.path.join(CONFIGPATH1, "%s.pref" % machinename)
        print("****  probe_screen GETINIINFO **** \n Preference file path: %s" % temp)
        return temp


    self.prefs = ps_preferences( self.get_preference_file_path() )
запись в файл параметра

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

    self.prefs.putpref( "param1", 0.0, float)
и чтение из файла

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

    self.prefs.getpref( "param1", 0.0, float )
Пример использования класса ps_preferences можно посмотреть в probe_screen.py

P.S. Вспомнил, что уже писал о таком недавно в этой теме, sorry за повтор :).

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 20:34
doska
Спасибо.
Но я все равно чего-то не понимаю...

Вот есть у меня 2 файла GUI.glade и GUI.py. Тут все ясно. На панели 4 окошка - X,Y координаты двух точек. Я их спокойно сохраняю и загружаю при старте. Тут тоже проблем никаких.
Но вот мне нужно, чтобы по кнопке Play у меня произошло перемещение сначала в первую точку, потом во вторую и так 10 раз.

И вот каким образом мне эту программу сформировать из GUI.py я не понимаю.

Re: GladeVCP и PyVCP для начинающих

Добавлено: 14 сен 2015, 21:07
verser
doska писал(а): И вот каким образом мне эту программу сформировать из GUI.py я не понимаю.
Посмотрите в том же probe_screen.py, как с помощью

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

self.command.mdi(s)
выполняется g-code, и контроль ошибок даже реализован.

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 сен 2015, 09:17
doska
Я думал, что есть некий "правильный" или "красивый" вариант исполнения. Вроде функций автогенерации G-кода или чего-то вроде этого.
Получается, что все как всегда "Пилите, Шура - она золотая!" ))))
Большое спасибо всем за ответы!

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 сен 2015, 09:39
nkp
чем так "некрасиво"? :)

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

o100 repeat[10]
F300
G1 X#<_hal[glade.hal_spinbutton1-f]>    Y#<_hal[glade.hal_spinbutton2-f]> 
G1 X#<_hal[glade.hal_spinbutton3-f]>    Y#<_hal[glade.hal_spinbutton4-f]> 
o100 endrepeat
M2

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 сен 2015, 09:49
doska
Красиво, спору нет.
У меня такая система получается, что программа формируется в интерфейсе. То есть выбираются не только начальные и конечные точки, но и смысловое, так сказать, наполнение. Тоже ничего страшного, но мне удобнее формировать УП в скрипте интерфейса, чем настраивать hal пины, писать УП с обращениями к ним, писать G-код с кучей условных переходов. Мне проще получается через mdi работать. Конечному пользователю пофиг, а мне так легче.

Re: GladeVCP и PyVCP для начинающих

Добавлено: 09 окт 2015, 23:09
MIX
Знатоки! Выручайте!
Пытаюсь в Python-е из Axis-a получить имя NGC файла, который в работе в настоящий момент с помощью: linuxcnc.stat.file
И все прекрасно работает до тех пор, пока в G кодах нет подпрограмм (О-коды). Как только встречается подпрограмма, указанная выше функция возвращает имя NGC файла подпрограммы. Я так понимаю, linuxcnc.stat.file содержит имя не текущей программы, а последней вызванной.
Такая ситуация меня крайне не устраивает т.к. мне необходимо пользоваться подпрограммами для поиска листа (у меня плазморез), а написанная мной на Python-е программа вызывается уже после того как исполнение G-кодов дойдет до подпрограммы (обработка параметров плазмы и ошибок в работе плазмореза).
Как я могу надежно получать имя текущей исполняемой программы?
Неужели нужно писать еще и функцию, которая будет отрабатывать загрузку нового файла в AXIS-е? Если так, то какой сигнал можно использовать в моем Python файле для обработки этого события?

Re: GladeVCP и PyVCP для начинающих

Добавлено: 10 окт 2015, 02:36
Serg
linuxcnc.stat.file возвращает имя файла, обрабатываемого интерпретатором rs274ngc.
Имя файла загруженного в axis и узнавать нужно у axis, например там есть глобальная переменная loaded_file...