IoT

#6 – Den GCode umwandeln in „Robotersprache“

Der sicherlich aufwendigste Abschnitt im kompletten Projekt, ist der eigens geschriebene „Übersetzer“ (Parser).
Damit wandele ich die mit LaserGRBL erstellte GCode Datei (*.nc) in eine Datei um, welche vom Kawasaki Roboter verarbeitet werden kann.

Es gibt diverse Software, die diesen Vorgang sicher bequemer und schneller ausführen kann. Diese Software ist mir aber zu teuer gewesen.

Mein Freund Dominik hat aber im Internet einen „KAWA-GCODE Parser“ gefunden. Für den Anfang ein nettes Spielzeug um zu sehen ob und wie diese Verarbeitung funktioniert. Problem an dem Tool ist aber, dass das Tool rein nur die Positionen umwandelt. Signalverarbeitung oder andere Befehle werden gekonnt ignoriert. Für meine Anwendung also unbrauchbar.

So habe ich mir in Node-Red einen eigenen Parser geschrieben.

Die Routine liest die GCode Datei ein und splittet diese temporär in sogenannte Arrays (1 Array pro Zeile).
Im zweiten Schritt werden die Arrays dann Zeile für Zeile gelesen und der Inhalt interpretiert. Anhand des Inhalts wird dann eine Zeile ausgegeben, welche vom Roboter lesbar ist.

Es wird dadurch eine neue Datei erstellt mit der Endung *.AS … welche wie gesagt vom Roboter gelesen werden kann.

Da das Ganze ziemlich viel Zeit und Nerven gekostet hat, sowie einiges an Logik beinhaltet, will ich den Inhalt des Node-Red Flows nicht einfach so veröffentlichen. Gerne kann man mich kontaktieren und man findet eine Lösung.

Der GCode Parser, bzw die Node Red Instanz läuft auf dem hier beschriebenen RevolutionPi. Die vorher erzeugte GCode Datei muss man also erstmal auf den RevPi kopieren. Hier die Vorgehensweise…

Die erzeugte GCode Datei im Windows-Explorer
Rechtsklick und Kopieren …

Für die Übertragung der Datei auf den RevPi nutze ich die kostenlose Software „Swish“. Dieser SFTP Client kann Dateien via SSH von einer Stelle zur anderen kopieren. Nach erfolgreicher Installation von Swish, ist die Software als zusätzliches „Laufwerk“ im Arbeitsplatu (Computer) zu finden.

So integriert sich die Software Swish, in den Windows Explorer.

Nach Doppelklick auf das Swish-Symbol, wird ein Fenster geöffnet, welches alle bereits hinzugefügten SFTP Verbindungen zeigt.
Sollte noch keine Verbindung erstellt worden sein, kann man dies über die Menü-Leiste am oberen Rand tun.
SFTP-Verbindung hinzufügen und die Verbindungsdaten zum Raspberry (RevPi) eintragen.
Beim ersten Doppelklick auf die erstellte SFTP Verbindung, wird nach dem Raspberry Passwort gefragt.
Nach erfolgreicher Eingabe, öffnet sich das /home/pi Verzeichnis.

Hier die Verbindung zum RevPi…
… und der Inhalt des Verzeichnis /home/pi – des Revolution Pi
Mit Rechtsklick und Einfügen, wird die GCode Datei auf den Pi übertragen.

Es muss für die Umwandlung des GCodes, nicht zwingend ein RevPi sein. Node-Red mit Zugriff auf die Verzeichnis-Ebene ist aber zwingend erforderlich. Es kann auch eine Node-Red Windows Instanz verwendet werden. Vielleicht teste ich das selbst mal. Die einfachste Wahl ist für mich aber der RevolutionPi, da dieser direkt mit dem Roboter kommunizieren kann.

Ich habe mir mit Node-Red Dashboard ein „WebInterface“ gebastelt, welches die Umwandlung etwas vereinfacht.
Ich muss nur den Namen (ohne Dateiendung) der GCode Datei angeben (in meinem Fall edel) und mit Enter bestätigen.
Daraufhin wird die Umwandlung gestartet und bei „Slicer-Ausgabe“ kann man lesen was gerade so passiert.
Die Umwandlung der einzelnen Zeilen kann einige Zeit in Anspruch nehmen.
Nach erfolgreicher Umwandlung wird die Start und Endzeit der Umwandlung angezeigt.
Zusätzlich wie viele Zeilen der eigentliche GCode hatte.

Der GCode selbst besitzt weit mehr Zeilen, als die Roboterdatei. Vom Parser werden die massig vielen kleinen Schritte teilweise übersprungen, und nur übertragen wenn sich die Laser Intensität ändert. Dies hat den Vorteil das der Roboter nicht durch (zu) viele kleine Schritte, zu stocken beginnt.

Wie man erkennen kann, hat die Umwandlung für knapp 250.000 Zeilen, rund 7 Minuten gedauert. Sicher nicht die schnellste Option, aber die Umwandlung kann, auch während eines anderen Roboter-Jobs, erfolgen.

Die Datei „prog.as“ ist die erstellte Datei.
Diese kopieren wir nun via Swish wieder zurück auf den Windows PC.

Die Datei prog.as kann nun mit Kawasaki KASLoad schrittweise auf den Roboter übertragen werden. [#7 – Automatikbetrieb mit Kawasaki KASLoad]

An dieser Stelle möchte ich Euch gerne noch Teile des Inhalts der Datei „prog.as“ etwas erläutern.

Ein vom Roboter geladenes/gespeichertes Programm beginnt immer mit der Zeile
.PROGRAM name ()

Diese Schreibweise ist für die Verarbeitung notwendig.
Im Beispiel sieht die gesamte Kopfzeile so aus …

.PROGRAM pg123 () Kawasaki-Syntax Programm-Start und Name (auch die () Klammern sind wichtig)
signal -laser Laser AUS Signal
bits pwm,pout = 0 Laser Intensität auf 0 (Minimal 0 = 0 Volt am Analog Ausgang – Maximal 255 = 10 V am Analog Ausgang)
point a = trans(0,0,zvers)+b Eingelernter Punkt = „b“ – Koordinaten der Position werden hiermit in Variable „a“ kopiert. Wobei man via „zvers“ die Materialstärke (am Roboter Display) angeben kann.
pulse msg_start,2 Ausgangsimpuls 2 Sekunden an RevPi (versendet Text-Nachricht via Telegram ans Handy – Auftrag gestartet)
twait 2 Wartezeit 2 Sekunden
TIMER(7)=0 Stoppuhr starten/reset
bits pwm,pout = 0 Laser Intensität auf 0 (Minimal 0 = 0 Volt am Analog Ausgang – Maximal 255 = 10 V am Analog Ausgang)
lmove shift(a by 0,0) Bewegung zu Punkt „a“
$name = „edel“ Programmname für Ausgabenachrichten festlegen
engrave = 3500 Gravurgeschwindigkeit in Variable „engrave“ speichern
speed engrave mm/min always Geschwindigkeit 3500 (aus Variable „engrave“) in mm pro Minute – gilt IMMER
speed 100 Geschwindigkeit 100 Prozent – gilt nur für den nächsten Schritt
bits pwm,pout = 0 Laser Intensität auf 0 (Minimal 0 = 0 Volt am Analog Ausgang – Maximal 255 = 10 V am Analog Ausgang)
lmove shift(a by 59,6,0) Bewegung zu Punkt „a“ + 59,6mm in X
bits pwm,pout = 140 Laser Intensität auf 140
lmove shift(a by 59.7,0) Bewegung zu Punkt „a“ + 59,7mm in X

Was folgt sind immer die Bewegungen im Wechsel mit der Laser Intensität

Bis zur Fußzeile …

jobtime=TIMER(7) Speichert den aktuellen Wert der Stoppuhr in die Variable „jobtime“
pulse msg_end,2 Ausgangsimpuls 2 Sekunden an RevPi (versendet Text-Nachricht via Telegram ans Handy – Auftrag gestartet)
lmove a Bewegung zu Punkt „a“
.END Kawasaki-Syntax Programm-Ende
Wichtig ist diese leere Zeile unterhalb von .END … sonst lässt sich das Programm NICHT in den Roboter laden

Die Software KASLoad zerlegt eine große .as Datei in viele kleine Teile. Jedes dieser Teile bekommt temporär,
.PROGRAM prog1 () oder .PROGRAM prog2 () an den Anfang und .END + Leerzeile ans Ende,
gesetzt und wird so, via Ethernet, an den Roboter gesendet.

Die Programm Instanz auf dem Roboter wechselt nahtlos zwischen den Programmen prog1 und prog2.

Im Abschnitt [#7 – Automatikbetrieb mit Kawasaki KASLoad] stelle ich dann den weiteren Ablauf vor.

3 Gedanken zu „#6 – Den GCode umwandeln in „Robotersprache“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert