Python в LinuxCnC

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

функция glTranslatef (posx,posy,poz) библиотеки GL смещает центр куба в указаные координаты...
и таки оно смещается: это после:
glTranslatef (10.0, 12.0, 0.0)
дистанция в дюймах...
но следом за "центром" всё перерисовывается (кроме системы координат и линий лимитов)
==========
в общем - как сказал один Хан на нашем форуме: надо подразобраться - тогда будет легко)
gennadiy
Кандидат
Сообщения: 64
Зарегистрирован: 03 ноя 2013, 22:28
Репутация: 32
Откуда: Брест
Контактная информация:

Re: Python в LinuxCnC

Сообщение gennadiy »

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

Re: Python в LinuxCnC

Сообщение Nick »

gennadiy писал(а):А как из программы на Python можно читать и изменять переменные (или параметры) G-code?
Самое простое через пины - делаешь пин в своей программе, потом его завязываешь на motion.analog-in или digital-in.
Или вот так:
interpreter.this.params['draw_param_g']=g
но не все параметры так можно будет поменять.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

nkp писал(а):но следом за "центром" всё перерисовывается (кроме системы координат и линий лимитов)
==========
в общем - как сказал один Хан на нашем форуме: надо подразобраться - тогда будет легко)
Кстати, может UAVpilot подскажет, может есть какой-то дебаггер, который может показывать все вызовы всех функций? чтобы отследить, что вызывается в конкретный момент времени?
gennadiy
Кандидат
Сообщения: 64
Зарегистрирован: 03 ноя 2013, 22:28
Репутация: 32
Откуда: Брест
Контактная информация:

Re: Python в LinuxCnC

Сообщение gennadiy »

Nick писал(а): interpreter.this.params['draw_param_g']=g
Если запускать из программы на Python, то не могу добавить модуль:

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

import interpreter
Работает, если то же самое делать из самой программы на G-code:

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

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

Re: Python в LinuxCnC

Сообщение Nick »

хммм... хороший вопрос :)...
а что ты хочешь делать через эти пины?
gennadiy
Кандидат
Сообщения: 64
Зарегистрирован: 03 ноя 2013, 22:28
Репутация: 32
Откуда: Брест
Контактная информация:

Re: Python в LinuxCnC

Сообщение gennadiy »

Странно всё это... Есть скрипт (или hal компонент) на Python и я хочу посмотреть параметр... Без этого как работать в Python Linuxcnc?
Пришла в голову одна идея, а если читать параметр из файла .var? Как это сделать?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Чем тебе черз пины не нравится?
gennadiy
Кандидат
Сообщения: 64
Зарегистрирован: 03 ноя 2013, 22:28
Репутация: 32
Откуда: Брест
Контактная информация:

Re: Python в LinuxCnC

Сообщение gennadiy »

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

Re: Python в LinuxCnC

Сообщение Nick »

Скорее всего нет. Но этот проверенный :).
Ты таким образом хочешь дебагить gкод? Или что-то другое будешь делать?
gennadiy
Кандидат
Сообщения: 64
Зарегистрирован: 03 ноя 2013, 22:28
Репутация: 32
Откуда: Брест
Контактная информация:

Re: Python в LinuxCnC

Сообщение gennadiy »

Ладно, раз так, пока сделаю через "motion.analog-in". Хотелось проще, минуя .hal, прямым доступом к параметрам G-code.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Python в LinuxCnC

Сообщение Serg »

Nick писал(а):Кстати, может UAVpilot подскажет, может есть какой-то дебаггер, который может показывать все вызовы всех функций? чтобы отследить, что вызывается в конкретный момент времени?
Если ты имеешь в виду pyhton, то я пока не знаю - я его только начал осваивать (хоть он мне и не нравится, но жизнь заставляет), но наверняка такой механизм в нём есть, иначе я его уважать перестану. :)

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

Re: Python в LinuxCnC

Сообщение nkp »

по вопросу ускоренного перемещенияс клавиатуры:
думал всегда ,что это Axis "не видит" моментов нажатия-отпускания Shift-а при нажатой стрелке...
проверил - нет - всё в порядке с этим ...
вот сама функция :

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

def bind_axis(a, b, d):
    root_window.bind("<KeyPress-%s>" % a, kp_wrap(lambda e: jog_on(d, -get_jog_speed(d)), "KeyPress"))
    root_window.bind("<KeyPress-%s>" % b, kp_wrap(lambda e: jog_on(d, get_jog_speed(d)), "KeyPress"))
    root_window.bind("<Shift-KeyPress-%s>" % a, lambda e: jog_on(d, -get_max_jog_speed(d)))
    root_window.bind("<Shift-KeyPress-%s>" % b, lambda e: jog_on(d, get_max_jog_speed(d)))
    root_window.bind("<KeyRelease-%s>" % a, lambda e: jog_off(d))
    root_window.bind("<KeyRelease-%s>" % b, lambda e: jog_off(d))
она вызывает функцию jog_on с разной скоростью (так всё и работает - скорость разная на этом этапе)
"нормально " не работает jog_on:

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

jog_after = [None] * 9
jog_cont  = [False] * 9
jogging   = [0] * 9
def jog_on(a, b):
    if not manual_ok(): return
    if not manual_tab_visible(): return
    if isinstance(a, (str, unicode)):
        a = "xyzabcuvw".index(a)
    if a < 3:
        if vars.metric.get(): b = b / 25.4
        b = from_internal_linear_unit(b)
    if jog_after[a]:
        root_window.after_cancel(jog_after[a])
        jog_after[a] = None
        return
    jogincr = widgets.jogincr.get()
    if s.motion_mode == linuxcnc.TRAJ_MODE_TELEOP:
        jogging[a] = b
        jog_cont[a] = False
        cartesian_only=jogging[:6]
        c.teleop_vector(*cartesian_only)
    else:
        if jogincr != _("Continuous"):
            s.poll()
            if s.state != 1: return
            distance = parse_increment(jogincr)
            jog(linuxcnc.JOG_INCREMENT, a, b, distance)
            jog_cont[a] = False
        else:
            jog(linuxcnc.JOG_CONTINUOUS, a, b)
            jog_cont[a] = True
            jogging[a] = b
никогда раньше не замечал , что с этим jog в Axis так накручено!!
вот это с наскоку неосилил:

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

    if jog_after[a]:
        root_window.after_cancel(jog_after[a])
        jog_after[a] = None
after_cancel
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

немного продвинулся:
так как в емс jog можно "организовать" только двумя "способами":
c.jog(linuxcnc.JOG_CONTINUOUS, axis, speed)
c.jog(linuxcnc.JOG_INCREMENT, axis, speed, increment)

то "непрерывное движение" по нажатию стрелки организовано так:
один раз отрабатывает вот эта часть:

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

        else:
            print a,b,"linuxcnc.JOG_CONTINUOUS"
            jog(linuxcnc.JOG_CONTINUOUS, a, b)
            jog_cont[a] = True
            jogging[a] = b
начинается движение ,дальше как то отсчитываются тайминги(то ,в чем я пока не разобрался)
==========
но главное то - что скорость передается jog(linuxcnc.JOG_CONTINUOUS, a, b) один раз ,
поэтому(имхо) Shift и не работает как надо - тут так задумано...
(или вышло так)))
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Python в LinuxCnC

Сообщение Serg »

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

Re: Python в LinuxCnC

Сообщение nkp »

имеется такая ошибка:

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

nkp@nkp-desktop:~/Beremiz/beremiz$ python Beremiz.pyTraceback (most recent call last):
  File "Beremiz.py", line 136, in <module>
    from editors.EditorPanel import EditorPanel
  File "/home/nkp/Beremiz/beremiz/editors/EditorPanel.py", line 27, in <module>
    from controls import VariablePanel
  File "/home/nkp/Beremiz/beremiz/controls/__init__.py", line 31, in <module>
    from DebugVariablePanel import DebugVariablePanel
  File "/home/nkp/Beremiz/beremiz/controls/DebugVariablePanel/__init__.py", line 1, in <module>
    from DebugVariablePanel import DebugVariablePanel
  File "/home/nkp/Beremiz/beremiz/controls/DebugVariablePanel/DebugVariablePanel.py", line 40, in <module>
    from DebugVariableItem import DebugVariableItem
  File "/home/nkp/Beremiz/beremiz/controls/DebugVariablePanel/DebugVariableItem.py", line 28, in <module>
    from graphics.DebugDataConsumer import DebugDataConsumer, TYPE_TRANSLATOR
  File "/home/nkp/Beremiz/beremiz/graphics/__init__.py", line 28, in <module>
    from FBD_Objects import *
  File "/home/nkp/Beremiz/beremiz/graphics/FBD_Objects.py", line 28, in <module>
    from plcopen.structures import *
  File "/home/nkp/Beremiz/beremiz/plcopen/__init__.py", line 29, in <module>
    from plcopen import PLCOpenParser, LoadProject, SaveProject, LoadPou, \
  File "/home/nkp/Beremiz/beremiz/plcopen/plcopen.py", line 269
    for body_type in ["FBD", "LD", "SFC"]}
      ^
SyntaxError: invalid syntax
nkp@nkp-desktop:~/Beremiz/beremiz$ 
что тут синтаксически не правильно??
Выделение_086.png (3442 просмотра) <a class='original' href='./download/file.php?id=65581&sid=5ee00d7aaa80fbc7ffdabdaba86f0374&mode=view' target=_blank>Загрузить оригинал (115.22 КБ)</a>
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Какой питон?
Может с переносами строки что-то не то?

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

Re: Python в LinuxCnC

Сообщение Nick »

Хотя, питону такое тоже не нравится:

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

>>> { i:3 for i in [1,2,3]}
  File "<stdin>", line 1
    { i:3 for i in [1,2,3]}
            ^
SyntaxError: invalid syntax


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

Re: Python в LinuxCnC

Сообщение Nick »

Ага. В питону 2.6 не нравится, а 2.7+ проходит:

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

nick@ltsp:~$ python2.7
Python 2.7.0+ (r27:82500, Sep 15 2010, 18:04:55) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> { i:3 for i in [1,2,3]}
{1: 3, 2: 3, 3: 3}

nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Nick писал(а):Ага. В питону 2.6 не нравится, а 2.7+ проходит:
должен же наверно быть какой то вариант написания и для 2.6 ??
Ответить

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