FR
  • English
  • Čeština
  • Español
  • Italiano
  • Deutsch
  • Polski
Se Connecter
Dernière mise à jour 2 years ago
Cette article est également disponible dans les langues suivantes : 
ENCSPLESDEIT

Les macros vous permettent de créer des conditions et d'évaluer des équations mathématiques dans les champs de G-code personnalisé.

Le langage de macro de PrusaSlicer n'est pas compatible avec les expressions conditionnelles de Slic3r.

Constructs

Évaluation conditionnelle

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

Évaluation d'expression

{<expression>}

Syntaxe d'espace réservé pour la compatibilité

[variable]
ou
[variable_index]

Dans les deux constructs, les variables de configuration PrusaSlicer sont accessibles par leurs noms

layer_z

et les éléments des variables vectorielles sont accessibles en utilisant des accolades

temperature[0]

se réfère à la température du première extrudeur.

Les tableaux multidimensionnels ne sont actuellement accessibles que sous la forme d'une simple variable sous forme de tableau produisant une chaîne de caractères (par exemple, si extruder_variable[1] produit la chaîne de caractères [n, 0] - peut être affiché dans le G-code mais ne peut pas être utilisé dans les opérations arithmétiques).

Les chaînes de caractères sont identifiées par des guillemets doubles

"chaîne de caractères"
et les expressions régulières par des barres obliques
/ regex /
. Les chaînes de caractères ne sont pas analysées de manière récursive, c'est-à-dire que des accolades et des crochets à l'intérieur des chaînes de caractères apparaîtront dans la sortie. Cela permet des constructs tels que
{"[texte entre crochets]"}

Opérateurs

Les opérateurs suivants sont autorisés :

  1. Comparaison
    <, >, ==, !=, <>, <=, >=
    • Exemple :
      {if layer_height == 0.2}; Faire quelque chose {endif}
  2. Logique booléenne
    and, or, not
    ou équivalent,
    &&, ||, !
     
    • Exemple :
      {if layer_height> 0.1 and first_layer_temperature [0]> 220}; Faire quelque chose {endif}
  3. Arithmétique
    +, -, , /
    • Exemple :
      M104 S{first_layer_temperature[0] * 2/3}
      (Notez que first_layer_temperature est un tableau)
  4. Opérateur ternaire (
    <condition>? <cond_true>:<cond_false>)
    Cela doit être placé entre parenthèses pour fonctionner.
    • Exemple :
      M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}
      Cette expression règle la température de l'extrudeur à 230 ou 200 selon que la première couche doit être supérieure à 220°.
  5. Correspondance d'expressions régulières (
    = ~ (correspondant), ! ~ (ne correspondant pas))
  6. Les expressions régulières sont placées entre des barres obliques /
    • Exemple :
      {if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Printer is Prusa{endif}

Fonctions

Minimum

min(a,b)

Maximum

max(a,b)

Conversion en entier

int(a)

Arrondir à un entier

round(a)

Arrondi/remplissage avec des espaces : arrondit la partie fractionnaire à num_decimals chiffres (en ajoutant des zéros à la fin si nécessaire), puis remplit à gauche avec des espaces afin que le nombre ait num_digits caractères au total (y compris un point décimal s'il est présent). Le dernier argument peut être omis, par défaut à zéro.

digits(a, num_digits, num_decimals=0)

Arrondi/remplissage avec des zéros : comme ci-dessus, uniquement à gauche rempli de zéros

zdigits(a, num_digits, num_decimals=0)

 

Variables (espaces réservés)

Vous pouvez utiliser des variables dans les scripts personnalisés et dans le modèle de nom de fichier de sortie.

Allez voir la Liste de toutes les variables de PrusaSlicer., regroupées en fonction de leur portée.

 

Variables scalaires

Ces valeurs sont scalaires et peuvent être directement référencées.

  • printer_notes (chaîne)
  • layer_z (uniquement disponible dans le GCode de changement de couche)
  • layer_num (uniquement disponible dans le GCode de changement de couche)
  • toolchange_z (disponible dans le G-Code de changement d'outil personnalisé depuis la version 2.4.0)

Certaines variables sont définies par des formules complexes. Par exemple, si perimeter_extrusion_width est laissée à zéro, elle prend la valeur d'extrusion_width, si non nulle, une valeur par défaut de perimeter_extrusion_width est calculée pour la layer_height courante. Ces substitutions ne sont effectuées que pour les expressions de la nouvelle syntaxe (entre accolades {}), tandis que les expressions écrites à l'aide de l'ancienne syntaxe d'espace réservé (entre accolades []) sont interprétées textuellement.

Vecteurs (variables sous forme de tableau)

Ces variables sont des tableaux et doivent être accédées en tant que telles (par exemple, temperature[0]).

  • temperature
  • first_layer_temperature
  • bed_temperature (notez qu'il s'agit d'un vecteur, même si une seule valeur a du sens : bed_temperature[0])
  • first_layer_bed_temperature (comme ci-dessus !)

Tableaux multidimensionnels

Ces variables ne sont accessibles que sous forme de tableaux simples et ne peuvent pas être utilisées dans les expressions arithmétiques.

  • extruder_offset
  • bed_shape

Exemples

Tour de température

Vous pouvez utiliser le G-code personnalisé "Avant changement de couche" pour diminuer lentement la température de la hotend. Tout d'abord, on peut utiliser l'expression 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}

 Le même résultat peut être obtenu par une expression if/else/endif plus courte avec une interpolation linéaire :

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

Ou on peut utiliser l'opérateur ternaire :

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

Chauffe plus rapide avec des chauffages de plateau faibles avant l'impression

Si vous avez un plateau qui met beaucoup de temps à atteindre sa température, vous pouvez réduire un peu le temps d'attente en utilisant le "G-code de début" pour chauffer le plateau à la température cible moins 5 degrés, puis en commençant à chauffer la hotend pendant que le plateau continue de chauffer jusqu'à la valeur cible :

M190 S{first_layer_bed_temperature[0] - 5} ; attendre la température du plateau - 5
M140 S[first_layer_bed_temperature] ; poursuivre la chauffe du plateau en utilisant la syntaxe compatible [<variable>]
M109 S[first_layer_temperature] ; attendre la température de la buse

 

Cet article vous a-t-il été utile ?

Commentaires

Vous avez encore des questions ?

Vous avez encore des questions ?

Si vous avez une question sur un sujet qui n'est pas traité ici, consultez nos ressources supplémentaires.
Et si cela ne suffit pas, vous pouvez envoyer une demande à [email protected] ou via le bouton ci-dessous.

Nous contacter