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

ngcgui

Добавлено: 14 янв 2012, 21:02
nkp
NGCGUI - установка, настройка, описание, примеры.
Примеры
Файлы подпрограмм

NGCGUI это утилита для использования в EMC2 подпрограмм,т.н. мастеров.
Ссылки
http://www.youtube.com/watch?v=Bn8T5Fw0ISs
http://www.linuxcnc.org/docs/2.5/html/g ... ha:O-Codes - О-коды
Установка
Для установки в EMC2 версии 2.4 нужны 4 файла:
ngcgui.rar
(38.12 КБ) 1562 скачивания
Положить файлы в папку с конфигурацией станка.
Более удобным будет поместить в отдельную папку,тогда можно их использовать для разных кофигураций.
Прописать в 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
Теперь создаем нашу первую вкладку следующей строкой - пока без названия:
(для просмотра содержимого нажмите на ссылку)

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

NGCGUI_SUBFILE =""
Запускаем,проверяем:
(для просмотра содержимого нажмите на ссылку)
Screenshot-5.png (59754 просмотра) <a class='original' href='./download/file.php?id=3810&mode=view' target=_blank>Загрузить оригинал (51.01 КБ)</a>
Screenshot-6.png (59754 просмотра) <a class='original' href='./download/file.php?id=3811&mode=view' target=_blank>Загрузить оригинал (50.3 КБ)</a>
Настройка
Теперь создаем сам файл подпрограммы для нашей вкладки.
Он должен быть такого вида:
(для просмотра содержимого нажмите на ссылку)

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

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

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

o<lathe> sub
  тело подпрогр
o<lathe> endsub
Окончание файлов должно быть .ngc
Помещаем наш файл lathe.ngc в папку прописанную в ini [DISPLAY]PROGRAM_PREFIX
(для просмотра содержимого нажмите на ссылку)

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

PROGRAM_PREFIX = /home/nkp/emc2/nc_files
и прописываем путь к ней там же:
(для просмотра содержимого нажмите на ссылку)

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

NGCGUI_SUBFILE =/home/nkp/emc2/nc_files/lathe.ngc
Проверяем:
(для просмотра содержимого нажмите на ссылку)
Screenshot-3.png (59755 просмотров) <a class='original' href='./download/file.php?id=3809&mode=view' target=_blank>Загрузить оригинал (51.24 КБ)</a>
Кстати,загружаемый по умолчанию EMC файл можно изменить в ini [DISPLAY]
если прописать так
(для просмотра содержимого нажмите на ссылку)

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

OPEN_FILE = ""

не загр. ничего.(как на скриншоте выше.)
Напишем тело нашей подпрограммы.
Его надо начинать с набора инструкций, которые определяют параметры :
(для просмотра содержимого нажмите на ссылку)

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

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
Смотрим:
(для просмотра содержимого нажмите на ссылку)
Screenshot-7.png (59753 просмотра) <a class='original' href='./download/file.php?id=3812&mode=view' target=_blank>Загрузить оригинал (56.48 КБ)</a>
Каждая строка появилась во вкладке с возможностью редактировать данные.
Теперь мы в нашей подпрограмме (в 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 КБ) 1912 скачиваний
Запускаем,на вкладке нажимаем "Create feature" ,потом "Finalize"
Получаем запрограммированную траекторию:
(для просмотра содержимого нажмите на ссылку)
Screenshot-8.png (59752 просмотра) <a class='original' href='./download/file.php?id=3815&mode=view' target=_blank>Загрузить оригинал (56.69 КБ)</a>
Описание
Примеры
Как объеденить несколько подпрограмм
В программу могут быть объеденены несколько копий как одной подпрограммы, так и разные подпрограммы.
Как это выглядит на практике:
у нас есть 6 вкладок с подпрограммами для фрезерной обработки:
(для просмотра содержимого нажмите на ссылку)
Screenshot.png (59729 просмотров) <a class='original' href='./download/file.php?id=3824&mode=view' target=_blank>Загрузить оригинал (55.81 КБ)</a>
Объеденим их все в одну программу. Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
Этим мы передали наши параметры в создаваемый ngcgui файл auto.ngc. Изменим некоторые параметры(например координаты начала обработки) Нажмем еще раз "CreateFeature".В файл auto.ngc передались также и новые параметры.Нажимаем "Finalize"-загружаем готовый файл с двумя подпрограммами:
(для просмотра содержимого нажмите на ссылку)
Screenshot-1.png (59729 просмотров) <a class='original' href='./download/file.php?id=3825&mode=view' target=_blank>Загрузить оригинал (64.18 КБ)</a>
Чтобы объеденить подпрограммы с разных вкладок :
1.Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
2.Переходим на нужную вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
3.Повторяем,если необходимо.
4.Нажимаем "Finalize".
5. Соглашаемся создать из всех вкладок.
(для просмотра содержимого нажмите на ссылку)
Screenshot-2.png (59729 просмотров) <a class='original' href='./download/file.php?id=3826&mode=view' target=_blank>Загрузить оригинал (65.78 КБ)</a>
Удобней объеденять несколько одинаковых контуров так:
1.создаем из требуемой вкладки копию нажатием кнопки "new"
2.нажимаем "Subfile" ,открываем файл(в нашем случае тот же,что и на первой вкладке)
3.повторяем необходимое число раз
4.корректируем параметры для каждой копии
5.объеденяем все,соблюдая нужную нам последовательность обработки.
(для просмотра содержимого нажмите на ссылку)
Screenshot-3.png (59729 просмотров) <a class='original' href='./download/file.php?id=3827&mode=view' target=_blank>Загрузить оригинал (72.72 КБ)</a>
5. Соглашаемся создать из всех вкладок.
(для просмотра содержимого нажмите на ссылку)
Screenshot12.png (59461 просмотр) <a class='original' href='./download/file.php?id=4009&mode=view' target=_blank>Загрузить оригинал (76.2 КБ)</a>
Файлы подпр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 байт) 2151 скачивание
face.ngc
(894 байт) 2163 скачивания
для фрезерной обработки
(для просмотра содержимого нажмите на ссылку)

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

 (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
3.png (59362 просмотра) <a class='original' href='./download/file.php?id=4064&mode=view' target=_blank>Загрузить оригинал (75.05 КБ)</a>
цилиндрический карман

Re: ngcgui

Добавлено: 07 май 2012, 06:13
nkp
Решение ошибки возможности деления на 0 :

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

o124 if [#10 NE 0]
#<dd>=[360/[#10]]
o124 endif 

Re: ngcgui

Добавлено: 07 май 2012, 07:50
nkp
Вот доработанный вариант:
flanec.ngc
ngcgui фланец
(1.1 КБ) 1297 скачиваний
Хотя такого рода детали как правило фрезерованием не изготавливаются-все же примененная концепция (угловой поворот координат) , может быть взята за основу
для подобных изделий.
Из недоделанного-чистовые проходы.

Re: ngcgui

Добавлено: 09 май 2012, 13:56
Nick
Чего-то я не догоняю, как ты положение окружностей определяешь без синусов и косинусов?

Re: ngcgui

Добавлено: 09 май 2012, 15:55
nkp
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 раз.

Re: ngcgui

Добавлено: 09 май 2012, 17:10
nkp
Цитата из соседней темы :
"система координат "подстраивается" под заготовку. То есть нам нужно раскроить лист на полоски. Мы ложим лист на стол и выравниваем его перпендикулярно оси. А в хороших стойках лист бросается на стол измеряют 3 угловых точки листа и система координат словно повернется относительно листа."
Реализация может выглядеть так :
Допустим имеем заготовку ,расположенную произвольно
(для просмотра содержимого нажмите на ссылку)
Выделение_094.png
Выделение_094.png (8.62 КБ) 6777 просмотров
Указываем на заготовке первую точку-это будет 0 координат
Смещаем координаты
(для просмотра содержимого нажмите на ссылку)
Выделение_095.png
Выделение_095.png (9.04 КБ) 6777 просмотров
Теперь укажем вторую точку - она (впоследствии) будет лежать на оси
Поворачиваем оси на необходимый угол
(для просмотра содержимого нажмите на ссылку)
Выделение_093.png
Выделение_093.png (6.4 КБ) 6777 просмотров
Практически это две кнопки:
1. Установка 0
2. Поворот
А вот зачем третью точку указывать???

Re: ngcgui

Добавлено: 09 май 2012, 23:12
Serg
nkp писал(а):А вот зачем третью точку указывать???
Чтобы понять в какую сторону поворачивать систему координат.

Re: ngcgui

Добавлено: 09 май 2012, 23:28
nkp
s3301 писал(а): Чтобы понять в какую сторону поворачивать систему координат.
(для просмотра содержимого нажмите на ссылку)
Выделение_095.png
Выделение_095.png (9.04 КБ) 6754 просмотра
Тут коорд точки А по x положительна-поворот +
(для просмотра содержимого нажмите на ссылку)
Выделение_099.png
Выделение_099.png (7.34 КБ) 6754 просмотра
Тут коорд точки А по x отрицательна-поворот -

Re: ngcgui

Добавлено: 09 май 2012, 23:56
Nick
Третья точка нужна для отражений. Поворот, масштаб и перенос на плоскости можно задать двумя точками, а вот для контроля отражений нужна третья.

Re: ngcgui

Добавлено: 10 май 2012, 00:02
nkp
Что за отражения - можно чуть подробней?

Re: ngcgui

Добавлено: 10 май 2012, 00:18
Nick
Обычное отражение относительно прямой. Такое преобразование нельзя задать двумя точками, нужна третья. Более того не уверен, что его можно реализовать на чистом Gкоде, т.к. это преобразование должно менять G02 на G03 и наоборот.

Re: ngcgui

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

Отражение вроде здесь не нужно.
Хотя заманчиво-надо подумать :)

Re: ngcgui

Добавлено: 10 май 2012, 00:51
Nick
nkp писал(а):Хотя заманчиво-надо подумать :)
То-то и оно :). В принципе можно сделать через Oкод if...

Re: ngcgui

Добавлено: 10 май 2012, 13:05
Serg
nkp писал(а):
s3301 писал(а): Чтобы понять в какую сторону поворачивать систему координат.
Тут коорд точки А по x положительна-поворот +
Тут коорд точки А по x отрицательна-поворот -
А если "брошенная" заготовка повёрнулась относительно исходной системы координат не на 15 градусов (например), а на 105 (90+15)?..
Вариантов только два:
1. Задать 2 точки и направление поворота.
2. Задать 3 точки.
Второй способ универсальнее.
:roll:

А если в условии будет щуп, то тоже три точки, точнее 3 касания - два на одной грани и третье на перпендикулярной.

Re: ngcgui

Добавлено: 10 май 2012, 13:26
Nick
Если есть 2 точки, то они однозначно задают поворот. Разве нет?

Re: ngcgui

Добавлено: 10 май 2012, 15:24
nkp
s3301 писал(а): А если "брошенная" заготовка повёрнулась относительно исходной системы координат не на 15 градусов (например), а на 105 (90+15)?..
Вариантов только два
Не согласен. Важно выровнять этих 15 градусов, а уж потом (без всяких измерений и щупов) мы "разворачиваем" (легким движением руки :) ) заготовку (координаты) хоть вдоль X,хоть вдоль Y.Это на порядок быстрее ,чем делать третье касание.

Re: ngcgui

Добавлено: 10 май 2012, 15:39
Serg
Возможно третья точка ещё позволяет исключить человеческий фактор, типа не в ту сторону координаты повернул и испортил заготовку/станок.
А по количеству операций одинаково: сначала указываем две точки, а потом либо "разворачиваем в ручную, если с похмелья не перепутаем куда", либо "указываем третью точку, а остальное сделает сам станок".

Re: ngcgui

Добавлено: 10 май 2012, 15:45
nkp
s3301 писал(а):разворачиваем в ручную
Разворачиваем вручную- это в нашем случае нажатие одной кнопки (вечером выложу практически)

Re: ngcgui

Добавлено: 10 май 2012, 16:38
nkp
Вот для примера,чтоб каждый раз не вводить mdi команды:
reflection.ngc
(264 байт) 1239 скачиваний
(для просмотра содержимого нажмите на ссылку)
Выделение_103.png (6717 просмотров) <a class='original' href='./download/file.php?id=5312&mode=view' target=_blank>Загрузить оригинал (72.39 КБ)</a>
из стандартного примера
(для просмотра содержимого нажмите на ссылку)
Выделение_101.png (6717 просмотров) <a class='original' href='./download/file.php?id=5308&mode=view' target=_blank>Загрузить оригинал (88.72 КБ)</a>
мы хотим так
(для просмотра содержимого нажмите на ссылку)
Выделение_102.png (6717 просмотров) <a class='original' href='./download/file.php?id=5309&mode=view' target=_blank>Загрузить оригинал (87.62 КБ)</a>
переходим в нужную нам точку
(для просмотра содержимого нажмите на ссылку)
Выделение_104.png (6717 просмотров) <a class='original' href='./download/file.php?id=5310&mode=view' target=_blank>Загрузить оригинал (33.7 КБ)</a>
создаем auto файл и выполняем его (этим мы перемещаем нач координат
с поворотом)
(для просмотра содержимого нажмите на ссылку)
Выделение_105.png
Выделение_105.png (9.09 КБ) 6717 просмотров
Теперь загружаем наш файл
(для просмотра содержимого нажмите на ссылку)
Выделение_102.png (6717 просмотров) <a class='original' href='./download/file.php?id=5309&mode=view' target=_blank>Загрузить оригинал (87.62 КБ)</a>
Выбирая 0 и выполняя код-возвращаемся в исходную.

Re: ngcgui

Добавлено: 10 май 2012, 22:42
nkp
Вот сделал поворот по 2 точкам,пока не кнопками ,а ngcgui:
http://www.youtube.com/watch?v=MI2GS6m3hzo
Там всего одно поле,может принимать значения 0,1,2.(по умолчанию-1)
Находим первую точку - перемещаем в нее 0.
Находим вторую-поворот.
Вводим в поле 0 - в исходную.
rotation.ngc
(403 байт) 1315 скачиваний

Re: ngcgui

Добавлено: 11 май 2012, 09:22
nkp
Подниму обсуждавшийся вопрос "обратной" отработки программы.Как это вижу практически:
Остановилась(остановили) программа на кадре 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