Posts mit dem Label tutorial werden angezeigt. Alle Posts anzeigen
Posts mit dem Label tutorial werden angezeigt. Alle Posts anzeigen

Dienstag, 31. Januar 2017

LibreCAD unter LinuxCNC 2.7 kompilieren

Einleitung

Zwar habe ich schon vor einigen Jahren mal einen Blog-Post zum übersetzen von LibreCAD unter LinuxCNC verfasst, der bezog sich aber auf die damals aktuelle Version, daher hier noch einmal eine kurze Anleitung.

Anleitung

Nach dem Start/Einloggen muss man zuerst ein Terminal öffnen (Anwendungsmenü → Terminal). Darin werden nun jeweils die folgenden Kommandos (Kommandos in Monospace, Kommentare normal) eingegeben:

Zuerst brauchen wir einige Pakete:
sudo apt-get install qt-sdk libboost-all-dev libmuparser-dev libfreetype6-dev

Danach holen wir uns den Quellcode:
git clone https://github.com/LibreCAD/LibreCAD.git

Im Gegensatz zu früher haben wir nun einen etwas moderneren Compiler und auch LibreCAD wurde weiterentwickelt, die neueren Branches gehen jedoch mit dem von LinuxCNC eingesetzten Debian Wheezy nicht, daher wählen wir uns mit
git checkout tags/2.0.7
die höchste compilierbare Version aus dem 2.0.0er Zweig von LibreCAD aus.

Die Übersetzung starten wir dann mit
qmake librecad.promake
was eine ganze Weile dauern kann.

Hat alles geklappt, dann kann man mit
cd unix./librecad
LibreCAD nun starten.

Aus Komfortgründen erstellt man sich dann noch am besten einen Starter auf dem Desktop, wie in folgendem Video gezeigt:

Montag, 30. Januar 2017

LinuxCNC 2.7 in VM VirtualBox installieren



Einleitung

Zwar macht es keinen Sinn, aus einer virtuellen Maschine heraus LinuxCNC mit angeschlossener Fräse betreiben zu wollen, da virtuelle Maschinen einfach nicht echtzeitfähig sind, aber für die Simulation von vorbereiteten Fräsjobs ist es ideal.

Daher habe ich -- als Ergänzung der Installation im Bastelkeller -- auf meinem Office-PC eine VM mit LinuxCNC am Laufen.
Da ich die "echte" Installation kürzlich auf einen neuen Rechner mit neuester Software (LinuxCNC-2.7) gebracht habe, war es auch an der Zeit die VM zu aktualisieren.

VirtualBox installieren

Zuerst unter https://www.virtualbox.org/ die aktuelle Virtual Box Software downloaden und installieren. In meinem Fall war dies Version 5.0.32.
Bei der Installation werden auch Gerätetreiber installiert, das ist normal.

VM anlegen

Im Virtual Box Manager auf Neu klicken um eine neue VM anzulegen. Hier meine Daten:
LinuxCNC kommt als 32-bit System, daher unter Version dies auswählen

Je nach verfügbarem RAM der Host-Maschine kann man auch weniger einstellen, unter 2 GB würde ich aber nicht gehen
 


dynamisch alloziert bedeutet, dass wir nur den Platz brauchen, den die VM auch belegt. Der Performancenachteil ist in diesem Fall egal.

40 GB sollte mehr als reichen, durch die dynamische Allokation ist es nicht so tragisch, wenn man hier mehr einstellt.

Linux CNC downloaden und als virtuelle CD angeben

Unter http://linuxcnc.org das ISO-Image downloaden. In meinem Fall war das linuxcnc-2.7-wheezy.iso.
Diese Datei gibt man dann der VM als CD an, indem man die VM anklickt und dann im Menü Maschine / Ändern auswählt.
Im folgenden Dialog wählt man unter Massenspeicher, das CD-Symbol "leer" und klickt auf der Attribute-Seite das eher unscheinbar aussehende CD-Symbol, bei dessen Menü man dann die gerade heruntergeladene Datei als "Datei für optisches Medium auswählen" kann.
 

Danach lässt sich die virtuelle Maschine auch schon starten.

Installation LinuxCNC

Die eigentliche Installation ist recht problemlos. Man wählt einfach im Boot menu den Punkt "Install (Graphical)"


Damit ist die Installation dann auch schon fertig. In einem weiteren Post zeige ich, wie man eine simulierte CNC-Fräse einrichten kann, wie man LibreCAD zum Laufen bringt und was man tun muss um dxf2gcode betreiben zu können.

Sonntag, 18. Oktober 2015

Neueste Version von dxf2gcode auf altem LinuxCNC

Ich hab im Keller immer noch LinuxCNC in Version XXX (Never change a running system).

Die vielen Verbesserungen von dxf2gcode, die in den letzten Monaten eingebracht wurden (u.a. eine integrierte Radius-Korrektur, die auch Innenausschnitte perfekt behandelt, da hatte ich immer meine Probleme ...) wollte ich aber schon haben.

Also hab ich mir die aktuelle Version von Sourceforge gezogen:
git clone git://git.code.sf.net/p/dxf2gcode/sourcecode dxf2gcode-sourcecode
Der Versuch, diese Version zu starten wurde mir allerdings mit folgender Fehlermeldung quittiert:
ImportError: No module named argparse
Meinem Python fehlte also wohl das argparse Modul. Dies kann man mit folgenden Kommados beheben:


apt-get install python-setuptools

easy_install argparse

Danach sollte argparse installiert sein, und das Kommando
python -c "import argparse; print argparse"
sollte folgenden Output liefern:
<module 'argparse' from '/usr/local/lib/python2.6/dist-packages/argparse-1.4.0-py2.6.egg/argparse.pyc'>
Danach ging dxf2gcode wieder einwandfrei.

Donnerstag, 8. Oktober 2015

Ein Knopf zur Rückkehr nach 0/0

Ein Blog-Leser hat mich gefragt, ob man denn einen weiteren Knopf in Axis einbauen könnte, mit dem auf den Werkstück-Nullpunkt fahren kann.

Das ist denkbar einfach. Man erweitert dazu laengensensor.xml um folgende Zeilen:
<button>
<halpin>"goto-xy-zero"</halpin>
<text>"Gehe X/Y nach 0/0"</text>
</button>

Und die laengensensor.hal um folgendes:
net goto-xy-zero halui.mdi-command-04 <= pyvcp.goto-xy-zero

Schliesslich noch in der Konfigurationsdatei der Fräse (.ini-Datei) das Kommando dazu (nur der fette Teil kommt dazu)
[HALUI]
MDI_COMMAND = G30.1
MDI_COMMAND = G30
MDI_COMMAND = O<probez> call
MDI_COMMAND = O<touchoffxy> call
MDI_COMMAND = G0 X0 Y0

Und schon flutscht das:

Und will man einen weiteren Knopf, um zum Maschinen-Nullpunkt zu kommen, geht das analog im .xml-File:
<button>
<halpin>"goto-xy-zero-machine"</halpin>
<text>"Gehe X/Y nach Maschinen-0/0"</text>
</button>
im HAL-File:
net goto-xy-zero-machine halui.mdi-command-05 <= pyvcp.goto-xy-zero-machine

und die HALUI-Sektion sieht dann so aus:
[HALUI]
MDI_COMMAND = G30.1
MDI_COMMAND = G30
MDI_COMMAND = O<probez> call
MDI_COMMAND = O<touchoffxy> call
MDI_COMMAND = G0 X0 Y0
MDI_COMMAND = G53 G0 X0 Y0
Viel Spass beim Nachbauen :-).

Samstag, 15. November 2014

LibreCAD, dxf2gcode, LinuxCNC und der Stepcraft Styroporschneider

Ich hab zu meiner Stepcraft auch den Heißschneider, mit dem ich immer wieder mal Dinge aus Styropor herstelle. Wie aus vorherigen Posts bekannt, verwende ich LibreCAD zum Zeichnen, wandle die .dxf-Dateien mit dxf2gcode in G-Code um, der dann von LinuxCNC ausgeführt wird.

Was ist beim Styroporschneiden nun anders?

Wir haben einen heißen Draht, keine sich drehende Spindel. In Analogie zum Fräsen soll aber der Draht erhitzt werden, wenn sich auch die Spindel dreht, daher wird das Netzteil des Heißschneiders an die Schaltsteckdose angeschlossen.

Beim Styroporschneiden gibt es aber keine Bewegung in der Z-Achse und man kann den Draht nicht erst einschalten, wenn man am Startpunkt ist, weil man nicht "über dem Material" fahren kann sondern immer mitten durch muss.

dxf2gcode besitzt glücklicherweise einen Mechanismus, wie man das Abbilden kann: Es erlaubt das Hinterlegen verschiedener Post-Prozessor-Konfigurationen.
Dies sind Dateien im Ordner dxf2gcode/source/postpro_config, welche angeben, welcher G-Code wofür generiert werden soll.
Also legen wir eine neue Datei namens styrofoam.cfg in diesem Ordner an, welche zunächst eine Kopie der dort vorhandenen Default-Konfiguration namens postpro_config.cfg ist.

Die folgende Abbildung zeigt einen Überblick über die gegenüber der Default-Konfiguration notewendigen Änderungen:

Die Änderungen im Detail:
  • Im Abschnitt General brauchen wir einen anderen output_text, dieser wird dann in dxf2gcode als möglicher Dateityp in der Combobox ganz unten sichtbar:
     
  • Ebenfalls wird in General der code_end so erweitert, dass vor dem Ende des Programms die Schaltsteckdose ausschaltet.
  • Im Abschnitt Program wird der tool_change so erweitert, dass die Schaltsteckdose unmittelbar danach einschaltet (dies ist an genau dieser Stelle notwendig, weil M6 sie ausschaltet). Weiters werden sämtliche Einträge, die ein Fahren in der Z-Achse auslösen würden (rap_pos_depth, lin_mov_depth) leer gemacht.
    Und schliesslich werden auch pre_shape_cut und post_shape_cut leer gemacht, da es nicht möglich ist, nach einem Shape den Draht (so wie die Fräse) auszuschalten und zum Startpunkt der nächsten Shape zu fahren (zumindest nicht ohne den Draht abzureissen oder das Styropor mit auf die Reise zu nehmen ... habe ich alles gehabt ;-).
Wer das jetzt nicht zu Fuß machen will, kann sich Datei auch hier herunterladen. Hat man die Datei in dxf2gcode/source/postpro_config abgelegt und dxf2gcode neu gestartet, dann hat man ab diesem Zeitpunkt beim Exportieren nach GCode zwei Formate zur Auswahl.

Ab Revision: r533 von dxf2gcode werden die Formate übrigens alphabetisch sortiert, sodass das Styropor-Profil nach dem Standard-Profil kommt. Wer das nicht will, muss die Datei von styrofoam.cfg nach z.B. a_styrofoam.cfg umbenennen.

Viel Spass beim Schneiden :-)


Freitag, 7. November 2014

Antasten-Knopf, V2.0

Nachdem ich über das Einrichten des Werkzeuglängensensors und eines Knopfes zum Antasten von X und Y Achse schon mal gepostet habe ist mir heute im Keller aufgefallen, dass der Knopf "X/Y auf 0 setzen" nicht richtig funktioniert.

Das Problem ist, dass zwar X und Y gesetzt werden, das Axis-GUI aber die aktuelle Datei neu laden muss, damit das Werkstück auch optisch richtig "nachrutscht".

Durch Studium des LinuxCNC Forums hier und hier bin ich dann zu folgender Lösung gekommen:

  • Ein "User defined Command" (ich habe willkürlich M122 genommen), welches das Neuladen besorgt
  • Eine Subroutine, die auf den Knopf gelegt wird und nebem dem G92 X0 Y0 eben auch das M122 aufruft.
So gehts im Detail:

Im Verzeichnis linuxcnc/nc_files eine Datei namens M122 anlegen mit folgendem Inhalt:
#!/bin/sh
axis-remote --reload &
Diese Datei muss ausführbar sein, daher nach dem Editieren folgendes Kommando auf der Kommandozeile absetzen:
rli@rlicnc:~/linuxcnc/nc_files$ chmod +x M122

Im Verzeichnis linuxcnc/nc_files eine Datei namens touchoffxy.ngc anlegen mit folgendem Inhalt:
O<touchoffxy> sub

G92 X0 Y0
M122

O<touchoffxy> endsub
 Und unsere Fräsen-Konfigurationsdatei (<Name>.ini in linuxcnc/configs/<Name>), die bisher diese Zeile enthielt:
MDI_COMMAND = G92 X0 Y0
auf
MDI_COMMAND = O<touchoffxy> call
ändern, sodass das neue Kommando auch ausgeführt wird.

Nach einem Neustart von Axis funktioniert dann der Knopf wie gewünscht.

Sonntag, 31. August 2014

Wartungsanzeige für Stepcraft-Maschinen in Linux-CNC

Wartungsanzeige für Stepcraft-Maschinen in Linux-CNC

Wie im Stepcraft Forum schon angedeutet, habe ich mir eine Wartungsanzeige ins Linux CNC eingebaut, die mir anzeigt, wann es Zeit für die nächste Schmierung/Ölung ist.
Screenshot Wartungsanzeige
Zuerst galt es mal zu klären, wie denn die 10 Stunden Wartungsintervall genau zu berechnen sind.
Dazu hab ich von Herrn Wedel von Stepcraft die Auskunft erhalten:
Mit Betriebsstunden ist die tatsächliche Bewegung der Maschine gemeint, da nur diese zu einem etwaigen Fett-/Ölabrieb führt. Auch wenn die Maschine längere Zeit nicht betrieben wurde, führt dies i.d.R. nicht zu einer Veränderung der Konsistenz des Schmiermittels.
 Also, brauchen wir etwas, das immer dann, wenn eine Achse in Bewegung ist, mitzählt. Der Kern des ganzen ist in der Python-Datei timelog.py, die man im Config-Verzeichnis ablegt. timelog.py fragt einmal pro Sekunde alle Achsen ab, ob ihre aktuelle Geschwindigkeit > 0 ist; falls dies der Fall ist, wird eine Sekunde zur Gesamtbetriebszeit hinzugezählt.
Das Ganze wird in eine (versteckte) Datei namens .timelog ins Home-Verzeichnis geschrieben; D.h, wenn man eine Schmierung durchgeführt hat muss man einfach diese Datei löschen, um den Wartungszeiger wieder auf 0 zu bringen.

Wie wird nun timelog.py in Axis integriert?

In meiner Fräsenkonfiguration befindet sich ja schon die Zeile:
PYVCP = laengensensor.xml

Deren Inhalt wird nun so erweitert:

<pyvcp>
    <button>
        <halpin>"set-probe-xy"</halpin>
        <text>"Längensensorposition merken"</text>
    </button>
    <button>
        <halpin>"goto-probe-xy"</halpin>
        <text>"Zur Längensensorposition"</text>
    </button>
    <button>
        <halpin>"do-the-probe"</halpin>
        <text>"Werkzeuglänge messen"</text>
    </button>
    <button>
        <halpin>"set-xy-zero"</halpin>
        <text>"X/Y auf 0 setzen"</text>
    </button>
    <hbox>
        <relief>RAISED</relief>
        <bd>3</bd>
        <meter>
            <halpin>"movetime"</halpin>
            <text>"Wartung"</text>
            <subtext>"s"</subtext>
            <size>250</size>
            <min_>0</min_>
            <max_>39600</max_>
            <majorscale>3600</majorscale>
            <minorscale>600</minorscale>
            <region1>0,32400,"green"</region1>
            <region2>32400,36000,"yellow"</region2>
            <region3>36000,39600,"red"</region3>
        </meter>
    </hbox>
</pyvcp>
Die untere hbox stellt dabei die Wartungsanzeige dar. Soweit der GUI-Teil, jetzt müssen wir noch den halpin namens "movetime" erzeugen.

Dazu braucht es eine weitere Erweiterung der Fräsenkonfiguration, diesmal im Abschnitt [HAL]:
[HAL]
HALFILE = timelog.hal
Die Datei timelog.hal ist nun dafür zuständig unser timelog.py zu laden:

loadusr -W ./timelog.py
aber damit noch nicht genug, die laengensensor.hal-Datei, welche in der Fräsenkonfiguration ja durch
die Zeile:
POSTGUI_HALFILE = laengensensor.hal
geladen wird, muss auch noch erweitert werden zu:
net set-probe-xy halui.mdi-command-00 <= pyvcp.set-probe-xy
net goto-probe-xy halui.mdi-command-01 <= pyvcp.goto-probe-xy
net do-the-probe halui.mdi-command-02 <= pyvcp.do-the-probe
net set-xy-zero halui.mdi-command-03 <= pyvcp.set-xy-zero
net maintainance_meter pyvcp.movetime <= timelog.movetime
Die unterste Zeile ist dabei jene, die unserem GUI-Widget die gemessenen Betriebszeiten zuordnet.

Eine kompletten Satz an Konfigurationsdateien mit allen beteiligten Dateien habe ich hier zum Download bereitgestellt.

Viel Erfolg beim Nachbauen.


Donnerstag, 5. Juni 2014

dxf2gcode auf LinuxCNC

dxf2gcode auf LinuxCNC

Installation


Nachdem ich in meinem letzten Blogpost die Installation von LibreCAD behandelt habe, geht es in diesem (kurzen) Bericht um dxf2gcode; dieses Programm wird benötigt, um die .dxf-Dateien, die LibreCAD erzeugt in G-Code umzuwandeln, der dann in LinuxCNC (Axis) geladen und verwendet werden kann.

Da dxf2gcode in Python geschrieben ist, entfällt das Kompilieren hier zur Gänze, man muss lediglich den Quellcode auschecken. Wie auf der Projekt-Seite angegeben funktioniert der Checkout mit
 svn checkout http://dxf2gcode.googlecode.com/svn/trunk/ dxf2gcode-read-only

Anschließend muss man das fürs GUI notwendige Paket python-qt4 installieren:
 sudo apt-get install python-qt4 python-argparse

Danach kann man dxf2gcode bereits starten:
cd dxf2gcode-read-only/source/
python ./dxf2gcode

Wenn es tolle neue Features gibt, geht man einfach in den Ordner dxf2gcode-read-only und macht dort
svn update

Natürlich kann man auch für dxf2gcode einen Startlink am Desktop anlegen, das geht ganz gleich wie in meinem Video zu LibreCAD gezeigt.

Verwendung

Ist dxf2gcode gestartet, bekommt man zunächst ein leeres Fenster:

Lädt man über das Menü File → Load File eine Datei (z.B. ein Leitwerk), dann wird dies im Fenster dargestellt:

Werkzeugradiuskorrektur

Hat man das zu fräsende Teil in LibreCAD so gezeichnet, wie man das Teil haben möchte, dann wird man in der Regel keine Rücksicht auf den zu verwendenden Fräser genommen haben.
Fährt man aber mit einem Fräser, der 2mm Durchmesser hat eine Form genauso nach, wie gezeichnet, wird das entstehende Teil dünner als die Zeichnung, da man in der Regel mit 1-Pixel Linien zeichnet, der Fräser aber nicht unendlich dünn ist.
Das folgende Beispiel zeigt, was gemeint ist:


Das gezeichnete Rechteck (schwarz) hätte 7.9 cm Breite, weil aber der Fräser 2mm Durchmesser hat, bekommt das ausgefräste Teil nur 7.7 cm Breite, also 2mm zu wenig.
Nun kann man natürlich die Zeichnung verändern, um die fehlenden 2mm zu ergänzen, dies hat aber den Nachteil, dass man vom verwendeten Fräser abhängig wird. Entscheidet man sich später, dass ein 3mm Fräser doch besser wäre, muss man alles anpassen.

Das geht natürlich eleganter. G-Code kennt eine automatische Radiuskorrektur, die dxf2gcode einschalten kann. Im Wesentlichen wird dabei nur für eine Form ein extra Code geschrieben, der LinuxCNC beim Fräsen dazu veranlasst den halben Fräsradius links oder rechts der gezeichneten Linie entlangzufahren.

Manuell kann man das machen, indem man die Form auswählt, mit der rechten Maustaste das Kontextmenü öffnet und unter Cutter Compensation die gewünschte Korrektur auswählt:
dxf2gcode fährt normalerweise die Form im Uhrzeigersinn ab, daher würde man in obigem Beispiel sinnvollerweise G41 Left Compensation wählen, sodass der Fräser ausserhalb des Leitwerks bleibt. Man kann auch mit dem Menüpunkt Switch Direction die Richtung umkehren, dann wäre G42 Right Compensation richtig.

Will man die Radiuskorrektur automatisch machen, kann man im Menü Options → Automatic Cutter Compensation einschalten (will man, dass der Punkt immer eingeschalten ist, geht das in der Datei source/config/config.cfg, Eintrag [General] default_AutomaticCutterCompensation = True). Dies bewirkt beim Laden einer .dxf - Datei, dass alle äußeren Formen (also Formen, die nicht von einer anderen Form umschlossen sind) G41 Left Compensation bekommen und alle inneren Formen G42 Right Compensation, wodurch Innenausschnitte (wie sie z.B. bei Rumpfspanten gerne vorkommen) korrekt gefräst werden.
dxf2gcode zeigt die Radiuskorrektur auch farblich an:
  • schwarz ... G40 No Compensation
  • grün ... G41 Left Compensation
  • magenta ... G42 Right Compensation

Fräsparameter 

Für die Erzeugung von G-Code ist es natürlich von entscheidender Bedeutung, wie tief der Fräser in das Material eintauchen soll und wie schnell der Fräser bewegt wird.
Diese Daten sind zunächst mal nicht in einer .dxf - Datei vorhanden, da .dxf ja ein CAD-Format (i.e. technische Zeichnung) ist.
Im Reiter Layers kann man unten die notwendigen Daten eingeben:

Sehen wir uns die Parameter im Detail an:
  • Z Retraction area gibt die "Parkhöhe" des Fräsers an. Auf diese Höhe wird nach dem Fräsen gefahren.
  • Z Safety margin ist die "Sicherheitshöhe" auf die der Fräser zwischen den Teilen fährt.
  • Z Workpiece Top ist die Z-Koordinate der Werkstückoberfläche, wenn man (so wie ich) die Werkzeuglänge zum Werkstück (und nicht etwa zur Opferplatte) misst, ist 0 hier der richtige Wert.
  • Z Infeed depth gibt die Zustellung pro Durchgang an, wenn man "in einem Rutsch" fräsen will ist dieser Wert gleich dem nächsten
  • Z Final mill depth gibt die Gesamttiefe des Fräsvorganges an, hat man hier einen Wert > der Z Infeed depth, dann wird die in mehreren Durchläufen immer tiefer gefräst.
  • Feed rate XY gibt die Geschwindigkeit für X/Y - Fahrten an
  • Feed rate Z gibt die Geschwindigkeit für Z - Fahrten an (in der Regel macht man da etwas langsamer, damit der Fräser beim Eintauchen nicht abbricht)
Nun kann man diese Daten jedes Mal, wenn man G-Code generieren will neu angeben (bzw. günstige Werte im Konfigurationsfile hinterlegen), idealerweise hätte man diese aber gern in der Ausgangsdatei hinterlegt.

Dafür gibt es einen Trick: Man benennt im CAD-Programm einfach die Layer entsprechend. So hat das Leitwerk in obiger Abbildung z.B. die Bezeichnung: MILL: Leitwerk Tg: -4.1 Tz: -4.1 F: 200 Fz: 100, was sich entsprechend auf die Fräsparameter auswirkt.
Die Details habe ich auf einer Wiki Seite direkt bei dxf2gcode hinterlegt. Dort findet man auch, wie man Layer definieren kann, die beim Fräsen gänzlich ignoriert werden (z.B. für Messungen), wie man Löcher bohren lassen und kann und wie man Frässtege einbaut.

Die Datei GondelTeile.dxf enthält z.B. folgende Layer:
  • 0 ... Der Default-Layer, der bei LibreCAD immer dabei ist. Auf diesem Layer sind keine Formen
  • DRILL: T: 1020 Td: 2 Tz: -3.1 ... Dieser Layer enthält Löcher, der Bohrer ist bei mir als Werkzeug Nr. 1020 hinterlegt, es ist ein Bohrer mit 2 mm Durchmesser (Td ... Tool diameter) und es wird 3.1 mm tief in reingebohrt
  • IGNORE: Masse und Beschriftung ... Auf diesem Layer zeichne ich Bemassungen und Beschriftungen ein, sie werden beim G-Code generieren ignoriert.
  • MILL: Nut T: 2 Td: 2 Tg: -2 Tz: -2 F:300 Fz:200 Sr: 3 ... Dieser Layer hat nur 2mm Tiefe und dient zum Fräsen der Nuten in das 3mm Pappelsperrholz.
  • MILL: Teile T: 2 Td: 2 Tg: -3.1 Tz: -3.1 F:300 Fz:200 Sr: 3 ... Auf diesem Layer sind die zu fräsenden Formen eingezeichnet. Zustellung und Gesamttiefe sind auf je 3.1mm
Auf Frässtege habe ich in diesem Fall verzichtet.

Samstag, 8. März 2014

Verwendung des Stepcraft Werkzeuglängensensors mit LinuxCNC

Manuelle Verwendung

Nach Durchführung der Referenzfahrt legt man den Werkzeuglängensensor auf die Oberfläche des Werkstücks und fährt man mit Manuelle Kontrolle den Fräser über den Sensor. Dazu verwendet man entweder die Radiobuttons X/Y/Z sowie den - und + Knopf, oder die Pfeiltasten (für X und Y) sowie die Bildlauf-Tasten (für Z) auf der Tastatur.
Mit dem Slider Schrittgeschwindigkeit kann man die Geschwindigkeit reduzieren, wenn man sonst die Position nicht trifft.

Mit der Z-Achse fährt man einige mm über den Sensor, dann wechselt man auf den MDI Reiter, und setzt das Kommando G38.2 Z-10 F20 ab.

Die Z-Achse fährt nun nach unten, bis der Schalter im Sensor erreicht und ausgelöst wird, dann stoppt die Maschine.

Da wir wissen, dass der Sensor auf 33mm Höhe liegt, können wir das nun wiederum im Manuelle Kontrolle Reiter einstellen:
Wie in der Grafik schon dargestellt:
  1. Die Z-Achse auswählen
  2. Auf den Antasten Knopf klicken
  3. 33 in das Eingabefeld des Dialogs eingeben
  4. OK klicken
Danach zeigt die Koordinaten-Anzeige Z: 33.000, wir haben die Werkzeuglänge exakt eingestellt.

Einbindung in Axis

Nun ist die manuelle Verwendung wie oben gezeigt, doch eher mühsam, daher folgt nun eine Anleitung, wie wir die schritte bequem ins Axis-GUI integrieren können.

Anpassungen im .ini - File

Zuerst muss man das .ini - File der Fräse öffnen und an zwei Stellen Anpassungen vornehmen:
Unter [DISPLAY] muss die Datei mit der GUI-Definition als PYVCP angegeben werden (die Datei laengensensor.xml folgt weiter unten)

Ein wenig weiter unten in der Datei geht es weiter ...
Unter [HAL] definiert das POSTGUI_HALFILE die "Verbindungen" unseres GUIs zur Fräse (die Datei laengensensor.hal folgt weiter unten).
Wichtig ist auch die Zeile HALUI = halui, diese war bei mir schon dabei, scheint aber in vielen Fällen zu Fehlen, dann bekommt man die Fehlermeldung: Pin 'halui.mdi-command-00' does not exist.
Unter [HALUI] haben wir hier 4 mal den Schlüssel MDI_COMMAND mit folgenden Befehlen:
  1. G30.1 ... Merken der aktuellen Position als Referenzpunkt
  2. G30 ... Anfahren der gemerkten Position
  3. G38.2 Z-3 F20 ... Langsam (20 mm / Minute) mit der Z Achse bis zu 3 mm nach unten fahren, aufhören, sobald der Kontakt geschlossen ist.
  4. G92 Z33 ... Setzen der Z Koordinate auf 33 mm (die Höhe des Stepcraft Sensors)

GUI-Datei

Unser GUI sieht so aus:

4 Knöpfe, die mit je einem sogenannten halpin verbunden sind.

HAL-Datei

Was machen nun diese Halpins? Das steht in der laengensensor.hal:



Die vier Halpins sind mit mdi-command-00 bis mdi-command-01 verbunden und deren Bedeutung haben wir wiederum in der .ini - Datei unter [HALUI] festgelegt.

Die etwas eigenartige Kette von Verknüpfunen lautet also:
  • .ini File bindet laengensensor.xml und laengensensor.hal ein
  • laengensensor.xml macht 4 Knöpfe, die sich auf Pins in der laengensensor.hal beziehen
  • laengensensor.hal definiert Pins, die MDI-Befehler ausführen die in der .ini - Datei stehen.
Starten wir nun Axis, bekommen wir neben der 3-D Ansicht unsere Panel mit den 4 Knöpfen (die auch hoffentlich funktionieren):

Geschafft! Das Axis-GUI erweitert um unsere 4 Knöpfe.

Anwendungsidee

Gedacht ist das nun so, dass man die Fräse an eine Position fährt, wo man den Sensor bequem drunterstellen kann. Dann fährt man schon mal mit Z bis knapp vor den Sensor, damit man sieht, ob der Druckknopf auch schön unterhalb des Fräsers steht (wer das nicht will, muss beim MDI_COMMAND in der .ini-Datei einen größeren Z-Wert angeben, z.B. Z-50).
Diese Position kann man sich nun mit dem ersten Knopf merken, um sie später (nach einem Werkzeugtausch) mit dem zweiten Knopf wieder leicht anfahren zu können.
Mit dem dritten Knopf führt man die Längenmessung aus, d.h. es wird nach unten gefahren, bis der Kontakt des Schalters im Sensor geschlossen wird.
Danach drückt man auf den vierten Knopf, wodurch Z automatisch auf die Höhe (33mm) gesetzt wird (Hat man einen anderen Sensor, muss man das vierte MDI Kommando in der .ini-Datei entsprechend anpassen)

Download

Die Dateien laengensensor.xml und laengensensor.hal zum Download.

X/Y-Nullpunkt Knopf

Auf Anregung eines Benutzers im Stepcraft Forum habe ich die Axis-Erweiterung noch um einen Knopf ergänzt, der X und Y an der aktuellen Stelle auf 0 setzt.
Dazu muss man:
  1. In laengensensor.xml einen weiteren Knopf einführen, der mit einem neuen halpin verbunden ist
  2. In laengensensor.hal den halpin definieren und ihn mit dem nächsten mdi-command verbinden
  3. In der .ini - Datei MDI_COMMAND = G92 X0 Y0 anfügen
Das Gesamt-Ergebnis sieht dann so aus:
laengensensor.xml:
<pyvcp>
    <button>
        <halpin>"set-probe-xy"</halpin>
        <text>"Längensensorposition merken"</text>
    </button>
    <button>
        <halpin>"goto-probe-xy"</halpin>
        <text>"Zur Längensensorposition"</text>
    </button>
    <button>
        <halpin>"do-the-probe"</halpin>
        <text>"Werkzeuglänge messen"</text>
    </button>
    <button>
        <halpin>"set-the-toollength"</halpin>
        <text>"Werkzeuglänge setzen"</text>
    </button>
    <button>
        <halpin>"set-xy-zero"</halpin>
        <text>"X/Y auf 0 setzen"</text>
    </button>
</pyvcp>


laengensensor.hal:
net set-probe-xy halui.mdi-command-00 <= pyvcp.set-probe-xy
net goto-probe-xy halui.mdi-command-01 <= pyvcp.goto-probe-xy
net do-the-probe halui.mdi-command-02 <= pyvcp.do-the-probe
net set-the-toollength halui.mdi-command-03 <= pyvcp.set-the-toollength
net set-xy-zero halui.mdi-command-04 <= pyvcp.set-xy-zero

.ini-Datei (Ausschnitt):
[HALUI]
MDI_COMMAND = G30.1
MDI_COMMAND = G30
MDI_COMMAND = G38.2 Z-3 F20
MDI_COMMAND = G92 Z33
MDI_COMMAND = G92 X0 Y0


Die (finale?) Deluxe-Version

Nach ein paar weiteren Überlegungen (u.a. im Stepcraft Forum) habe ich nun noch die Knöpfe "do-the-probe" und "set-the-toollength" zusammengefasst und ausserdem das automatische Freifahren des Sensors noch dazuprogrammiert.
Dazu braucht man neben den drei schon bekannten Dateien (laengensensor.xml, laengensensor.hal und .ini-Datei der Fräse) eine vierte (probez.ngc), wo der zusammengefasste Code (runterfahren, Höhe setzen, freifahren) drin ist, diese Datei legt man im Verzeichnis linuxcnc/nc_files ab.

Hier die 4 Dateien:
laengensensor.xml:
<pyvcp>
    <button>
        <halpin>"set-probe-xy"</halpin>
        <text>"Längensensorposition merken"</text>
    </button>
    <button>
        <halpin>"goto-probe-xy"</halpin>
        <text>"Zur Längensensorposition"</text>
    </button>
    <button>
        <halpin>"do-the-probe"</halpin>
        <text>"Werkzeuglänge messen"</text>
    </button>
    <button>
        <halpin>"set-xy-zero"</halpin>
        <text>"X/Y auf 0 setzen"</text>
    </button>
</pyvcp>

laengensensor.hal:
net set-probe-xy halui.mdi-command-00 <= pyvcp.set-probe-xy
net goto-probe-xy halui.mdi-command-01 <= pyvcp.goto-probe-xy
net do-the-probe halui.mdi-command-02 <= pyvcp.do-the-probe
net set-xy-zero halui.mdi-command-03 <= pyvcp.set-xy-zero


.ini-Datei (Ausschnitt):
[HALUI]
MDI_COMMAND = G30.1
MDI_COMMAND = G30
MDI_COMMAND = O<probez> call
MDI_COMMAND = G92 X0 Y0


probez.ngc
O<probez> sub

G38.2 Z-20 F60
G92 Z33
G0 Z40 F800

O<probez> endsub

 


Damit kann man den Sensor unter den Fräser stellen, den Knopf Werkzeuglänge messen drücken und alles ist gut: Der Fräser fährt runter, bis er Schalter auslöst, merkt sich Z=33mm und fährt anschliessenf auf Z=40mm hoch, damit man den Schalter wegräumen kann.

Sonntag, 2. März 2014

Betrieb der Stepcraft 420 mit Linux

Warum Linux?

Bei der USB Starterversion der Stepcraft Fräsen wird "WinPC-NC Starter" mitgeliefert, die auch korrekt als "Einsteigersoftware" bezeichnet wird. Will man die Vollversion haben, muss man noch einmal 200 € extra drauflegen. Als Software-Entwickler und Langzeit Linux-User (demnächst 20 Jahre ...) siegte bei mir der geizige Tüftler. 

Ausserdem gibt es unter Linux jenseits der eigentlichen Maschinensteuerung (LinuxCNC) eine große Menge freier Software, z.B. LibreCAD zum Zeichnen oder dxf2gcode zur Umwandlung von CAD-Zeichnungen in G-Code.
Das ist auch ein weiterer für mich wichtiger Unterschied: LinuxCNC läuft im "Profiformat" G-Code, nicht mit einer Plotdatei, wo die Tiefen der Fräsung erst unmittelbar vor dem Fräsvorgang eingestellt werden.
Und die Tatsache, dass die verwendeten Programme Open Source sind ermöglichen es (mir als Softwareentwickler), diese nach meinen Vorstellungen anzupassen. Von dieser Möglichkeit habe ich auch tatsächlich Gebrauch gemacht, dazu später mehr ...

Ganz wichtig: Für den Betrieb mit LinuxCNC braucht man unbedingt das Parallelport-Interface (zu meinen kleinen Problemen mit der Inbetriebnahme der Fräse siehe meinen Baubericht).

Rechnerauswahl

Zurück zum Betrieb der Fräse mit LinuxCNC. Die erste Hürde ist natürlich die Auswahl eines Rechners, der für den Betrieb mit LinuxCNC geeignet ist.
Paradoxerweise ist dafür ein ganz neuer Rechner nicht unbedingt hilfreich, wichtig ist, dass der Rechner gute Echtzeiteigenschaften hat, d.h. dass er möglichst exakt auf ein vorgegebenes Signalintervall verfügbar ist.
Das Gute daran ist, dass man LinuxCNC ohne Installation von CD starten kann (LiveCD), um festzustellen, ob ein Rechner gut für das Steuern der Fräse geeignet ist. 

Ist LinuxCNC gestartet wählt man aus dem Menü Anwendungen → CNC → Latency Test. Danach muss man auf dem Rechner auch "etwas tun", um die maximalen Abweichungen (Jitter) zu ermitteln. Idealerweise sollten dabei beide Jitter-Werte unter 15.000 bis 20.000 bleiben (lt. LinuxCNC Wiki).

Geschafft! Ein Rechner mit idealen Max Jitter-Werten


Folgende Pi-mal-Daumen-Regeln hab ich aus meinen Erfahrungen abgeleitet:
  • Alte, aber nicht gar zu alte Hardware ist gut. In meinem Fall wurde es ein AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ mit einer nVidia GeForce 6600 GT auf einem nForce2 Motherboard.
  • Wenn man sehr alte Hardware versuchen möchte, kann es empfehlenswert sein, die "ältere" CD von LinuxCNC zu verwenden (siehe hier unter Ubuntu 8.04 Hardy Heron (older)).
  • Je weniger Hardware in einem Rechner verbaut ist, desto geringer die Wahrscheinlichkeit, dass ein Teil darunter ist, das die Echtzeiteignung zunichte macht
  • Die Grafikkarte ist meist das größte Problem. Ich habe viele nVidia-Karten durchprobiert (und auch immer proprietärer Treiber oder der Open-Source "Nouveau"-Treiber), bis ich das passende gefunden habe. Die schon erwähnte nVidia 6600 GT mit nouveau war dann schließlich perfekt.
  • Es wird zwar ausdrücklich erwähnt, dass man beim Latenz-Test den Browser starten soll, allerdings ist Firefox mittlerweile ein echtes Monster und so wird auch in einschlägigen Foren davon abgeraten, Firefox während des Latenztests zu starten. Umgekehrt heißt das natürlich, dass man auch während des Fräsens den Browser besser nicht verwendet.
    Sehr wohl muss man aber ein OpenGL-Programm laufen lassen, da auch Axis (das GUI von LinuxCNC) diese Grafikschnittstelle verwendet. glxgears kann man starten indem man Alt+F2 drückt und dann glxgears in das Eingabefeld eingibt, gefolgt von der Return-Taste.

Installation

Die Installation von LinuxCNC gestaltet sich denkbar einfach, da LinuxCNC auf Ubuntu basiert und dieses um die benötigte Software für die Steuerung (Axis) und Echtzeit - Erweiterungen für den Kernel erweitert. Daher auch der Hinweis, dass man nicht einfach einen Ubuntu-Systemupgrade durchführen darf, sonst ist es aus mit Echtzeit-Steuerung und damit auch mit CNC-Fräsen.

Einrichten der Stepcraft 420

Sowohl im Stepcraft Forum als auch auf YouTube habe ich schon vor dem Kauf meiner Fräse die wichtigsten Informationen gefunden, wie man mit stepconf die Stepcraft einrichtet. Ich habe meine Dateien (ohne jede Garantie, bitte jedenfalls selbst kontrollieren, bei anderer Fräse als 420 natürlich die möglichen Verfahrwege anpassen) hier freigegeben (herunterladen und dann in stepconf Modify a configuration already created with this program auswählen).

Man kann mit stepconf aber natürlich auch ganz einfach selber die Daten eingeben:
 
Hat man die Dateien runtergeladen, wählt man hier Modify a configuration already created with this program, sonst eben Eine neue Konfiguration erstellen.


Wichtige Grundeinstellungen, ich habe bei Maximale Systemtakt-Abweichung einen Wert eingegeben, der deutlich über den ermittelten Werten liegt, um auf der ganz sicheren Seite zu sein.

Hier kann man Erweiterungen zum Axis GUI einstellen, fürs erste hab ich es mal leer gelassen

 
Die Pin-Belegung

Wichtig bei der Pinbelegung ist, dass man Pin 11, den Notausschalter invertiert. Sonst wird in Axis die Fräse als inaktiv angezeigt obwohl sie eigentlich "an" ist. Pin 1 steuert die Schaltsteckdose und auf Pin 10 ist der Werkzeuglängen-Sensor angebracht.

Konfiguration X-Achse (links-rechts), hat man ein anderes Modell als die 420, muss der Verfahrweg angepasst werden.
Konfiguration Y-Achse (vor-zurück); Da der Referenzschalter ganz hinten liegt, gibt man hier das Ende als Punkt an, die Geschwindigkeit ist positiv; Ein paar mm hab ich hier als Sicherheitsreserve eingespart.

Die Z-Achse (auf-ab): Hier ist die lt. Datenblatt geringere Maximale Geschwindigkeit zu beachten.

Wenn man mit stepconf fertig ist, bekommt man einen schönen Link am Desktop, den man zum Starten von Axis benutzen kann. Dort empfiehlt es sich zunächst vorsichtig im Reiter Manual Control die Achsen zu bewegen (läuft alles richtig?, in die richtige Richtung?).

Hat man die Fräse zum ersten Mal in Betrieb sollte man aus der Erste Schritte - Anleitung von Stepcraft den Punkt 2.5 ÜBERPRÜFUNG DER LINEARACHSEN durchführen. Danach steht einem erfolgreichen Betrieb der Fräse nichts mehr im Weg.

Ausblick

Dieser Artikel beschreibt nur die Einrichtung von LinuxCNC. Um von einer Idee zum fertig gefrästen Bauteil zu kommen, braucht es aber noch mehr Software (LibreCAD, dxf2gcode). Deren Einrichtung und Verwendung beschreibe ich einem meiner nächsten Artikel...