Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Cambiar mensajes de error Marlin
#1
Buenas,
Me gustaría saber si se puede cambiar Marlin para que cuando surja un error en la impresora, y haya que reiniciar la, además de salir el mensaje de error, ¿cabría la posibilidad de llevarla a orígen y que, además del mensaje del error, muestre en la pantalla por cual valor de Z se ha quedado?
Gracias
Citar
#2
Hola, en principio lo que indicas no sería demasiado difícil de implementar para los mensajes, pero no estoy muy seguro de que se pueda realizar el movimiento al origen si se ha producido un error irrecuperable.
Estas situaciones de error se finalizan con la llamada a la función lcd_kill_screen(), que se encuentra en el archivo correspondiente al tipo de pantalla que se tenga habilitada.
Para las de tipo gráfico, en ultralcd_impl_DOGM.h y es esta:

// The kill screen is displayed for unrecoverable conditions
void lcd_kill_screen() {
 #if ENABLED(LIGHTWEIGHT_UI)
   ST7920_Lite_Status_Screen::clear_text_buffer();
 #endif
 const uint8_t h4 = u8g.getHeight() / 4;
 u8g.firstPage();
 do {
   lcd_setFont(FONT_MENU);
   u8g.setPrintPos(0, h4 * 1);
   lcd_print_utf(lcd_status_message);
   u8g.setPrintPos(0, h4 * 2);
   lcd_printPGM_utf(PSTR(MSG_HALTED));
   u8g.setPrintPos(0, h4 * 3);
   lcd_printPGM_utf(PSTR(MSG_PLEASE_RESET));
 } while (u8g.nextPage());
}


Para las de tipo texto, en ultralcd_impl_HD44780.h y es esta:

void lcd_kill_screen() {
 lcd.setCursor(0, 0);
 lcd_print_utf(lcd_status_message);
 #if LCD_HEIGHT < 4
   lcd.setCursor(0, 2);
 #else
   lcd.setCursor(0, 2);
   lcd_printPGM_utf(PSTR(MSG_HALTED));
   lcd.setCursor(0, 3);
 #endif
 lcd_printPGM_utf(PSTR(MSG_PLEASE_RESET));
}


Solo habría que colocar en la que corresponda, las lineas de código necesarias para mostrar los mensajes que se quiera queden en pantalla hasta el reinicio de la impresora.
También se puede incluir una llamada al comando G28, pero como digo no sé si sería procesada o no. Naturalmente, siempre que fuese posible realizar dicho movimiento.
Citar
#3
Gracias,

Como puedo distinguir si mi lcd es de tipo gráfico o texto?

Por otro lado no se mucho de la estructura de Marlin, imagino que tendré que hacer un "lcd_print" Con la función que muestra la última capa que se está imprimiendo antes del error, donde voy a buscar esa función?
Sabría decirme como hacerlo? Gracias

Por otro lado el comando g28 tendría que ponerlo detrás del error, quizás no en la parte del lcd verdad?

Mi error más frecuente es el de temperatura en el hotend.
Citar
#4
Hola, para diferenciarlas hay que fijarse en como muestran la información.
Las pantallas alfanuméricas solo lo pueden hacer mediante caracteres formados por bloques de puntos separados unos de otros. Es decir, solo se puede mostrar información dentro de cada bloque.
La más habitual es el modelo LCD2004, que tienen 4 líneas de 20 caracteres cada una (4x20 bloques). Por tus mensajes creo que tienes una Kossel Linear Plus y me parece que es este tipo la que lleva.
Por el contrario, las pantallas gráficas representan la información directamente iluminando y apagando cada punto individual de la pantalla, por lo que pueden representar cualquier cosa que sea posible mediante puntos.
La más común es el modelo LCD12864, que tiene una matriz de 128x64 puntos.
La información de Marlin que te he facilitado, es la que conozco sin más investigación y un punto de comienzo para seguir profundizando en el tema, pero yo no puedo hacerlo por ti.
Era lo que preguntabas y por eso te la he facilitado, pero no es una solución para los frecuentes errores de temperatura que estás teniendo y que no son normales. Deberías intentar solucionarlos.
Citar
#5
Gracias por todo, ya he solucionado el problema, la resistencia calefactable estaba dando por saco y he comprado una nueva.

Este hilo solo lo he abierto, para que si surjen errores, y hay que reiniciar, en la pantalla puedas mostrar las coordenadas en las que se había quedado el cabezal.

Me parecía interesante saber el punto exacto, y no tener que andar con calibre midiendo la capa etc.

Estaría guay poder saber por que línea del gcode se ha quedado parada. Lo pregunto simplemente porque no se hacerlo. No busco que me digan " Pon esto aquí y aquí, y ya" Pero si saber donde tengo que mirar, algún sitio donde pueda estudiar como hacerlo.
Tengo interés en aprenderlo

Muchas Gracias por contestar.
Un saludo
Citar
#6
Hola, ya entendí en tu pregunta que buscabas la información necesaria para implementar esa funcionalidad y en mi respuesta no presupongo que quieras que te haga el trabajo, simplemente te indico que no puedo dedicar el tiempo que la busqueda de la información necesaria para realizarlo requiere.
Coincido contigo en el interes por saber como funciona Marlin y el porqué de las cosas, pero lamentablemente toda la información que hay está dispersa y hay que hacer una labor detectivesca para conocerla.
Por un lado, se necesita un mínimo de conocimientos de programación (en general y en C++ en especial) para poder seguir el código, aunque está bastante comentado para lo que es habitual.
Por otro, tener claro como funciona la impresora y que relación hay entre lo que hace y el código que está programado en Marlin.
En fín, que la gran mayoría del conocimiento se adquiere con mucho tiempo y dedicación, pues no existe (que yo sepa) un "libro gordo" de Marlin. En todo caso, te animo a ello.
Puedo darte algunas pistas para orientar tu busqueda: el firmware no utiliza el número de capa, artificio de los programas de corte para que nosotros sepamos por donde andamos.
El solo sabe lo necesario para ejecutar los comandos que están en el fichero de la pieza: velocidades, distancias a recorrer, etc.
Pero lo que si sabe es en cada momento los valores de la posición de todos los ejes y que línea del archivo de la pieza está procesando.
La funcionalidad Power Loss Recovery graba en un archivo de la tarjeta SD estos datos (se llama el estado actual de la máquina), por lo que en su código puede haber mucha información útil al respecto. Se encuentra en el archivo power_loss_recovery.cpp.
Tambien se utiliza la posición actual de los ejes en la pantalla de información, cuyas rutinas de escritura se encuentran en los archivos que te mencioné en mi primera respuesta.
Suerte en la busqueda y un saludo.
Citar
#7
Gracias por tu respuesta,

No tengo el archivo power_loss_recovery en mi Marlin. Intentaré encontrar las rutinas de escritura en la pantalla de la posición actual del cabezal.
Por otro lado si alguien facilita algo de información mas sería de gran ayudas
(DISCULPAD ME FIJÉ QUE POWER_LOSS VIENE A PARTIR DE MARLIN 1.1.9 YO TENGO 1.1.8)
Gracias a todos.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA Cambiar temperatura máxima hotend (marlin) asimov-solensan 2 90 14-07-2019, 09:20 AM
Último mensaje: asimov-solensan
  Cambiar el Firmware de la Anet A8 IvanSC 2 142 17-05-2019, 12:44 PM
Último mensaje: IvanSC
  Marlin gilito 2 209 26-04-2019, 11:19 AM
Último mensaje: gilito
  CONSULTA Mensaje de error desde Arduino en Carga "avrdude" Anetero 7 374 23-02-2019, 08:05 PM
Último mensaje: Anetero
  CONSULTA Error bootloader Ender 3 Etimoe 0 572 13-10-2018, 10:14 AM
Último mensaje: Etimoe