Python в LinuxCnC

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

Re: Python в LinuxCnC

Сообщение nkp »

У меня Python 2.6.5
Вот для простейшего случая(только линейные перемещения):

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

#!/usr/bin/python
# -*- coding: utf-8 -*-

from subprocess import Popen, PIPE
a= Popen('halcmd getp minmax.0.max ', shell=True, stdout=PIPE).stdout.read()
x=int(a)-1
print x
f = open(r'/home/nkp/emc2/nc_files/11.ngc')
lines = f.readlines()
f.close()
lines[x] = "F60 G20 G61\n" 
f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
while x>0 :
	
	f.write(lines[x])
	x=x-1
f.write('M2')
f.close()
11.ngc
(2.18 КБ) 1179 скачиваний
12.ngc-пустой файл
http://www.youtube.com/watch?v=96hPrA2nk3I&feature=plcp
Последний раз редактировалось nkp 24 май 2012, 22:10, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Обычно их есть сразу несколько, значимые версии x.x ставятся совместро и друг друга не замещают. Меняется только мета пакет python - это стандартный python который будет запускаться при запуске python, и мета пакеты python2 и python3.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Где то помнится встречал жаловались на проблеммы с емс из-за питон3. ЕМС же пользует 2.6.
Или при установке 3.1 останется в системе и 2.6 ?
Как правильно установить: sudo apt-get install python3-minimal ?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Лучше просто sudo apt-get install python3.
Да останется все, мета пакет не поменяется, просто добавится 3-й питон. Версии 2 и 3 друг друга не заменяют. По-моему даже версии вида 2.6 2.7. 2.5 и т.п. ставятся спокойно вместе. Просто этот конкретный скрипт будет выполняться в 3.

Проблема была с python 2.7, у emc2 была зависимость от pyhton<=2.6.1, но это бред ИМХО. Писали, что какие-то скрипты могут не правильно работать, а рук у них в этих скриптах написать #!/usr/bin/python2.6 не хватило :pssdoff:.

PS вот так будет более по питоновски:
(кусок начиная с lines = f.readlines())

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

lines = f.readlines()[:x]
f.close()
lines.append("F60 G20 G61\n")
lines.reverse()
lines.append("M2")
f = open('/home/nkp/emc2/nc_files/12.ngc','a')
for l in lines:
   f.write(l)
f.close()

или 

lines = f.readlines()[:x]
f.close()
lines.append("F60 G20 G61\n")
lines.reverse()
lines.append("M2")
f = open('/home/nkp/emc2/nc_files/12.ngc','a')
f.writelines(lines)
f.close()

или 

lines = f.readlines()[:x]
f.close()
lines.append("F60 G20 G61\n")
lines.reverse()
lines.append("M2")
f = open('/home/nkp/emc2/nc_files/12.ngc','a')
f.write( "\n".join(lines) )
f.close()





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

Re: Python в LinuxCnC

Сообщение Nick »

Вообще супер получилось :good: ! И главное просто :)!

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

Re: Python в LinuxCnC

Сообщение nkp »

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

Re: Python в LinuxCnC

Сообщение Nick »

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

Re: Python в LinuxCnC

Сообщение nkp »

http://www.youtube.com/watch?v=ZPGiGrP8 ... el&list=UL
добавлено:
возможность "отходить" на выбранное число кадров,
"обратно-обратный " :) ход,
граф окно (в дальнейшем будет все это вызываться кнопочкой в axis) :
11rev_in.py.tar
(10 КБ) 478 скачиваний
(для просмотра содержимого нажмите на ссылку)

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

#!/usr/bin/python
# -*- coding: utf-8 -*-

from Tkinter import *
import  time
from subprocess import Popen, PIPE

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master, width=700, height=400, bd=1)
        self.grid()        
        self.createWidgets()
        
    def createWidgets(self):
        
        self.sp1 = Label(self)
        self.sp1.grid(row=0)
        
        self.st1 = Label(self, text='Отойти на x кадров')
        self.st1.grid(row=1, column=0, sticky=E)
        self.RevStepVar = StringVar()
        self.RevStep = Entry(self, width=10, textvariable=self.RevStepVar)
        self.RevStep.grid(row=1, column=1, sticky=W)
        self.RevStep.focus_set()
       
        self.st3 = Label(self, text='Начать с n кадра')
        self.st3.grid(row=1, column=2, sticky=E)
        self.RevRevVar = StringVar()
        self.RevRev = Entry(self, width=10, textvariable=self.RevRevVar)
        self.RevRev.grid(row=1, column=3, sticky=W)
                
        self.spacer3 = Label(self, text='')
        self.spacer3.grid(row=6, column=0, columnspan=4)
        
        self.g_code = Text(self,width=30,height=30,bd=3)
        self.g_code.grid(row=7, column=0, columnspan=5, sticky=E+W+N+S)
        self.tbscroll = Scrollbar(self,command = self.g_code.yview)
        self.tbscroll.grid(row=7, column=5, sticky=N+S+W)
        self.g_code.configure(yscrollcommand = self.tbscroll.set) 

        self.sp4 = Label(self)
        self.sp4.grid(row=8)
                       
        self.GenButton = Button(self, text='Генер обр код',command=self.rev)
        self.GenButton.grid(row=8, column=0)
        
        self.CopyButton = Button(self, text='Quit',command=self.quit)
        self.CopyButton.grid(row=8, column=1)
        
        self.WriteButton = Button(self, text='Обратн-обратному',command=self.rev_rev)
        self.WriteButton.grid(row=8, column=2)

        
        self.quitButton = Button(self, text='Загрузить а axis',command=self.WriteToAxis)
        self.quitButton.grid(row=8, column=4, sticky=E)

    def WriteToAxis(self):
        sys.stdout.write(self.g_code.get(0.0, END))
        self.quit()

    def rev(self):
        a= Popen('halcmd getp minmax.0.max ', shell=True, stdout=PIPE).stdout.read()
        x=int(a)-1
        self.m=x
        f = open(r'/home/nkp/emc2/nc_files/11.ngc')
        lines = f.readlines()
        f.close()
        lines[x] = "F60 G20 G61\n" 
	nr=int(self.RevStepVar.get())
	q=(x-nr)
        f.close()
	d=Popen('halcmd setp minmax.0.reset 1 ', shell=True, stdout=PIPE).stdout.read()
	time.sleep(2)
	d=Popen('halcmd setp minmax.0.reset 0 ', shell=True, stdout=PIPE).stdout.read()
	while nr>=0 :
		self.g_code.insert(END, lines[x])
		x=x-1
		nr=nr-1
	self.g_code.insert(END,'M2\n')
	self.g_code.insert(END,q)
    def rev_rev(self):
    	l=int(self.RevRevVar.get())
	f = open(r'/home/nkp/emc2/nc_files/11.ngc')
	lines = f.readlines()
	d=len(lines)
	self.g_code.insert(END, "F60 G20 G61\n")
	while d>=0 :
		self.g_code.insert(END, lines[l])
		l=l+1
		d=d-1
	
        f.close()
app = Application()
app.master.title('Reverse g-code')
app.mainloop()
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Попытка обратного хода с движениями по дуге (пока с заданием R)
http://www.youtube.com/watch?v=KueBcvCv ... re=mh_lolz
Есть код-контур цифры "2"
15.ngc
(8.83 КБ) 1116 скачиваний
(для просмотра содержимого нажмите на ссылку)

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

G61  G20  G90  G17 F40.0
G1 X [9414*0.0003+[0.05 * 0.0003  / 0.0003] ] Y [2126*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G2 X[9471.6423*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2230.4760*0.0003+[0.03 * 0.0003  / 0.0003] ] R[2265.5346*0.0003]
G2 X[9535.3611*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2331.3333*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1810.7117*0.0003]
G2 X[9598.3121*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2417.7829*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1621.2129*0.0003]
G2 X[9667.4444*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2499.3333*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1310.7488*0.0003]
G2 X[9735.9252*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2567.8858*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1184.6120*0.0003]
G2 X[9810.2500*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2630.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[991.3970*0.0003]
G2 X[9884.5972*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2680.6685*0.0003+[0.03 * 0.0003  / 0.0003] ] R[917.3147*0.0003]
G2 X[9963.7778*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2723.3333*0.0003+[0.03 * 0.0003  / 0.0003] ] R[819.2274*0.0003]
G2 X[10044.3454*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2755.9102*0.0003+[0.03 * 0.0003  / 0.0003] ] R[789.5856*0.0003]
G2 X[10128.0278*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2779.3333*0.0003+[0.03 * 0.0003  / 0.0003] ] R[772.6483*0.0003]
G2 X[10214.9982*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2793.4089*0.0003+[0.03 * 0.0003  / 0.0003] ] R[784.1719*0.0003]
G2 X[10303.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2798.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[845.6981*0.0003]
G2 X[10437.4482*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2786.0758*0.0003+[0.03 * 0.0003  / 0.0003] ] R[763.9307*0.0003]
G2 X[10566.7500*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2748.2500*0.0003+[0.03 * 0.0003  / 0.0003] ] R[626.7660*0.0003]
G2 X[10682.8980*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2684.7353*0.0003+[0.03 * 0.0003  / 0.0003] ] R[613.2886*0.0003]
G2 X[10784.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2599.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[700.3254*0.0003]
G2 X[10868.2043*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2495.2113*0.0003+[0.03 * 0.0003  / 0.0003] ] R[714.6083*0.0003]
G2 X[10930.2500*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2377.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[639.3328*0.0003]
G2 X[10967.3292*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2245.4350*0.0003+[0.03 * 0.0003  / 0.0003] ] R[658.1021*0.0003]
G2 X[10979.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2109.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[803.3164*0.0003]
G2 X[10972.9478*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2014.1756*0.0003+[0.03 * 0.0003  / 0.0003] ] R[745.8662*0.0003]
G2 X[10955.4000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1920.7600*0.0003+[0.03 * 0.0003  / 0.0003] ] R[816.9777*0.0003]
G2 X[10925.0768*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1823.3477*0.0003+[0.03 * 0.0003  / 0.0003] ] R[881.6204*0.0003]
G2 X[10884.6000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1729.6400*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1062.2264*0.0003]
G2 X[10829.7666*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1630.1345*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1187.6556*0.0003]
G2 X[10766.6000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1535.6400*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1506.0706*0.0003]
G2 X[10687.3062*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1434.4495*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1706.5980*0.0003]
G2 X[10601.4000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1338.7600*0.0003+[0.03 * 0.0003  / 0.0003] ] R[2199.5911*0.0003]
G2 X[10497.8068*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1236.1261*0.0003+[0.03 * 0.0003  / 0.0003] ] R[2494.0823*0.0003]
G2 X[10389.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1139.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[3202.9914*0.0003]
G1 X [9586*0.0003+[0.05 * 0.0003  / 0.0003] ] Y [455*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G1 X [10196*0.0003+[0.05 * 0.0003  / 0.0003] ] Y [455*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G3 X[10298.8955*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[458.1294*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1693.1737*0.0003]
G3 X[10401.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[470.2500*0.0003+[0.03 * 0.0003  / 0.0003] ] R[896.9839*0.0003]
G3 X[10472.6741*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[487.1476*0.0003+[0.03 * 0.0003  / 0.0003] ] R[657.5165*0.0003]
G3 X[10540.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[516.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[312.8973*0.0003]
G3 X[10599.0321*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[559.9224*0.0003+[0.03 * 0.0003  / 0.0003] ] R[321.9747*0.0003]
G3 X[10650.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[613.5000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[658.6547*0.0003]
G3 X[10711.6797*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[695.1442*0.0003+[0.03 * 0.0003  / 0.0003] ] R[893.6320*0.0003]
G3 X[10766.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[782.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1662.3488*0.0003]
G1 X [10868*0.0003+[0.05 * 0.0003  / 0.0003] ]     Y [782*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G1 X [10545*0.0003+[0.05 * 0.0003  / 0.0003] ]     Y [0*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G1 X [9041*0.0003+[0.05 * 0.0003  / 0.0003] ]      Y [0*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G1 X [9041*0.0003+[0.05 * 0.0003  / 0.0003] ]      Y [98*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G1 X [9410*0.0003+[0.05 * 0.0003  / 0.0003] ]      Y [467*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G3 X[9501.7820*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[558.7217*0.0003+[0.03 * 0.0003  / 0.0003] ] R[16158.1069*0.0003]
G3 X[9592.7500*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[651.2500*0.0003+[0.03 * 0.0003  / 0.0003] ] R[13469.4325*0.0003]
G3 X[9674.6646*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[736.1901*0.0003+[0.03 * 0.0003  / 0.0003] ] R[12264.6544*0.0003]
G3 X[9755.6667*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[822.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[10047.0657*0.0003]
G3 X[9827.7265*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[900.1542*0.0003+[0.03 * 0.0003  / 0.0003] ] R[9065.8878*0.0003]
G3 X[9898.7500*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[979.2500*0.0003+[0.03 * 0.0003  / 0.0003] ] R[7272.9515*0.0003]
G3 X[9960.9727*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1050.6136*0.0003+[0.03 * 0.0003  / 0.0003] ] R[6492.0438*0.0003]
G3 X[10022.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1123.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[5077.3764*0.0003]
G3 X[10074.4112*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1187.5686*0.0003+[0.03 * 0.0003  / 0.0003] ] R[4473.3731*0.0003]
G3 X[10125.4167*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1253.2500*0.0003+[0.03 * 0.0003  / 0.0003] ] R[3390.6773*0.0003]
G3 X[10168.0551*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1311.0217*0.0003+[0.03 * 0.0003  / 0.0003] ] R[2940.1492*0.0003]
G3 X[10209.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1370.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[2143.2832*0.0003]
G3 X[10274.4125*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1474.8328*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1916.7140*0.0003]
G3 X[10331.7778*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1584.2222*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1449.1227*0.0003]
G3 X[10373.5894*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1683.7811*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1263.1945*0.0003]
G3 X[10405.4444*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1786.8889*0.0003+[0.03 * 0.0003  / 0.0003] ] R[978.0109*0.0003]
G3 X[10423.5733*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1881.7257*0.0003+[0.03 * 0.0003  / 0.0003] ] R[869.2368*0.0003]
G3 X[10430.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[1978.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[724.3205*0.0003]
G3 X[10424.3690*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2073.7903*0.0003+[0.03 * 0.0003  / 0.0003] ] R[817.5649*0.0003]
G3 X[10404.7500*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2167.5000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[538.9283*0.0003]
G3 X[10374.1332*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2242.7109*0.0003+[0.03 * 0.0003  / 0.0003] ] R[445.4583*0.0003]
G3 X[10329.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2310.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[359.4427*0.0003]
G3 X[10274.2502*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2361.7223*0.0003+[0.03 * 0.0003  / 0.0003] ] R[328.2797*0.0003]
G3 X[10209.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2399.2500*0.0003+[0.03 * 0.0003  / 0.0003] ] R[314.2172*0.0003]
G3 X[10130.6374*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2422.1639*0.0003+[0.03 * 0.0003  / 0.0003] ] R[348.5383*0.0003]
G3 X[10049.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2429.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[490.8792*0.0003]
G3 X[9948.5793*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2419.1233*0.0003+[0.03 * 0.0003  / 0.0003] ] R[515.4510*0.0003]
G3 X[9852.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2389.8889*0.0003+[0.03 * 0.0003  / 0.0003] ] R[516.4125*0.0003]
G3 X[9756.2486*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2339.0311*0.0003+[0.03 * 0.0003  / 0.0003] ] R[562.8406*0.0003]
G3 X[9670.3333*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2272.5556*0.0003+[0.03 * 0.0003  / 0.0003] ] R[736.6171*0.0003]
G3 X[9581.2555*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2179.9258*0.0003+[0.03 * 0.0003  / 0.0003] ] R[885.5761*0.0003]
G3 X[9504.0000*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2077.0000*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1304.3950*0.0003]
G1 X [9414*0.0003+[0.05 * 0.0003  / 0.0003] ] Y [2126*0.0003+[0.03 * 0.0003  / 0.0003] ]
M2
Скрипт:
rev_arc.py.tar
(10 КБ) 458 скачиваний
(для просмотра содержимого нажмите на ссылку)

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

#!/usr/bin/python
# -*- coding: utf-8 -*-
import  time
from subprocess import Popen, PIPE

a= Popen('halcmd getp minmax.0.max ', shell=True, stdout=PIPE).stdout.read()
x=int(a)-1
f = open(r'/home/nkp/emc2/nc_files/15.ngc')
lines = f.readlines()
f.close()
f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
f.write("F60 G20 G61 G17\n")
f.close()
while x>0 :
        if lines[x].find('G2')!=-1  and lines[x-1].find('G1')==-1 : # если текущая строка содержит G2 а предыдущая не содержит G1
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
                r=lines[x]
	        a=r.split('R')
	        w=a[1]
	        z=lines[x-1].replace('G2','G3')
	        a=z.split('R')
	        ww=a[0]
	        f.write(ww+'R'+w)
	        x=x-1
	        f.close()

        elif lines[x].find('G3')!=-1  and lines[x-1].find('G1')==-1 :# если текущая строка содержит G3 а предыдущая не содержит G1
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
                r=lines[x]
	        a=r.split('R')
	        w=a[1]
	        z=lines[x-1].replace('G3','G2')
	        a=z.split('R')
	        ww=a[0]
	        f.write(ww+'R'+w)
	        x=x-1
	        f.close()
	elif lines[x].find('G2')!=-1  and lines[x-1].find('G1')!=-1  : # если текущая строка содержит G2 а предыдущая содержит G1
                f = open('/home/nkp/emc2/nc_files/12.ngc','a')
	        a=lines[x].split('R')
	        w=a[1]
	        print w
	        r=lines[x-1].replace('G1','G3')
	        ww=r.replace ('\n', '')
	        print ww
	        f.write(ww+'R'+w)
	        x=x-1
	        f.close()
	        
        elif lines[x].find('G3')!=-1 and lines[x-1].find('G1')!=-1 : # если текущая строка содержит G3 а предыдущая содержит G1
                f = open('/home/nkp/emc2/nc_files/12.ngc','a')       # открываем файл на добавление
	        a=lines[x].split('R')   # разделяем строку lines[x] по символу 'R' в список
	        w=a[1]                  # берем из разделения второй элемент [1] (нумерация с нуля)
	        r=lines[x-1].replace('G1','G2') # меняем G1 на G2 в строке lines[x-1] 
	        ww=r.replace ('\n', '')  # убираем  в конце перенос строки
	        f.write(ww+'R'+w)   # пишем в файл 
	        x=x-1
	        f.close()
        elif lines[x].find('G1')!=-1  : # если текущая строка содержит G1 
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x])
	        x=x-1
	        f.close()

        else :
                print x     # проверка отработки условиями всех строк
                x=x-1
                f.close()
                
f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
f.write("M2")
f.close()
d=Popen('halcmd setp minmax.0.reset 1 ', shell=True, stdout=PIPE).stdout.read()
time.sleep(2)
d=Popen('halcmd setp minmax.0.reset 0 ', shell=True, stdout=PIPE).stdout.read()
Последний раз редактировалось nkp 27 май 2012, 19:33, всего редактировалось 2 раза.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Вот кусок кода в gedit:

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

	elif lines[x].find('G2')!=-1  and lines[x-1].find('G1')!=-1  : # если текущая строка содержит G2 а предыдущая содержит G1
                f = open('/home/nkp/emc2/nc_files/12.ngc','a')
	        a=lines[x].split('R')
	        w=a[1]
	        print w
	        r=lines[x-1].replace('G1','G3')
	        ww=r.replace ('\n', '')
	        print ww
	        f.write(ww+'R'+w)
	        x=x-1
	        f.close()
	        
        elif lines[x].find('G3')!=-1 and lines[x-1].find('G1')!=-1 : # если текущая строка содержит G3 а предыдущая содержит G1
                f = open('/home/nkp/emc2/nc_files/12.ngc','a')       # открываем файл на добавление
	        a=lines[x].split('R')   # разделяем строку lines[x] по символу 'R' в список
	        w=a[1]                  # берем из разделения второй элемент [1] (нумерация с нуля)
	        r=lines[x-1].replace('G1','G2') # меняем G1 на G2 в строке lines[x-1] 
	        ww=r.replace ('\n', '')  # убираем  в конце перенос строки
Если выровнять-ошибка отступа!
Тот же код в IDLE:
Выделение_113.png (3877 просмотров) <a class='original' href='./download/file.php?id=5531&mode=view' target=_blank>Загрузить оригинал (50.56 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

rev_arc.py.tar
(10 КБ) 461 скачивание
Поисправлял немного:
(для просмотра содержимого нажмите на ссылку)

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

#!/usr/bin/python
# -*- coding: utf-8 -*-
import  time
from subprocess import Popen, PIPE

a= Popen('halcmd getp minmax.0.max ', shell=True, stdout=PIPE).stdout.read()
x=int(a)-1
f = open(r'/home/nkp/emc2/nc_files/15.ngc')
lines = f.readlines()
f.close()
f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
f.write("F70 G20 G61 G17\n")
f.close()
while x>0 :
        if lines[x].find('G2')!=-1  and lines[x-1].find('G1')==-1 and lines[x+1].find('G1')==-1 :
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x-1].replace('G2','G3').split('R')[0]+'R'+lines[x].split('R')[1])
	        x=x-1
	        f.close()

        elif lines[x].find('G3')!=-1  and lines[x-1].find('G1')==-1 and lines[x+1].find('G1')==-1:
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x-1].replace('G3','G2').split('R')[0]+'R'+lines[x].split('R')[1])
	        x=x-1
	        f.close()
	elif lines[x].find('G2')!=-1  and lines[x-1].find('G1')==-1 and lines[x+1].find('G1')!=-1:
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x].replace('G2','G1').split('R')[0]+'\n')
	        x=x-1
	        f.close()
	elif lines[x].find('G3')!=-1  and lines[x-1].find('G1')==-1 and lines[x+1].find('G1')!=-1:
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x].replace('G3','G1').split('R')[0]+'\n')
	        x=x-1
	        f.close()
	elif lines[x].find('G2')!=-1  and lines[x-1].find('G1')!=-1  : 
                f = open('/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x-1].replace('G1','G2').replace ('\n', '')+'R'+lines[x].split('R')[1])
	        x=x-1
	        f.close()
	        
        elif lines[x].find('G3')!=-1 and lines[x-1].find('G1')!=-1 : 
                f = open('/home/nkp/emc2/nc_files/12.ngc','a')       
	        f.write(lines[x-1].replace('G1','G3').replace ('\n', '')+'R'+lines[x].split('R')[1])   
	        x=x-1
	        f.close()

        elif lines[x].find('G1')!=-1  : 
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
	        f.write(lines[x])
	        x=x-1
	        f.close()

        else :
                print x 
                x=x-1
                f.close()               
f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
f.write("M2")
f.close()
d=Popen('halcmd setp minmax.0.reset 1 ', shell=True, stdout=PIPE).stdout.read()
time.sleep(2)
d=Popen('halcmd setp minmax.0.reset 0 ', shell=True, stdout=PIPE).stdout.read()
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Меня вроде всего день не было, а тут уже все готово!!! :cheesy:
Супер!

только не понял, как реализуется обратно-обратно :).
nkp писал(а):Если выровнять-ошибка отступа!
Что выровнять?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Nick писал(а): как реализуется обратно-обратно
Идем по программе-останов-выз окно-вводим количество кадров отхода-генерир код-загружаем его в axis-отходим-в конце программы(после М2) смотрим число-выз окно-
вводим в соотв поле-генерируем код-загружаем-и вперед по программе.
Nick писал(а):Что выровнять?
Да чтото gedit с отступами партачит(или это не он? :) )
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

nkp писал(а):Да чтото gedit с отступами партачит(или это не он? )
С какими из них? может у тебя некоторые отступы через таб а некоторые через пробел?

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

Re: Python в LinuxCnC

Сообщение nkp »

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

Re: Python в LinuxCnC

Сообщение Nick »

nkp писал(а):Да там "интеграции" всего - загрузить код с нашего окошка в axis.(через хал только текущ номер кадра)
Понятно, просто я там у тебя увидел что-но на tkinter, думал, может ты что-то в axis добавил..
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Python в LinuxCnC

Сообщение nkp »

Чтоб привести ж-код такого вида:

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

G1 X [9414*0.0003+[0.05 * 0.0003  / 0.0003] ] Y [2126*0.0003+[0.03 * 0.0003  / 0.0003] ] 
G2 X[9471.6423*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2230.4760*0.0003+[0.03 * 0.0003  / 0.0003] ] R[2265.5346*0.0003]
G2 X[9535.3611*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2331.3333*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1810.7117*0.0003]
G2 X[9598.3121*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2417.7829*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1621.2129*0.0003]
G2 X[9667.4444*0.0003+[0.05 * 0.0003  / 0.0003] ] Y[2499.3333*0.0003+[0.03 * 0.0003  / 0.0003] ] R[1310.7488*0.0003]
к более привычному:

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

G2  X3.1667  Y0.3717  R0.96089742
G1  X2.9258  Y0.1665
G1  X3.1088  Y0.1665
G3  X3.13966865  Y0.16743882  R0.50795211
G3  X3.1703  Y0.171075  R0.26909517
G3  X3.19180223  Y0.17614428  R0.19725495
скрипт:

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

f = open(r'/home/nkp/emc2/nc_files/15.ngc')
lines = f.readlines()
f.close()
x=1
y=80
while x<y :
        if lines[x].find('G1')==-1 :
                a=eval(lines[x].split('X')[1].split('Y')[0])
                b=eval(lines[x].split('X')[1].split('Y')[1].split('R')[0])
                c=eval(lines[x].split('X')[1].split('Y')[1].split('R')[1])
                f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
                f.write(lines[x].split('X')[0]+' '+'X'+str(a)+'  '+'Y'+str(b)+'  '+'R'+str(c)+'\n')
                f.close()
                x=x+1
        else :
              a=eval(lines[x].split('X')[1].split('Y')[0])
              b=eval(lines[x].split('X')[1].split('Y')[1].split('R')[0])
              f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
              f.write(lines[x].split('X')[0]+' '+'X'+str(a)+'  '+'Y'+str(b)+'\n')
              f.close()
              x=x+1    
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

nkp писал(а):f = open(r'/home/nkp/emc2/nc_files/12.ngc','a')
Вынеси открытие и закрытие файла за пределы цикла.

Кстати, ты умеешь работать с регулярными выражениями?
С ними можно творить чудеса :)
(в этом коде основная - 3-я строка, она парсит все параметры, хотя это тоже не очень, если вдруг в строке появится параметр с X, то все пойдет лесом... По хорошему надо наверное грамматику Gкода описать... Кстати, а как axis Gкод парсит?)

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

import re
for a in f.readlines() :
	gcode = re.findall("(G\d+)",a)[0]
	params = re.findall("([XYZABCIJKR])([\[\]\s0-9\-+\.\,\*\/]+)",a)
	s += gcode+" " + " ".join([ "%s%s"%(axis,eval(  value.replace("[","(").replace("]",")") ) )  for (axis,value) in params])
	s +="\n"
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Python в LinuxCnC

Сообщение Serg »

Nick писал(а):По хорошему надо наверное грамматику Gкода описать...
Для этого давным давно придумали lexx и yacc - там довольно просто описывается синтаксис языка, а на выходе получается код парсера на C.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Python в LinuxCnC

Сообщение Nick »

Cи ... с ним еще разбираться надо :).
Кстати, под питон есть куча парсеров: http://wiki.python.org/moin/LanguageParsing

Просто я вот думаю, вдруг можно достать откуда-нибудь из axis уже распарсенный код и готовую траекторию...
Ответить

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