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

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

Strona 2 / 2
  RSS
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Ich habs gerade mal ohne erste Zeile versucht, er spuckt allerdings noch immer den Error Code: 1 aus

Opublikowany : 01/02/2024 7:57 pm
karl-herbert
(@karl-herbert)
Illustrious Member
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Wie sieht denn die Ausgabeoption im PS aus?

Beispiel für einen funktionierenden Aufruf in W10: "C:\Program Files\Python38\python.exe" "C:\PS_PP_Scripte\readlayernum.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.

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

Die Pfade sollten ebenfalls passen, bei dem ArcOverhangs Script funktioniert es.

"C:\Users\name\AppData\Local\Programs\Python\Python312\python.exe" "C:\Users\name\OneDrive\Desktop\Skripte\Anycubic_Output_neu1.py"

Hab noch ein bisschen rumprobiert.....

Thonny gibt mir den folgenden Bereich als Fehler aus.

 hours = int(estimated_time[0][:-1])
        minutes = int(estimated_time[1])
        if hours >= 1:
            minutes += hours * 60
        Zeit = str(minutes)

Wenn diesen Bereich auskommentiere , läuft das script durch

Opublikowany : 02/02/2024 5:22 am
karl-herbert
(@karl-herbert)
Illustrious Member
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Wie lautet der Fehler?

Bei Python musst Du aufs Einrücken achten (Blockstrukturierung).

Lade mal das gesamte Script hoch. Dann kann ich mir das anschauen und selber testen.

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.

Opublikowany : 02/02/2024 5:29 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Ich habe heute das Problem gelost, und der Code funktioniert und tut was er soll. Ich hoffe ich habe sämtliche Eventualitäten berucksichtigr. 

Gerade bin ich unterwegs, morgen stell ich mal den fertigen code ein.

Jedem der sich mit codierung/Programmierung auskennt, dem wird wahrscheinlich schlecht beim Anblick. 

Aber durch deine Hilfe Karl, bin ich schon stolz was ein voliig programmierverpeilter Intensivpfleger schaffen kann.

 

Vielen lieben Dank für deine Hilfe 

Alleine das kleine programm war Gold wert. 

Merci Jürgen 

Opublikowany : 02/02/2024 5:55 pm
karl-herbert
(@karl-herbert)
Illustrious Member
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Der Weg zur Problemlösung wäre interessant. Woran lag es (Sehr hilfreich für alle Mitlesenden mit ähnlichen Problemen)?

Danke!

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.

Opublikowany : 02/02/2024 10:53 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

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

 

 

 

Opublikowany : 03/02/2024 10:42 am
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Hier noch das Skript ich hänge auch noch eine Textdatei an hier muss dann das Suffix nur noch von .txt in .py geändert werden

import sys
import math
import re

# Dateinamen für Ein- und Ausgabe erhalten
inFile = sys.argv[1]

# Funktion zur Extraktion der Druckzeit definieren
def extract_printing_time(input_string):
    parts = input_string.split()
    days, hours, minutes = 0, 0, 0

    # Durchlaufe die Teile der Eingabezeichenkette
    for part in parts:
        if 'd' in part:
            days = int(part[:-1])
        elif 'h' in part:
            hours = int(part[:-1])
        elif 'm' in part:
            minutes = int(part[:-1])
        elif 's' in part:
            seconds = int(part[:-1])
            # Runde Sekunden auf Minuten
            minutes += math.ceil(seconds / 60)

    # Formatiere die Zeit entsprechend dem Format
    time_str = ""
    if days > 0:
        time_str += str(days) + "d"
    if hours > 0:
        time_str += str(hours) + "h"
    if minutes > 0:
        time_str += str(minutes) + "m"

    return time_str

# Öffne die Eingabedatei und lese den gesamten G-Code
with open(inFile, "r", encoding="utf-8") as f:
    lines = f.readlines()

# Variablen für Werte initialisieren
Filament = None
Zeit = None
external_perim_width = 0.00
LayerAnycubic = 0.00
z_size = 0.00
y_size = 0.00
x_size = 0.00
LH = None
FLH = None

# Initialisierung der Variablen für die Größenberechnung
x_min = float('inf')
x_max = float('-inf')
y_min = float('inf')
y_max = float('-inf')

# Durchsuche den G-Code nach den angegebenen Informationen
search_external_perimeter = False  # Variable, um zu überprüfen, ob wir uns im Abschnitt "External perimeter" befinden

# Suche nach anderen Informationen
for line in lines:
    if "; external perimeters extrusion width = " in line:
        external_perim_width = float(re.search(r'(\d+\.\d+)', line).group(1))
    elif "; filament used [mm] = " in line:
        Filament = str(float(line.split("= ")[1].strip()) / 1000)
    elif "; estimated printing time (normal mode) = " in line:
        Zeit = extract_printing_time(line.split("= ")[1].strip())
    elif ";TYPE:External perimeter" in line:
        search_external_perimeter = True  # Beginn des Abschnitts "External perimeter"
    elif search_external_perimeter and line.startswith("G1"):
        match_x = re.search(r'X([\d.]+)', line)
        match_y = re.search(r'Y([\d.]+)', line)
        if match_x and match_y:
            x_value = float(match_x.group(1))
            y_value = float(match_y.group(1))

            # X-Min und X-Max aktualisieren
            x_min = min(x_min, x_value)
            x_max = max(x_max, x_value)

            # Y-Min und Y-Max aktualisieren
            y_min = min(y_min, y_value)
            y_max = max(y_max, y_value)
    elif ";TYPE:" in line:
        search_external_perimeter = False  # Verlassen des Abschnitts "External perimeter"

# Berechnung der Größen
x_size = round(x_max - x_min + external_perim_width, 3)
y_size = round(y_max - y_min + external_perim_width, 3)

# Rückwärtssuche nach der ersten Zeile mit "; layer_height = "
for line in reversed(lines):
    if "; layer_height = " in line:
        LH = float(line.split('=')[1])
        break

# Rückwärtssuche nach der ersten Zeile mit "; first_layer_height = "
for line in reversed(lines):
    if "; first_layer_height = " in line:
        FLH = float(line.split('=')[1])
        break

# Calculate DLH
if LH is not None and FLH is not None:
    DLH = FLH - LH
else:
    DLH = None

# Rückwärtssuche nach der ersten Zeile mit ; AFTER_LAYER_CHANGE
max_layer_anycubic = 0
max_z_size = 0

for line in reversed(lines):
    if line.startswith("; AFTER_LAYER_CHANGE") and not line.startswith("; layer_gcode = ; AFTER_LAYER_CHANGE"):
        # Suche den Zahlenwert zwischen "CHANGE " und " @"
        match_layer = re.search(r'CHANGE (\d+) @', line)
        match_z = re.search(r'@ (\d+\.\d+)mm', line)
        if match_layer and match_z:
            current_layer_anycubic = float(match_layer.group(1))
            current_z_size = float(match_z.group(1))
            # Wenn die Werte größer als die bisherigen Maxima sind, aktualisiere sie
            max_layer_anycubic = max(max_layer_anycubic, current_layer_anycubic)
            max_z_size = max(max_z_size, current_z_size)

# Überprüfen, ob gültige Werte gefunden wurden (größer als 0)
if max_layer_anycubic > 0 and max_z_size > 0:
    # Formatierung der Werte
    LayerAnycubic = "{:4d}".format(int(max_layer_anycubic))
    z_size = "{:.2f}".format(max_z_size - DLH)

# Öffne die Ausgabedatei und schreibe den bearbeiteten G-Code
with open(inFile, 'w', encoding="utf-8") as out:
    for line in lines:
        out.write(line)
        if "; prusaslicer_config = end" in line:
            out.write("\n; Anycubic config begin\n")
            out.write("\n; statistics = begin\n")
            out.write("; processor = begin\n")
            out.write("; model_size = " + str(x_size) + "," + str(y_size) + "," + str(z_size) + "\n")
            out.write("; print_time = " + str(Zeit) + "\n")
            # LayerAnycubic um 1 erhöhen und in die Datei schreiben
            out.write("; total_layers = " + str(int(LayerAnycubic) + 1) + "\n")
            out.write("; used_filament = " + str(Filament) + "\n")
            out.write("; processor = end\n")
            out.write("; statistics = end\n\n")
            out.write("Anycubic config End")

# print("Post-processing complete. Input file overwritten.\n")
# print("The Anycubic configuration was added following the PrusaSlicer configuration data.\n\n")
# print("Anycubic config begin\n")
# print("; statistics = begin")
# print("; processor = begin")
# print("; model_size = " + str(x_size) + "," + str(y_size) + "," + str(z_size))
# print("; print_time = " + str(Zeit))
# print("; total_layers = " + str(int(LayerAnycubic) + 1))
# print("; used_filament = " + str(Filament))
# print("; processor = end")
# print("; statistics = end\n")
# print("Anycubic config End")
# input("Press Enter to close Window")
Opublikowany : 03/02/2024 10:46 am
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE:

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

 

 

 

 

This post was modified 9 months temu 2 times by DerHolzwurm
Opublikowany : 03/02/2024 12:41 pm
karl-herbert polubić
karl-herbert
(@karl-herbert)
Illustrious Member
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Vielen Dank für die Rückmeldung!

"Viele Wege führen nach Rom"

Mit, wie Du erwähntest, Geduld und Kaffee, kann auch ein Beginner einen Weg zum Ziel finden. Es muss nicht der kürzeste oder schnellste sein, Hauptsache das Ziel ist erreicht.

Viel Spaß noch beim Python Studium!

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.

Opublikowany : 03/02/2024 1:29 pm
DerHolzwurm
(@derholzwurm)
Active Member
Topic starter answered:
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Danke dir

Du kannst ja mal bei Zeiten über den Code gucken und mir dann sagen was alles überflüssig und das Skript langsamer macht 🙂

Gruß

Opublikowany : 03/02/2024 1:33 pm
karl-herbert
(@karl-herbert)
Illustrious Member
RE: G-Code Ausgabe von Prusa bearbeiten (Info und Slice Info)

Jeden Code kann man optimieren, ich würde es aber so belassen. Es handelt sich bei Deiner Anwendung um keine Geschwindigkeitskritische Routine.

Für einen Beginner, welcher noch nie mit einer Programmiersprache konfrontiert war, jedoch eine bemerkenswerte Leistung 👍 

Wenn man einmal die Anwendungsmöglichkeiten der Python, Bash... Programmierung erkannt bzw. entdeckt hat, öffnen sich viele Ideen und warten auf die Umsetzung.

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.

Opublikowany : 04/02/2024 1:39 pm
Strona 2 / 2
Share: