Перестраиваемый автомат на ngcgui от чайника

Материал из cnc-club
Перейти к навигации Перейти к поиску

Часто бывает необходимо быстро подготавливать файлы простой обработки заготовки. Написание подобной программы в G-кодах в CAM-программах потребует времени сопоставимо со временем самой обработки заготовки. В этом случае, можно воспользоваться таким инструментом как NGCGUI.

Перенастраиваемый автомат по фрезеровке поверхности заготовок

Попробуем разобраться с созданием ngcgui в конфигурации AXIS на примере создания простого перенастраиваемого автомата по фрезеровке поверхности заготовки.

Задача. Построить простой автомат с тремя координатами и перенастраиваемыми оперативно параметрами под управлением LinuxCNC при помощи ngcgui

Предназначение. Быстрая подготовка станка к фрезеровке поверхности (плоскости) у заготовок различных габаритных размеров и различного материала.

Потому нужно в параметры обработки заготовки вводить оперативно: габаритные размеры заготовки; координаты начала обработки; диаметр фрезы (шаг обработки); подачу; обороты шпинделя.

НАЧАЛЬНЫЕ ШАГИ - подготовка конфигурации.

В LinuxCNC версии 2.5 и выше ngcgui уже встроена в AXIS (файлы ngcgui.tcl , ngcgui_app.tcl и ngcgui_ttt.tcl лежат в папке usr/lib/tcltk/linuxcnc).

1. Создаем конфигурацию станка на базе AXIS: 1.1. В INI прописываем:


   [DISPLAY]
   DISPLAY = axis
   EDITOR = gedit
   GLADEVCP = mygui.ui
   POSITION_OFFSET = RELATIVE
   POSITION_FEEDBACK = ACTUAL
   MAX_FEED_OVERRIDE = 1.2
   PROGRAM_PREFIX = /home/sun/linuxcnc/nc_files
   NGCGUI_SUBFILE =/home/sun/linuxcnc/nc_files/stan.ngc
   USER_COMMAND_FILE = /home/sun/linuxcnc/config/tkapp.py
   NGCGUI = /usr/lib/tcltk/linuxcnc/ngcgui.tcl
   TKAPP  = /usr/lib/tcltk/linuxcnc/ngcgui_app.tcl


(здесь и далее адрес /home/sun/linuxcnc/nc_files/ указан мой - Вы пропишите свой)

Файл tkapp.py , описывающий панель для нашей подпрограммы положил в папку /home/sun/linuxcnc/config , чтобы этот файл можно было использовать и в других конфигурациях.


   [HAL]
   HALFILE = stanok.hal
   POSTGUI_HALFILE = postgui.hal
   HALUI = halui


1.2. Настройки HAL, визуальной панели mygui.ui и файла с пинами визуальной панели postgui.hal стандартны и особенностей не имеют.

2. Запускаем конфигурацию станка и проверяем её работоспособность. Станок пока не может менять своих параметров.

3. В папку /home/sun/linuxcnc/config положим файл tkapp.py (как писалось выше) с таким содержанием:

  # 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)


В папку /home/sun/linuxcnc/nc_files положим также файл stan.ngc с таким содержанием (без программы G-кодов):


   o<stan> sub
      #<Length> =  #1 (=1000 длина)
      #<Width> =  #2 (=500 ширина)
      #<Diametr> =  #3 (=8 диаметр фрезы)
      #<FeedRate> =  #4 (=40 подача)
      #<Max_RPM> =  #5 (=15000 обороты)
      #<Depth> =  #6 (=-2 глубина)
   o<stan> endsub


Добавим в этот файл программу обработки (фрезеровки) поверхности заготовки в G-кодах (с использованием циклов) после описания последней переменной и перед строкой окончания подпрограммы:

1. Устанавливаем высоту фрезы 5мм над поверхностью заготовки (и 5мм, и то, что поверхность заготовки Z=0 - по умолчанию).

2. Выходим в начало обработки (по умолчанию X0 Y0) и включаем шпиндель на заданных оборотах.

3. Опускаемся на глубину фрезеровки заготовки (переменная Depth = -2мм) со скоростью F400 (по умолчанию, но можно и отдельно прописать переменной).

4. Высчитываем шаг фрезеровки (30% от диаметра фрезы).

5. Запускаем цикл фрезеровки поверхности.

6. По окончании поднимаем фрезу и выключаем шпиндель, перемещаемся в начальное положение.

В итоге файл stan.ngc выглядит так:


   o<stan> sub
      #<Length> =  #1 (=1000 длина)
      #<Width> =  #2 (=500 ширина)
      #<Diametr> =  #3 (=8 диаметр фрезы)
      #<FeedRate> =  #4 (=40 подача)
      #<Max_RPM> =  #5 (=15000 обороты)
      #<Depth> =  #6 (=-2 глубина)
   G0 Z5.0
   G0 X0 Y0 S#<Max_RPM> M3
   G1 Z#<Depth> F400
   #<Step> = [#<Diametr> * 0.3]
   #<Current_Length> = 0
      o100 repeat [#<Length> / [#<Step> * 2] + 1]
         G1 X#<Width> Y#<Current_Length> F#<FeedRate>
         #<Current_Length> = [#<Current_Length> + #<Step>]
         G0 X#<Width> Y#<Current_Length>
         G1 X0 Y#<Current_Length> F#<FeedRate>
         #<Current_Length> = [#<Current_Length> + #<Step>]
         G0 X0 Y#<Current_Length>
      o100 endrepeat
   G0 Z5.0 M5
   G0 X0 Y0
   M9
   o<stan> endsub

Перенастраиваемый автомат по сверловке сетки отверстий

1. В INI:


   [DISPLAY]
   DISPLAY = axis
   EDITOR = gedit
   GLADEVCP = mygui.ui
   POSITION_OFFSET = RELATIVE
   POSITION_FEEDBACK = ACTUAL
   MAX_FEED_OVERRIDE = 1.2
   PROGRAM_PREFIX = /home/sun/linuxcnc/nc_files
   NGCGUI_SUBFILE =/home/sun/linuxcnc/nc_files/sverlo.ngc
   USER_COMMAND_FILE = /home/sun/linuxcnc/config/tkapp.py
   NGCGUI = /usr/lib/tcltk/linuxcnc/ngcgui.tcl
   TKAPP  = /usr/lib/tcltk/linuxcnc/ngcgui_app.tcl


2. Файл sverlo.ngc в папке /home/sun/linuxcnc/nc_files :


   o<sverlo> sub
      #<Num_X> =  #1 (=3 кол-во отверстий по X)
      #<Step_X> =  #2 (=10 шаг по X, мм)
      #<Num_Y> =  #3 (=3 кол-во отверстий по 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>
      o100 repeat [#<Num_Y>]
      #<Current_X> = #<Start_X>
         o101 repeat [#<Num_X>]
         G0 X#<Current_X> Y#<Current_Y>
         G83 R#<Surface> Z[-1 * #<Depth>] Q#<Step_Z> F#<Speed>
         G0 Z5.0
         #<Current_X> = [#<Current_X> + #<Step_X>]
         o101 endrepeat
      #<Current_Y> = [#<Current_Y> + #<Step_Y>]
      o100 endrepeat
   G0 Z5.0 M5
   G0 X0 Y0
   M9
   o<sverlo> endsub