ngcgui

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

ngcgui

Сообщение nkp » 14 янв 2012, 21:02

NGCGUI - установка, настройка, описание, примеры.
Примеры
Файлы подпрограмм

NGCGUI это утилита для использования в EMC2 подпрограмм,т.н. мастеров.
Ссылки
http://www.youtube.com/watch?v=Bn8T5Fw0ISs
http://www.linuxcnc.org/docs/2.5/html/gcode/o-code.html#cha:O-Codes - О-коды
Установка
Для установки в EMC2 версии 2.4 нужны 4 файла:
ngcgui.rar
(38.12 Кб) Скачиваний: 649

Положить файлы в папку с конфигурацией станка.
Более удобным будет поместить в отдельную папку,тогда можно их использовать для разных кофигураций.
Прописать в ini файле в секции [DISPLAY] пути к этим файлам:
(пример из моего ini файла)
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
[attachment=10]Screenshot-7.png[/attachment][DISPLAY]

USER_COMMAND_FILE = /home/nkp/emc2/ngcgui/ngcgui_tst/tkapp.py
NGCGUI = /home/nkp/emc2/ngcgui/ngcgui_tst/ngcgui.tcl
TKAPP   = /home/nkp/emc2/ngcgui/ngcgui_tst/ngcgui_app.tcl
TKAPP   = /home/nkp/emc2/ngcgui/ngcgui_tst/ngcgui_ttt.tcl

Обратите внимание: : ngcgui_app.tcl должен предшествовать ngcgui_ttt.tcl
Теперь создаем нашу первую вкладку следующей строкой - пока без названия:

Запускаем,проверяем:


Настройка
Теперь создаем сам файл подпрограммы для нашей вкладки.
Он должен быть такого вида:

имя- имя подпрограммы,имя файла и название нашей вкладки.
тело подпрогр- g-код, который мы напишем.
Назовем файл lathe (пример будет из токарной обработки):

Окончание файлов должно быть .ngc
Помещаем наш файл lathe.ngc в папку прописанную в ini [DISPLAY]PROGRAM_PREFIX

и прописываем путь к ней там же:

Проверяем:

Кстати,загружаемый по умолчанию EMC файл можно изменить в ini [DISPLAY]
если прописать так

не загр. ничего.(как на скриншоте выше.)
Напишем тело нашей подпрограммы.
Его надо начинать с набора инструкций, которые определяют параметры :
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
o<lathe> sub
   #<Material_Dia> =  #1 (=16 Диаметр заготовки)
   #<Final_Dia> =  #2 (=10 Диаметр детали)
   #<Depth_Cut> =  #3 (=2 глуб  прохода)
   #<Final_Cut> =  #4 (=0.00 глуб чист прох)
   #<SurfaceSpeed> =  #5 (=100 Поверхностная скорость)
   #<FeedRate> =  #6 (=40 Подача)
   #<Max_RPM> =  #7 (=1500 обороты)
   #<Z_EndOfCut> =  #8 (=2 финиш )
   #<Z_StartOfCut> =  #9 (=46 L заготовки)
   #<RToolNumber> = #10 (=1 Черновой инстр)
   #<FToolNumber> = #11 (=1 Чистовой инстр)
   #<Coolant> = #12 (=8 Охл вкл=8, Выкл=9)
o<lathe> endsub

Смотрим:

Каждая строка появилась во вкладке с возможностью редактировать данные.
Теперь мы в нашей подпрограмме (в g-коде) можем (и будем) использовать переменные.
Например,вмето T1M6 пишем T#<RToolNumber> M6
После набора инструкций (их может быть до 30) непосредственно сам G-код:
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
T#<RToolNumber> M6
G43 G7 G96 D#<Max_RPM> S#<SurfaceSpeed>
M3 M#<Coolant>
G0 X#<Material_Dia> Z#<Z_StartOfCut>
#<Current_Dia>=#<Material_Dia>
o100 while [#<Current_Dia> gt #<Final_Dia>]
O101   if [#<Current_Dia>-#<Depth_Cut> gt #<Final_Dia>]
         #<Current_Dia>=[#<Current_Dia>-#<Depth_Cut>]
O101   else
         #<Current_Dia>=#<Final_Dia>
O101   endif
       X#<Current_Dia>
       G1 Z#<Z_EndOfCut> F#<FeedRate>
       G0 X[#<Current_Dia>+0.025]
       Z#<Z_StartOfCut>
o100 endwhile
G0 X[#<Current_Dia>+0.025]
M5 M9               
Z#<Z_StartOfCut>
G49               
G53 G0 X0 Z0       
o<lathe> endsub

Сам файл:
lathe.ngc
(1.28 Кб) Скачиваний: 624

Запускаем,на вкладке нажимаем "Create feature" ,потом "Finalize"
Получаем запрограммированную траекторию:

Описание
Примеры
Как объеденить несколько подпрограмм
В программу могут быть объеденены несколько копий как одной подпрограммы, так и разные подпрограммы.
Как это выглядит на практике:
у нас есть 6 вкладок с подпрограммами для фрезерной обработки:

Объеденим их все в одну программу. Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
Этим мы передали наши параметры в создаваемый ngcgui файл auto.ngc. Изменим некоторые параметры(например координаты начала обработки) Нажмем еще раз "CreateFeature".В файл auto.ngc передались также и новые параметры.Нажимаем "Finalize"-загружаем готовый файл с двумя подпрограммами:

Чтобы объеденить подпрограммы с разных вкладок :
1.Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
2.Переходим на нужную вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
3.Повторяем,если необходимо.
4.Нажимаем "Finalize".
5. Соглашаемся создать из всех вкладок.

Удобней объеденять несколько одинаковых контуров так:
1.создаем из требуемой вкладки копию нажатием кнопки "new"
2.нажимаем "Subfile" ,открываем файл(в нашем случае тот же,что и на первой вкладке)
3.повторяем необходимое число раз
4.корректируем параметры для каждой копии
5.объеденяем все,соблюдая нужную нам последовательность обработки.

5. Соглашаемся создать из всех вкладок.

Файлы подпрoграмм
для токарной обработки
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
;   цикл на уменьшение, который может быть использован как часть  программы

#<start-value> = 15    ;нач значение
#<decrement>   = 1    ;декремент -еденичн. уменшение
#<end-value>   =10    ;конеч значение
#<end>=3  ; значен X
o100 do
;------------------------------------------------------------
G0 X#<end>   ;любые действия
;-----------------------------------------------------------
  G4 P1.0 (маленькая пауза)

  ; алгоритм
  o110 if [[#<start-value> - #<decrement>] GT #<end-value>]
    ; убедиться, что [начальное значение минус декремент] не будет выходить за рамки конечного значения
    #<start-value> = [#<start-value> - #<decrement>]
  o110 else
   
    #<start-value> = #<end-value>
  o110 endif
;---------------------------------------
#<end>=[#<end>+2]
;---------------------------------------
o100 while [#<start-value> GT #<end-value>]



M2
шаблон цикла

(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
(info: сфера ) 
o<sfer> sub
#<promien_walca> =     #1 (=30 радиус заготовки)
#<promien_na_plasko> =  #2 (=20 Радиус части без скругл.)
#<promien_kulki> =     #3 (=10 Радиус  скругления)
#<przybranie> =     #4 (=1 снятие за прох)
#<przesuniecie_z> =     #5 (=0 Начало по Z)
  #<Coolant>    =        #6 (=8 охлажд вкл=8 выкл=9)
#<predkosc> = #7 (=400 скорость резания)
#<promien> = #<promien_walca>
M3 M#<Coolant>
#<walec> = 0
#<promien_walca> = [#<promien_walca>-#<promien_na_plasko>]
g18 (g7)  G64
M3 S1000
g0 z[#<przesuniecie_z>+1] x[[#<promien>]+1]
o100 while [#<walec> lt [#<promien_walca>]]
#<walec>=[[#<walec>]+[#<przybranie>]]
o110 if [[[#<promien_walca>]-[#<walec>]+[#<promien_na_plasko>]]GT [ #<promien_na_plasko>]]
x[[#<promien_walca>]-[#<walec>]+[#<promien_na_plasko>]]
z[#<przesuniecie_z>]
g3 x[[#<promien>]] z-[[#<walec>]-[#<przesuniecie_z>]] r[#<promien_kulki>]  f[#<predkosc>]   
  o110 else 
    G61
x[[#<promien_walca>]-[#<walec>]+[#<promien_na_plasko>]]
z[#<przesuniecie_z>]
g3 x[[#<promien>]] z-[[#<walec>]-[#<przesuniecie_z>]] r[#<promien_kulki>]  f[#<predkosc>]
  o110 endif
g0
x [[#<promien>]+1]
z[#<przesuniecie_z>+1]
o100 endwhile
o<sfer> endsub
M2
сфера

(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
(info: внешний конус) 
o<stozek> sub
#<MaxRPM>          = #1 (= 3000 макс обороты)
#<SurfaceUnitsMin> = #2 (= 40 поверхностная скорость)
#<Przybranie>        = #3 (= 2 за 1 проход)
#<Z-Start>         = #4 (= 0.000 старт по Z)
#<kat>           = #5 (= 45 угол конуса)
#<dlugosc_stozka> =  #6 (=30 длинна конуса)
#<srednica_walka> = #7 (=30 начальный диаметр)
#<Coolant>         = #8 (=8 охлаж вкл=8 выкл=9)
#<FeedRate>        = #9 (=40 подача)
#<zebrane_max> = [tan[#<kat>]*[#<dlugosc_stozka>]]
#<ilosc_przybran> = [[#<zebrane_max>]/[#<przybranie>]]
#<zejscie_dlugosci> = [[#<dlugosc_stozka>]/[#<ilosc_przybran>]]
#2 = #<zejscie_dlugosci>
#1 = 0
G96 D#<MaxRPM> S#<SurfaceUnitsMin>
M3
o100 while [#<ilosc_przybran> gt 0]
#1=[[#1]+[#<przybranie>]]
g0 z1
x[[#<srednica_walka>/2]-[#1]]
z0
g1 f[#<FeedRate>] z-[#<zejscie_dlugosci>] x[#<srednica_walka>/2]
g0 x[[#<srednica_walka>/2]+1]
#<ilosc_przybran> = [[#<ilosc_przybran>] - [#<przybranie>]]
#<zejscie_dlugosci> = [[#<zejscie_dlugosci>]+[#2]]
o100 endwhile 
g0 z1
o<stozek> endsub
конус по его длине

(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
(info: проточка наружной поверхности)
o<od> sub
#<Material_Dia> =  #1 (=16 Диаметр заготовки)
   #<Final_Dia> =  #2 (=10 Диаметр детали)
   #<Depth_Cut> =  #3 (=2 глуб  прохода)
   #<Final_Cut> =  #4 (=0.00 глуб чист прох)
#<SurfaceSpeed> =  #5 (=100 Поверхностная скорость)
    #<FeedRate> =  #6 (=40 Подача)
     #<Max_RPM> =  #7 (=3000 обороты)
  #<Z_EndOfCut> =  #8 (=2 финиш )
#<Z_StartOfCut> =  #9 (=46 L заготовки)
#<RToolNumber> = #10 (=2 Черновой инстр)
#<FToolNumber> = #11 (=1 Чистовой инстр)
     #<Coolant> = #12 (=8 Охл вкл=8, Выкл=9)

T#<RToolNumber> M6

G43 G7 G96 D#<Max_RPM> S#<SurfaceSpeed>

M3 M#<Coolant>
G0 X#<Material_Dia> Z#<Z_StartOfCut>
#<Current_Dia>=#<Material_Dia>

o100 while [#<Current_Dia> gt #<Final_Dia>]

O101   if [#<Current_Dia>-#<Depth_Cut> gt #<Final_Dia>]
         #<Current_Dia>=[#<Current_Dia>-#<Depth_Cut>]
O101   else
         #<Current_Dia>=#<Final_Dia>
O101   endif

       X#<Current_Dia>
       G1 Z#<Z_EndOfCut> F#<FeedRate>
       G0 X[#<Current_Dia>+0.025]
       Z#<Z_StartOfCut>
o100 endwhile

G0 X[#<Current_Dia>+0.025]
M5 M9             
Z#<Z_StartOfCut>
G49             
G53 G0 X0 Z0   
o<od> endsub
обработка наружной цилиндрической поверхности

(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
(info: расточка)
o<id>sub
      #<Hole_Dia> =  #1 (=16  нач диаметр отверстия)
     #<Final_Dia> =  #2 (=20  кон диаметр отверстия)
     #<Depth_Cut> =  #3 (=1 расточ за 1 проход)
   #<Spring_Cuts> =  #4 (=0 Spring Cuts)
  #<Z_StartOfCut> =  #5 (=46 Z начало обработки)
    #<Z_EndOfCut> =  #6 (=-0.600 Z конец обработки)
  #<SurfaceSpeed> =  #7 (=80 поверхн скорость)
      #<FeedRate> =  #8 (=50 подача)
#<MaxSpindle_RPM> =  #9 (=3000 макс обороты)
    #<ToolNumber> = #10 (=1 № инстр)
       #<Coolant> = #11 (=8 охлажд вкл= 8 выкл=9)

T#<ToolNumber> M6
G43 G7 G96 D#<MaxSpindle_RPM> S#<SurfaceSpeed>
M3 M#<Coolant>
G0 X#<Hole_Dia> Z#<Z_StartOfCut>
#<Current-Diameter> = #<Hole_Dia>
o100 while [#<Current-Diameter> lt #<Final_Dia>]
O101   if [#<Current-Diameter> + #<Depth_Cut> lt #<Final_Dia>]
         #<Current-Diameter> = [#<Current-Diameter> + #<Depth_Cut>]
O101   else
         #<Current-Diameter> = #<Final_Dia>
O101   endif
       X#<Current-Diameter>
       G1 Z#<Z_EndOfCut> F#<FeedRate>
       G0 X[#<Current-Diameter>-0.010]
       Z#<Z_StartOfCut>
o100 endwhile
o102 while [#<Spring_Cuts> gt 0]
       G1 X#<Final_Dia>
       Z#<Z_EndOfCut>
       X[#<Final_Dia>-0.010]
       G0 Z#<Z_StartOfCut>
       #<Spring_Cuts> = [#<Spring_Cuts> -1]
o102 endwhile
G0 X[#<Current-Diameter>-0.010]
M5 M9         
Z#<Z_StartOfCut>
G49             
G53 G0 X0 Z0   
o<id>endsub
расточка
taper-od.ngc
(1021 байт) Скачиваний: 593

face.ngc
(894 байт) Скачиваний: 556


для фрезерной обработки
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
 (info: цилиндрический карман)
O<deepcylindricalpocket> sub
  #<xc>     = #1 (= 0 X центр)
  #<yc>     = #2 (= 0 Y центр)
  #<safez>  = #3 (= 8 безоп высота)
  #<depth>  = #4 (= 2 глубина фрезерования)
  #<radius> = #5 (= 5 радиус)
  #<milld>  = #6 (= 6 диаметр фрезы)
  #<frate>  = #7 (= 120 подача)
  #<zstep>  = #8 (= 0.5 z за 1 об)
  #<rstep>  = #9 (= 1 r за 1 об)

  O<if> if [ #<frate> NE 0 ]
    F#<frate>
  O<if> endif
  O<if> if [ #<zstep> EQ 0 ]
    #<zstep> = [#<milld>/2]
  O<if> endif
  O<if> if [ #<rstep> EQ 0 ]
    #<rstep> = [#<milld>/2]
  O<if> endif
  #<z> = #<safez>
  #<r> = [#<radius> - #<milld>/2]
  G0 Z#<safez>
  G4 P0
  G0 X[#<xc> + #<r>] Y#<yc>
  O<loop> while [ 1 ]
    O<if> if [ #<z> - #<zstep> LT #<depth>]
      #<zstep> = [#<z> - #<depth>]
    O<if> endif   
    G40
    G2 X[#<xc> - #<r>] Y#<yc> Z[#<z> - #<zstep>/2] R#<r>
    G2 X[#<xc> + #<r>] Y#<yc> Z[#<z> - #<zstep>] R#<r>   
    #<r1> = #<r>
    O<loop_r> while [ 1 ]
      G2 X[#<xc> - #<r1>] Y#<yc> R#<r1>
      G2 X[#<xc> + #<r1>] Y#<yc> R#<r1>
      #<r1> = [#<r1> - #<rstep>]
      O<if> if [ #<r1> GT 0 ]
        G1 X[#<xc>+#<r1>]
      O<if> else
        O<loop_r> break
      O<if> endif     
    O<loop_r> endwhile
    G1 X[#<xc> + #<r>]
    #<z> = [#<z> - #<zstep>]
    O<if> if [ #<z> LE #<depth> ]
      O<loop> break
    O<if> endif
  O<loop> endwhile
  G0 Z#<safez>
O<deepcylindricalpocket> endsub

ngcgui 3.png
цилиндрический карман
Последний раз редактировалось nkp 20 июл 2012, 06:57, всего редактировалось 45 раз(а).
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение nkp » 07 май 2012, 06:13

Решение ошибки возможности деления на 0 :
Код: Выделить всёРазвернуть
o124 if [#10 NE 0]
#<dd>=[360/[#10]]
o124 endif
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение nkp » 07 май 2012, 07:50

Вот доработанный вариант:
flanec.ngc
ngcgui фланец
(1.1 Кб) Скачиваний: 279

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

Re: ngcgui

Сообщение Nick » 09 май 2012, 13:56

Чего-то я не догоняю, как ты положение окружностей определяешь без синусов и косинусов?
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: ngcgui

Сообщение nkp » 09 май 2012, 15:55

Nick писал(а):Чего-то я не догоняю, как ты положение окружностей определяешь без синусов и косинусов?

Код: Выделить всёРазвернуть
o103 repeat [#10]
G10 L2 R[#<aa>] P0
G02 X[#<cc>] Y0 Z-[#2] I#9 J0 P[#11]
#<aa>=[[#<aa>]+[#<dd>]]
o103 endrepeat

Нам нужно положение и размеры одной окружности-затем поворот на #аа градусов-повтор #10 раз.
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение nkp » 09 май 2012, 17:10

Цитата из соседней темы :
"система координат "подстраивается" под заготовку. То есть нам нужно раскроить лист на полоски. Мы ложим лист на стол и выравниваем его перпендикулярно оси. А в хороших стойках лист бросается на стол измеряют 3 угловых точки листа и система координат словно повернется относительно листа."
Реализация может выглядеть так :
Допустим имеем заготовку ,расположенную произвольно
(для просмотра содержимого нажмите на ссылку)
Выделение_094.png
Выделение_094.png (8.62 Кб) Просмотров: 3187

Указываем на заготовке первую точку-это будет 0 координат
Смещаем координаты
(для просмотра содержимого нажмите на ссылку)
Выделение_095.png
Выделение_095.png (9.04 Кб) Просмотров: 3187

Теперь укажем вторую точку - она (впоследствии) будет лежать на оси
Поворачиваем оси на необходимый угол
(для просмотра содержимого нажмите на ссылку)
Выделение_093.png
Выделение_093.png (6.4 Кб) Просмотров: 3187

Практически это две кнопки:
1. Установка 0
2. Поворот
А вот зачем третью точку указывать???
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение UAVpilot » 09 май 2012, 23:12

nkp писал(а):А вот зачем третью точку указывать???


Чтобы понять в какую сторону поворачивать систему координат.
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 14613
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3505
Медальки:
Настоящее имя: Сергей

Re: ngcgui

Сообщение nkp » 09 май 2012, 23:28

s3301 писал(а):Чтобы понять в какую сторону поворачивать систему координат.

(для просмотра содержимого нажмите на ссылку)
Выделение_095.png
Выделение_095.png (9.04 Кб) Просмотров: 3164

Тут коорд точки А по x положительна-поворот +
(для просмотра содержимого нажмите на ссылку)
Выделение_099.png
Выделение_099.png (7.34 Кб) Просмотров: 3164

Тут коорд точки А по x отрицательна-поворот -
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение Nick » 09 май 2012, 23:56

Третья точка нужна для отражений. Поворот, масштаб и перенос на плоскости можно задать двумя точками, а вот для контроля отражений нужна третья.
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: ngcgui

Сообщение nkp » 10 май 2012, 00:02

Что за отражения - можно чуть подробней?
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение Nick » 10 май 2012, 00:18

Обычное отражение относительно прямой. Такое преобразование нельзя задать двумя точками, нужна третья. Более того не уверен, что его можно реализовать на чистом Gкоде, т.к. это преобразование должно менять G02 на G03 и наоборот.
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: ngcgui

Сообщение nkp » 10 май 2012, 00:25

Но решается вот такая задача:
Идем далее: нормальная стойка что плазма что проволочновырезные могут исползовать коры(надеюсь правилно напсал). Это когда система координат "подстраивается" под заготовку. То есть нам нужно раскроить лист на полоски. Мы ложим лист на стол и выравниваем его перпендикулярно оси. А в хороших стойках лист бросается на стол измеряют 3 угловых точки листа и система координат словно повернется относительно листа.
Думаю для Мач и ЕМС это сложновато

Отражение вроде здесь не нужно.
Хотя заманчиво-надо подумать :)
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение Nick » 10 май 2012, 00:51

nkp писал(а):Хотя заманчиво-надо подумать :)

То-то и оно :). В принципе можно сделать через Oкод if...
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: ngcgui

Сообщение UAVpilot » 10 май 2012, 13:05

nkp писал(а):
s3301 писал(а):Чтобы понять в какую сторону поворачивать систему координат.

Тут коорд точки А по x положительна-поворот +
Тут коорд точки А по x отрицательна-поворот -


А если "брошенная" заготовка повёрнулась относительно исходной системы координат не на 15 градусов (например), а на 105 (90+15)?..
Вариантов только два:
1. Задать 2 точки и направление поворота.
2. Задать 3 точки.
Второй способ универсальнее.
:roll:

А если в условии будет щуп, то тоже три точки, точнее 3 касания - два на одной грани и третье на перпендикулярной.
Последний раз редактировалось UAVpilot 10 май 2012, 13:43, всего редактировалось 1 раз.
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 14613
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3505
Медальки:
Настоящее имя: Сергей

Re: ngcgui

Сообщение Nick » 10 май 2012, 13:26

Если есть 2 точки, то они однозначно задают поворот. Разве нет?
Use the Console, Luke.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22330
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1330
Заслуга: Developer
Медальки:

Re: ngcgui

Сообщение nkp » 10 май 2012, 15:24

s3301 писал(а):А если "брошенная" заготовка повёрнулась относительно исходной системы координат не на 15 градусов (например), а на 105 (90+15)?..
Вариантов только два

Не согласен. Важно выровнять этих 15 градусов, а уж потом (без всяких измерений и щупов) мы "разворачиваем" (легким движением руки :) ) заготовку (координаты) хоть вдоль X,хоть вдоль Y.Это на порядок быстрее ,чем делать третье касание.
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение UAVpilot » 10 май 2012, 15:39

Возможно третья точка ещё позволяет исключить человеческий фактор, типа не в ту сторону координаты повернул и испортил заготовку/станок.
А по количеству операций одинаково: сначала указываем две точки, а потом либо "разворачиваем в ручную, если с похмелья не перепутаем куда", либо "указываем третью точку, а остальное сделает сам станок".
1. Робот не может ответить отказом на предложение человека выпить или своим бездействием допустить, чтобы человек напился один.
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 14613
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3505
Медальки:
Настоящее имя: Сергей

Re: ngcgui

Сообщение nkp » 10 май 2012, 15:45

s3301 писал(а):разворачиваем в ручную

Разворачиваем вручную- это в нашем случае нажатие одной кнопки (вечером выложу практически)
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение nkp » 10 май 2012, 16:38

Вот для примера,чтоб каждый раз не вводить mdi команды:
reflection.ngc
(264 байт) Скачиваний: 274


из стандартного примера

мы хотим так

переходим в нужную нам точку

создаем auto файл и выполняем его (этим мы перемещаем нач координат
с поворотом)
(для просмотра содержимого нажмите на ссылку)
Выделение_105.png
Выделение_105.png (9.09 Кб) Просмотров: 3127

Теперь загружаем наш файл

Выбирая 0 и выполняя код-возвращаемся в исходную.
Последний раз редактировалось nkp 10 май 2012, 23:09, всего редактировалось 1 раз.
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение nkp » 10 май 2012, 22:42

Вот сделал поворот по 2 точкам,пока не кнопками ,а ngcgui:
http://www.youtube.com/watch?v=MI2GS6m3hzo
Там всего одно поле,может принимать значения 0,1,2.(по умолчанию-1)
Находим первую точку - перемещаем в нее 0.
Находим вторую-поворот.
Вводим в поле 0 - в исходную.
rotation.ngc
(403 байт) Скачиваний: 289
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Re: ngcgui

Сообщение nkp » 11 май 2012, 09:22

Подниму обсуждавшийся вопрос "обратной" отработки программы.Как это вижу практически:
Остановилась(остановили) программа на кадре Nx
Копируется файл программы с покадровой обработкой начиная с Nx в temp.ngc
Загружается temp.ngc , исполняется.
Покадровая обработка:
Рультат обработчика строки Nx,записываемый в новую строку в temp, зависит от "содержимого" строки N(x-1), а именно:
могут быть 4 варианта комбинаций G1(0) и G2(3) то есть чередование линейных перемещений и перемещ по дуге.
Вот эти варианты: G1-G1 , G1-G2 , G2-G1 , G2-G2 (первая команда из Nx, вторая- из N(x-1) )
Соответственно в первых двух случаях результат G1 и координаты (x;y) из N(x-1)
во вторых двух - G2 и координаты (x;y) со словами( I;J) или R из N(x-1)
Для начала G0==G1 и F=const
nkp
Мастер
 
Сообщения: 7008
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1094
Медальки:

Пред.След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: a_leha, aicT, Alexxs, arkhnchul, Bing [Bot], crusider, evgenymcp, exe, Google [Bot], ignv, igoryan74, Ivan91, john1987887, Majestic-12 [Bot], master_70, meruslan, MX_Master, Nonstopich, nva-tuning, passer-by, VAT, Yahoo [Bot], Yandex [bot], zveruga, Фрост, Дрюня

Поделиться

Reputation System ©'