Страница 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.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, как с помощью
выполняется 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...