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.

Sohn Geburtstag => Papa darf fräsen :-)

1. Geschenk für den besten Sohn von allen

Eine feine Gondel aus 3mm Pappelsperrholz, die Fenster sind mit 0.5 mm PVC Glas verglast, der rechte Teil der Vorderseite ist eine Schiebetüre, die sich in der Nut von Boden- und Deckenplatte hin- und herschieben lässt.


Ein paar Kleinigkeiten sind natürlich nicht ganz perfekt geworden (z.B. sieht man bei den Innenausschnitten noch so eine "Ausfressung"), aber insgesamt bin ich recht zufrieden.
Downloads:


2. Geschenk für die Kinder am Kindergeburtstag

Ich hatte schon vor längerer Zeit einen Wurfgleiter für den besten Sohn von allen gemacht, da bietet es sich an, das Modell für die geladenen Gäste der Geburtstagsfeier zu "personalisieren".




Das Ganze basiert auf dem basic.Glider des MCL Ladenburg. Dessen Plan hab ich zur Vorlage genommen, um den Wurfgleiter zu zeichnen. Material ist 2mm Balsaholz, passenderweise nimmt man auch einen 2mm Fräser, dann sind die Schlitze im Holz einfach zu realisieren.
Downloads:

Dienstag, 18. März 2014

LibreCAD in LinuxCNC

LibreCAD

Um ein Bauteil vernünftig erstellen zu können benötigt man ein CAD Programm. Ich benutze gerne LibreCAD. Leider ist LibreCAD nicht in LinuxCNC enthalten, daher muss man es selber kompilieren.

Diese Anleitung zeigt, wie es geht (eine englische, allgemeine Anleitung findet sich unter http://librecad.org/cms/home/from-source/linux.html).

Anleitung

Hat man LinuxCNC gestartet, muss man zuerst ein Terminal öffnen (Anwendungen → Zubehör → Terminal). Darin werden nun jeweils die folgenden Kommandos (Kommandos in Monospace, Kommentare normal) eingegeben:

sudo apt-get install qt-sdk libboost-all-dev libmuparser-dev libfreetype6-dev
Damit installiert man notwendige Pakete, um LibreCAD übersetzen zu können



git clone https://github.com/LibreCAD/LibreCAD.git
Dieser Befehl kopiert die Quelldateien von LibreCAD auf den eigenen Rechner.

cd LibreCAD
Wechsel in das Verzeichnis mit den gerade kopierten Quelldateien

git checkout tags/2.0.0beta5
Dieser Schritt ist notwendig, weil leider bei späteren Versionen von LibreCAD mit dem (relativ alten) Compiler von LinuxCNC/Ubunutu 10.04 ein Fehler auftritt. Es wird damit die Version 2.0.0beta5 "ausgewählt".

echo  "CXX_CP11_FLAG = -std=c++0x" > custom.pro
Auch dieser Schritt ist notwendig, um mit dem Compiler das Auslangen zu finden

qmake custom.pro
qmake librecad.pro
make
Diese Schritte vereiten das Compileren vor, bzw. führen es durch. Nach Eingabe von make kann es schon mal ein Weilchen dauern (je nachdem wie schnell der Rechner ist).

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

Video


Und weil ich schon immer mal mit Linux Videotools spielen wollte, gibts die Anleitung (mit Bonus-Material: Desktop-Icon Erstellung) auch als Video:

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...





Mittwoch, 12. Februar 2014

Baubericht Stepcraft 420

Motivation

Lange hab ich gezögert (ist ja keine kleine Investition), letztendlich aber doch zugeschlagen: Eine Stepcraft 420 soll in Zukunft mein Modellbauen um CNC erweitern.

Ausschlaggebend für die Stepcraft waren zum einen sicher der Preis (alle anderen CNC Systeme, die ich bis dato gesehen habe, waren einfach preislich jenseits dessen, was man sich als Hobby-Modellbauer leisten kann/mag), zum anderen wollte ich keinen "China-Bausatz" erwerben, weil deren Qualität ja durchaus durchwachsen ist und es mir an Maschinenbau-Kenntnissen so grundsätzlich mangelt, dass auch ein "Eigenbau" nicht in Frage kam. 


Mechanischer Aufbau

Am Samstag war es endlich soweit, mit Hilfe des schon mehrfach erwähnten besten Schwiegervaters der Welt wurde der Aufbau in Angriff genommen.
10.15 Uhr
Erst mal alle Teile ausgepackt und auf den Tisch gelegt:
Ganz schön viele Teile, wobei mir ein paar Dinge gleich aufgefallen sind:
  • Die Bauanleitung ist echt gut gemacht, mit Farben, einheitlichen Symbolen, etc.
  • "Made in Germany" ist offenbar ernst gemeint, selbst das Netzteil der Stepcraft stammt aus .de 
  • Bei den Kleinteilen empfiehlt es sich alles vor dem Bau zu sortieren, U-Scheiben für M4 / M5 unterscheiden sich nur so minimal voneinander, dass man sonst leicht etwas verwechseln könnte.
Gleich zu Beginn hatten wir unsere liebe Not, die Spindelmuttern in die vorgesehenen Aussparungen zu stecken, hier ist wohl ein wenig zu viel Pulverbeschichtung zu liegen gekommen. Wie in der Anleitung erwähnt, muss man hier ein wenig abtragen, damit man zum Ziel kommt.

Dann gab es noch Verständnisprobleme, warum man denn die Spindelmuttern am Anfang nicht ganz reinsteckt und die Laufrollen nicht gleich mit ihrer Mutter fixiert. Es hat aber schon alles seinen Sinn, denn wenn alles gleich "fest" montiert, bekommt man nachher die Teile nicht mehr rein, weil die schon feststehenden den Weg versperren ;-).

Bei der Schaltermontage mussten dann noch die Kabel ein wenig gefummelt und gebogen werden, aber schliesslich ging alles ganz gut rein.

Bis zu Schritt 1.10, da wollten die beiden Kabelsammler einfach nicht ineinander gehen. Wir haben die Ursache sehr lang bei den Schalterkabeln (die ja schon da durchlaufen) gesucht, der eigentliche Grund war aber, dass ich den Kabelsammlerring nicht fest genug in den Kabelsammler-X gedrückt hatte und daher schob dieser Ring immer das jeweilige Gegenstück wieder raus.


12.40 Uhr
Aber schliesslich waren wir soweit:

Das Anbringen von Linearschiene und Motorhaltern war dann wiederum ebenso problemlos, wie das Ausrichten der Z-Spindel.
Bei der Vorbereitung des Z-Motors hatte ich Angst, dass beim Verkleben des Axiallagers der Superkleber an die falschen Stellen gerät, es klappte dann aber ganz gut. 
13:49 Uhr
Damit war dann der X-Z-Verbinder eigentlich fertig:

 Mit dem rechten Seitenteil ging es zunächst auch flugs weiter, bei Schritt 3.3 war dann aber großes Rätselraten angesagt. "Spindel von Hand mittig ausrichten" ist da zu lesen. Die Spindel in die Spindelmutter reindrehend habe ich gleich gesehen, dass die Spindel nicht mittig ist, sie war wesentlich zu tief, um das Loslager beim Seitenteil zu "treffen". 

Allein die Spindelmutter ist natürlich bereits im X-Z-Verbinder verbaut und festgeschraubt, ergo lässt sich da nichts mehr "ausrichten". 

Also nochmal den X-Z-Verbinder soweit zerlegt (Z-Achse raus, Aluprofil runter, etc.) bis die Schraube, mit der die X-Spindelmutter befestigt ist, erreichbar ist. Diese gelöst, die Spindel nun ausgerichtet, die Schraube wieder festgezogen und alles wieder aufgebaut. Ziemlich mühsame Angelegenheit, die Spindel manuell rein/rauszuschrauben, aber ohne Fleiß kein Preis.

Bei der Gelegenheit ist dann gleich noch eine kleine Unsauberheit zu Tage getreten: Das Ende des Spindel war ein wenig zu dick. Es ging nur mit Mühe in das Loslager und steckte dort (auch mit Öl) einfach fest. Also griff Schwiegervater zum Schleifpapier und verjüngte das Spindelende ein wenig.

Der Rest (linkes Portalseitenteil) war dann flugs fertig:
16:25 Uhr

Der Maschinentisch war ohne nennenswerte Probleme zu montieren, ein wenig knifflig war zunächst das Einziehen aller Kabel in den großen Kabelschlauch (Schritt 4.14), da habe ich einfach das (noch unverbaute) Kabel für den Notausschalter als "Kabelziehfeder" verwendet und die jeweils 4 dünnen Kabel von X und Z an das Ende geklebt, damit man sie durchziehen kann. Hier ist natürlich sehr sehr wichtig, dass die Kabel der Schrittmoteren zusammengehalten werden und beschriftet sind, sonst weiss man später nicht mehr, welche rote Litze zu welchem Schrittmotor gehört.

Eine letzte mechanische Korrektur war noch beim Einfügen der Loslager (Schritt H.2) notwendig; eine Aussparung war mit zuviel Farbe voll, sodass hier nochmal das Schleifpapier seine Arbeit verrichten musste.

Knapp 8 Stunden nachdem wir die Teile ausgepackt haben war der mechanische Aufbau dann abgeschlossen:
18:57 Uhr

 

Elektrische Anschlüsse


Ein paar Tage später habe ich mich mit dem Anschließen beschäftigt. Das Kabel vom Notaus-Schalter war schnell befestigt, beim Kabel für den Y-Endschalter ist das Loch in der Endplatte reichlich knapp bemessen für die Kabeldicke. Es ging aber dann gerade so durch (Litzen mit Tixo zusammengeklebt, durchgeschoben, mit Spitzzange am anderen Ende rausgezogen).

Das USB-Modul habe ich von der Steuerplatine abgezogen und durch die Parallelport-Version ersetzt (ich will LinuxCNC einsetzen). Die Module sind zunächst etwas wackelig, erst wenn sie dann festgeschraubt werden sitzt alles bombenfest.

Die Kabel für die Schrittmotoren, Endschalter und Notaus gehen gut zu befestigen, die Lusterklemmen machen einen soliden Eindruck.

Gummifüsse und Aufkleber noch angebracht und schon wähnte ich mich am Ziel meiner Träume.

Leider kamen dann zwei Probleme:
  • Das Parallelportkabel hat mechanisch nicht im Ausschnitt der Rückwand Platz. Das Kabel hat 1.7 cm, der Ausschnitt nur 1.6 cm. Hier wurde mir im Stepcraft-Forum und auch von Herrn Urban (ein Unternehmen, wo der Geschäftsführer auf Support-Fragen antwortet, das ist mir sympathisch ...) empfohlen, das Kabel einfach ein wenig abzuschleifen.
  • Ich wollte (noch ohne Parallelportkabel) eine Prüfung der elektischen Funktion durchführen. Flugs das Netzteil eingesteckt und ... nichts. Eine kurze Messung mit dem Multimeter (0.3 V, manchmal 3 V, angeschrieben sind 19 V) legt die Vermutung nahe, dass das Netzteil defekt ist. Ironie des Schicksals, dass ich weiter oben noch vom Netzteil "Made in Germany" begeistert war ;-) (da wusste ich noch nix vom Defekt).
    Aber auch hier wurde mir von Stepcraft schnellstmöglich geholfen, ein neues Netzteil hat soeben Iserlohn verlassen.
... einige Tage später ...

Der UPS-Mann bringt ein neues Netzteil, das auch gleich 19 V am Multimeter anzeigt und beim Anschliessen an die Fräse ist ein vielversprechendes Brummen zu hören, das Problem war also gelöst.

Dem Parallelportkabel habe ich dann die gesamte Plastikschale weggenommen (mit Schleifen war es einfach nicht klein genug zu bekommen) und mit 2 Mal Schrumpfschlauch isoliert:
und schon stand einem erfolgreichen Start (Fetten und Ölen hab ich natürlich auch noch gemacht ...) nichts mehr im Weg.

Und tatsächlich sind nun alle Achsen ansteuerbar. 

Ein wenig kämpfe ich noch mit den genauen Spindeleinstellungen (Unsicherheit, was da gut/normal ist ...), aber das wird auch noch.


Zubehör

Die Schaltsteckdose kann ich über LinuxCNC nun auch steuern, indem ich in stepcdonf Pin 1 auf "Spindel ein" gelegt habe. Ein kurzer Versuch mit einer Lampe war diesbezüglich bereits erfolgreich.

Den Absaugadapter habe ich auch schon montiert.

Die Opferplatte war leider ein wenig zu dick (1.2 cm), da wird wohl nicht jedes Sperrholz drunter Platz finden, daher habe ich noch eine zweite Platte (mit 0.8 cm) gekauft, die ich statt der HPL reinstecken kann.

Fehlt noch der Werkzeuglängensensor, den muss ich noch anschliessen.


Update #1


Der Werkzeuglängensensor funktioniert mittlerweile auch (zumindest im Testbetrieb) und mit Hilfe der netten Leute von Stepcraft habe ich nun auch die mechanische Komponente (glaub ich) gut in den Griff bekommen. Meine Fehler waren:
  • Die verstellbaren Laufrollenhalter nicht bzw. nicht fest genug anzuziehen, dadurch hatte alles ziemlich Spiel und auf einer der Y-Achse hatte eine Rolle nicht mal Kontakt mit der Rollenführung. Der Tip von Stepcraft war, einfach die Portalseitenteile versuchen zu bewegen, es darf sich nichts rühren.
  • Die Schraubenlöcher (besonders links) hatten etwas zu viel Pulverbeschichtung, wodurch die Schrauben ein wenig schief geraten und damit die Linearschiene verziehen. Hier habe ich noch ein wenig mehr Pulver weggenommen.
Seit diesen Verbesserungen habe ich keine steckenbleibenden Achsen mehr.


Update #2

Gerade eben habe ich noch dxf2gcode so gepatcht, dass nun die Frässtege korrekt generiert werden sollten (siehe diese Anleitung im Wiki von dxf2gcode).

Und ich habe den Styroporschneider ausprobiert und ein Herz für meine Süße und ein Boot für meinen Kleinen ausgeschnitten. 

Styro schneiden braucht ein paar Änderungen im G-Code:
  • keine Z-Achsenbewegungen (einfach ausm G-Code rausgelöscht)
  • Spindel-Ein entspricht Draht einschalten, das muss in dem Fall aber vor jeder Bewegung passieren, weil man ja nicht "über" das Werkstück fahren kann sondern immer durchschneidet.

Update #3

Die Fräse ist an ihrem Bestimmungsort im Bastelkeller angekommen (Das Foto ist leider eher weniger gut gelungen ...)