G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)
 
Notifications
Clear all

G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)  

Stránka 1 / 2
  RSS
DerHolzwurm
(@derholzwurm)
Active Member
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.

  1. Anycubic_Output
  2. ArcOverhangs
  3. 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.

Posted by: @derholzwurm

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
  • Google
  • 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

  1. ArcOverhangs
  2. ArcWelder
  3. 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

 

 

 

 

Napsal : 24/01/2024 3:34 pm
Tolzi_Woodwork
(@tolzi_woodwork)
Eminent Member
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

Napsal : 24/01/2024 7:07 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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 

Napsal : 24/01/2024 7:14 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 24/01/2024 10:20 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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 

Napsal : 25/01/2024 6:10 am
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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

Napsal : 25/01/2024 1:23 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 26/01/2024 12:55 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 26/01/2024 1:29 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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

Napsal : 26/01/2024 2:44 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 30/01/2024 4:18 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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

Napsal : 31/01/2024 4:22 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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.")
Napsal : 01/02/2024 5:26 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 01/02/2024 7:30 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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 

Napsal : 01/02/2024 7:34 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
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 

Napsal : 01/02/2024 7:38 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 01/02/2024 7:47 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Python 3.12.1

Napsal : 01/02/2024 7:50 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 01/02/2024 7:51 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Alles klar, ich übe weiter 🙂

Danke dir vielmals

Napsal : 01/02/2024 7:52 pm
karl-herbert
(@karl-herbert)
Illustrious Member
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.

Napsal : 01/02/2024 7:54 pm
Stránka 1 / 2
Share: