Program LinuxCNC po prawidłowym skonfigurowaniu pracuje poprawnie. Jednak przydałoby się czasami zmienić niektóre opcje: konfigurację klawiszy lub sposób działania. Nie jest to łatwe, ponieważ część ustawień zapisana jest w plikach konfiguracyjnych ini, a część w pliku axis napisanym w pytonie. Poniżej przedstawimy podstawowe zmiany, które usprawnią naszą pracę z programem.{jcomments on}

 

Spis treści:

1. Zmiana w pliku ini

   1.1 Maksymalna prędkość posuwu po uruchomieniu programu

   1.2. Posuw inkrementalny

   1.3. Obrazek przy starcie

   1.4. NGCGUI – dodanie dodatkowych zakładek szybkiego frezowania

2. Zmiany w pliku axis

   2.1. Klawisze

   2.2. Zmiana predkości wolno/szybko za pomocą dwóch klawiszy

   2.3. Zmiana wolno/szybko linuxcnc 2.7(dla ręcznego przejazdu)

   2.4. Pełny ekran

3. Automatyczne uruchamianie

4. Autologin

5. Instalacja potrzebnych programów

6. Wyłączenie wygaszacza ekranu

7. Instalacja HeeksCAD w systemie linuxCNC

1. Zmiana w pliku ini

Każde uruchomienie programu stepconf nadpisuje nasze zmiany dlatego, kolejne konfiguracje osi warto przeprowadzać w pliku ini lub kopiować plik ze zmianami w inne bezpieczne miejsce.

1.1 Maksymalna prędkość posuwu po uruchomieniu programu

Standardowo prędkość posuwu ustawiona jest na kilkadziesiąt procent tuż po uruchomieniu LinuxCNC. Zwykle na początku chcemy operować maszyną maksymalnie szybko, aby ustawić punkt początkowy lub przejechać osią w określone miejsce. Irytujące jest ciągłe zmienianie prędkości na maksimum.

Zmian dokonujemy w pliku ini w katalogu linuxcnc/config/ w sekcji [display]. Podane mamy prędkości: minimalną, maksymalną i domyślną.

MIN_LINEAR_VELOCITY = 0
MAX_LINEAR_VELOCITY = 50.00 (mm/s)
DEFAULT_LINEAR_VELOCITY = 5.00 - zmienić na maksymalną czyli 50

1.2. Posuw inkrementalny

Zmiany również dokonujemy w pliku ini w sekcji display. Standardowo dokładności inkrementacji są bardzo duże, nieosiągalne dla domowych maszyn. Można więc usunąć te rzędu tysięcznych, a nawet setnych, aby nie przeszkadzały przy przełączaniu.

INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm

1.3. Obrazek przy starcie

To już bajer, ale zawsze fajnie jest zobaczyć swoją twórczość przy uruchamianiu lub skrócić czas ekranu startowego. To także zmienimy w sekcji display pliku ini. Obrazek musi być w formacie gif i znajdować się tam gdzie plik ini.

INTRO_GRAPHIC = linuxcnc.gif -można dodać swój obrazek
INTRO_TIME = 3

1.4. NGCGUI – dodanie dodatkowych zakładek szybkiego frezowania

Po dodaniu poniższych sekcji otrzymujemy dostęp do dodatkowych zakładek, w których znajdują się miniprogramy. Dzięki nim szybko ustawimy frezowanie najczęściej używanych przez nas schematów typu: otwory w szyku, fasolka, kieszeń. Wystarczy podać ilość i wymiary,a program wygeneruje się automatycznie. W praktyce przydatne, lecz domyślne programy są pełne błędów, nie działają idealnie i warto napisać je samemu co jest już kłopotliwe. Wg mnie lepiej przygotować g-code w zewnętrznych programach. Uruchomienie opisane jest poniżej, podane są sekcje w których wpisać określone formuły.

[DISPLAY]
#===================NGCGUI=========================
TKPKG = Ngcgui 1.0
TKPKG = Ngcguittt 1.0
# Ngcgui musi poprzedzać Ngcguittt
NGCGUI_FONT = Helvetica -12 normal
NGCGUI_PREAMBLE = mm_std.ngc
# tu podajemy nazwy naszych programów, ścieżki znajdują się w sekcji
[RS274NGC]
NGCGUI_SUBFILE = helix.ngc
NGCGUI_SUBFILE = helix_rtheta.ngc
NGCGUI_SUBFILE = iquad.ngc
NGCGUI_SUBFILE = arc1.ngc
NGCGUI_SUBFILE = arc2.ngc
NGCGUI_SUBFILE = hole_circle.ngc
NGCGUI_SUBFILE = qpocket.ngc
NGCGUI_SUBFILE = slot.ngc
# symbol "" otwiera pustą zakładkę
NGCGUI_SUBFILE = ""
NGCGUI_OPTIONS = noremove
#NGCGUI_OPTIONS = opt1 opt2 ...
# dostępne opcje:
# nonew -- nie pozwala na stworzenie nowej zakładki
# noremove -- nie pozwala na usunięcie żadnej zakładki
# noauto -- brak autowysyłania (makeFile, wysyłany ręcznie)
# noiframe -- obrazki wyświetlane w innym oknie na wierzchu
GCMC_INCLUDE_PATH = /home/myname/gcmc_includes
# włączenie generatora do graverowania napisów
TTT = truetype-tracer
TTT_PREAMBLE = mm_std.ngc
PROGRAM_PREFIX = ../../nc_files/examples/ngcgui_lib
#==================================================
[RS274NGC]
PARAMETER_FILE = linuxcnc.var
#======================NGCGUI======================
# ścieżka dostępu do plików ngcgui
SUBROUTINE_PATH = ../../nc_files/examples/ngcgui_lib:../../nc_files/examples/ngcgui_lib/utilitysubs
USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles
#==================================================

ngcgui

Zdj. 1.4: Zakładki NGCGUI

 

2. Zmiany w pliku axis

Plik axis napisany jest w języku programowania pyton. Aby się do niego dostać musimy posiadać uprawnienia administratora. W debianie wciskamy alt+F2 i wpisujemy gksu thunar (w ubuntu gksu nautilius). Znajdujemy go w katalogu usr/bin, otwieramy w jakimś edytorze tekstu i do dzieła.

2.1. Klawisze

Aby wygodniej operować maszyną z klawiatury lub dostosować ją do naszego kontrolera musimy znaleźć poniższą sekcję ze spisem klawiszy i ich funkcjami. Poniższy przykład to nasz układ klawiszy dostosowany pod pada od Playstation3. Zmiany są następujące:

  • wyłączona reakcja na przycisk Escape (#nothing),

  • wszystkie ważne funkcje bez shift czyli z małych liter,

  • bazowanie wszystkich osi bez ctrl.

root_window.bind("<Escape>", "#nothing")
root_window.bind("l", commands.toggle_override_limits)
root_window.bind("o", commands.open_file)
root_window.bind("s", commands.task_resume)
root_window.bind("t", commands.task_step)
root_window.bind("p", commands.task_pause)
root_window.bind("v", commands.cycle_view)
root_window.bind("<Alt-p>", "#nothing")
root_window.bind("r", commands.task_run)
root_window.bind("<Control-r>", commands.reload_file)
root_window.bind("<Control-s>", commands.save_gcode)
root_window.bind_class("all", "<Key-F1>", commands.estop_clicked)
root_window.bind("<Key-F2>", commands.onoff_clicked)
root_window.bind("<Key-F7>", commands.mist_toggle)
root_window.bind("<Key-F8>", commands.flood_toggle)
root_window.bind("<Key-F9>", commands.spindle_forward_toggle)
root_window.bind("<Key-F10>", commands.spindle_backward_toggle)
root_window.bind("<Key-F11>", commands.spindle_decrease)
root_window.bind("<Key-F12>", commands.spindle_increase)
root_window.bind("B", commands.brake_on)
root_window.bind("b", commands.brake_off)
root_window.bind("q", commands.clear_live_plot)
root_window.bind("x", lambda event: activate_axis(0))
root_window.bind("y", lambda event: activate_axis(1))
root_window.bind("z", lambda event: activate_axis(2))
root_window.bind("a", lambda event: activate_axis(3))
root_window.bind("`", lambda event: activate_axis_or_set_feedrate(0))
root_window.bind("1", lambda event: activate_axis_or_set_feedrate(1))
root_window.bind("2", lambda event: activate_axis_or_set_feedrate(2))
root_window.bind("3", lambda event: set_feedrate(5))
root_window.bind("4", lambda event: set_feedrate(20))
root_window.bind("5", lambda event: set_feedrate(35))
root_window.bind("6", lambda event: set_feedrate(50))
root_window.bind("7", lambda event: set_feedrate(65))
root_window.bind("8", lambda event: set_feedrate(80))
root_window.bind("9", lambda event: set_feedrate(90))
root_window.bind("0", lambda event: set_feedrate(100))
root_window.bind("c", lambda event: jogspeed_continuous())
root_window.bind("d", lambda event: widgets.rotate.invoke())
root_window.bind("i", lambda event: jogspeed_incremental())
root_window.bind("k", lambda event: jogspeed_incremental(-1))
root_window.bind("!", "set metric [expr {!$metric}]; redraw")
root_window.bind("@", commands.toggle_display_type)
root_window.bind("#", commands.toggle_coord_type)
root_window.bind("$", commands.toggle_teleop_mode)  #old version: commands.toggle_joint_mode
root_window.bind("<Control-Home>", commands.home_axis)
root_window.bind("<KP_Home>", kp_wrap(commands.home_axis, "KeyPress"))
root_window.bind("<Home>", commands.home_all_axes)
root_window.bind("<Shift-Home>", commands.set_axis_offset)
root_window.bind("<End>", commands.touch_off_system) #old version: commands.touch_off
root_window.bind("<Control-KP_Home>", kp_wrap(commands.home_all_axes, "KeyPress"))
root_window.bind("<Shift-KP_Home>", kp_wrap(commands.set_axis_offset, "KeyPress"))
root_window.bind("<KP_End>", kp_wrap(commands.touch_off_system, "KeyPress")) #old version: commands.touch_off
widgets.mdi_history.bind("<Configure>", "%W see end" )
widgets.mdi_history.bind("<ButtonRelease-1>", commands.mdi_history_butt_1)
widgets.mdi_history.bind("<Double-Button-1>", commands.mdi_history_double_butt_1)
widgets.mdi_command.unbind("<Control-h>")
widgets.mdi_command.bind("<Control-m>", commands.clear_mdi_history)
widgets.mdi_command.bind("<Control-h>", commands.mdi_history_hist2clip)
widgets.mdi_command.bind("<Control-Shift-H>", commands.mdi_history_clip2hist)
widgets.mdi_command.bind("<Key-Return>", commands.send_mdi)
widgets.mdi_command.bind("<Up>", commands.mdi_up_cmd)
widgets.mdi_command.bind("<Down>", commands.mdi_down_cmd)
widgets.mdi_command.bind("<Key-KP_Enter>", commands.send_mdi)
widgets.mdi_command.bind("<KP_Up>", commands.mdi_up_cmd)
widgets.mdi_command.bind("<KP_Down>", commands.mdi_down_cmd)
widgets.mdi_command.bind("<KeyRelease-minus>", "break")
widgets.mdi_command.bind("<KeyRelease-equal>", "break")

Przykład na versji LinuxCNC 2.7.3 (w wersji 2.6 należy podmienić nazwy 3 zakomentowanych funkcji.

2.2. Zmiana prędkości wolno/szybko za pomocą dwóch klawiszy

Oryginalnie mamy do wyboru konkretnie przypisane wartości prędkości posuwu pod przyciskami od 0 do 9 oraz „`”. My zmieniliśmy funkcję klawiszy 1 oraz 2 do zwiększania i zmniejszania prędkości o 5%. Jak w przykładzie 2.1. do tych klawiszy przypisana jest funkcja activate_axis_or_set_frrdrate. My zmieniliśmy jej zawartość jak poniżej. Pozostałe klawisze numeryczne są przypisane do funkcji set_feedrate(n) i podana jest w nich konkretna procentowa wartość posuwu. Jest to jedna z najbardziej podstawowych i ułatwiających pracę zmian.

def set_feedrate(n):
    widgets.feedoverride.set(n)
def set_rapidrate(n):
    widgets.rapidoverride.set(n)
def activate_axis_or_set_feedrate(n):
    ustawiona_predkosc = widgets.feedoverride.get()
    if n == 0:
        set_feedrate(0)
    if n == 1:
        ustawiona_predkosc -= 5
        if ustawiona_predkosc < 0:
            ustawiona_predkosc = 0
        set_feedrate(ustawiona_predkosc)
    if n == 2:
        ustawiona_predkosc += 5
        if ustawiona_predkosc > 100:
            ustawiona_predkosc = 100
        set_feedrate(ustawiona_predkosc)

NALEŻY ZWRACAĆ UWAGĘ NA TABULACJĘ W TEKŚCIE INACZEJ PROGRAM NIE ZADZIAŁA!!!! 

 

2.3. Zmiana wolno/szybko linuxcnc 2.7(dla ręcznego przejazdu)

W wersji linuxcnc 2.7 funkcja zmiany prędkości, a dokładnie skala prędkości(feed override) nie działa przy ustawianiu maszyny ręcznie, ale nie ma problemów z działaniem w automacie. Mamy do wyboru zmienianie pozycji suwaka prędkość posuwu(jog speed) ręcznie lub powrót do ustawień z linuxcnc 2.6. Zmieniamy funkcję jog_on(a,b) jak poniżej:

 

def jog_on(a, b):
if not manual_ok(): return
if not manual_tab_visible(): return
if isinstance(a, (str, unicode)):
a = "xyzabcuvws".index(a)
if a < 3:
if vars.metric.get(): b = b / 25.4
b = from_internal_linear_unit(b)
if jog_after[a]:
root_window.after_cancel(jog_after[a])
jog_after[a] = None
return
b = b*vars.feedrate.get()/100.0
jogincr = widgets.jogincr.get()
if s.motion_mode == linuxcnc.TRAJ_MODE_TELEOP:
if jogincr != _("Continuous"):
jogging[a] = 0
print "WARNING: do not allow incremental jogging in TELEOP mode"
else:
jogging[a] = b
jog_cont[a] = True
cartesian_only=jogging[:6]
c.teleop_vector(*cartesian_only)
else:
if jogincr != _("Continuous"):
s.poll()
if s.state != 1: return
distance = parse_increment(jogincr)
jog(linuxcnc.JOG_INCREMENT, a, b, distance)
jog_cont[a] = False
else:
jog(linuxcnc.JOG_CONTINUOUS, a, b)
jog_cont[a] = True
jogging[a] = b

 

2.4. Pełny ekran

Wystarczy że w pliku axis dodamy poniższą linijkę z rozdzielczością naszego monitora.

root_window.tk.call("wm","geometry",".","1920x1080")

lub jeśli zadziała (w starej wersji na ubuntu):

maxgeo=root_window.tk.call("wm","maxsize",".")
fullsize=maxgeo.split(' ')[0] + 'x' + maxgeo.split(' ')[1]
root_window.tk.call("wm","geometry",".",fullsize)

3. Automatyczne uruchamianie

Wchodzimy w Programy/Ustawienia/Sesja i uruchamianie. Klikamy przycisk dodaj, w nazwie wpisujemy co chcemy np. LinuxCNC, a w poleceniu dodajemy ścieżkę do własnego pliku ini:

usr/bin/linuxcnc '/home/linuxcnc/linuxcnc/configs/Fox_conf/Fox_conf.ini'

lub jeśli nie zadziała(w przypadku linuxcnc 2.7)

/usr/bin/linuxcnc '/home/linuxcnc/linuxcnc/configs/Fox_conf/Fox_conf.ini'

 

Zdj. 3: Ustawienie autouruchomienia w LinuxCNC

 

4. Autologin

Normalnie w debianie nie mamy opcji w systemie ani przy instalacji wyłączenia autologinu. Musimy to zrobić ręcznie w pliku lightdm.conf z uprawnieniami administratora oczywiście. Plik znajduje się w katalogu etc/lightdm/ tam szukamy sekcji [SeatDefaults]. Musimy odkomentować i dopisać naszą nazwę użytkownika tak jak poniżej:

autologin-user=linuxcnc
autologin-user-timeout=1

 

5. Instalacja potrzebnych programów

W Debianie nie mamy zainstalowanych podstawowych programów takich jak kalkulator i dobry edytor plików. Aby zainstalować jakiś program wchodzimy w Programy/Ustawienia/Synaptic Menadżer Pakietów. Musimy znać nazwę naszego programu dla przykładu Qalculate (kalkulator) lub gedit (program do edycji textu). Klikamy ikonkę szukaj wpisujemy nazwę programu lewym klawiszem zaznaczamy pozycję do instalacji i zielona fajeczką zapisujemy zmiany.

 

calculator

Zdj. 5a: Zainstalowany program Qalculate

Zdj. 5b: Menadźer Pakietów Synaptic

 

6. Wyłączenie wygaszacza ekranu

Jeżeli chcemy aby nasza maszyna działała płynnie w przypadku, gdy ustawiamy mniejszą wartość odchylenia bazowego(jitter) wypada wyłączyć wygaszacz ekranu. U nas przy długich obróbkach i troszkę zaniżonej wartości jittera maszyna potrafiła się zawiesić i pojechać za dużo w pewnej osi. Należy wejść w Programy/Ustawienia/Wygaszacz ekranu tam mamy opcję wyłączenia.

 

Zdj. 6: Wyłączenie wygaszacza ekranu

 

7. Instalacja HeeksCAD w systemie linuxCNC

Heekscad jest bardzo przydatnym i prostym programem do projektowania elementów oraz tworzenia g-code. Po instalacji na systemie linuxcnc mamy możliwość wysłania stworzonego kodu jednym przyciskiem do maszyny. Jest to bardzo dobra alternatywa do zakładek ngcgui, dużo prościej stworzyć kod w heekscad niż zaprogramować ręcznie kod do ngcgui. Program niestety (przynajmniej na dzień dzisiejszy) będziemy musieli skompilować. Instrukcja jest dostępna na stronie: https://blog.cyplo.net/2015/05/28/cnc-workflow/. Poniżej znajduje się opis całej kompilacji.

 

Zdj. 6: Wysyłanie g-code do LinuxCNC w programie HeeksCAD

 

Aktualizacja bibliotek

sudo apt-get update

Instalacja potrzebnych bibliotek:

sudo apt-get install subversion build-essential debhelper cmake libboost-python-dev liboce-visualization-dev libwxgtk2.8-dev libgtkglext1-dev python-dev python-area bzr git libboost-dev liboce-ocaf2 liboce-ocaf-dev oce-draw

Utworzenie nowego katalogu o nazwie HeeksCAD, domyślnie w /home:

mkdir heekscad

Wejście do katalogu heeksCAD:

cd heekscad

Pobranie źródeł:

svn checkout http://libarea.googlecode.com/svn/trunk/ libarea

Otworzenie katalogu trunk:

cd libarea/trunk

Budowanie paczek z plikami:

dpkg-buildpackage -b -us -uc 

Wyjście do folderu poprzedniego:

cd .. 

Kompilacja potrzebnych bibliotek:

sudo dpkg -i libarea*.deb python-area*.deb
cd ..

Pobieranie źródła HeeksCAD:

svn checkout http://heekscad.googlecode.com/svn/trunk/ heekscad
cd heekscad
sudo apt-get install wx2.8-i18n
cd ..

Kompilacja heekscad:

sudo dpkg -i *heeks*.deb

 

Instalacja HeeksCNC(na wcześniej zainstalowanym HeeksCAD):

svn checkout http://heekscnc.googlecode.com/svn/trunk/ heekscnc
cd heekscnc
dpkg-buildpackage -b -us -uc
cd ..
git clone https://github.com/aewallin/opencamlib.git
cd opencamlib
bzr branch lp:~neomilium/opencamlib/packaging debian
dpkg-buildpackage -b -us -uc -d
cd ..
sudo dpkg -i python-ocl*.deb
sudo dpkg -i heekscnc*.deb