G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Hallo an alle
Nun bin ich schon seit Stunden am suchen und probieren und bin mit meinem Latein am Ende....
Zu meinem Problemchen....
Ich drucke mit dem Anycubic Kobra V2 pro.
Da ich die Cloudversion nutze, würde ich gerne folgende Informationen immer Automatisch in den G-Code-Einfügen lassen.
Ob Start G-Code oder End G-Code ist hier egal
; statistics = begin
; processor = begin
; total_layers = {total_layer_count} "das ist der einzige Platzhalter der funktioniert"
; model_size = {} "Länge, Breite, Höhe des Modells"
; print_time = {} estimated printing time (normal mode)
; used_filament = {filament_used} "hier gerne in Meter"
; processor = end
; statistics = end
Für model size, Print time und used Filament finde ich einfach keine Möglichkeit diese Werte im G-Code darzustellen.
Vielleicht weis der ein oder andere ja eine Lösung. Ich hatte auch schon über legt die "Info" und "Slice Info" Daten aus Prusa abzugreifen, denn er schreibt sie ja in den G-Code
; filament used [mm] = 207.60
; filament used [cm3] = 0.50
; filament used [g] = 0.62
; filament cost = 0.01
; total filament used [g] = 0.62
; total filament cost = 0.01
; total filament used for wipe tower [g] = 0.00
; estimated printing time (normal mode) = 3m 42s
; estimated first layer printing time (normal mode) = 21s
Irgendwie muss ja Prusa die Daten abgreifen und in den G-Code schreiben, wenn ich diese abändern könnte, wäre mir auch schon geholfen! Hier habe ich aber keine Config-Datei gefunden wo enthalten ist was Prusa nach dem G-Code noch anfügt.
Beste Grüße Jürgen
Best Answer by DerHolzwurm:
Wichtig!!!
Leider kann ich den Originalbeitrag nicht mehr bearbeiten.
Wenn die alle 3 genannten Skripte verwenden möchtest, dann muss die Reihenfolge angepasst werden.
- Anycubic_Output
- ArcOverhangs
- ArcWelder
Ich weiß nicht ob es an ArcWelder liegt oder der .exe, jedenfalls konnte ich einer anderen Konstellation nicht über die Cloud drucken, in dieser Reihenfolge funktioniert es. In jeder Konstellation habe ich ArcWelder als letztes PPS stehen.
Ja, woran es lag kann ich auch nicht wirklich sagen.
Im Prinzip führte Stundenlanges Try and Error zum Ziel, hierbei war Thonny.exe eine riesige Hilfe, da hier die fehlerhaften Zeilen ausgegeben werden. Dann wieder basteln, fehlerhafte Zeilen ausbessern, abändern oder ergänzen.
Die wohl wichtigsten Dinge die zu einem fertigen, funktionierenden PPS geführt haben, waren...
- Der Wille es unbedingt haben zu wollen
- Karl, der sehr viel Geduld hatte und immer wieder geantwortet hat, Merci 🙂
- Thonny.exe
- sehr viele Stunden googlen und viel lesen
- und viel Kaffee
Wichtig ist zu wissen, dass ich mit Programmierung nichts am Hut habe und mich nicht wirklich auskenne. Das wird jeder der aus dem Business kommt sofort erkennen wenn er den Code liest. Bitte geht nicht zu hart ins Gericht mit mir 🙂
Ich natürlich offen für jede Verbesserung, immer her damit...
Zum Skript selbst gibt es eigentlich nicht viel zu sagen, außer...
- es muss nichts mehr im Prusa Start GCode oder End GCode ergänzt werdenzum aufrufen des Skriptes braucht es beide Pfade (Python und Skript)
- z.B. "C:\Users\Name\AppData\Local\Programs\Python\Python312\python.exe" "C:\Users\Name\OneDrive\Desktop\Skripte\Anycubic_Output.py"
- am Ende des Skripts ist das Ergebnis der Berechnungen und der Endgültigen Ausgabe mit Position im GCode als Printbefehl angefügt, dieser ist aber Standardmäßig auskommentiert, wer neugierig ist hebt die Auskommentierung einfach auf
Was macht das Skript nun eigentlich?
Nun, wenn man die Anycubic Cloud nutzen möchte (ob sinnvoll oder nicht ist uninteressant) hat folgendes Problem
- Print size: wird nicht angezeigt
- Estimated printing time : wird nicht angezeigt
- Slice layers : werden nicht angezeigt
- Estimated amount of consumables (benötigte Filamentlänge in m): wird nicht angezeigt
- Das Skript durchsucht nun den GCode nach den erforderlichen Werten, rechnet diese ggf. um und fügt die erforderlichen Informationen, im Gcode nach den Prusa Settings an.
- Es wird nur die max. Größe des zu druckenden Objektes ausgegeben, also ohne Brim, Skirt oder anderen Krempel, also nur die Größe der STL file
- Anycubic Cloud durchsucht den GCode beim Upload nach den Werten und Pflegt diese richtig in die Anzeige ein.
Das Skript funktioniert auch in Kombination mit dem Skript ArcWelder und ArcOverhangs, ich rufe die Skripte in folgender Reihenfolge auf
- ArcOverhangs
- ArcWelder
- Anycubic_Output
Ja mir ist bewusst das das Skript nur kosmetische Zwecke hat, dennoch hat mich Gestört das in der Anzeige die Informationen gefehlt haben.
Vielleicht hilft das Skript ja dem ein oder anderem der sich auch daran stört 😀
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Vllt hilft dir das weiter
https://help.prusa3d.com/de/article/liste-der-platzhalter-variablen_205643
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Leider nicht, diese Seite hab ich mir heute schon so oft angesehen und keine Lösung gefunden.
Ich furchte, dass der einzige vielleicht mögliche Weg über die prusa config ist.
Nur hab ich hier keine Ahnung wo in prusa hinterlegt ist wie der G-Code generiert wird.
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Man könnte z.B. mit einem Pythonscript die gewünschten Infos abgreifen oder errechnen und weiter verarbeiten (in den Gcode einfügen). Das Pythonscript kann in den Slicer PP integriert werden und wird beim Slicerlauf bzw. dem Senden zum Drucker automatisch ausgeführt. Dazu muss natürlich Python auf dem Slicer Rechner installiert sein. Auf diese Art habe ich mir eine Ausgabe der Endzeit aufs LCD Display gebastelt.
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Hallo Karl
Das hört sich sehr interessant an, kannst du mir hier ein Beispiel geben.
Ich hab gerade mal ein bisschen Erfahrungen mit Excelmakros...
Nur um eine Idee zu bekommen...
Bzw. Wie würdest du das angehen.
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Hallo Karl
Ich versuche nun seit 6h mich mit Python vertraut zu machen, doch um das was ich benötige umzusetzen, fehlt mir denke ich einiges an Programmiererfahrung!
Mir ist zwar bewusst was das Skript tun soll, nur nicht wie ich es formulieren/programmieren muss.
Mein Plan dazu war im Prinzip folgender:
In PrusaSlicer trage ich beim Drucker im End G-Code ";insert script" ein.
Das ist dann die Position im G-Code an der der PP, den im Skript generierten Text einfügen soll.
Das Skript selbst müsste dann im G-Code nach den gewünschten Werten suchen..
; filament used [mm] = 2529.67
; estimated printing time (normal mode) = 15m 20s
; total_layers = 125
Hat der diese gefunden müsste es mir an der obengenannten Position im G-Code folgenden Text einfügen:
print_time müsste auf volle Minuten gerundet werden
used_filament müsste auf Meter umgerechnet werden
model_size ich habe keine Ahnung wo ich im G-Code die Bemaßung des Werkstücks abgreifen könnte (länge mm, breite mm, höhe mm)(also so 12.508,12.508,7)
; statistics = begin
; processor = begin; total_layers = 125
; model_size = 12.508,12.508,7
; print_time = 16m
; used_filament = 2.52967; processor = end
; statistics = end
In Excel würde ich wissen wie aber in Python habe ich keine Ahnung....
Gruß Jürgen
RE:
Servus Jürgen,
Einst stand ich vor ähnlichen Problemen. Ich suchte nach vorgefertigten Lösungen, fand aber keine. Dann habe ich mich entschlossen mich in Python und C++ einzuarbeiten. Hat zwar Geduld und viel Zeit gekostet, lohnt sich aber, wenn man damit in vielerlei Hinsicht div. Aufgabenstellungen selber lösen kann (nicht nur im Bereich 3D-Druck).
Die Modelgrösse ist dem Slicer bekannt und sicherlich in einer Variable hinterlegt. ebenso kann man den Druckraum durch herausfiltern der Koordinaten aus dem Gcode berechnen.
Eine Erklärung zum Thema PP-Scripte findest Du hier:
https://help.prusa3d.com/de/article/skripte-fur-die-nachverarbeitung_283913
Ein Python Beispiel von vielen aus dem Netz:
https://github.com/johnnyruz/PrusaScripts/blob/master/postprocess_mmutempchange.py
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Viele hilfreiche Tipps und Beispiele findest Du auch hier: https://muppetlabs.co/index.html#
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Hallo Karl
Um mal mit dem ganzen warm zu werden, hab ich jetzt einfach mal versucht ein 0815 Skript zu versuchen....
Was soll ich sagen, ich bekomm es nicht mal zum laufen....
#!/usr/bin/python import sys import re import os sourceFile=sys.argv[1] # Read the ENTIRE g-code file into memory with open(sourceFile, "r") as f: lines = f.readlines() destFile = re.sub('\.gcode$','',sourceFile) os.rename(sourceFile,destFile+".bumpfan.bak") destFile = re.sub('\.gcode$','',sourceFile) destFile = destFile + '.gcode' with open(destFile, "w") as of: for lIndex in xrange(len(lines)): oline = lines[lIndex] # Parse gcode line parts = oline.split(';', 1) if len(parts) > 0: # Parse command command = parts[0].strip() if command: stringMatch = re.search ('^M106 S(.*)', command) if stringMatch: # Insert code to bump fan to max before fan speed commands of.write('M106 S255\n') # Write original line of.write(oline) of.close() f.close()
Ich habe das Skript gespeichert und lass es auch mit folgendem Befehl aufrufen, was er auch tut. Nur generiert er dann einen Error :1
"C:\Users\Name\AppData\Local\Programs\Python\Python312\python.exe""C:\Users\Name\OneDrive\Desktop\Skripte\Anycubic_output.py"
Hast du hier einen Rat?
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Sorry für die späte Rückmeldung! Bin in letzter Zeit nicht oft im Forum unterwegs.
Ändere folgende Zeile:
for lIndex in xrange(len(lines)):
in:
for lIndex in range(len(lines)):
Dann sollte das Werk laufen.
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Hallo Karl
funktioniert leider auch so nicht... ist aber auch nicht weiter schlimm, da es Ursprünglich nur zu Testzwecken war.
Allerdings habe ich mittlerweile 2 PPS zu laufen bekommen, zum einen das ArcWelder.py und ArcOverhangs.py....
Es ist der Hammer was hier möglich ist.
Zu meinem ursprünglichem Problem bin ich aber auch noch nicht weiter gekommen 🙁
Ich finde aber auch keine PPS welche ich anpassen oder umbasteln könnte
Aber ich gebe nicht auf und versuche es weiter 🙂
Zumindest habe ich es schon mal etwas auseinander klamüselt, jetzt muss ich es dann nur noch als Code umbasteln und als PPS speichern.
Irgendwann soll es mal so aussehen 🙂
Er soll nach folgenden Zeilen im G-Code suchen...
... M84; disable motors ; disable stepper motors ; insert script------------------------------------------------------>hier soll dann die "Ausgabe" aus dem Skript eingefügt werden ; First layer print size = 115.468,100,94.282------------------> nach "; First layer print size = " suchen und Wert "115.468,100,94.282" als (Größe) definieren ; total_layer_count = 128----------------------------------------> nach " ; total_layer_count = " suchen und Wert "128" als (Layer) definieren M73 P100 R0 ; filament used [mm] = 1195.34---------------------------------->nach "; filament used [mm] = " suchen, mit 1000 multiplizieren und Wert "1.19534" als (Filament) definieren ; filament used [cm3] = 2.90 ; filament used [g] = 3.60 ; filament cost = 0.07 ; total filament used [g] = 3.60 ; total filament cost = 0.07 ; total filament used for wipe tower [g] = 0.00 ; estimated printing time (normal mode) = 21m 24s---------->nach "; estimated printing time (normal mode) = " suchen und Wert auf volle min (bzw. bei 69m11s auf 1h10m) runden und Wert "22m bzw. 1h10m" dann als (Zeit) definieren ; estimated first layer printing time (normal mode) = 32s
und diese dann im G-Code unter ";insert script" wie folgt einfügen
; statistics = begin ; processor = begin …. ; model_size = (Größe) ; print_time = (Zeit) ; total_layers = (Layer) ; used_filament = (Filament) …. ; processor = end ; statistics = end
mit dem Skript bin ich zwar noch nicht recht weit, aber die Idee steht schon mal 🙂
#Post Processing Script Werte finden und eintragen #!/usr/bin/python import sys import re import os inFile=sys.argv[1] # Read the ENTIRE g-code file into memory with open(inFile, "r") as f: lines = f.readlines() infile = sys.argv[1] outfile = infile + '.tmp' out = open(outfile, 'w') with open(outfile, "w") as of: Suchen nach ; total_layer_count = 128 und Wert = 128 = (Layer) Suchen nach ; filament used [mm] = 1195.34 und mit 1000 multiplizieren Wert = 1,19534 = (Filament) Suchen nach ; First layer print size = 115.468,100,94.282 = (Größe) Suchen nach ; estimated printing time (normal mode) = 21m 24s auf volle min runden und kopieren (alles über 60min (71min) soll 1h11min sein) = 22 = (Zeit) Suchen nach „; insert script“ und ersetzen durch ; statistics = begin ; processor = begin ; model_size = (Größe) ; print_time = (Zeit) ; total_layers = (Layer) ; used_filament = (Filament) ; processor = end ; statistics = end of.close() f.close()
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Hallo Karl
So weit bin ich nun, nur will das Skript nicht laufen. Es generiert immer den Fehlercode 1
Ich nicht ums V...... den Fehler!
Fällt dir/euch etwas auf?
Gruß Jürgen
#!/usr/bin/python import sys import re import os # Dateinamen für Ein- und Ausgabe erhalten inFile = sys.argv[1] # Öffne die Eingabedatei und lese den gesamten G-Code with open(inFile, "r") as f: lines = f.readlines() # Variablen für Werte initialisieren Layer = None Filament = None Größe = None Zeit = None # Durchsuche den G-Code nach den angegebenen Informationen for line in lines: if "; total_layer_count = " in line: Layer = line.split("=")[1].strip() elif "; filament used [mm] = " in line: filament_used_mm = float(line.split("=")[1].strip()) Filament = str(filament_used_mm / 1000) elif "; First layer print size =" in line: Größe = line.split("=")[1].strip() elif "; estimated printing time (normal mode) =" in line: estimated_time = line.split("=")[1].strip().split() hours = int(estimated_time[0][:-1]) minutes = int(estimated_time[1]) if hours >= 1: minutes += hours * 60 Zeit = str(minutes) # Öffne die Ausgabedatei und schreibe den bearbeiteten G-Code with open(inFile, 'w') as out: for line in lines: out.write(line) if "; insert script" in line: out.write("\n; statistics = begin\n") out.write("; processor = begin\n") out.write("; model_size = " + str(Größe) + "\n") out.write("; print_time = " + str(Zeit) + "\n") out.write("; total_layers = " + str(Layer) + "\n") out.write("; used_filament = " + str(Filament) + "\n") out.write("; processor = end\n") out.write("; statistics = end\n") print("Post-processing complete. Input file overwritten.")
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Ich weiß ja nicht, wie Du Deine Python Umgebungsvariablen definiert hast und auf welchem System das Ganze laufen soll. "/usr/bin/python" ist ein Linux Pfad.
Aus diesem Grund würde ich die erste Zeile (Shebang) mal weglassen.
Ein hilfreiches Tool zum Testen von verschiedenen Python Umgebungen findest Du hier: https://thonny.org/
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Naja, so siehts aus wenn ein Intensivpfleger versucht zu ein Script zu schreiben bzw. Eher zu basteln 😨 😨 😨
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Nur zur info....
Das ganze soll auf einem Windows 11 rechner, mit der letzten prusa version und python 3.12
Irgendwann mal laufen
Gruß Jürgen
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Mach mal ein CMD Terminal auf und tippe folgendes ein: python --version
Wie lautet die Ausgabe?
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Python 3.12.1
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Falls Du den Pythonpfad noch nicht definiert hast: https://praxistipps.chip.de/python-in-cmd-nutzen-so-gehts_96172
Wie gesagt, die erste Zeile kannst Du weglassen!
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
Alles klar, ich übe weiter 🙂
Danke dir vielmals
RE:
Im Thonny IDE läuft das Script soweit fehlerfrei durch (python 3.8.6):
(erste Zeile wurde gelöscht)
Schöne Grüsse,
Karl
Statt zu klagen, dass wir nicht alles haben, was wir wollen, sollten wir lieber dankbar sein, dass wir nicht alles bekommen, was wir verdienen.