Страница 8 из 10
Re: Python в LinuxCnC
Добавлено: 10 окт 2014, 17:31
nkp
функция glTranslatef (posx,posy,poz) библиотеки GL смещает центр куба в указаные координаты...
и таки оно смещается:
это после:
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, то не могу добавить модуль:
Работает, если то же самое делать из самой программы на G-code:
Что я делаю не так?
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
имеется такая ошибка:
Код: Выделить всё
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$
что тут синтаксически не правильно??
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 ??