Page cover

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.

¿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:

  1. Intenta hacer Resume desde Mainsail/Fluidd. A veces es suficiente.

  2. Si el Resume falla, comprueba que el idle_timeout no haya desactivado los motores. Añade esto a tu printer.cfg para evitarlo:

[idle_timeout]
timeout: 3600  ; 1 hora — ajusta según tus necesidades

O envía por consola mientras trabajas:

SET_IDLE_TIMEOUT TIMEOUT=4200
  1. Si 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)

Instala estas macros antes de que las necesites. Te ahorrarán tiempo y errores cuando estés en modo pánico:

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

1

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.

2

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:

  1. Ten el botón de parada de emergencia a mano en todo momento.

  2. 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.

  3. Ejecuta G28 X Y para hacer home solo en X e Y.

  4. 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.

  5. Retira el objeto con cuidado.

  6. Amplía el timeout para trabajar sin prisa: IDLE_TO_70MIN

  7. Mueve el cabezal cerca de la última capa usando FORCE_MOVE_Z DISTANCE=-XX (valores pequeños, verifica visualmente con un papel).

  8. Cuando el papel roza la boquilla con algo de fricción, estás en la altura correcta.

  9. Establece la altura real: RESCUE_Z Z=42.4 (usa tu medida).

3

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

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):

4

Paso 4 — Reinicio de impresión seguro

  1. Calienta el nozzle a temperatura de impresión.

  2. Limpia bien la punta de cualquier resto de filamento.

  3. Carga el archivo G-code modificado e inicia la impresión.

  4. 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:

  1. 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).

  2. Elimina las capas inferiores (Bottom Layers = 0 en Cura: sección Top/Bottom → Bottom Thickness).

  3. Lamina normalmente.

  4. En el G-code generado, sustituye START_PRINT por START_PRINT_RESCUE (como en el paso 3.3).

  5. En la impresora, sigue el proceso de los pasos 1 y 2 para establecer la posición Z.

  6. En el paso final, usa SET_Z0 en lugar de RESCUE_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

CNC Kitchen — HOW TO: Resume a failed 3D print
Emily The Engineer — How to Resume an Unfinished/Failed 3D Print

Última actualización