Pausar impresión en Cura



  • Hola!
    Llevo imprimiendo bastante tiempo pero ahora estoy intentando hacer piezas en dos colores. Estoy intentando utilizar el plugin de CURA "pause at height" pero la impresora vuelve a imprimir inmediatamente después de pararse y mover el extrusor al punto indicado por lo que no me deja cambiar el filamento. ¿Alguna idea de por qué me está pasando esto?

    Gracias de antemano!!!



  • Yo ya lo he probado, y me hace lo mismo, la solución que encontré es, que en el plugin "Pause at Heigt", en la casilla "Head move Z(mm)", en vez de 0 que es la medida por defecto y que se queda donde está, yo le doy 10 o 20 mm.

    Así cuando para, sube el cabezal, y, al volver a pulsar y reanudar, mientras baja, accedo al menú y pulso "Cambio de Filamento".

    Si ves que no te da tiempo, pues subes más el eje Z para el paro.



  • Entiendo que solo hace falta escribir en el f (conexión serial de nuestra maquina) M600 ## Explicación simple axiomática

    El pluging esta escrito en Python:
    El foro NO soporta el indentado python.
    Copiar , pegar , modificar e interpretar python
     sin considerar el indentado python es un error "grave".

    usr/share/cura/plugins/pauseATZ.py (Línea            8) #Param: moveZ(float:0) Head move Z (mm)
    usr/share/cura/plugins/pauseATZ.py (Línea 90 - 102) #Es el único código donde afecta Head Move Z

    ¿Que ocurre cuando moveZ  toma un valor de 10 o 20?
    if z + moveZ < 15:
    zChanged = True
    f.write("G1 Z15 F300\n")

    elif moveZ > 0:
    newZ = z + moveZ
    maxZ = profile.getMachineSettingFloat('machine_height') - 10 #For Safety Leave a 10mm space (endstop)
    if maxZ < newZ:
    newZ = maxZ

    if newZ > z:
    zChanged = True
    f.write("G1 Z%f F300\n" % (newZ))

    #Me gustaría poder reproducir en mi maquina esta situación para hacer test, pero no va ha poder ser, no tengo varios extrusores.

    #sigo sin descubrir como hacer pausas y delays en gcode 
    gcodes validados
     M226 ;???
    M600 ;- Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]

    # como se puede ver es bastante sencillo establecer que haga algo (con gcodes) para un valor dado
    si movez + z es menor de 15 o si en caso contrario es mayor de 0

    Hay un batiburrillo de cálculos y lógica. El caso es que: "la funciones que nos interesa tocar son las que ejecutan acciones"

    f.write("G1 Z15 F300\n")
    f.write("G1 Z%f F300\n" % (newZ)) #modificar esta linea para los valores mayores de 0
    #la modificacion consiste en enviar el comando M600 cambiar filamento)
    f.write ("M600\n") # listo a disfrutar

    #No soy muy partidario de truncar asi el script 
    #Mejor usamos un valor por ej 999 en moveZ y al efectuar la comprobación añadiendo la lógica necesaria,  ejecutar M600
    #Mucho mejor seria que la impresora tuviese estas opciones accesibles desde el LCD (todo se andará)

    Saludos



  • JSANCH dijo:
    Yo ya lo he probado, y me hace lo mismo, la solución que encontré es, que en el plugin "Pause at Heigt", en la casilla "Head move Z(mm)", en vez de 0 que es la medida por defecto y que se queda donde está, yo le doy 10 o 20 mm.

    Así cuando para, sube el cabezal, y, al volver a pulsar y reanudar, mientras baja, accedo al menú y pulso "Cambio de Filamento".

    Si ves que no te da tiempo, pues subes más el eje Z para el paro.
    Gracias por tu respuesta pero no me es posible estar con la impresora el 100% del tiempo de la impresión. Tengo que encontrar una solución para que la impresora se quede pausada con la cama caliente sin perder temperatura.


  • Andurino dijo:

    Entiendo que solo hace falta escribir en el f (conexión serial de nuestra maquina) M600 ## Explicación simple axiomática

    El pluging esta escrito en Python:
    El foro NO soporta el indentado python.
    Copiar , pegar , modificar e interpretar python
     sin considerar el indentado python es un error "grave".

    usr/share/cura/plugins/pauseATZ.py (Línea            8) #Param: moveZ(float:0) Head move Z (mm)
    usr/share/cura/plugins/pauseATZ.py (Línea 90 - 102) #Es el único código donde afecta Head Move Z

    ¿Que ocurre cuando moveZ  toma un valor de 10 o 20?
    if z + moveZ < 15:
    zChanged = True
    f.write("G1 Z15 F300\n")

    elif moveZ > 0:
    newZ = z + moveZ
    maxZ = profile.getMachineSettingFloat('machine_height') - 10 #For Safety Leave a 10mm space (endstop)
    if maxZ < newZ:
    newZ = maxZ

    if newZ > z:
    zChanged = True
    f.write("G1 Z%f F300\n" % (newZ))

    #Me gustaría poder reproducir en mi maquina esta situación para hacer test, pero no va ha poder ser, no tengo varios extrusores.

    #sigo sin descubrir como hacer pausas y delays en gcode 
    gcodes validados
     M226 ;???
    M600 ;- Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]

    # como se puede ver es bastante sencillo establecer que haga algo (con gcodes) para un valor dado
    si movez + z es menor de 15 o si en caso contrario es mayor de 0

    Hay un batiburrillo de cálculos y lógica. El caso es que: "la funciones que nos interesa tocar son las que ejecutan acciones"

    f.write("G1 Z15 F300\n")
    f.write("G1 Z%f F300\n" % (newZ)) #modificar esta linea para los valores mayores de 0
    #la modificacion consiste en enviar el comando M600 cambiar filamento)
    f.write ("M600\n") # listo a disfrutar

    #No soy muy partidario de truncar asi el script 
    #Mejor usamos un valor por ej 999 en moveZ y al efectuar la comprobación añadiendo la lógica necesaria,  ejecutar M600
    #Mucho mejor seria que la impresora tuviese estas opciones accesibles desde el LCD (todo se andará)

    Saludos


    Gracias Andurino pero mis conocimientos de programación quedaron obsoletos tiempo atrás y he entendido más bien poco de tu respuesta.

    He introducido el comando f.write ("M600\n") donde indicabas pero sigue sin detenerse la impresora.

    ¿Hay que modificar el comando f.write("G1 Z%f F300\n" % (newZ)) ? ¿Y el f.write("G1 Z15 F300\n")?


    Si funciona ¿Cómo se vuelve a reanudar la impresión? ¿Volviendo a pulsar el botón "Print" del Cura?

    Gracias!!!


  • Hola @Donmochon
    Me alegro de que te haya servido. No tengo claro la duda que te asiste y tampoco tengo claro cuál es el motivo de "citarme" del modo que lo has hecho sólo (creo) hacia falta @ nombre (pero igual me estás tratando de indicar algo, pero no alcanzó a comprender.

    Sin acritud , tomatelo por el buen sentido. No voy a decirte" que y como" deseas manifestarte. Sólo te indicó que no alcanzo a entender el porqué. Eso me indica que hay algo que yo no estoy entendiendo, algo que me tratas de indicar.

    Lo siento

    Saludos



  • Hola @Andurino,

    Lo primero gracias por tu solución a la que quería referirme en mi entrada anterior, veo que no he sabido explicarme.


    Siguiendo las instrucciones que indicabas he añadido el comando f.write ("M600\n") en el código del plugin, donde se indicaba, pero lamentablemente la impresora sigue sin detenerse.

    No estoy seguro de que haya que modificar el comando f.write("G1 Z%f F300\n" % (newZ))  o de si hay que modificar el comando f.write("G1 Z15 F300\n"). ¿Podrías explicármelo?

    Por otro lado, vista la información que hay en otros foros respecto este tema, empiezo a pensar que el problema radica en el propio CURA, que no tiene la posibilidad de "pausar" la impresión, lo cual sí puede hacerse con otros programas como REPETIER. Personalmente quiero agotar todas las posibilidades de seguir trabajando con CURA antes de cambiarme.

    Saludos!



  • Hola @{Donmorchon}

    Gracias por haber reformulado tu duda, Ahora esta mucho mejor. Te agradezco que te hayas molestado en reescribir las dudas. (se que fastidia, lo siento)

    Me preguntas varias cosas y la verdad no es que sea muy extenso pero no es breve y no pretendo aburrir.

    Creo que si relees el post veras las respuestas que buscas salvo lo del software que eso es nuevo.

    No intentes hacer algo de lo que aquí te esbozo sin antes terminar de leer este comentario y el anterior y resolver tus dudas

    Primero te indico que no puedo reproducir la modificación, es decir no tengo modo alguno de validar, avanzar en el funcionamiento mas concreto de cualquier cosa que haga el script. (no tengo múltiples extrusores)

    ######################## Explicación del código

    De modo que te estoy sugiriendo que pruebes con una y si no va con la otra, pero también te advertí que hay que tener muy en cuenta  los espacios en blanco en phyton , suele ser el error habitual al iniciarse en este lenguaje.

    SI estas por aquí y algo falla no estas haciendo lo que te digo. ¿porque? Porque los errores (con los espacios en blanco) no dan mensajes de error...., si de funcionamiento.(posible causa habitual de fallos)

    Una vez hayas concluido que uno si funciona (a narices dependiendo del valor que le introduzcas) lo dejas como te guste y listo.
    ######################## Hasta aquí la explicación del código ¿dudas preguntas?

    Pero también te digo que no soy partidario de hacerlo de ese modo
    Es mas deseable (bajo mi criterio) usar un valor por ej:999 y usarlo como bandera (flag)
    habría que añadir  (esbozo no es codigo de copiar y pegar)
    "Un modo de comentar en phyton es con el caracter # "

    if moveZ == 999:
    f.write("M600\n") #("tu bonito comando solo para el valor 9999", las comillas son un requisito de la función write y el \n es un cuestión técnica del protocolo de comunicaciones, terminar el comando con un retorno de carro)
    else if #(el bloque de código tal cual original ,el  que anteriormente estamos "trampeando"(identico al original) ,salvo  modificaciones que ajustar el indetado (espacios en blanco) si es requerido) 
    ######################## Hasta aquí Código mejorado ¿dudas preguntas?

    ######### Nota importante
    Nos saltamos la lógica del script y eso puede ser arriesgado. Una cosa es el comando M600 (que no deja de ser otro script) y otra cosa el modo , lugar y tiempo en que el comando M600 es invocado (llamado, mencionado en el código)

    AL no poder hacer verificaciones los posibles problemas que te puedas encontrar, son para mi cosas totalmente nuevas y que no tengo modo alguno de reproducir y por lo tanto solucionar. Eso no significa que no pueda intentar averiguar o experimentar con algo rápido .

    ######################### Explicación del gcode M600 ####################

    Es bastante simple , ensayo y error.
    Abre una consola para poder introducir gcode e introduce M600 , veras algo grato en tu lcd. (yo creo que tus dudas se responden al ver como se comporta el comando), tampoco no dejes de observar los mensajes en la consola.

    ###################### Dudas preguntas (gcode M600)?

    ######################## ¿seria factible ejecutar M600 desde el lcd?, hacer una opcion desde el lcd?

    Si muy facilmente (relativo**). Y creo que puede ser la mejor opción., pero como ya te he mencionado no tengo modo de reproducir una situación de trabajo "normal" y no puedo validar mis tesis (idea).

    **Digo facil , ¿es para ti facil o dificil?
    Hay que hacer un firmware nuevo 
    Hay que localizar los archivos a modificar
    Pensar que vas a modifcar como lo vas modifcar
    Hacerlo
    Probar


    ############### Programas Cura , Repetier similares

    Respecto al ultimo punto, que te puedo decir , nada. cada uno usa lo que mejor le va o se puede permitr, yo uso  softlibre y gratuito o sotware  gratuito. Cura me sirve perfectamente al igual que Repetier.
    Yo no voy a decirte que no veas otras alternativas, para nada. Al contrario te animo a ello. Cuantas mas opciones tengas en tu bagaje mejor para ti.

    Aprender lleva su tiempo y esfuerzo, comentas que de algún modo has dejado el tema de programación, asumo entonces que algo sabes/sabias y entiendo que la info que te expongo debería ser suficiente (no lo se, posiblemente me equivoque)

    Saludos

    Pd: ten en cuenta que no tengo modo de validar el funcionamiento.
     Creo más simple de todo hacer un addon phyton para cura que tenga por parámetros los propios parámetros (se cuales, no que hacen y como lo hacen) del gcode M600, ya conoces la lógica básica if, y las normas sintácticas básicas, además de los dos ejemplos del cura.

    (editado 23 de Julio, 2016)
    PD2 : ¿Podrías al menos grabar en vídeo el funcionamiento "habitual" de una hephestos con varios materiales?
    Soy consciente que pedirte un estudio gravado en vídeo acerca del funcionamiento de cada parámetro de M600 es largo y requiere cierta paciencia, para poder obtener alguna información, si es que se puede obtener. (no hay garantías). Solo haz (si quieres y puedes) un pequeño vídeo demostrativo del funcionamiento con varios extrusores (breve 5 min max). Gracias



  • Hola @{Andurino}

    Gracias por las respuestas!

    No no he conseguido que la impresora quede pausada indefinidamente pero sí que me diste alguna pista para buscar una solución temporal.

    Estos días he estado buscando en internét y parece que el problema con con gcode M600 es generalizado y puede que esté en el propio marlin. También he leído que en las últimas versiones del Marlin ya se ha solucionado pero por falta de tiempo no puedo liarme a actualizar el firmware de mi impresora.

    Lo que sí he podido hacer es implementar una línea de código al plugin de CURA "pause at height" introduciendo un retardo suficiente para que me de tiempo a cambiar el hilo:

    //////////////////////
                    #Move the head away
                    f.write("G1 X%f Y%f F9000\n" % (parkX, parkY))

                    #Disable the E steppers
                    f.write("M84 E0\n")
                   
                    #Pause For 1 min and continue printing
                    f.write("G4 P60000\n")
                   
                    #Push the filament back, and retract again, the properly primes the nozzle when changing filament.
                    f.write("G1 E%f F6000\n" % (retractAmount))
                    f.write("G1 E-%f F6000\n" % (retractAmount))


    /////////////////////////////////

    Para avisarme de que tengo que cambiar el filamento lo que hice fue indicar a la impresora que cuando llegue a la cota determinada mueva el eje x al punto 0. Ahí he instalado un final de carrera conectado a una alarma.

    La solución no es muy "elegante" pero es efectiva, al menos por ahora. Mi próxima ampliación será un doble extrusor (ya tengo encargadas las piezas) y ya no tendré problemas de cambio de filamento sino de diseño de modelos en dos colores.

    En cualquier caso gracias a todos por vuestra colaboración!!!



  • Hola @{Donmorchon}


    De nada, me alegro que te haya sido de alguna utilidad.

    De todos modos hay una duplicidad del tema:

    Y ahi aparece solucionado, quizás te sea útil también.

    Saludos.