IT
  • English
  • Čeština
  • Español
  • Deutsch
  • Polski
  • Français
Login
Ultimo aggiornamento 10 months ago
Questo articolo è disponibile anche nelle seguenti lingue: 
ENCSPLESDEFR

Le macro permettono di creare condizioni e valutare equazioni matematiche nei campi del G-code personalizzato.

Il linguaggio macro di PrusaSlicer non è compatibile con le espressioni condizionali di Slic3r.

Costrutti

Valutazione condizionale

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

Valutazione dell'espressione

{<expression>}

Sintassi Legacy Placeholder

[variable]
or
[variable_index]

All'interno di entrambi i costrutti, le variabili di configurazione di PrusaSlicer possono essere accessibili attraverso i loro nomi

layer_z

e gli elementi delle variabili vettoriali possono essere raggiunti utilizzando le parentesi quadre

temperature[0]

si riferisce alla temperatura del primo estrusore.

I vettori multidimensionali possono attualmente essere accessibili solo come una semplice variabile vettoriale risultante in un valore di stringa (ad esempio, se la extruder_variable[1] risultante in un valore di stringa [n,0] -- può essere inserita nel g-code ma non può essere usata in operazioni aritmetiche).

Le stringhe sono identificate da doppie virgolette

"string"
e le espressioni regolari tramite slash
/regex/
 Le stringhe non sono analizzate ricorsivamente, cioè le parentesi graffe e quadre all'interno delle stringhe appariranno nell'output. Questo permette a costrutti come
{"[testo tra parentesi quadre]"}

Operatori

Sono ammessi i seguenti operatori:

  1. Confronto
    <, >, ==, !=, <>, <=, >=
    • Esempio:
      {if layer_height == 0.2};Do something{endif}
  2. Logica booleana
    and, or, not
    or, equivalently,
    &&, ||, !
     
    • Esempio
      {if layer_height > 0.1 and first_layer_temperature[0] > 220};Do something{endif}
  3. Aritmetico
    +, -, , /
    • Esempio:
      M104 S{first_layer_temperature[0] * 2/3}
      (Notare che first_layer_temperature è un vettore)
  4. Operatore ternario
    (<condition>? <cond_true>:<cond_false>)
    Questo ha bisogno di essere racchiuso tra parentesi per funzionare.
    • Esempio:
      M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}
      Questa espressione imposta la temperatura dell'estrusore a 230 o 200 a seconda che il primo strato debba essere superiore a 220°.
  5. Corrispondenza dell'espressione regolare
    (=~ (corrispondente), !~ (non corrispondente))
  6. Le espressioni regolari sono racchiuse tra slash /
    • Esempio:
      {if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Printer is Prusa{endif}

Funzioni

Minimum

min(a,b)

Maximum

max(a,b)

Casting a intero

int(a)

Arrotondamento a un intero

round(a)

Arrotondamento / riempimento con spazi: arrotonda la parte frazionaria a num_decimali di cifre (aggiungendo gli zeri finali se necessario), poi riempie a sinistra con spazi in modo che il numero abbia num_digit caratteri in totale (incluso un punto decimale se presente). L'ultimo argomento può essere omesso, il valore predefinito è zero.

digits(a, num_digits, num_decimals=0)

Arrotondamento / imbottitura con zeri: come sopra, solo riempito a sinistra con zeri

zdigits(a, num_digits, num_decimals=0)

 

Variabili (placeholder)

È possibile utilizzare le variabili all'interno degli script personalizzati e nel template del nome del file di output.

Controllare L'elenco di tutti i placeholder di PrusaSlicer, raggruppati in base al loro scopo.

 

Variabili scalari

Questi valori sono scalari e possono essere referenziati direttamente.

  • printer_notes (string)
  • layer_z (disponibile solo nel GCode di cambio di livello)
  • layer_num (disponibile solo nel GCode di cambio di livello)
  • toolchange_z (disponibile nel GCode di cambio attrezzo personalizzato dalla versione 2.4.0)

Alcune variabili sono definite da formule complesse. Per esempio, la variabile perimeter_extrusion_width se lasciata a zero prende il valore di extrusion_width se questa è non zero, altrimenti viene calcolato un perimeter_extrusion_width predefinito per l'attuale layer_height. Queste sostituzioni sono fatte solo per le espressioni della nuova sintassi (racchiuse tra parentesi graffe {}), mentre le espressioni scritte usando la vecchia sintassi segnaposto (racchiuse tra parentesi quadre []) sono interpretate alla lettera.

Vettore (array di variabili)

Queste variabili sono array e devono essere accessibili come tali (ad esempio temperature[0]).

  • temperature
  • first_layer_temperature
  • bed_temperature (Si noti che questo è un vettore, anche se solo un valore ha senso: bed_temperature[0])
  • first_layer_bed_temperature (come sopra!)

Vettore multidimensionale

Queste variabili sono accessibili solo come vettori semplici e non possono essere usate in espressioni aritmetiche.

  • extruder_offset
  • bed_shape

Esempi

Torre di temperatura

È possibile usare il G-code personalizzato "Before layer change" per diminuire lentamente le temperature dell'hotend. Prima, bisogna usare l'espressione 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}

 Lo stesso risultato può essere ottenuto con un'espressione if/else/endif più breve insieme a un'interpolazione lineare:

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

Oppure si può usare l'operatore ternario:

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

Riscaldamento più rapido con riscaldatori del piano deboli prima della stampa

Se hai un piano che impiega molto tempo a raggiungere la temperatura, puoi risparmiare un po' di tempo di attesa usando "Start G-code" per riscaldare il piano alla temperatura di destinazione meno 5 gradi e poi iniziare a riscaldare l'estremità calda mentre il piano continua a riscaldarsi al valore target:

M190 S{first_layer_bed_temperature[0] - 5} ; attendere la temperatura del piano - 5
M140 S[first_layer_bed_temperature] ; continuare il riscaldamento del piano con sintassi legacy [<variable>]
M109 S[first_layer_temperature] ; attendere la temperatura dell'ugello

 

Questo articolo è stato utile?

Commenti

Devi aver effettuato l'accesso prima di aggiungere un commento.
0
Hai ancora delle domande?

Hai ancora delle domande?

Se hai una domanda su qualcosa che non è trattato qui, dai un'occhiata alle nostre risorse aggiuntive.
E se questo non dovesse funzionare, è possibile inviare una richiesta a [email protected] o tramite il pulsante qui sotto.

Contattaci