CS
  • English
  • Español
  • Italiano
  • Deutsch
  • Polski
  • Français
Přihlásit
Poslední aktualizace 3 years ago
Tento článek je také dostupný v následujících jazycích: 
ENPLESDEITFR

Macra umožňují vytvářet podmínky a vyhodnocovat matematické rovnice v sekcích vlastního G-codu.

PrusaSlicer macro jazyk není kompatibilní s podmíněnými výrazy Slic3ru.

Konstrukt

Podmíněné vyhodnocení

{if <condition_1>}<GCode_condition_1>[][{else}<GCode_else>]{endif}

Vyhodnocení výrazu

{<expression>}

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:

  1. Porovnání
    <, >, ==, !=, <>, <=, >=
    • Příklad:
      {if layer_height == 0.2};Proveď něco{endif}
  2. Booleova logika
    and, or, not
    nebo ekvivalentně,
    &&, ||, !
     
    • Příklad
      {if layer_height > 0.1 and first_layer_temperature[0] > 220};Proveď něco{endif}
  3. Aritmetika
    +, -, , /
    • Příklad:
      M104 S{first_layer_temperature[0] * 2/3}
      (Všimněte si, že first_layer_temperature je vektor)
  4. Ternární operátor
    (<podmínka>? <podmínka_pravda>:<podmínka_nepravda>)
    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°.
  5. Regulární výraz shody
    =~ (shoda), !~ (neshoda)
  6. Regulární výrazy jsou uzavřeny v lomítkách /
    • Příklad:
      {if printer_notes=~/./};Tiskárna je Prusa{endif}

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 [<variable>] syntax
M109 S[first_layer_temperature] ; počkejte na teplotu trysky

 

Byl tento článek užitečný?

Komentáře

Stále nemáte jasno?

Stále nemáte jasno?

Pokud nemůžete najít odpověď na vaši otázku, projděte si naše další materiály na webu.
A pokud nenajdete odpověď, pošlete nám zprávu na [email protected] nebo přes tlačítko níže.

Kontaktujte nás