Makros ermöglichen die Erstellung von Bedingungen und die Auswertung von mathematischen Gleichungen in den benutzerdefinierten G-Code-Feldern.
{if <Bedingung_1>}<GCode_Bedingung_1>[][{else}<GCode_Sonst>]{endif}
{<Ausdruck>}
[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]"}
Die folgenden Operatoren sind erlaubt:
<, >, ==, !=, <>, <=, >=
{if layer_height == 0.2};Tu etwas{endif}
and, or, not
or, equivalently, &&, ||, !
{if layer_height > 0.1 and first_layer_temperature[0] > 220};Tu etwas{endif}
+, -, , /
M104 S{first_layer_temperature[0] * 2/3}
(Beachten Sie, dass first_layer_temperature ein Vektor ist)(<Bedingung>?<wenn_wahr>:<wenn_falsch>)
Dieser muss in Klammern eingeschlossen werden, um zu funktionieren.
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.(=~ (passend), !~ (nicht passend))
{if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Drucker ist Prusa{endif}
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)
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.
Diese Werte sind skalar und können direkt referenziert werden.
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.
Diese Variablen sind Arrays und müssen als solche angesprochen werden (z.B. temperature[0]).
Diese Variablen können nur als einfache Vektoren angesprochen werden und können nicht in arithmetischen Ausdrücken verwendet werden.
Beispiele
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)}
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
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.