Recuperar impresión fallida en Klipper
Cómo recuperar una impresión fallida en Klipper: guía completa con SET_KINEMATIC_POSITION, BLTouch/ABL, edición de G-Code y macros de rescate.
No hay nada que duela más que ver una pieza al 80% y que, de repente, se produzca un atasco, se acabe el filamento o un gato decida que el cable de alimentación es un juguete.
Si no has movido la pieza de la cama, respira hondo. Aquí tienes posibles caminos de cómo resucitar tu impresión.
Antes de hacer nada, asegúrate de que:
La pieza sigue pegada: Si se ha despegado o la has movido, apaga y vámonos. No hay alineación que salve eso.
No hagas Home (G28) completo: Si haces un Home en Z con la pieza en la cama, el cabezal chocará. Haremos el homing con "trampas".
Mantén la temperatura de la cama: Si la cama se enfría, la pieza se contraerá y se despegará. Usa el panel web o el comando
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60(ajusta elTARGETa la temperatura que usabas).
¿Todavía tienes el homing?
Si la impresora se ha pausado o detenido pero no ha perdido el posicionamiento (los motores siguen activos), prueba primero lo más sencillo:
Intenta hacer Resume desde Mainsail/Fluidd. A veces es suficiente.
Si el Resume falla, comprueba que el
idle_timeoutno haya desactivado los motores. Añade esto a tuprinter.cfgpara evitarlo:
[idle_timeout]
timeout: 3600 ; 1 hora — ajusta según tus necesidadesO envía por consola mientras trabajas:
SET_IDLE_TIMEOUT TIMEOUT=4200Si el resume sigue fallando, sigue leyendo.
Preparación previa (hazlo ANTES de que falle una impresión)
Esta sección es para configurar Klipper correctamente antes de que ocurra un problema. Si ya tienes una impresión fallida, continúa al siguiente paso.
Guardar la malla de cama (esencial con BLTouch/CRTouch/ABL)
Si usas nivelación automática, guarda siempre tu malla con un nombre, nunca uses el perfil default. Si Klipper se reinicia, el perfil default puede desaparecer:
O desde la UI de Klipper (Mainsail): ve a HEIGHTMAP → CURRENT MESH, haz clic en el nombre default y cámbialo.
Macros de rescate (añade a macros.cfg)
macros.cfg)Instala estas macros antes de que las necesites. Te ahorrarán tiempo y errores cuando estés en modo pánico:
FORCE_MOVE_Z mueve en milímetros reales sin límites de software. Empieza siempre con valores pequeños (0.1–1mm) y verifica visualmente antes de continuar. Un valor incorrecto puede dañar la pieza o la impresora.
Macro de inicio para impresión rescatada (con BLTouch/ABL)
Esta macro sustituye a tu START_PRINT habitual: solo hace home en X/Y, carga la malla guardada y no toca el eje Z:
Proceso de recuperación
Paso 1 — Determinar la altura de fallo (Z)
Necesitamos saber exactamente en qué milímetro se quedó la impresora.
Método calibre (más preciso): Mide la altura de la pieza impresa con un calibre digital. Si mide 42.4 mm, esa es tu referencia.
Método visual: Busca una geometría reconocible en la pieza (una ranura, un cambio de forma) y búscala en la previsualización del G-code del laminador para identificar la altura exacta.
Método Klipper: Mueve el cabezal sobre una zona terminada de la pieza y baja el eje Z de 0.1 en 0.1 hasta que la boquilla casi toque la última capa. Lee el valor de Z en la consola.
Es mejor quedarse 0.1–0.2 mm corto (que la boquilla imprima ligeramente en el aire al principio) que pasarse y que el cabezal choque y arranque la pieza de la cama.
Paso 2 — Establecer el home de Z sin mover la impresora
Aquí hay dos métodos dependiendo de si tienes BLTouch/ABL o no:
Este método usa el sensor ABL para hacer un home "falso" de Z sobre un objeto plano colocado encima de la pieza:
Ten el botón de parada de emergencia a mano en todo momento.
Coloca un objeto rígido, plano y fino (un libro de tapa dura, una lámina metálica) encima de tu impresión. El BLTouch necesita apoyarse en él.
Ejecuta
G28 X Ypara hacer home solo en X e Y.Ejecuta
G28 Z(o "Home Z" desde la UI). El sensor tocará el libro, no la cama. Klipper cree que ha hecho home en Z, pero en realidad está sobre tu pieza.Retira el objeto con cuidado.
Amplía el timeout para trabajar sin prisa:
IDLE_TO_70MINMueve el cabezal cerca de la última capa usando
FORCE_MOVE_Z DISTANCE=-XX(valores pequeños, verifica visualmente con un papel).Cuando el papel roza la boquilla con algo de fricción, estás en la altura correcta.
Establece la altura real:
RESCUE_Z Z=42.4(usa tu medida).
Si no tienes sensor ABL o prefieres el método directo:
Haz home en X e Y:
G28 X Y(nunca en Z).Mueve el cabezal manualmente sobre la pieza y baja en pequeños incrementos hasta estar a ~0.2 mm de la última capa.
Engaña a Klipper sobre la posición Z:
Sustituye 42.4 por tu altura medida. Klipper "cree" que está en esa altura y ya puedes moverte con seguridad.
O usa la macro de rescate:
Paso 3 — Editar el G-Code
Aquí ocurre la "magia". Descarga el archivo .gcode desde Mainsail (sección G-CODE FILES) y ábrelo con un editor de texto (VS Code, Notepad++):
3.1 — Encontrar la altura
Usa Ctrl+F para buscar el valor de Z donde falló la impresión. Si la altura es 42.4 mm, busca Z42.4, Z42.39, etc., hasta encontrar la línea exacta o la más cercana por debajo.
3.2 — Eliminar el G-code ya impreso
Borra todo desde el inicio hasta justo antes de la capa donde se quedó. Mantén únicamente:
La llamada al macro de inicio (la cambiarás en el siguiente punto)
El G-code desde la última capa hacia el final
3.3 — Sustituir el macro de inicio
Cambia la llamada a START_PRINT por START_PRINT_RESCUE:
3.4 — Corregir el contador de extrusión
Crítico si tu laminador usa extrusión absoluta (la mayoría: Cura, OrcaSlicer, etc.)
Si empiezas en mitad del archivo, el G-code tendrá algo como G1 E1500.5. Si tu impresora cree que está en E0, intentará empujar 1.5 metros de filamento de golpe.
Solución: Justo antes de la primera línea de impresión, añade:
3.5 — Restaurar el ventilador
Busca el último M106 S... antes del punto de reinicio e insértalo después del G92 E anterior. Alternativamente, ajústalo manualmente desde la UI antes de imprimir.
3.6 — Limpiar la malla activa
Para evitar conflictos con cualquier malla cargada previamente, añade al inicio del G-code editado:
3.7 — Bloque de seguridad para el movimiento inicial
Esto evita que el cabezal se mueva en línea recta desde su posición actual hasta el primer punto de la capa (riesgo de colisión lateral):
Paso 4 — Reinicio de impresión seguro
Calienta el nozzle a temperatura de impresión.
Limpia bien la punta de cualquier resto de filamento.
Carga el archivo G-code modificado e inicia la impresión.
Vigila los primeros minutos para asegurarte de que la nueva capa se adhiere correctamente a la impresión existente y no hay desplazamiento.
Método alternativo — Reslicear con 0 capas inferiores
Si conservas el proyecto de tu laminador (archivo de Cura, OrcaSlicer, etc.), este método puede ser más limpio que editar el G-code:
En el laminador, baja el objeto en el eje Z hasta que el inicio de la pieza quede en la altura exacta donde falló. Ejemplo: si falló a 36.95 mm, el objeto debe estar 36.95 mm por debajo de la cama (Z negativo).
Elimina las capas inferiores (Bottom Layers = 0 en Cura: sección Top/Bottom → Bottom Thickness).
Lamina normalmente.
En el G-code generado, sustituye
START_PRINTporSTART_PRINT_RESCUE(como en el paso 3.3).En la impresora, sigue el proceso de los pasos 1 y 2 para establecer la posición Z.
En el paso final, usa
SET_Z0en lugar deRESCUE_Z(porque el nuevo G-code empieza en Z=0 relativo).
Este método puede dar problemas si el infill o los perímetros no se alinean exactamente con la impresión existente. Para piezas funcionales o con geometría compleja, el método de edición de G-code suele dar mejores resultados.
Referencias y recursos
Última actualización
