Macra umožňují vytvářet podmínky a vyhodnocovat matematické rovnice v sekcích vlastního G-codu.
Konstrukt
Podmíněné vyhodnocení
{if }[][{else}]{endif}
Vyhodnocení výrazu
{}
Starší syntaxe zástupných znaků
[variable]
nebo [variable_index]
Uvnitř každého konstruktu mohou být konfigurační proměnné PrusaSliceru dostupné prostřednictvím jejich jmen
layer_z
a elementy vektorových proměnných mohou být zpřístupněny použitím hranatých závorek
teplota[0]
odkazuje na teplotu prvního extruderu.
Multidimenzionální vektory mohou být přístupné pouze jako jednoduché vektorové proměnné odkazující na řetězec (např. když extruder_variable[1] ukazující na hodnotu řetězce [n,0] -- může být odeslán v G-code ale nemůže být použit v aritmetických operacích).
Řetězce jsou identifikované dvojitými uvozovkami "řetězec"
a pravidelné výrazy lomítky/regex/
Řetězce nejsou parsované rekurzívně tj. na výstupu se objeví složené i hranaté závorky uvnitř řetězců. To umožňuje konstrukty jako {"[text v hranatých závorkách]"}
Operátory
Povoleny jsou následující operátory:
- Porovnání
<, >, ==, !=, <>, <=, >=
- Příklad:
{if layer_height == 0.2};Proveď něco{endif}
- Příklad:
- Booleova logika
and, or, not
nebo ekvivalentně,&&, ||, !
- Příklad
{if layer_height > 0.1 and first_layer_temperature[0] > 220};Proveď něco{endif}
- Příklad
- Aritmetika
+, -, , /
- Příklad:
M104 S{first_layer_temperature[0] * 2/3}
(Všimněte si, že first_layer_temperature je vektor)
- Příklad:
- Ternární operátor
(? :)
Aby to fungovalo, musí to být uzavřené v závorkách.- Příklad:
M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}
Tento výraz nastaví teplotu extruderu na 230 nebo na 200 v závislosti na tom zda první vrstva má být nad 220°.
- Příklad:
- Regulární výraz shody
=~ (shoda), !~ (neshoda)
- Regulární výrazy jsou uzavřeny v lomítkách /
- Příklad:
{if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Tiskárna je Prusa{endif}
- Příklad:
Funkce
Minimum min(a,b)
Maximum max(a,b)
Zaokrouhlení na celé číslo int(a)
Zaokrouhlení / doplnění mezerami: zaokrouhlí zlomkovou část na num_decimals číslice (v případě potřeby přidá na konec nuly) a poté doplní mezerami tak, aby číslo mělo stejný počet znaků num_digits (včetně desetinné tečky, pokud je přítomna). Poslední příkaz lze vynechat, výchozí hodnota je nula. digits(a, num_digits, num_decimals=0)
Zaokrouhlení / doplnění nulami: stejné jako výše, pouze ponechané vyplněné nulami. zdigits(a, num_digits, num_decimals=0)
Proměnné (zástupné symboly)
Můžete použít proměnné uvnitř skriptů a v šabloně názvu výstupního souboru.
Zkontrolujte Seznam všech zástupných symbolů PrusaSlicer, sdružené do skupin podle jejich zaměření
Skalární proměnné
Tyto hodnoty jsou skalární a může být na ně přímý odkaz.
- printer_notes (string)
- layer_z (přístupný pouze v G-code změny vrstvy )
- layer_num (přístupný pouze v G-code změny vrstvy )
- toolchange_z (k dispozici ve vlastním GCode toolchange od verze 2.4.0)
Některé proměnné jsou definovány složitými vzorci. Například perimeter_extrusion_width, pokud je ponechán na nule, nabývá hodnoty extrusion_width, pokud není nulová, jinak se pro aktuální perimeter_extrusion_width vypočítá výchozí layer_height. Tyto záměny se provádějí pouze pro výrazy nové syntaxe (uzavřené ve složených závorkách {}), zatímco výrazy zapsané pomocí staré syntaxe zástupných znaků (uzavřené v hranatých závorkách []) se interpretují doslovně.
Vektor (proměnné typu pole)
Tyto proměnné jsou polemi a musí být přístupné jako (např. temperature[0]).
- temperature
- first_layer_temperature
- bed_temperature (Všimněte si, že se jedná o vektor, i když smysl má pouze jedna hodnota: bed_temperature[0])
- first_layer_bed_temperature (stejné jako výše!)
Multidimenzionální vektor
Tyto proměnné mohou být přístupné pouze jako jednoduché vektory a nemohou být použité v aritmetických výrazech.
- extruder_offset
- bed_shape
Příklady
Teplotní věž
"Před změnou vrstvy" můžete použít uživatelský G-code k pomalému snižování teploty trysky. Jako první lze použít výraz if/elseif/else:
{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}
Stejného výsledku lze dosáhnout kratším výrazem if/else/endif spolu s lineární interpolací:
M104 S{if layer_z < 10}265{elsif layer_z > 45}240{else} 265+(240-265)*(layer_z-10.0)/(45-10)}{endif}
Nebo lze také použít ternární operátor:
M104 S{((layer_z < 10) ? 265 : ((layer_z > 45) ? 240 : 265+(240-265)*(layer_z-10.0)/(45-10))}
Rychlejší zahřátí pomocí slabého vyhřívání podložky před tiskem
Pokud máte podložku, které trvá velmi dlouho, než se zahřeje na požadovanou teplotu, můžete si čekání trochu zkrátit tím, že pomocí "Start G-codu" zahřejete podložku na cílovou teplotu minus 5 stupňů a pak začnete zahřívat hot end, zatímco podložka pokračuje v zahřívání na cílovou hodnotu:
M190 S{first_layer_bed_temperature[0] - 5} ;počkejte na teplotu podložky - 5
M140 S[first_layer_bed_temperature] ; pokračovat v zahřívání podložky [] syntax
M109 S[first_layer_temperature] ; počkejte na teplotu trysky