This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
CONSULTA Configuración de MARLIN
#1
Hola a todos! 
Quisiera saber si se puede modificar el MARLIN de una impresora tipo PRUSA I3 Hephestos, para que al final de la impresión, además del tiempo de impresión, muestre el nombre del archivo.
Desde ya, muchas gracias a todos!
Saludos!
  Responder
#2
Hola, en primer lugar decirte que si te refieres al Marlin que está cargado en la impresora, no se puede modificar, por lo que cualquier cambio en él necesita de una nueva compilación.
Por otra parte, el comportamiento normal de Marlin al comenzar una impresión desde la SD, es mostrar el nombre del archivo en la línea de mensajes de la pantalla, permaneciendo ahí si no se escribe nada en dicha línea durante la impresión (con el comando M117, por ejemplo).
En todo caso, modificar el código de Marlin siempre es posible, aunque puede ser complicado en algunas ocasiones encontrar el punto exacto donde hacerlo, sobre todo si es Marlin 2.
  Responder
#3
Hola. Muchas gracias por la respuesta. La impresora es una que yo mismo armé, y el Marlin que tiene cargado es el 1.1. Pude hacer algunas modificaciones, como definir el tipo de display, velocidades, aceleraciones, etc. Y estaba viendo que cuando termina de imprimir, abajo a la izquierda muestra el tiempo de impresión, y quería saber si además de ese dato se podía agregar el nombre del archivo.
De nuevo, muchas gracias!
Saludos!
  Responder
#4
La modificación que se necesita en Marlin para hacer lo que quieres, afecta al código de la programación, no a la configuración (que son las modificaciones que indicas).
Una forma de hacerlo sería incluir, en un sitio apropiado, el siguiente código que pone en la última línea de la pantalla, el nombre del fichero seguido del tiempo de impresión (entre corchetes):

char tiempo[21];
duration_t ntiempo = print_job_timer.duration();
ntiempo.toString(tiempo);
char mensaje[8 + strlen(card.longFilename) + strlen(tiempo)];
sprintf_P(mensaje, PSTR("M117 %s [%s]"), card.longFilename, tiempo);
_enqueuecommand(mensaje);


Hay que colocarlo en un punto del código que se procese justo después de terminar una impresión y el archivo donde estará depende de la versión concreta de Marlin que se utilice.
En concreto, para Marlin 1.1.x sería Marlin_main.cpp y el punto concreto donde colocar ese código en él depende de la x (te falta en la versión que has indicado).
Si es la última versión (1.1.9.1), habría que incluirlo en este punto de ese archivo:

...
    /**
    * '#' stops reading from SD to the buffer prematurely, so procedural
    * macro calls are possible. If it occurs, stop_buffering is triggered
    * and the buffer is run dry; this character _can_ occur in serial com
    * due to checksums, however, no checksums are used in SD printing.
    */

    if (commands_in_queue == 0) stop_buffering = false;

    uint16_t sd_count = 0;
    bool card_eof = card.eof();
    while (commands_in_queue < BUFSIZE && !card_eof && !stop_buffering) {
      const int16_t n = card.get();
      char sd_char = (char)n;
      card_eof = card.eof();
      if (card_eof || n == -1
          || sd_char == '\n' || sd_char == '\r'
          || ((sd_char == '#' || sd_char == ':') && !sd_comment_mode)
      ) {
        if (card_eof) {

          card.printingHasFinished();

          if (card.sdprinting)
            sd_count = 0; // If a sub-file was printing, continue from call point
          else {
            SERIAL_PROTOCOLLNPGM(MSG_FILE_PRINTED);

            char tiempo[21];
            duration_t ntiempo = print_job_timer.duration();
            ntiempo.toString(tiempo);
            char mensaje[8 + strlen(card.longFilename) + strlen(tiempo)];
            sprintf_P(mensaje, PSTR("M117 %s [%s]"), card.longFilename, tiempo);
            _enqueuecommand(mensaje);


            #if ENABLED(PRINTER_EVENT_LEDS)
              LCD_MESSAGEPGM(MSG_INFO_COMPLETED_PRINTS);
...


Si es una versión muy antigua, habrá que buscar ese mismo punto en el archivo, pues variará ligéramente el código, pero te recomiendo que utilices la última versión.
  Responder
#5
Perdón por la demora en responder, pero recién veo el mensaje.
Muchísimas gracias por el aporte. Voy a intentar resolverlo de esa forma.
Saludos!
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Ayuda configuracion del Marlin para compilar en el arduino NOQUI 1 0 13-02-2024, 06:06 PM
Último mensaje: Simemart
  Linear Advance Configuracion e impresion 21Curiosos 4 0 11-08-2023, 03:09 PM
Último mensaje: Simemart
  Configuracion de ventiladores Marlin 21Curiosos 16 1,024 19-06-2023, 08:22 PM
Último mensaje: wolf
  Power Loss Recovery Configuracion bbouett 1 0 07-06-2023, 08:07 PM
Último mensaje: Simemart
  Configuración Marlin para 2 extrusores Luisdjnas 63 399 05-06-2023, 11:36 AM
Último mensaje: Luisdjnas