PL
  • English
  • Čeština
  • Español
  • Italiano
  • Deutsch
  • Français
Login
Ostatnia aktualizacja 3 years ago
Ten artykuł jest dostępny również w tych językach: 
ENCSESDEITFR

Makra pozwalają na tworzenie warunków i obliczenia matematyczne w polach niestandardowego kodu G-code .

Język makr PrusaSlicer nie jest kompatybilny z wyrażeniami warunkowymi Slic3ra.

Konstrukty

Ewaluacja warunkowa

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

Ewaluacja wyrażenia

{<expression>}

Składnia poprzedni używanych symboli zastępczych

[variable]
lub
[variable_index]

Wewnątrz każdej z konstrukcji możliwe jest dodanie zmiennych, dostępnych pod ich nazwami

layer_z

a wektory zmiennych są dostępne w nawiasach kwadratowych

temperature[0]

odnosi się do temperatury pierwszego ekstrudera.

Wektory wielowymiarowe są dostępne jako proste zmienne wektorowe dające string (np. jeśli zmienna extruder_variable[1] dająca string [n,0] -- może być umieszczona w G-code, ale nie może być używana w operacjach arytmetycznych).

Stringi są identyfikowane przez podwójne cudzysłowia

"string"
a zwykłe wyrażenia przez ukośniki
/regex/
 Stringi nie są parsowane rekursywnie, to znaczy, że okrągłe i kwadratowe nawiasy pojawią jako wynik. Pozwala to na tworzenie konstrukcji takich, jak
{"[text in square brackets]"}

Operatory

Dozwolone są następujące operatory:

  1. Porównanie
    <, >, ==, !=, <>, <=, >=
    • Przykład:
      {if layer_height == 0.2};Do something{endif}
  2. Operacje logiczne
    and, or, not
    lub, równoznaczne,
    &&, ||, !
     
    • Przykład
      {if layer_height > 0.1 and first_layer_temperature[0] > 220};Do something{endif}
  3. Arytmetyczne
    +, -, , /
    • Przykład:
      M104 S{first_layer_temperature[0] * 2/3}
      (zauważ, że first_layer_temperature jest wektorem)
  4. Operatory trójargumentowe
    (<condition>? <cond_true>:<cond_false>)
    Muszą być zamknięte w nawiasach, aby działały.
    • Przykład:
      M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}
      To wyrażenie ustawia temperaturę ekstrudera na 230 lub 200 stopni, w zależności czy pierwsze warstwa musi być grzana powyżej 220°.
  5. Wyrażenia regularne dopasowań
    (=~ (matching), !~ (not matching))
  6. Wyrażenia regularne są zamknięte pomiędzy ukośnikami /
    • Przykład:
      {if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Printer is Prusa{endif}

Funkcje

Minimum

min(a,b)

Maksimum

max(a,b)

Rzutowanie na liczbę całkowitą

int(a)

Zaokrąglanie do liczby całkowitej

round(a)

Zaokrąglanie / dopełnianie ze spacjami: zaokrągla część ułamkową do cyfr num_decimals (w razie potrzeby dodając końcowe zera), a następnie lewa strona wypełnia spacje, tak aby liczba miała w sumie num_digits znaków (włącznie z przecinkiem dziesiętnym, jeśli jest obecny). Ostatni argument można pominąć, domyślnie zero.

digits(a, num_digits, num_decimals=0)

Zaokrąglanie / dopełnianie z zerami: jak powyżej, tylko lewa strona jest dopełniana zerami

zdigits(a, num_digits, num_decimals=0)

 

Zmienne (symbole zastępcze)

Możesz używać zmiennych wewnątrz niestandardowych skryptów i w formatce nazwy pliku wyjściowego.

Pełną listę symboli zastępczych w PrusaSlicer znajdziesz w tym artykule, pogrupowane wg zastosowania.

 

Zmienne skalarne

Wartości te są skalarami i mogą być tworzone do nich bezpośrednie odnośniki.

  • printer_notes (string)
  • layer_z (dostępna tylko w G-code zmiany warstwy)
  • layer_num (dostępna tylko w G-code zmiany warstwy)
  • toolchange_z (dostępna tylko w niestandardowym G-code dla zmiany narzędzia, od wersji 2.4.0)

Niektóre zmienne są definiowane przez złożone formuły. Na przykład jeśli perimeter_extrusion_width będzie ustawiony na zero, to weźmie wartość z extrusion_width, jeśli nie jest zerowa, w innym przypadku domyślny parametr perimeter_extrusion_width będzie obliczony z obecnej wysokości warstwy layer_height. Takie zamiany są dokonywane jedynie dla wyrażeń w nowej składni (zamkniętych w nawiasach klamrowych {}), podczas gdy wyrażenia pisane w poprzedniej składni (zamknięte w nawiasach kwadratowych []) są interpretowane dosłownie.

Wektory (zmienne tablicowe)

Zmienne te występują w formie tablic i dostęp do nich odbywa się również w takiej formie (np. temperature[0]).

  • temperature
  • first_layer_temperature
  • bed_temperature (zauważ, że jest to wektor, nawet jeśli tylko jedna wartość jest prawidłowa: bed_temperature[0])
  • first_layer_bed_temperature (tak samo, jak wyżej!)

Wektory wielowymiarowe

Te zmienne są dostępne tylko jak proste wektory i nie mogą być używane w działaniach arytmetycznych.

  • extruder_offset
  • bed_shape

Przykłady

Wieża temperatur

Możesz użyć niestandardowego "G-code przed zmianą warstwy", aby stopniowo obniżać temperaturę hotendu. Możesz użyć wyrażeń 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}

 Taki sam rezultat można osiągnąć krótszym wyrażeniem if/else/endif połączonym z interpolacją liniową:

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

Lub przy pomocy operatora trójargumentowego:

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

Szybsze nagrzewanie przed wydrukiem przy słabszej grzałce stołu

Jeśli Twoja drukarka jest wyposażona w stół wymagający więcej czasu na nagrzanie przed wydrukiem, możesz zyskać trochę czasu oczekiwania używając "Początkowego G-code", aby nagrzać stół do temperatury docelowej minus 5 stopni i rozpocząć nagrzewanie hotendu podczas kontynuacji nagrzewania stołu do temperatury docelowej:

M190 S{first_layer_bed_temperature[0] - 5} ; wait for bed temperature - 5
M140 S[first_layer_bed_temperature] ; continue bed heating using legacy [<variable>] syntax
M109 S[first_layer_temperature] ; wait for nozzle temperature

 

Czy ten artykuł był pomocny?

Komentarze

Wciąż masz pytania?

Wciąż masz pytania?

Jeśli masz pytanie dotyczące czegoś, czego nie opisaliśmy, to sprawdź dodatkowe zasoby.
A jeśli to nie działa, możesz wysłać zgłoszenie na [email protected] lub klikając poniższy przycisk.

Kontakt