Страница 8 из 10

Re: Python в LinuxCnC

Добавлено: 10 окт 2014, 17:31
nkp
функция glTranslatef (posx,posy,poz) библиотеки GL смещает центр куба в указаные координаты...
и таки оно смещается:
(для просмотра содержимого нажмите на ссылку)
Выделение_018.png (4213 просмотров) <a class='original' href='./download/file.php?id=34749&mode=view' target=_blank>Загрузить оригинал (26.19 КБ)</a>
Выделение_019.png (4213 просмотров) <a class='original' href='./download/file.php?id=34750&mode=view' target=_blank>Загрузить оригинал (50.52 КБ)</a>
это после:
glTranslatef (10.0, 12.0, 0.0)
дистанция в дюймах...
но следом за "центром" всё перерисовывается (кроме системы координат и линий лимитов)
==========
в общем - как сказал один Хан на нашем форуме: надо подразобраться - тогда будет легко)

Re: Python в LinuxCnC

Добавлено: 14 окт 2014, 21:11
gennadiy
Всем доброго вечера. У меня такой вопрос. А как из программы на Python можно читать и изменять переменные (или параметры) G-code?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 09:14
Nick
gennadiy писал(а):А как из программы на Python можно читать и изменять переменные (или параметры) G-code?
Самое простое через пины - делаешь пин в своей программе, потом его завязываешь на motion.analog-in или digital-in.
Или вот так:
interpreter.this.params['draw_param_g']=g
но не все параметры так можно будет поменять.

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 09:16
Nick
nkp писал(а):но следом за "центром" всё перерисовывается (кроме системы координат и линий лимитов)
==========
в общем - как сказал один Хан на нашем форуме: надо подразобраться - тогда будет легко)
Кстати, может UAVpilot подскажет, может есть какой-то дебаггер, который может показывать все вызовы всех функций? чтобы отследить, что вызывается в конкретный момент времени?

Re: Python в LinuxCnC

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

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

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

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

;py,import interpreter
Что я делаю не так?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 11:35
Nick
хммм... хороший вопрос :)...
а что ты хочешь делать через эти пины?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 12:15
gennadiy
Странно всё это... Есть скрипт (или hal компонент) на Python и я хочу посмотреть параметр... Без этого как работать в Python Linuxcnc?
Пришла в голову одна идея, а если читать параметр из файла .var? Как это сделать?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 12:42
Nick
Чем тебе черз пины не нравится?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 13:23
gennadiy
Это единственный доступный способ?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 13:29
Nick
Скорее всего нет. Но этот проверенный :).
Ты таким образом хочешь дебагить gкод? Или что-то другое будешь делать?

Re: Python в LinuxCnC

Добавлено: 15 окт 2014, 13:53
gennadiy
Ладно, раз так, пока сделаю через "motion.analog-in". Хотелось проще, минуя .hal, прямым доступом к параметрам G-code.

Re: Python в LinuxCnC

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

В системе есть стандартные программки для трассировки вызовов функций в разных библиотеках - ltrace. И для трассировки системных вызовов - strace (можно например посмотреть какие файлы в каких местах ищет).

Re: Python в LinuxCnC

Добавлено: 18 дек 2014, 23:51
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

Re: Python в LinuxCnC

Добавлено: 19 дек 2014, 00:21
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 и не работает как надо - тут так задумано...
(или вышло так)))

Re: Python в LinuxCnC

Добавлено: 19 дек 2014, 01:47
Serg
nkp писал(а):начинается движение ,дальше как то отсчитываются тайминги(то ,в чем я пока не разобрался)
Вероятно с помощью того самого after.
Идея как правило следующая: запускается некая функция с помощью after (т.е. через некоторое время), внутри эта функция делает что требуется и снова запускает сама себя с помощью after - получается цикл с периодом заданным after, причем этот цикл выполняется асинхронно по отношению к основной программе.

Re: Python в LinuxCnC

Добавлено: 09 дек 2015, 10:47
nkp
имеется такая ошибка:
(для просмотра содержимого нажмите на ссылку)
Выделение_085.png (3669 просмотров) <a class='original' href='./download/file.php?id=65580&mode=view' target=_blank>Загрузить оригинал (132.66 КБ)</a>

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

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 (3669 просмотров) <a class='original' href='./download/file.php?id=65581&mode=view' target=_blank>Загрузить оригинал (115.22 КБ)</a>

Re: Python в LinuxCnC

Добавлено: 09 дек 2015, 10:51
Nick
Какой питон?
Может с переносами строки что-то не то?

Дай ссылку на код.

Re: Python в LinuxCnC

Добавлено: 09 дек 2015, 10:53
Nick
Хотя, питону такое тоже не нравится:

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

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



Re: Python в LinuxCnC

Добавлено: 09 дек 2015, 10:55
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}


Re: Python в LinuxCnC

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