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

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.

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


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.

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