Las macros te permiten crear condiciones y evaluar ecuaciones matemáticas en los campos de código G personalizados.
{if <condición_1>}<GCode_condición_1>[][{else}]{endif}
{<expresión>}
[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]"}
Se permiten los siguientes operadores:
<, >, ==, !=, <>, <=, >=
{si altura_de_capa == 0,2};Hacer algo{endif}
y, o, notor
, equivalentemente, &&, ||, !
> 0,1 y temperatura_de_primera_capa[0] > 220}
;Hacer algo{endif}+, -, , /
M104 S{temperatura_de_primera_capa[0] * 2/3}
(Tenga en cuenta que first_layer_temperature es un vector)(<condición>? :
) Es necesario encerrarlo entre paréntesis para que funcione.
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°.(=~ (coincidente), !~ (no coincidente))
{if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};La impresora es Prusa{endif}
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)
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.
Estos valores son escalares y pueden ser referenciados directamente.
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.
Estas variables son matrices y deben ser accedidas como tales (por ejemplo, temperatura[0]).
A estas variables sólo se puede acceder como vectores simples y no se pueden utilizar en expresiones aritméticas.
Ejemplos
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)))}
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
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.