Перестраиваемый автомат на ngcgui от чайника - РЕШЕНО

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

Re: Перестраиваемый автомат на ngcgui от чайника - РЕШЕНО

Сообщение nkp »

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

# tkapp.py: specify inifile entry [DISPLAY]USER_COMMAND_FILE = path_to_tkapp.py
# specify tk applications as inifile entries like:
#   [DISPLAY]TKAPP = ngcgui_app.tcl

# note: USER_COMMAND_FILE supersedes ~/.axisrc so source it here, once only
try:
    first_tkapp
except NameError:
    first_tkapp = True

user_rcfile = os.path.expanduser("~/.axisrc")
if first_tkapp and os.path.exists(user_rcfile):
    first_tkapp = False
    import traceback
    try:
        execfile(user_rcfile)
    except:
        tb = traceback.format_exc()
        print >>sys.stderr, tb
        root_window.tk.call("nf_dialog", ".error", _("Error in ~/.axisrc"),
            tb, "error", 0, _("OK"))

class moreTclCommands(nf.TclCommands):
    
    def dynamic_tab(name, text):
        tab = widgets.right.insert("end", name, text=text)
        tab.configure(borderwidth=1, highlightthickness=0)
        return tab

    # for emc2.5, _dynamic_tab is in axis.py, so do this instead:
    #def dynamic_tab(name, text):
    #    return _dynamic_tab(name,text) # ccaller: make a frame and pack

    def inifindall(section,item):
        # support USER_COMMAND_FILE that uses tcl, return tcl list
        answer = inifile.findall(section,item)
        tlist = ""
        for x in answer:
            if len(answer) == 1:
                tlist = x
            else:
                tlist = tlist + "{" + x + "} "
        return tlist

moreTclCommands(root_window)

tkapp = inifile.findall("DISPLAY","TKAPP") or ""

for app in tkapp:
    root_window.tk.call("source",app)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Перестраиваемый автомат на ngcgui от чайника - РЕШЕНО

Сообщение nkp »

UAVpilot писал(а):Неоптимальные холостые перемещения.
исходя из этого замечания попробуй такой вариант:

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

o<sverlo> sub
(info: сверление)
   #<Num_X>   =  #1  (=5    кол-во отверстий по X)
   #<Step_X>  =  #2  (=10   шаг по X, мм)
   #<Num_Y>   =  #3  (=5    кол-во отверстий по Y)
   #<Step_Y>  =  #4  (=10   шаг по Y, мм)
   #<Speed>   =  #5  (=200  скорость сверловки)
   #<Depth>   =  #6  (=10   глубина сверловки, мм)
   #<Step_Z>  =  #7  (=5    шаг сверловки, мм)
   #<Surface> =  #8  (=0    высота пов-ти заготовки, мм)
   #<Max_RPM> =  #9  (=5000 обороты шпинделя)
   #<Start_X> =  #10 (=0    нач.координата по X, мм)
   #<Start_Y> =  #11 (=0    нач.координата по Y, мм)

G0 Z5.0
G0 X0 Y0 S#<Max_RPM> M3
#<Current_Y> = #<Start_Y>
#<Current_X> = #<Start_X>
#<i> = 2
G0 X#<Current_X> Y#<Current_Y>
o111 if [[#<Num_X> OR #<Num_Y> ] eq 0]
(msg, set #<Num_X> and #<Num_Y> )
M30
o111 endif
(forward)
#<y> = [#<Num_Y>-1]
o102 REPEAT [#<Num_Y>]
	G83 R#<Surface> Z[-1 * #<Depth>] Q#<Step_Z> F#<Speed>
	G0 Z5.0
	o112 IF [#<y> gt 0]
		#<Current_Y> = [#<Current_Y> + #<Step_Y>]
		G0 X#<Current_X> Y#<Current_Y>
		#<y> = [#<y> - 1]
	o112 ENDIF	
o102 ENDREPEAT
(endforward)
o100 WHILE [#<Num_X> gt 1]
	o101 IF [[#<i> MOD 2] eq 0]	
(jump)		
#<Current_X> = [#<Current_X> + #<Step_X>]
G0 X#<Current_X>
(endjump)

(back)
#<y> = [#<Num_Y>-1]
o103 REPEAT [#<Num_Y>]
	G83 R#<Surface> Z[-1 * #<Depth>] Q#<Step_Z> F#<Speed>
	G0 Z5.0
	o113 IF [#<y> gt 0]
		#<Current_Y> = [#<Current_Y> - #<Step_Y>]
		G0 X#<Current_X> Y#<Current_Y>
		#<y> = [#<y> - 1]
	o113 ENDIF	
o103 ENDREPEAT
(endback)		
	o101 ELSE
(jump)	
#<Current_X> = [#<Current_X> + #<Step_X>]
G0 X#<Current_X>
(endjump)		

(forward)		
#<y> = [#<Num_Y>-1]
o104 REPEAT [#<Num_Y>]
	G83 R#<Surface> Z[-1 * #<Depth>] Q#<Step_Z> F#<Speed>
	G0 Z5.0
	o114 IF [#<y> gt 0]
		#<Current_Y> = [#<Current_Y> + #<Step_Y>]
		G0 X#<Current_X> Y#<Current_Y>
		#<y> = [#<y> - 1]
	o114 ENDIF	
o104 ENDREPEAT
(endforward)	
	o101 ENDIF
	#<Num_X> =[ #<Num_X> - 1 ]
	#<i> = [#<i> + 1]			
o100 ENDWHILE

G0 Z5.0 M5
G0 X0 Y0
M9
o<sverlo> endsub

схематично это выглядит так:

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

#<_Current_Y> = #<_Start_Y>
#<_Current_X> = #<_Start_X>
#<i> = 2
G1 F300 X#<_Current_X> Y#<_Current_Y>
o<forward> call
o100 WHILE [#<Num_X> gt 1]
	o101 IF [[#<i> MOD 2] eq 0]		
		o<jump> call
		o<back> call
	o101 ELSE
		o<jump> call
		o<forward> call	
	o101 ENDIF
	#<Num_X> =[ #<Num_X> - 1 ]
	#<i> = [#<i> + 1]			
o100 ENDWHILE
то есть :
"работаем вперед"(o<forward> call)
проверяем на четность номер ряда и в зависимости от этого
"работаем вперед " или "назад" (o<back> call)
между проходами o<jump> call
Выделение_061.png (1702 просмотра) <a class='original' href='./download/file.php?id=29789&mode=view' target=_blank>Загрузить оригинал (134.07 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Перестраиваемый автомат на ngcgui от чайника - РЕШЕНО

Сообщение nkp »

очевидно .что эту подпрограмму можно использовать для любого действия ,повторяещегося
по данной схеме...
для этого непосредственный код "работы" заменяем на вызов подпрограммы(o<operation> call) , записаной в отдельном файле :
(для просмотра содержимого нажмите на ссылку)

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

o<sv_backup> sub
(info: сверление)
   #<Num_X>   =  #1  (=5    кол-во отверстий по X)
   #<Step_X>  =  #2  (=10   шаг по X, мм)
   #<Num_Y>   =  #3  (=5    кол-во отверстий по Y)
   #<Step_Y>  =  #4  (=10   шаг по Y, мм)
   #<Speed>   =  #5  (=200  скорость сверловки)
   #<Depth>   =  #6  (=10   глубина сверловки, мм)
   #<Step_Z>  =  #7  (=5    шаг сверловки, мм)
   #<Surface> =  #8  (=0    высота пов-ти заготовки, мм)
   #<Max_RPM> =  #9  (=5000 обороты шпинделя)
   #<Start_X> =  #10 (=0    нач.координата по X, мм)
   #<Start_Y> =  #11 (=0    нач.координата по Y, мм)


   
G0 Z5.0
G0 X0 Y0 S#<Max_RPM> M3
#<Current_Y> = #<Start_Y>
#<Current_X> = #<Start_X>
#<i> = 2
G0 X#<Current_X> Y#<Current_Y>
o111 if [[#<Num_X> OR #<Num_Y> ] eq 0]
(msg, set #<Num_X> or #<Num_Y> )
m30
o111 endif
(forward)
#<y> = [#<Num_Y>-1]
o102 REPEAT [#<Num_Y>]
	o<operation> call
	o112 IF [#<y> gt 0]
		#<Current_Y> = [#<Current_Y> + #<Step_Y>]
		G0 X#<Current_X> Y#<Current_Y>
		#<y> = [#<y> - 1]
	o112 ENDIF	
o102 ENDREPEAT
(endforward)
o100 WHILE [#<Num_X> gt 1]
	o101 IF [[#<i> MOD 2] eq 0]	
(jump)		
#<Current_X> = [#<Current_X> + #<Step_X>]
G0 X#<Current_X>
(endjump)

(back)
#<y> = [#<Num_Y>-1]
o103 REPEAT [#<Num_Y>]
	o<operation> call
	o113 IF [#<y> gt 0]
		#<Current_Y> = [#<Current_Y> - #<Step_Y>]
		G0 X#<Current_X> Y#<Current_Y>
		#<y> = [#<y> - 1]
	o113 ENDIF	
o103 ENDREPEAT
(endback)		
	o101 ELSE
(jump)	
#<Current_X> = [#<Current_X> + #<Step_X>]
G0 X#<Current_X>
(endjump)		

(forward)		
#<y> = [#<Num_Y>-1]
o104 REPEAT [#<Num_Y>]
	o<operation> call
	o114 IF [#<y> gt 0]
		#<Current_Y> = [#<Current_Y> + #<Step_Y>]
		G0 X#<Current_X> Y#<Current_Y>
		#<y> = [#<y> - 1]
	o114 ENDIF	
o104 ENDREPEAT
(endforward)	
	o101 ENDIF
	#<Num_X> =[ #<Num_X> - 1 ]
	#<i> = [#<i> + 1]			
o100 ENDWHILE

G0 Z5.0 M5
G0 X0 Y0
M9
o<sv_backup> endsub
а уже в файле operation.ngc пропишем наш код для выполнения :

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

o<operation> sub
G0 Z.5
G1 F50 Z-.5
G91
X2 
Y2
X-2
Y-2
G90
G0 Z5.0
o<operation> endsub
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Перестраиваемый автомат на ngcgui от чайника - РЕШЕНО

Сообщение Ворон226 »

Nick писал(а):А кто это такой? Можно его тоже посмотреть?
Пока сам до него не добрался... Но то, что его нужно положить для пользования - это верно подмечено.
Дополнил.
Последний раз редактировалось Ворон226 20 июн 2014, 17:01, всего редактировалось 1 раз.
Хочешь быть счастливым? Будь им!
Аватара пользователя
Ворон226
Мастер
Сообщения: 1923
Зарегистрирован: 01 окт 2012, 18:14
Репутация: 181
Откуда: Солнечногорск Московской обл. - Борки Конаковского р-на - Скоморохово Фировского р-на
Контактная информация:

Re: Перестраиваемый автомат на ngcgui от чайника - РЕШЕНО

Сообщение Ворон226 »

Стремление сделать все универсальным - хорошее стремление. Только зачем кипятить чай велосипедом?
Я заведомо сузил задачу, определив её как ПЕРЕНАСТРАИВАЕМЫЙ АВТОМАТ. Даже не станок.

Но замечания правильные, познавательные. И не совсем для чайников. (но ведь когда-нибудь чайник станет НЕчайником? Хочется надеяться)
Хочешь быть счастливым? Будь им!
Ответить

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