DE
  • English
  • Čeština
  • Español
  • Italiano
  • Polski
  • Français
Login
Zuletzt aktualisiert 2 years ago
Dieser Artikel ist auch in folgenden Sprachen verfügbar: 
ENCSPLESITFR

Makros ermöglichen die Erstellung von Bedingungen und die Auswertung von mathematischen Gleichungen in den benutzerdefinierten G-Code-Feldern.

Die PrusaSlicer-Makrosprache ist nicht kompatibel mit Slic3r-Bedingungsausdrücken.

Konstrukte

Bedingte Auswertung

{if <Bedingung_1>}<GCode_Bedingung_1>[][{else}<GCode_Sonst>]{endif}

Ausdruckauswertung

{<Ausdruck>}

Syntax der Legacy-Platzhalter

[Variable]
oder
[Variable_index]

In beiden Konstrukten kann auf die PrusaSlicer-Konfigurationsvariablen über deren Namen zugegriffen werden

layer_z

und auf Elemente von Vektorvariablen kann mit Hilfe von eckigen Klammern zugegriffen werden

temperature[0]

bezieht sich auf die Temperatur des ersten Extruders.

Mehrdimensionale Vektoren können derzeit nur als einfache Vektorvariable angesprochen werden, die einen String-Wert ergibt (z.B. wenn die extruder_variable[1] den String-Wert [n,0] ergibt -- kann in g-code ausgegeben werden, kann aber nicht in arithmetischen Operationen verwendet werden).

Strings werden durch doppelte Anführungszeichen

"string"
und reguläre Ausdrücke durch Schrägstriche
/regex/
 Strings werden nicht rekursiv geparst, d.h. geschweifte und eckige Klammern innerhalb von Strings werden in der Ausgabe erscheinen. Dies ermöglicht Konstrukte wie
{"[Text in eckigen Klammern]"}

Operatoren

Die folgenden Operatoren sind erlaubt:

  1. Vergleich
    <, >, ==, !=, <>, <=, >=
    • Beispiel:
      {if layer_height == 0.2};Tu etwas{endif}
  2. Boolesche Logik
    and, or, not
    or, equivalently,
    &&, ||, !
     
    • Beispiel
      {if layer_height > 0.1 and first_layer_temperature[0] > 220};Tu etwas{endif}
  3. Arithmetik
    +, -, , /
    • Beispiel:
      M104 S{first_layer_temperature[0] * 2/3}
      (Beachten Sie, dass first_layer_temperature ein Vektor ist)
  4. Ternärer Operator
    (<Bedingung>?<wenn_wahr>:<wenn_falsch>)
    Dieser muss in Klammern eingeschlossen werden, um zu funktionieren.
    • Beispiel:
      M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}
      Dieser Ausdruck setzt die Extrudertemperatur entweder auf 230 oder 200, je nachdem, ob die erste Schicht über 220° sein muss.
  5. Regulärer Ausdruck, der
    (=~ (passend), !~ (nicht passend))
  6. Regelmäßige Ausdrücke werden in Schrägstriche / eingeschlossen
    • Beispiel:
      {if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Drucker ist Prusa{endif}

Funktionen

Minimum

min(a,b)

Maximum

max(a,b)

Casting auf Ganzzahl

int(a)

Runden / Auffüllen mit Nullen: wie oben, nur links mit Nullen gefüllt

zdigits(a, num_digits, num_decimals=0)

Variablen (Platzhalter)

Sie können Variablen innerhalb von eigen Skripten und in der Vorlage für den Namen der Ausgabedatei verwenden.

Sehen Sie sich die Liste aller PrusaSlicer Platzhalter an, gruppiert nach ihrem Anwendungsbereich.

Skalare Variablen

Diese Werte sind skalar und können direkt referenziert werden.

  • printer_notes (String)
  • layer_z (nur verfügbar im Schichtwechsel GCode)
  • layer_num (nur verfügbar im Schichtwechsel GCode)
  • toolchange_z (verfügbar im benutzerdefinierten Werkzeugwechsel GCode seit Version 2.4.0)

Einige Variablen werden durch komplexe Formeln definiert. Zum Beispiel die perimeter_extrusion_width wenn auf Null gesetzt, nimmt den Wert von extrusion_width wenn ungleich Null, sonst die Standard perimeter_extrusion_width wird berechnet für die aktuelle layer_height. Diese Ersetzungen werden nur für die Ausdrücke der neuen Syntax (eingeschlossen in geschweiften Klammern {}) vorgenommen, während die Ausdrücke, die mit der alten Platzhalter-Syntax (eingeschlossen in eckigen Klammern []) geschrieben wurden, wortwörtlich interpretiert werden.

Vektor (Array-Variablen)

Diese Variablen sind Arrays und müssen als solche angesprochen werden (z.B. temperature[0]).

  • temperature
  • first_layer_temperature
  • bed_temperature (Beachten Sie, dass dies ein Vektor ist, auch wenn nur ein Wert sinnvoll ist: bed_temperature[0])
  • first_layer_bed_temperature (wie oben!)

Mehrdimensionaler Vektor

Diese Variablen können nur als einfache Vektoren angesprochen werden und können nicht in arithmetischen Ausdrücken verwendet werden.

  • extruder_offset
  • bed_shape

Beispiele

Temperaturturm

Sie können den benutzerdefinierten G-Code "Vor Schichtwechsel" verwenden, um die Temperaturen am Hot End langsam zu senken. Zunächst kann man den if/elseif/else-Ausdruck verwenden:

{if layer_z < 10}M104 S265
{elsif layer_z <17}M104 S260
{elsif layer_z < 24}M104 S255
{elsif layer_z < 31}M104 S250
{elsif layer_z < 38}M104 S245
{elsif layer_z < 45}M104 S240
{endif}

 Das gleiche Ergebnis kann durch einen kürzeren if/else/endif-Ausdruck zusammen mit einer linearen Interpolation erreicht werden:

M104 S{if layer_z < 10}265{elsif layer_z > 45}240{else}265+(240-265)(layer_z-10.0)/(45-10){endif}

Oder man kann den ternären Operator verwenden:

M104 S{(layer_z < 10) ? 265 : (layer_z > 45) ? 240 : 265+(240-265)(layer_z-10.0)/(45-10)}

Schnelleres Aufheizen mit schwachen Bettheizungen vor dem Druck

Wenn Sie ein Bett haben, das sehr lange braucht, um auf Temperatur zu kommen, können Sie ein wenig Wartezeit einsparen, indem Sie mit "Start G-Code" das Bett auf die Zieltemperatur minus 5 Grad aufheizen und dann mit dem Aufheizen des Hot End beginnen, während das Bett weiter auf den Zielwert aufheizt:

M190 S{first_layer_bed_temperature[0] - 5} ; Warten auf Betttemperatur - 5
M140 S[first_layer_bed_temperature] ; Bettheizung fortsetzen mit Legacy [<variable>] syntax
M109 S[first_layer_temperature] ; Warten auf Düsentemperatur

 

War dieser Artikel hilfreich?

Kommentare

Sie haben noch Fragen?

Sie haben noch Fragen?

Wenn Sie eine Frage zu etwas haben, das hier nicht behandelt wird, sehen Sie sich unsere zusätzlichen Ressourcen an.
Und wenn das nicht ausreicht, können Sie über die Schaltfläche unten oder an die [email protected] eine Anfrage senden.

Kontakt