ES
  • English
  • Čeština
  • Italiano
  • Deutsch
  • Polski
  • Français
Iniciar sesión
Ultima actualización 10 months ago
Este artículo está también disponible en los siguientes idiomas: 
ENCSPLDEITFR

Las macros te permiten crear condiciones y evaluar ecuaciones matemáticas en los campos de código G personalizados.

El lenguaje de macros de PrusaSlicer no es compatible con las expresiones condicionales de Slic3r.

Construye

Evaluación condicional

{if <condición_1>}<GCode_condición_1>[][{else}]{endif}

Evaluación de expresiones

{<expresión>}

Sintaxis de marcador de posición heredada

[variable]
o
[variable_index]

Dentro de cualquiera de las construcciones, se puede acceder a las variables de configuración de PrusaSlicer por sus nombres

capa_z

y se puede acceder a los elementos de las variables vectoriales utilizando llaves cuadradas

temperatura[0]

se refiere a la temperatura del primer extrusor.

Los vectores multidimensionales actualmente sólo pueden ser accedidos como una simple variable vectorial que resulta en un valor de cadena (por ejemplo, si la variable_extrusora[1]

resulta en un valor de cadena [n,0] -- puede ser publicada en g-code pero no puede ser usada en operaciones aritméticas).

Las cadenas se identifican con comillas dobles

"string"
y las expresiones regulares con barras inclinadas
/regex/
Las cadenas no se analizan de forma recursiva, es decir, las llaves y corchetes dentro de las cadenas aparecerán en la salida. Esto permite construcciones como
{"[texto entre corchetes]"}

Operadores

Se permiten los siguientes operadores:

  1. Comparación
    <, >, ==, !=, <>, <=, >=
    • Ejemplo:
      {si altura_de_capa == 0,2};Hacer algo{endif}
  2. ¡Lógica booleana
    y, o, notor
    , equivalentemente,
    &&, ||, !
    • Ejemplo {si altura_de_capa
      > 0,1 y temperatura_de_primera_capa[0] > 220}
      ;Hacer algo{endif}
  3. Aritmética
    +, -, , /
    • Ejemplo:
      M104 S{temperatura_de_primera_capa[0] * 2/3}
      (Tenga en cuenta que first_layer_temperature es un vector)
  4. Operador ternario
    (<condición>? :
    ) Es necesario encerrarlo entre paréntesis para que funcione.
    • Ejemplo:
      M104 S{ (temperatura_primera_capa[0]>220 ? 230 : 200)}
      Esta expresión establece la temperatura del extrusor en 230 o 200 dependiendo de si la primera capa debe estar por encima de 220°.
  5. Coincidencia de expresiones regulares
    (=~ (coincidente), !~ (no coincidente))
  6. Las expresiones regulares se encierran entre barras inclinadas /
    • Ejemplo:
      {if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};La impresora es Prusa{endif}

Funciones

Mínimo

min(a,b)

Máximo

max(a,b)

Conversión a entero

int(a)

Redondeo a un entero

round(a)

Redondeo / relleno con espacios: redondea la parte fraccionaria a num_decimales dígitos (añadiendo ceros al final si es necesario), luego rellena con espacios a la izquierda para que el número tenga num_digitos caracteres en total (incluyendo un punto decimal si está presente).

El último argumento puede omitirse, por defecto es cero.

digits(a, num_digits, num_decimals=0)

Redondeo / relleno con ceros: igual que el anterior, sólo que se rellena a la izquierda con ceros

zdigits(a, num_digits, num_decimals=0)

Variables (marcadores de posición)

Puedes utilizar variables dentro de los scripts presonalizados y en la plantilla del nombre del archivo de salida.

Consulta la Lista de todos los marcadores de posición de PrusaSlicer, agrupados según su ámbito de aplicación.

Variables escalares

Estos valores son escalares y pueden ser referenciados directamente.

  • printer_notes (cadena)
  • layer_z (sólo disponible en el GCode de cambio de capa)
  • layer_num (sólo disponible en el GCode de cambio de capa)
  • toolchange_z (disponible en el GCode de cambio de herramienta personalizado desde la versión 2.4.0)

Algunas variables están definidas por fórmulas complejas. Por ejemplo, el perimeter_exdtrusion_width si se deja a cero toma el valor de extrusion_width si es distinto de cero, de lo contrario se calcula un perimeter_exdtrusion_width por defecto para la layer_height actual. Estas sustituciones sólo se realizan para las expresiones de nueva sintaxis (encerradas entre llaves {}), mientras que las expresiones escritas con la antigua sintaxis de marcador de posición (encerradas entre llaves cuadradas []) se interpretan literalmente. 

Vector (variables de matriciales)

Estas variables son matrices y deben ser accedidas como tales (por ejemplo, temperatura[0]).

  • temperatura
  • first_layer_temperature
  • bed_temperature (nótese que es un vector, aunque sólo tiene sentido un valor: bed_temperature[0])
  •  first_layer_bed_temperature (¡igual que el anterior!)

Vector multidimensional

A estas variables sólo se puede acceder como vectores simples y no se pueden utilizar en expresiones aritméticas.

  • extruder_offset
  • bed_shape

Ejemplos

Torre de temperatura

Se puede utilizar el código G personalizado "Antes del cambio de capa" para disminuir lentamente las temperaturas del fusor. En primer lugar, se puede utilizar la expresión if/elseif/else:

{si layer_z < 10}M104 S265
{si layer_z < 17}M104 S260{si layer_z < 24}M104 S255{si layer_z < 31}M104 S250{si layer_z < 38}M104 S245{si layer_z < 45}M104 S240{endif}

El mismo resultado se puede conseguir con una expresión if/elseif/endif más corta junto con una interpolación lineal:

M104 S{si capa_z < 10}265{si capa_z > 45}240{else}{265+(240-265)*(capa_z-10,0)/(45-10)}{endif}

O se puede utilizar el operador ternario:

M104 S{((capa_z < 10) ? 265 : ((capa_z > 45) ? 240 : 265+(240-265)*(capa_z-10,0)/(45-10)))}

Calentamiento más rápido con calentadores de la base poco potentes antes de la impresión

Si se tienes una base que tarda mucho tiempo en alcanzar la temperatura se puede recortar un poco el tiempo de espera utilizando "Start G-code" para calentar la basehasta la temperatura de destino menos 5 grados y luego comenzar a calentar el fusor mientras la base sigue calentándose hasta el valor objetivo:

M190 S{temperatura_de_capa_primera[0] - 5} ; espera a la temperatura de la base- 5
M140 S[temperatura_de_capa_primera] ; continúa el calentamiento de la base utilizando la sintaxis heredada []

M109 S[temperatura_de_capa_primera] ; espera a la temperatura de la boquilla

 

¿Fue útil este artículo?

Comentarios

Debes iniciar sesión antes de agregar un comentario.
0
¿Todavía tienes preguntas?

¿Todavía tienes preguntas?

Si tienes alguna pregunta sobre algo que no se ha tratado aquí, comprueba nuestros recursos adicionales.
Y si eso no lo soluciona, puedes enviar una petición a [email protected] o mediante el botón que hay más abajo.

Contacta con nosotros