Ingenieria inversa con Cura

Hay muchos programas de corte 3D disponibles en el mercado siendo siendo , Cura uno de muchos ,pero con el desarrollo continuo y la filosofía de código abierto han hecho de este programa 3D el estándar de referencia.


Cura  de Ultimaker  actualmente  es  el software mas usado en laminado en 3d(slicing ) pudiendo traducir  archivos  de objetos en  3D  de tipo STL, OBJ o 3MF a un formato que la impresora puede entender: es decir en código G-CODE permitiendo por tanto  convertir los ficheros de objetos virtuales creados por software 3d en objetos reales  físicos  gracias a la tecnologia de la impresión 3d 

Muy resumidamente  g-code son  instrucciones para que una  impresora 3D   pueden realizar movimientos sobre los eje x x,y o z ,ajustar temperaturas   del fusor o de la cama, activar el extrusor ,etc: es decir  un conjunto de códigos para el gobernar el cabezal de impresión  y todo el hw  adicional codificados en RS274NGC , es decir en código G estándar.  Tal es la aceptación de este sw que sólo hay un puñado de impresoras 3D que no son soportadas por Cura pero  aun  así, puede incluso añadirse la impresora por  uno mismo. Además los Firmwares RepRap  también son bastante utilizables para el fresado CNC y aplicaciones similares.

 

Como cada impresora tiene una configuración, área de impresión, placa de construcción y tamaño de boquilla diferentes, el software de corte Cura necesita conocer estos detalles de hardware en un perfil de impresora de modo que una vez se  que tenga los detalles necesarios, se pueden especificar ajustes como la altura y el grosor de la capa . Basándose en importantes estadísticas de la impresora y en su configuración, Cura calculará la ruta que debe tomar el cabezal de impresión para imprimir su modelo  produciendo una lista de instrucciones para la impresora,instrucciones  que como sabemos se guardaran en ese archivo G-Code , el cual lo mas normal es que guardaremos en una tarjeta SD  (o enviarse directamente desde Cura a la impresora de modo inalámbrico o por cable, dependiendo de la impresora).

 

 

¿Porque  estamos hablando de g-code cuando en realidad  todo el trabajo  el sw de Cura?  Pues básicamente porque para cada pieza se suelen hacer muchos ajustes   en Cura que quedan guardados ,  al menos parcialmente, en estos ficheros ( y quizas no recordemos ) ,  por lo que es posible con los  g-code deducir  que ajustes se usaron   en la obtención de esa pieza   y con ello extrapolar la configuración usada.

Si conoce versiones anteriores de Cura , en efecto esta exportación de ajustes era posible  a través del fichero g-code  pero desgraciadamente en las versiones  mas actuales ya  NO es posible,  pero  no se preocupe, porque vamos a  ver como podemos deducir  mucha información de ajustes  de   Cura  desde los ficheros .gcode  sin instalar nada

 

 

 

Pues en efecto para deducir  los ajustes de  nos  apoyaremos de  gCodeViewer , sw  en linea que es un visualizador y analizador visual de GCode  que podemos usar en nuestro propio navegador funcionando por tanto  en cualquier sistema operativo y en casi cualquier navegador moderno (chrome, ff, safari 6, opera, ie10 ).

Todo lo que necesitamos  pues hacer es arrastrar su archivo * .gcode a la zona designada y podemos ya estudiar fácilmente el gcode.

Las características actuales incluyen:

    • Visualización  GCode en 2D, capa por capa
    • Mostrar retractaciones y reinicios
    • Mostrar velocidades de impresión / movimiento / retracción
    • Mostrar solo parte de la capa, secuencia animada de impresión de capa
    • Muestra dos capas simultáneamente para que pueda verificar los voladizos
    • Ajuste el ancho de línea para simular la impresión más de cerca

Una vez  cargado el fichero , el visor de Gcode intentará analizar los diámetros de boquilla y filamento de gcode, pero puede que no lo haga por lo que en ese caso, deberá configurarlo manualmente en la pestaña ‘Información de la impresora’

Este   programa pues nos permite analizar GCode: Tiempo de impresión, cantidad de plástico utilizado, altura de capa, etc. para todo el archivo y para una sola capa

Una funcionalidad interesante de este sw es que podemos hacer referencia a una  parte visualizada en el archivo GCode :es decir, seleccionamos una parte determinada de la visualización 2D, cambiamos a la vista GCode y  resaltará la lista de líneas responsables de la pieza visualizada

Este sw   Multiplataforma, disponible en línea , también funciona sin conexión localmente  no carga el código g en ningún lado ni descarga nada excepto la aplicación en sí por lo que es una herramienta muy interesante para nuestro cometido

 

EJEMPLO INGENIERÍA INVERSA DE FICHEROS GCODE

 

Veamos  como ejemplo analizar 4 ficheros g-code de 4 objetos diferentes laminados con diferentes versiones de Cura (Cura_SteamEngine 4.6.0,Cura_SteamEngine 4.6.1 y Cura_SteamEngine 4.4.1.)

Para ver mas fácilmente las diferencias  del código gcode    copiaremos  en columnas diferentes    de excel las primeras  lineas  obtenidas con el gcode analyzer

Como  la impresora  3d (una Geetech Prusa I3  pro w)   es la misma , a grandes rasgos la información  hasta la linea  12  no deberia ser  demasiado relevante para este análisis ya que hace referencia a los movimientos máximos  y mínimos de  x, y , z, pero podemos en el código que hay grandes diferencias:

;MINX:9.648   ;MINX:18.574   ;MINX:17.054   ;MINX:11.993
;MINY:11.059   ;MINY:85.061   ;MINY:9.375   ;MINY:5.508
;MINZ:0.3   ;MINZ:0.3   ;MINZ:0.3   ;MINZ:0.3
;MAXX:182.112   ;MAXX:181.424   ;MAXX:180.006   ;MAXX:188.007
;MAXY:198.228   ;MAXY:114.941   ;MAXY:190.625   ;MAXY:194.492
;MAXZ:1.42   ;MAXZ:1.42   ;MAXZ:15.98   ;MAXZ:20.9

Estos   parámetros como el lector  conoce definen los desplazamientos maximos  y minimos de los tres ejes , por lo que deberian coincidir en los cuatro casos , lo cual evidencia que  podria haber errores en los dos primeros ejemplos  

 

Especialmente interesante   es  tambien la linea 12  qeu nos diece con diferentes versiones de Cura (Cura_SteamEngine 4.6.0,Cura_SteamEngine 4.6.1 y Cura_SteamEngine 4.4.1.)

 

Bien  y ahora desde la linea 12 ( versi9on de Cura )  hasta la linea 34  si veremos un bloque común  , que  es preciosamente el que definimos en cura para iniciar la impresora  y que por tanto debería coincidir en las diferentes versiones:

M140 S50
M105
M190 S50
M104 S220
M105
M109 S220
M82 ;absolute extrusion mode
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
;Put printing message on LCD screen
M117 Printing…
G92 E0
G92 E0

Bueno este es un bloque comun ( el definido en cura como bloque inicial)  ,pero a partir de esta linea  segun la version  puede haber diferencias 

 

;LAYER_COUNT:5   G1 F1500 E-6.5   G1 F1500 E-7   G1 F1500 E-7
;LAYER:0   ;LAYER_COUNT:5   ;LAYER_COUNT:57   ;LAYER_COUNT:71
M107   ;LAYER:0   ;LAYER:0   ;LAYER:0
G0 F3600 X17.865 Y16.327 Z0.3   M107   M107   M107
;TYPE:SKIRT   G0 F3600 X22.667 Y89.806 Z0.3   G1 F600 Z1.3   G1 F600 Z1.3
    ;TYPE:SKIRT   G0 F3600 X39.412 Y37.756 Z1.3 G0 F3600 X65.981 Y65.476 Z1.3
        ;TYPE:SKIRT   ;TYPE:SKIRT
             

En este caso claramente se ha configurado el tipo de adherencia a la placa de impresion como skirt ( falda)

Y a  partir de este bloque   ya deberían localizarse los movimientos x,y, z  según la pieza elegida   y que por tanto dependerá de cada modelo

 

 

Bueno  y ahora vamos al bloque final, que también es definido por Cura  y por tanto debiera ser común en todas las versiones ;

 

M140 S0
M107
M104 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
M82 ;absolute extrusion mode
M104 S0
;End of Gcode

 

 

Finalmente finalizado este bloque  y esto es lo interesante esta comentado en metadatos  todos los ajustes importantes realizados en cura ;

End of Gcode
;SETTING_3 {"global_quality": "[general]\\nversion = 4\\nname = Fine #2\\ndefini
;SETTING_3 tion = prusa_i3\\n\\n[metadata]\\nquality_type = normal\\ntype = qual
;SETTING_3 ity_changes\\n\\n[values]\\nlayer_height = 0.28\\nmaterial_bed_temper
;SETTING_3 ature = 70\\n\\n", "extruder_quality": ["[general]\\nversion = 4\\nna
;SETTING_3 me = Fine #2\\ndefinition = prusa_i3\\n\\n[metadata]\\nquality_type =
;SETTING_3 normal\\nposition = 0\\ntype = quality_changes\\n\\n[values]\\ninfil
;SETTING_3 l_pattern = grid\\ninfill_sparse_density = 50\\nmaterial_flow = 80\\n
;SETTING_3 material_print_temperature = 220\\noptimize_wall_printing_order = Tru
;SETTING_3 e\\nretraction_amount = 7\\nretraction_hop_enabled = True\\nroofing_l
;SETTING_3 ayer_count = 1\\nspeed_print = 50\\ntop_bottom_thickness = 1.2\\nwall
;SETTING_3 _thickness = 1.2\\n\\n"]}

 

Por desgracia no siguen el mismo orden en las diferentes versiones de cura, asi que tendremos que extraer de aqui el valor de lo diferentes campos despreciando la cadena SETTING_3    asi como eliminano los retornos de linea

{"global_quality": "[general]\\nversion = 4\\nname = Fine #2\\ndefinition = prusa_i3\\n\\n[metadata]\\nquality_type = normal\\ntype = quality_changes\\n\\n[values]\\nlayer_height = 0.28\\nmaterial_bed_temperature = 70\\n\\n", "extruder_quality": ["[general]\\nversion = 4\\nname = Fine #2\\ndefinition = prusa_i3\\n\\n[metadata]\\nquality_type =normal\\nposition = 0\\ntype = quality_changes\\n\\n[values]\\ninfill_pattern = grid\\ninfill_sparse_density = 50\\nmaterial_flow = 80\\nmaterial_print_temperature = 220\\noptimize_wall_printing_order = Tru
e\\nretraction_amount = 7\\nretraction_hop_enabled = True\\nroofing_layer_count = 1\\nspeed_print = 50\\ntop_bottom_thickness = 1.2\\nwall_thickness = 1.2\\n\\n"]}

 

De esto  ya finalmente si los ordenamos en campos  deducimos los parámetros ajustados:

 

nversion = 4
nname =  Fine #2
ndefinition =  prusa_i3
ntype =  quality_changes
nquality_type =  normal
nlayer_height =  0.28
nmaterial_bed_temperature =  50
nposition =  0
nbottom_layers = 4
nbrim_line_count =  1
nbrim_outside_only =  False
nbrim_width   
   
ninfill_pattern =   grid
ninfill_sparse_density =  50
nmaterial_flow =  50
 nmaterial_print_temperature =  220
 nretraction_enable =  False
 nskirt_brim_minimal_length =  25
 nspeed_print =  40
 nspeed_topbottom =  speed_print / 2
 ntop_layers = 4
 nwall_thickness   1.2

 

 

Con esto claramente  podemos pues deducir   cuales fueron los parámetros   que se ajustaron con esa pieza, así como  si deseamos comparar con otros gcodes de otras piezas:

nversion = 4   4   4   4
nname =  Fine #2   Fine #2   Fine #2   Fine #2
ndefinition =  prusa_i3   prusa_i3   prusa_i3   prusa_i3
ntype =  quality_changes   quality_changes   quality_changes   quality_changes
nquality_type =  normal   normal   normal   normal
nlayer_height =  0.28   0,28   0,28   0,28
nmaterial_bed_temperature =  50   50   70   ?70
nposition =  0   0   0   0
nbottom_layers = 4   4        
nbrim_line_count =  1   1        
nbrim_outside_only =  False   False        
nbrim_width              2
               
ninfill_pattern =   grid    grid   grid   grid
ninfill_sparse_density =  50   50   50   50
nmaterial_flow =  50   50   80   80
 nmaterial_print_temperature =  220   220   220   220
 nretraction_enable =  False            
 nskirt_brim_minimal_length =  25   25       25
 nspeed_print =  40   40   50   50
 nspeed_topbottom =  speed_print / 2   speed_print / 2        
 ntop_layers = 4   4        
 nwall_thickness   1.2   1,2   1,2   1,2
ntop_bottom_thickness             1,2
               
noptimize_wall_printing_order          true   true
nretraction_amount          7   7
nretraction_hop_enabled          True   true
nroofing_layer_count          1   1
               
nadhesion_type              brim

Como  vemos , no todos los parámetros en  Cura  se ajustaron , lo cual queda muy evidenciado  precisamente en esos valores claramente diferentes  en las 4 columnas  y que están en  algunas piezas  y en otras no

Por cierto  para terminar este caso , los datos  correspondientes a los dos primeros ejemplos la piezas delatan   que no se pudieron imprimir correctamente por esa incorrecta parametrización de Cura

.

Campos de G Code RepRap

En esta sección se explican los campos que van precedidos por una letra. Los números en los campos son representados por nnn . Los Números de Ser pueden Enteros (enteros) (128) o Números racionales (12,42), dependiendo del contexto. Por ejemplo, la coordenada X puede ser entera ( X175 ) o racional ( X17.62 ), pero seleccione el extrusor número 2.76 sin sentido sentido.

Letra SIGNIFICADO
Gnnn Comando GCodelo estándar, como moverse hasta un punto
Mnnn Comando definido por RepRap, como activar un ventilador
Tnnn Seleccionar la herramienta nnn. En RepRap, las herramientas son extrusores
Snnn Parámetro de comando, como la tensión enviada a un motor
Pnnn Parámetro de comando, como el tiempo en milisegundos
Xnnn Una coordenada X, normalmente para moverse a ella. Puede ser un número entero o racional.
Ynnn Una coordenada Y, normalmente para moverse a ella. Puede ser un número entero o racional.
Znnn Una coordenada Z, normalmente para moverse a ella. Puede ser un número entero o racional.
Innn Parámetro – Actualmente no utilizado
Jnnn Parámetro – Actualmente no utilizado
Fnnn Avance en mm por minuto. (Velocidad de movimiento del cabezal de impresión)
Rnnn Parámetro – usado para temperaturas
Qnnn Parámetro – Actualmente no utilizado
Ennn Longitud a extrusión en mm. Ex exactamente como X, Y y Z, pero para la cantidad de filamento a extrusión. Mejor: Skeinforge 40 y siguientes interpretan esto como la longitud absuluta de filamento insertado, no como la longitud de la extrusión que sale.
Nnnn Número de línea. Utilizado para pedir la repetición de la transmisión en caso de errores de comunicación.
* nnn Suma de comprobación. Usado para verificar errores de comunicación.

Comentarios

Los comentarios en Gcode comienzan con punto y coma y terminan al final de la línea:

N3 T0 * 57; Esto es un comentario
N4 G92 E0 * 67
; Esto también lo es
N5 G28 * 22

Los comentarios y espacios en blanco serán ignorados por su impresora RepRap. Es mejor quitarlos en el ordenador portátil antes de enviar el Gcode a tu impresora, ya que así se ahorra ancho de banda.

Comandos individuales

Comprobación

N y *

Ejemplo: N123 [… Código G aquí …] * 71

Estos son el número de línea y la suma de verificación. El firmware RepRap comprueba la suma de comprobación con un valor calculado localmente y, si difieren, solicita una transmisión repetida de la línea del número dado.

Puede omitir ambos: RepRap seguirá funcionando, pero no hará la comprobación. Sin embargo, debes tener ambos o ninguno.

La suma de comprobación “cs” para una cadena de GCode “cmd” (incluido su número de línea) se calcula exorbitando los bytes en la cadena hasta y sin incluir el carácter * de la siguiente manera:

int cs = 0;
para (i = 0; cmd [i]! = '*' && cmd [i]! = NULL; i ++)
   cs = cs ^ cmd [i];
cs & = 0xff; // Programación defensiva ...

y el valor se agrega como un entero decimal al comando después del carácter *.

El firmware RepRap espera que los números de línea aumenten en 1 cada línea, y si eso no sucede, se marca como un error. Pero puede restablecer el recuento utilizando M110 (ver más abajo).

Comandos G almacenados

El firmware RepRap almacena estos comandos en un buffer de anillo internamente para su ejecución. Esto significa que no hay retraso (apreciable) mientras se reconoce un comando y se transmite el siguiente. A su vez, esto significa que las secuencias de segmentos de línea se pueden trazar sin pausa entre uno y el siguiente. Tan pronto como se recibe uno de estos comandos almacenados, se reconoce y almacena localmente. Si el búfer local está lleno, el reconocimiento se retrasa hasta que haya espacio para el almacenamiento en el búfer disponible. Así es como se logra el control de flujo.

G0 y G1: mover

Uso
G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn
G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn
Variables
No todas las variables deben usarse, pero al menos una debe usarse
Xnnn La posición para moverse en el eje X
Ynnn La posición para moverse en el eje Y
Znnn La posición para moverse en el eje Z
Ennn La cantidad a extruir entre el punto inicial y el punto final
Fnnn La velocidad de avance por minuto del movimiento entre el punto inicial y el punto final (si se proporciona)
Snnn Flag para verificar si se tocó un tope S1 para verificar, S0 para ignorar, S2 ver nota, el valor predeterminado es S0 ) 1
Ejemplos
G0 X12 (mover a 12 mm en el eje X)
G0 F1500 (Ajuste la velocidad de avance a 1500 mm / minuto)
G1 X90.6 Y13.8 E22.4 (Mover a 90.6 mm en el eje X y 13.8 mm en el eje Y mientras extruye 22.4 mm de material)

La especificación de firmware RepRap trata a G0 y G1 como el mismo comando, ya que es tan eficiente como no hacerlo. 2

La mayoría de los firmwares RepRap hacen cosas sutiles con los avances.

1. G1 F1500
2. G1 X50 Y25.3 E22.4

En el ejemplo anterior, establecemos el avance a 1500 mm / minuto en la línea 1, luego nos movemos a 50 mm en el eje X y a 25,3 mm en el eje Y mientras extruimos 22,4 mm de filamento entre los dos puntos.

1. G1 F1500
2. G1 X50 Y25.3 E22.4 F3000

Sin embargo, en el ejemplo anterior, establecemos una velocidad de avance de 1500 mm / minuto en la línea 1, luego hacemos el movimiento descrito anteriormente acelerando a una velocidad de avance de 3000 mm / minuto mientras lo hace. La extrusión se acelerará junto con el movimiento X e Y, por lo que todo permanecerá sincronizado.

La especificación RepRap trata el avance como simplemente otra variable (como X, Y, Z y E) para ser interpolada linealmente. Esto proporciona un control completo sobre la aceleración y desaceleración del cabezal de la impresora de tal manera que se garantiza que todo se mueva suavemente y que se extruya el volumen correcto de material en todos los puntos. 3

Para invertir la extrusora en una cantidad dada (por ejemplo, para reducir su presión interna mientras realiza un movimiento en el aire para que no gotee) simplemente use G0 o G1 para enviar un valor E que sea menor que la longitud extruida actualmente .

Notas
  •  Algunos firmwares permiten que RepRap active o desactive la “detección” de paradas finales durante un movimiento. Verifique con el firmware que esté utilizando para ver si son compatibles con la variable S de esta manera, ya que puede dañarse si asume incorrectamente. En el firmware Duet-dc42, el uso del parámetro S1 o S2 en una impresora delta hace que los parámetros XYZ se refieran a las posiciones individuales del motor de la torre en lugar de la posición del cabezal, y también permitan la detección de tope final si el parámetro es S1.
  •  En la especificación RS274NGC, G0 es Movimiento rápido , que se utilizó para moverse entre el punto actual en el espacio y el nuevo punto de la manera más rápida y eficiente posible, y G1 es Movimiento controlado , que se utilizó para moverse entre el punto actual en el espacio y el nuevo punto lo más preciso posible
  • Es posible algunos firmwares no admitan establecer el avance en línea con un movimiento.
  • La bifurcación  zpl del firmware Duet implementa un parámetro adicional ‘R1’ para indicarle a la máquina que regrese a las coordenadas en las que originalmente se detuvo la impresión.

Algunas máquinas antiguas, CNC o de otro tipo, solían moverse más rápido si no se movían en línea recta. Esto también es cierto para algunas impresoras no cartesianas, como las impresoras delta o polares, que se mueven más fácil y más rápido en una curva.

G2 y G3: movimiento de arco controlado

Uso
G2 Xnnn Ynnn Innn Jnnn Ennn (Arco horario)
G3 Xnnn Ynnn Innn Jnnn Ennn (Arco en sentido antihorario )
Variables
Xnnn La posición para moverse en el eje X
Ynnn La posición para moverse en el eje Y
Innn El punto en el espacio X desde la posición X actual para mantener una distancia constante de
Jnnn El punto en el espacio Y desde la posición Y actual para mantener una distancia constante de
Ennn La cantidad a extruir entre el punto inicial y el punto final
Ejemplos
G2 X90.6 Y13.8 I5 J10 E22.4 (Mover en un arco en sentido horario desde el punto actual a punto (X = 90.6, Y = 13.8), con un punto central en (X = current_X + 5, Y = current_Y + 10), extruyendo 22,4 mm de material entre el inicio y la detención)
G3 X90.6 Y13.8 I5 J10 E22.4 (Moverse en un arco en sentido antihorario desde el punto actual a punto (X = 90.6, Y = 13.8), con un punto central en (X = current_X + 5, Y = current_Y + 10), extruyendo 22,4 mm de material entre el inicio y la detención)
Notas

1 El firmware Marlin puede alternar el soporte para estos Gcodes. Para habilitar el soporte, asegúrese de definir SCARA en el momento de la compilación, de lo contrario, se ignorarán los Gcodes.

G28: Mover al origen (Inicio)

Uso
G28
Variables
Este Gcode se puede usar sin ninguna variable adicional suministrada
X Flag para volver al origen del eje X
Indicador Y para volver al origen del eje Y
Z Flag para volver al origen del eje Z
Ejemplos
G28 (Ir al origen en todos los ejes)
G28 XZ (Ir al origen solo en los ejes X y Z)

Cuando el firmware RepRap recibe este comando, mueve todos los ejes (o los suministrados) de regreso a los topes extremos cero tan rápido como puede, luego retrocede un milímetro y lentamente retrocede a los puntos de activación del tope final cero para aumentar la precisión de la posición. Este proceso también se conoce como ” Homing “.

Si agrega coordenadas, estas coordenadas se ignoran. Por ejemplo, G28 Z0.00da como resultado el mismo comportamiento que G28 Z.

Cuando se utiliza el firmware Duet-dc42 para controlar una impresora delta, cualquier comando G28 alojará las tres torres, independientemente de las letras XYZ.

G29: Sonda Z detallada

Sondea la cama en 3 o más puntos.

G30: Sonda Single Z

En su forma más simple, las sondas se acuestan en la ubicación XY actual.

Algunas implementaciones permiten un comportamiento más general: si se especifica un campo Pn, los valores sondeados X, Y y Z se guardan como punto n en la cama para calcular el plano de desplazamiento. Generalmente n es 0, 1 o 2. Si se especifican valores X, Y, o Z (por ejemplo, G30 P1 X20 Y50 Z0.3), esos valores se utilizan en lugar de las coordenadas actuales de la máquina. Un valor Z tonto (menor que -9999.0) hace que la máquina pruebe en el punto actual para obtener Z, en lugar de usar el valor dado. Si se especifica un campo S (por ejemplo, G30 P1 Z0.3 S), el plano del lecho se calcula para compensación y se almacena. La combinación de estas opciones permite que la máquina se mueva a puntos usando comandos G1, y luego sondee la cama, o que el usuario coloque la boquilla de manera interactiva y use esas coordenadas.El usuario también puede registrar esos valores y colocarlos en un archivo GCode de configuración para su ejecución automática.

La variante dc42 de RepRapFirmware utiliza el valor del parámetro S para especificar qué cálculo realizar. Si el valor es cero o no hay ningún valor después de la letra S, el plano de la cama se calcula y almacena como de costumbre. En una impresora delta, si el parámetro es 4, se realiza la autocalibración para determinar el radio delta, las correcciones de tope final y la altura de referencia. El número de coordenadas sondeadas debe ser 4, de las cuales las tres primeras deben estar frente a las torres X, Y y Z, respectivamente, y la cuarta debe estar en el centro de la cama.

G31: Informar el estado actual de la sonda

Cuando se usa por sí solo, esto informa si la sonda Z se activa o da el valor de la sonda Z en algunas unidades si la sonda genera valores de altura. Si se combina con un campo Z y P (ejemplo: G31 P312 Z0.7), esto establecerá la altura Z en 0.7 mm cuando el valor de la sonda Z alcance 312 cuando se envíe un comando G28 Z0 (cero eje Z). Luego, la máquina se moverá otros -0.7 mm en Z para colocarse en Z = 0. Esto permite que las sondas de medición sin contacto se acerquen pero no toquen la cama, y ​​que se permita el espacio restante. Si la sonda es una sonda táctil y genera una señal simple de 0/1 apagado / encendido, entonces G31 Z0.7 le dirá a la máquina RepRap que está a una altura de 0.7 mm cuando se activa la sonda.

En el firmware Duet-dc42, se pueden definir parámetros G31 separados para los tipos de sonda 0, 1/2 y 3 (los tipos de sonda 1 y 2 comparten el mismo conjunto de parámetros). Para especificar para qué sonda está configurando los parámetros, envíe un comando M558 para seleccionar el tipo de sonda antes de enviar el comando G31.

El firmware Duet-dc42 admite parámetros adicionales S (temperatura del lecho en ° C a la cual el parámetro Z especificado es correcto, el valor predeterminado es la temperatura actual del lecho) y C (coeficiente de temperatura del parámetro Z en mm / ° C, cero predeterminado). Esto es útil para sondas ultrasónicas y otras que se ven afectadas por la temperatura.

Las versiones de firmware Duet-dc42 1.00b en adelante también permiten especificar los desplazamientos X e Y de la sonda Z en relación con el cabezal de impresión (es decir, la posición cuando se selecciona la herramienta vacía), agregando los parámetros X e Y. Esto le permite calcule las coordenadas de su sonda M557 en función de la geometría de la cama, sin tener que corregirlas para el desplazamiento de la sonda Z X e Y. También proporciona una compensación de cama más precisa.

G32: sondee Z y calcule el plano Z

Sondea el lecho en 3 o más puntos predefinidos (ver M557) y actualiza la matriz de transformación para la compensación de nivelación del lecho. Las versiones posteriores de RepRapFirmware ejecutan el archivo de macro bed.g si está presente en lugar de usar las coordenadas M557.

Comandos G sin búfer

Los siguientes comandos no están almacenados. Cuando se recibe uno, se almacena, pero no se reconoce al host hasta que se agota el búfer y luego se ejecuta el comando. Por lo tanto, el host hará una pausa en uno de estos comandos hasta que se haya completado. Las pausas breves entre estos comandos y cualquiera que pueda seguirlos no afectan el rendimiento de la máquina.

 

G4: morar

Ejemplo: G4 P200

En este caso, siéntate sin hacer nada durante 200 milisegundos. Durante los retrasos, el estado de la máquina (por ejemplo, las temperaturas de sus extrusoras) aún se conservará y controlará.

En Marlin y Smoothie, el parámetro “S” esperará unos segundos, mientras que el parámetro “P” esperará milisegundos. “G4 S2” y “G4 P2000” son equivalentes.

G10: Desplazamiento de herramienta


Ejemplo: G10 P3 X17.8 Y-19.3 Z0.0 R140 S205

Esto establece el desplazamiento de la herramienta (o en implementaciones anteriores de extrusión de cabeza) 3 (desde el P3) a los valores X e Y especificados. También puede poner un valor Z distinto de cero, pero esto generalmente es una mala idea a menos que las herramientas sean cargadas y descargadas por algún tipo de cambiador de herramientas. Cuando todas las herramientas están en la máquina a la vez, todas deben configurarse a la misma altura Z.

Recuerde que cualquier parámetro que no especifique se establecerá automáticamente en el último valor para ese parámetro. Eso generalmente significa que desea establecer explícitamente Z0.0.

El valor R es la temperatura de espera en o C que se utilizará para la herramienta, y el valor S es su temperatura de funcionamiento. Si no desea que la herramienta tenga una temperatura diferente cuando no esté en uso, configure ambos valores de la misma manera. Vea el código T (herramienta de selección) a continuación. En herramientas con múltiples calentadores, las temperaturas para todos ellos se especifican así: R100.0: 90.0: 20.0 S185.0: 200.0: 150.0.

El estándar NIST G-code menciona un parámetro L adicional, que se ignora.

Este comando está sujeto a discusión .

Tenga en cuenta que Marlin y Smoothie usan G10 / G11 para ejecutar un movimiento de retracción / no retracción. La versión RepRapPro de Marlin admite G10 para el desplazamiento de la herramienta.

G20: Establecer unidades en pulgadas

Ejemplo: G20

Las unidades de ahora en adelante están en pulgadas.

G21: establecer unidades en milímetros

Ejemplo: G21

Las unidades de ahora en adelante están en milímetros. (Este es el valor predeterminado de RepRap).

G90: Establecer en posicionamiento absoluto

Ejemplo: G90

Todas las coordenadas a partir de ahora son absolutas en relación con el origen de la máquina. (Este es el valor predeterminado de RepRap).

G91: Establecer en posicionamiento relativo

Ejemplo: G91

Todas las coordenadas a partir de ahora son relativas a la última posición.

G92: Establecer posición

Ejemplo: G92 X10 E90

Permite la programación del punto cero absoluto, restableciendo la posición actual a los valores especificados. Esto establecería la coordenada X de la máquina en 10 y la coordenada de extrusión en 90. No se producirá movimiento físico.

Un G92 sin coordenadas restablecerá todos los ejes a cero.

Comandos M y T sin búfer

M0: parada

Ejemplo: M0

La máquina RepRap finaliza los movimientos que quedan en su búfer, luego se apaga. Todos los motores y calentadores están apagados. Se puede volver a iniciar presionando el botón de reinicio en el microcontrolador maestro. Ver también M1, M112.

M1: sueño

Ejemplo: M1

La máquina RepRap finaliza los movimientos que quedan en su búfer, luego se apaga. Todos los motores y calentadores están apagados. Todavía se pueden enviar códigos G y M, el primero de los cuales lo despertará nuevamente. Ver también M0, M112.

M3: Husillo encendido, en sentido horario (CNC específico)

Ejemplo: M3 S4000

El husillo se enciende con una velocidad de 4000 RPM.

M4: Husillo encendido, en sentido antihorario (CNC específico)

Ejemplo: M4 S4000

El husillo se enciende con una velocidad de 4000 RPM.

M5: Husillo apagado (CNC específico)

Ejemplo: M5

El husillo está apagado.

M7: Refrigerante de niebla activado (CNC específico)

Ejemplo: M7

El refrigerante de niebla está encendido (si está disponible)

M8: Refrigerante de inundación activado (específico de CNC)

Ejemplo: M8

El refrigerante de inundación está encendido (si está disponible)

M9: Refrigerante apagado (específico del CNC)

Ejemplo: M9

Todos los sistemas de refrigerante están apagados.

M10: Vacío activado (específico de CNC)

Ejemplo: M10

Sistema de aspiración de recolección de polvo encendido.

M11: Vacío desactivado (CNC específico)

Ejemplo: M11

Sistema de aspiración de recolección de polvo apagado.

M17: activar / alimentar todos los motores paso a paso

Ejemplo: M17

M18: deshabilitar todos los motores paso a paso

Ejemplo: M18

Inhabilita los motores paso a paso y permite que el eje se mueva ‘libremente’.

M20: Lista de tarjeta SD

Ejemplo: M20

Todos los archivos en la carpeta raíz de la tarjeta SD se enumeran en el puerto serie. Esto da como resultado una línea como:

ok Archivos: {SQUARE.G, SQCOM.G,}

La coma final es opcional. Tenga en cuenta que los nombres de los archivos se devuelven en mayúsculas, pero cuando se envían al comando M23 (a continuación) deben estar en minúsculas. Esto parece ser una función del software SD. Imagínate…

El firmware Duet-dc42 devuelve los nombres de archivo (largos) en el caso correcto. Si el parámetro S2 está presente, la lista de archivos se devuelve en formato JSON, como una matriz única llamada “archivos”. El parámetro opcional P especifica el directorio a listar, por defecto en el directorio / gcodes.

M21: inicializar tarjeta SD

Ejemplo: M21

La tarjeta SD se inicializa. Si se carga una tarjeta SD cuando la máquina está encendida, esto sucederá de manera predeterminada. La tarjeta SD debe inicializarse para que funcionen las otras funciones SD.

M22: liberar tarjeta SD

Ejemplo: M22

La tarjeta SD se libera y se puede extraer físicamente.

M23: seleccione el archivo SD

Ejemplo: M23 filename.gco

El archivo especificado como filename.gco (se admite la convención de nomenclatura 8.3) está listo para imprimir.

El firmware Duet-dc42 admite nombres de archivo largos y formato 8.3.

M24: Iniciar / reanudar impresión SD

Ejemplo: M24

La máquina imprime desde el archivo seleccionado con el comando M23.

M25: Pausa impresión SD

Ejemplo: M25

La máquina detiene la impresión en la posición actual dentro del archivo seleccionado con el comando M23.

M26: establecer la posición SD

Ejemplo: M26

Establecer la posición SD en bytes (M26 S12345).

M27: informe del estado de impresión SD

Ejemplo: M27

Informe el estado de impresión SD.

M28: Comience a escribir en la tarjeta SD

Ejemplo: M28 filename.gco

El archivo especificado por filename.gco se crea (o se sobrescribe si existe) en la tarjeta SD y todos los comandos posteriores enviados a la máquina se escriben en ese archivo.

M29: deja de escribir en la tarjeta SD

Ejemplo: M29 filename.gco

El archivo abierto por el comando M28 se cierra y todos los comandos posteriores enviados a la máquina se ejecutan normalmente.

M30: eliminar un archivo en la tarjeta SD

Ejemplo: M30 filename.gco

filename.gco se elimina.

M31: tiempo de salida desde el último inicio de M109 o tarjeta SD a serie

Ejemplo: M31

La respuesta se ve así:

 eco: 54 min, 38 seg

M32: seleccione el archivo e inicie la impresión SD

(Se puede usar al imprimir desde la tarjeta SD)

Ejemplo: M32 filename.gco

tba disponible en marlin (14/6/2014)

M33

Usado por algunas variantes del firmware Marlin. Propósito desconocido.

M34

Usado por algunas variantes del firmware Marlin. Propósito desconocido.

M36: devolver información del archivo

Ejemplo: M36 filename.gco

Devuelve información para el archivo de tarjeta SD especificado en formato JSON. Una respuesta de muestra es:

{“err”: 0, “size”: 457574, “height”: 4.00, “layerHeight”: 0.25, “filament”: [6556.3], “generateBy”: “Slic3r 1.1.7 el 09/11/2014 a las 17 : 11: 32 “}

El campo “err” es cero si tiene éxito, distinto de cero si no se encontró el archivo o se produjo un error al procesarlo. El campo “tamaño” siempre debe estar presente si la operación fue exitosa. La presencia o ausencia de otros campos depende de si se pueden encontrar los valores correspondientes leyendo el archivo. El campo “filamento” es una matriz de las longitudes de filamento requeridas de cada carrete. El tamaño está en bytes, todos los demás valores están en mm. Los campos pueden aparecer en cualquier orden y pueden estar presentes campos adicionales.

M37: Modo Simulación

 

Usado para cambiar entre el modo de impresión y el modo de simulación. El modo de simulación permite la electrónica calcular un tiempo de impresión preciso, teniendo en cuenta las velocidades máximas, aceleraciones, etc., que están configuradas.

M37 S1 entra en modo de simulación. Ningún código G o M funcionara, pero el tiempo que llevarían a ser ejecutados si serán tomados en cuenta para el cálculo final.

M37 S0 Venta de modo simulación.

M37 sin el parámetro S devuelve el tiempo que ha llevado a calcular la simulación, desde que se introdujo el comando M37 S1, hasta el momento actual (si el modo de simulación aún permanece en ejecución) o el punto en el cual la simulación ya acabó (Si el modo simulación ya no está activo).

M40: expulsar

Si su máquina RepRap puede expulsar las partes que ha construido fuera de la cama, este comando ejecuta el ciclo de expulsión. Esto generalmente implica enfriar la cama y luego realizar una secuencia de movimientos que eliminan las partes impresas. Las posiciones X, Y y Z de la máquina al final de este ciclo no están definidas (aunque se pueden encontrar utilizando el comando M114, qv).

Ver también M240 y M241 a continuación.

M41: lazo

Ejemplo: M41

Si la máquina RepRap estaba creando un archivo desde su propia memoria, como una tarjeta SD local (a diferencia de un archivo que se le transmitía desde una computadora host), esto vuelve al principio del archivo y lo ejecuta nuevamente. Entonces, por ejemplo, si su RepRap es capaz de expulsar partes de su plataforma de construcción, puede configurarlo para que se imprima en un bucle y se ejecutará y se ejecutará. Úselo con precaución: las únicas cosas que lo detendrán son:

  1. Cuando presionas el botón de reinicio,
  2. Cuando se agota el material de construcción (si su RepRap está configurado para detectar esto), y
  3. Cuando hay un error (como una falla del calentador).

M42: Detener en material agotado / Cambiar pin de E / S

M42 en ???

Ejemplo: M42

Si su RepRap puede detectar cuándo se agota su material, esto decide el comportamiento cuando eso sucede. Los ejes X e Y se ponen a cero (pero no Z), y luego la máquina apaga todos los motores y calentadores. Debe presionar Restablecer para reactivar la máquina. En otras palabras, se estaciona y luego ejecuta un comando M0 (qv).

M42 en Marlin / Sprinter

Ejemplo: M42 P7 S255

M42 conmuta un pin de E / S de uso general. Use M42 Px Sy para establecer el pin x en el valor y, al omitir Px se usará el LEDPIN.

M42 en teaCup

Innecesario. Los dispositivos de uso general se manejan como un calentador, ver M104 .

M43: espera sobre material agotado

Ejemplo: M43

Si su RepRap puede detectar cuándo se agota su material, esto decide el comportamiento cuando eso sucede. Los ejes X e Y se ponen a cero (pero no Z), y luego la máquina apaga todos los motores y calentadores, excepto el lecho calentado, cuya temperatura se mantiene. La máquina seguirá respondiendo a los comandos de código G y M en este estado.

M80: ATX encendido

Ejemplo: M80

Enciende la fuente de alimentación ATX del modo de espera al modo completamente operativo. Sin operación en electrónica sin modo de espera.

Nota : algunos firmwares, como Teacup , manejan el encendido / apagado automáticamente, por lo que esto es redundante allí. Consulte también el cableado de RAMPAS para activar / desactivar ATX

M81: apagado ATX

Ejemplo: M81

Apaga la fuente de alimentación ATX. Contraparte de M80.

M82: establecer extrusora en modo absoluto

Ejemplo: M82

hace que el extrusor interprete la extrusión como posiciones absolutas.

Este es el valor predeterminado en repetidor.

M83: Establecer extrusora en modo relativo

Ejemplo: M83

hace que el extrusor interprete los valores de extrusión como posiciones relativas.

M84: detener espera inactiva

Ejemplo: M84

Detenga la espera de ralentí en todos los ejes y extrusoras. En algunos casos, la espera inactiva provoca ruidos molestos, que se pueden detener desactivando la espera. Tenga en cuenta que al deshabilitar la espera inactiva durante la impresión, obtendrá problemas de calidad. Esto se recomienda solo entre o después de printjobs.

En Marlin, M84 también se puede usar para configurar o deshabilitar el tiempo de espera inactivo. Por ejemplo, “M84 S10” dejará inactivos los motores paso a paso después de 10 segundos de inactividad. “M84 S0” deshabilitará el tiempo de espera inactivo; los steppers permanecerán encendidos independientemente de la actividad.

M92: Establecer axis_steps_per_unit

Ejemplo: M92 X <newsteps> Sprinter y Marlin

Permite la programación de pasos por unidad de eje hasta que los componentes electrónicos se restablecen para el eje especificado. Muy útil para la calibración.

M98: Macro / Subprograma de llamadas

Ejemplo: M98 Pmymacro.g

Ejecuta la macro en el archivo mymacro.g. En los Códigos G convencionales para máquinas CNC, el parámetro P normalmente se refiere a un número de línea en el propio programa (P2000 ejecutaría la Macro comenzando en la línea O2000, por ejemplo). Para RepRap, que casi siempre tiene algún tipo de dispositivo de almacenamiento masivo incorporado, simplemente se refiere al nombre de un archivo GCode que se ejecuta mediante la llamada G98. Ese archivo GCode no necesita terminar con un M99 (retorno) ya que el final del archivo automáticamente produce un retorno. Por lo general, es una buena idea comenzar una macro con una instrucción M120 (Push) y finalizarla con una instrucción M121 (Pop), las llamadas macro qv generalmente no pueden anidarse o ser recursivas; es decir, no puede llamar a una macro desde una macro (aunque algunas implementaciones pueden permitir esto).

M99: Regresar de Macro / Subprograma

Ejemplo: M99

Vuelve de una llamada M98.

M98: Obtener axis_hysteresis_mm

En desuso: enfrentamientos con el código G estándar M98 anterior

Ejemplo: M98

Informe los valores de histéresis actuales en mm para todos los ejes.

Propuesto para Marlin

M99: Establecer axis_hysteresis_mm

En desuso: enfrentamientos con el código G estándar M99 anterior

Ejemplo: M99 X <mm> Y <mm> Z <mm> E <mm>

Permite la programación de la histéresis del eje. Poleas mecánicas, engranajes y roscas pueden tener histéresis cuando cambian de dirección. Es decir, una cierta cantidad de pasos ocurren antes de que ocurra el movimiento. Puede medir cuántos mm se pierden por histéresis y establecer sus valores con este comando. Cada vez que un eje cambia de dirección, se agregarán estos mm adicionales para compensar la histéresis.

Propuesto para Marlin

M101: Encienda el extrusor 1 (Adelante), Deshacer retracción

M101 en el firmware 

Si hay un extrusor de CC, enciéndalo. De lo contrario, deshaga la retracción del filamento, lo que significa que la extrusora está lista para la extrusión. Complemento a M103.

M101 en otros firmwares

Obsoleto. Con respecto a la retracción del filamento, ver M227, M228, M229.

M102: Encienda el extrusor 1 (reversa)

Obsoleto.

M103: apague todos los extrusores, retracción del extrusor

M103 en el firmware 

Si hay un extrusor de CC, apáguelo. De lo contrario, retraiga el filamento con la esperanza de evitar el babeo de la boquilla. Complemento a M101.

M103 en otros firmwares

Obsoleto. Con respecto a la retracción del extrusor, ver M227, M228, M229.

M104: Establecer la temperatura del extrusor

Ejemplo: M104 S190

Ajuste la temperatura del extrusor actual a 190 o C y regrese el control al host inmediatamente ( es decir, antes de que el extrusor haya alcanzado esa temperatura). El firmware Duet-dc42 también admite el parámetro T opcional (generado por slic3r) para especificar a qué herramienta se aplica el comando. Ver también M109.

Esto está en desuso porque las temperaturas deben establecerse utilizando los comandos G10 y T (qv).

 

M104 en el firmware de la taza de té

En el firmware de la taza de té, M104 se puede usar adicionalmente para manejar todos los dispositivos que usan un sensor de temperatura. Admite el parámetro P adicional, que es un índice basado en cero en la lista de sensores en config.h. Para dispositivos sin sensor de temperatura, consulte M106 .

Ejemplo: M104 P1 S100

Ajuste la temperatura del dispositivo conectado al segundo sensor de temperatura a 100 ° C.

M105: Obtenga la temperatura del extrusor

Ejemplo: M105

Solicite la temperatura del extrusor actual y la base de construcción en grados Celsius. Las temperaturas se devuelven a la computadora host. Por ejemplo, la línea enviada al host en respuesta a este comando se ve así:

ok T: 201 B: 117

La expansión / generalización de M105 se considerará utilizando el parámetro S1 como se indica en Pronterface I / O Monitor

En Repetier también puede agregar X0 para obtener valores sin procesar:

M105 X0
==> 11: 05: 48.910: T: 23.61 / 0 @: 0 T0: 23.61 / 0 @ 0: 0 RAW0: 3922 T1: 23.89 / 0 @ 1: 0 RAW1: 3920
Extensión Duet-dc42

El firmware Duet-dc42 devuelve una respuesta con formato JSON si se incluye el parámetro S2 o S3. Esto es utilizado por el panel de control de pantalla táctil. La respuesta comprende un único objeto JSON, sin anidamiento de objetos o matrices. Es similar al objeto devuelto por la solicitud de estado de la interfaz web, pero se omiten algunos campos. Aquí hay una respuesta de muestra cuando se usa S2:

{"estado": "I", "calentadores": [25.0,29.0,28.3], "activo": [- 273.1,0.0,0.0], "en espera": [- 273.1,0.0,0.0], "hstat" : [0,2,1], "pos": [- 11.00,0.00,0.00], "extr": [0.0,0.0], "sfactor": 100.00,
 "efactor": [100.00,100.00], "herramienta": 1, "sonda": "535", "fanRPM": 0, "referenciado": [0,0,0], "fracción_impresa": 0.572}

El significado de estos campos es:

estado: I = inactivo, P = imprimiendo desde la tarjeta SD, S = detenido (es decir, necesita un reinicio), C = ejecutando el archivo de configuración
calentadores: temperaturas actuales del calentador, numeradas según la máquina (normalmente, el calentador 0 es la cama)
activo: temperaturas activas de los calentadores
en espera: temperaturas en espera de los calentadores
hstat: estado de los calentadores, 0 = apagado, 1 = en espera, 2 = activo, 3 = falla
pos: las posiciones X, Y y Z del cabezal de impresión
extr: las posiciones de las extrusoras
sfactor: el factor de velocidad actual (ver comando M220)
efactor: los factores de extrusión actuales (ver comando M221)
herramienta: el número de herramienta seleccionado. Cero generalmente significa que no se seleccionó ninguna herramienta.
sonda: la lectura de la sonda Z
fanRPM: el ventilador de enfriamiento RPM
Homed: el estado de los ejes X, Y y Z (o torres en un delta). 0 = el eje no ha sido dirigido por lo que la posición no es confiable, 1 = el eje ha sido dirigido por lo que la posición es confiable.
fracción_impresa: la fracción del archivo que se está imprimiendo actualmente que se ha leído y procesado al menos parcialmente.

La respuesta cuando se usa S3 comprende estos campos más algunos adicionales que generalmente no cambian (por ejemplo, el nombre de la máquina y las longitudes de los ejes) y, por lo tanto, no es necesario buscarlos con tanta frecuencia. En particular, el nombre de la máquina se devuelve en la variable “myName”.

Los campos pueden estar en cualquier orden en la respuesta. Otras implementaciones pueden omitir campos y / o agregar campos adicionales.

M106: ventilador encendido

Ejemplo: M106 S127

Encienda el ventilador de enfriamiento a media velocidad.

El parámetro obligatorio ‘S’ declara el valor PWM (0-255). M106 S0 apaga el ventilador. En algunas implementaciones, pwm se especifica mediante una fracción real: M106 S0.7.

M106 en firmware Duet

El firmware Duet-dc42 también admite un parámetro I opcional. Si este parámetro está presente y es mayor que cero, la salida del ventilador de enfriamiento se invierte. Esto hace que la salida del ventilador de enfriamiento sea adecuada para alimentar la entrada PWM de un ventilador de 4 cables a través de un diodo. Si el parámetro está presente y es cero o negativo, la salida no se invierte. Si el parámetro no está presente, el estado invertido / no invertido permanece sin cambios. El valor predeterminado en el encendido no está invertido.

Si se pasa el parámetro ‘R’ cuando se utiliza el firmware Duet-zpl (0,96 g +), se establecerá el último valor de ventilador conocido. Si se pasa el parámetro ‘S’ junto con ‘R’, el firmware no restablecerá el último valor conocido del ventilador. Esto puede ser útil para los archivos de macro de cambio de herramienta.

M106 en firmware de TeaCup

Además de lo anterior, el firmware de Teacup utiliza M106 para controlar dispositivos generales. Admite el parámetro P adicional, que es un índice basado en cero en la lista de calentadores / dispositivos en config.h.

Ejemplo: M106 P2 S255

Encienda el dispositivo # 3 a toda velocidad / potencia.

Nota : Al encender un calentador equipado con sensor de temperatura con M106 y M104 al mismo tiempo, el control de temperatura anulará el valor dado en M106 rápidamente.

M107: ventilador apagado

Obsoleto. Utilice M106 S0 en su lugar.

M108: Establecer la velocidad del extrusor

Establece la velocidad del motor de la extrusora. (Desaprobado en el firmware actual, ver M113)

M109: Establecer la temperatura del extrusor y esperar

M109 en teaCup

Innecesario. Para imitar el comportamiento de Marlin, use M104 seguido de M116 .

M109 en Marlin, Sprinter (puerto ATmega), Duet

Ajuste la temperatura del calentador del extrusor en grados centígrados y espere a que se alcance esta temperatura.

Ejemplo: M109 S185

El firmware Duet-dc42 también admite el parámetro T opcional (generado por slic3r) para especificar a qué herramienta se refiere el comando (ver más abajo).

M109 en Sprinter (puerto 4pi)

Parámetros: S (opcional), establece el valor de temperatura objetivo. Si no se especifica, espera la temperatura establecida por M104 . R (opcional), establece el valor máximo del rango de temperatura objetivo.

Ejemplo: M109 S185 R240 // establece la temperatura del extrusor en 185 y espera que la temperatura esté entre 185 y 240.

Si tiene varias extrusoras, use el parámetro T o P para especificar qué extrusora desea configurar / esperar.

Otra forma de hacer esto es usar G10 .

M110: Establecer número de línea actual

Ejemplo: M110 N123

Establezca el número de línea actual en 123. Por lo tanto, la siguiente línea esperada después de este comando será 124.

M111: Establecer nivel de depuración

Ejemplo: M111 S6

Establezca el nivel de información de depuración transmitida al host en el nivel 6. El nivel es el OR de tres bits:

#define DEBUG_ECHO (1 << 0)
#define DEBUG_INFO (1 << 1)
#define DEBUG_ERRORS (1 << 2)

Por lo tanto, 6 significa enviar información y errores, pero no repetir los comandos. (Este es el valor predeterminado de RepRap).

Para el firmware que admite Ethernet e interfaces web, M111 S9 activará la información de depuración web sin cambiar ninguna otra configuración de depuración, y M111 S8 la desactivará. La depuración web generalmente significa que las solicitudes HTTP se reflejarán en la interfaz USB, al igual que las respuestas.

Ejemplo: M253

M112: parada de emergencia

Ejemplo: M112

Cualquier movimiento en progreso se termina inmediatamente, luego RepRap se cierra. Todos los motores y calentadores están apagados. Se puede volver a iniciar presionando el botón de reinicio en el microcontrolador maestro. Ver también M0 y M1.

M113: Establecer extrusor PWM

Ejemplo: M113

Configure el PWM para el extrusor seleccionado actualmente. Por sí solo, este comando configura RepRap para usar el potenciómetro incorporado en la placa del controlador del extrusor para configurar el PWM para la potencia de pasos del extrusor seleccionado actualmente. Con un campo S:

M113 S0.7

hace que el PWM se establezca en el valor S (70% en este caso). M113 S0 apaga el extrusor, hasta que se envía un comando M113 que no sea M113 S0.

M114: Obtener posición actual

Ejemplo: M114

Esto hace que la máquina RepRap informe sus coordenadas X, Y, Z y E actuales al host.

Por ejemplo, la máquina devuelve una cadena como:

ok C: X: 0.00 Y: 0.00 Z: 0.00 E: 0.00

En Marlin, los primeros 3 números son la posición del planificador. Las otras posiciones son las posiciones de la función paso a paso. Esto ayuda a depurar un error de función paso a paso anterior.

X: 0.00 Y: 0.00 RZ: 0.00 LZ: 0.00 Cuenta X: 0.00 Y: 0.00 RZ: 41.02 LZ: 41.02

M115: Obtenga la versión de firmware y las capacidades

Ejemplo: M115

Solicite la versión de firmware y las capacidades del microcontrolador actual Los detalles se devuelven a la computadora host como clave: pares de valores separados por espacios y terminados con un salto de línea.

datos de muestra del firmware:

ok PROTOCOL_VERSION: 0.1 FIRMWARE_NAME: FiveD FIRMWARE_URL: http% 3A // reprap.org MACHINE_TYPE: Mendel EXTRUDER_COUNT: 1

Este código M115 se implementa de manera inconsistente y no se debe confiar en que exista o que se envíe correctamente en todos los casos. Una implementación inicial se comprometió a svn para el firmware FiveD Reprap el 11 de octubre de 2010. Actualmente se está discutiendo el trabajo para definir más formalmente las versiones de protocolo (octubre de 2010). 

Ejemplo: M116

Espere a que todas las temperaturas y otras variables que cambian lentamente lleguen a sus valores establecidos. Ver también M109.

La versión de firmware Duet-dc42 0.78c y posterior admite un parámetro P opcional, que se utiliza para especificar un número de herramienta. Si este parámetro está presente, entonces el sistema solo espera que las temperaturas asociadas con esa herramienta lleguen a sus valores establecidos. Esto es útil durante los cambios de herramienta, para esperar a que la nueva herramienta se caliente sin necesariamente esperar que la anterior se enfríe por completo.

M117: Obtener posición cero

Ejemplo: M117

Esto hace que la máquina RepRap informe las coordenadas X, Y, Z y E en pasos no mm al host que encontró cuando tocó por última vez el cero se detiene para esos ejes. Es decir, cuando pone a cero X, se registra la coordenada x de la máquina cuando llega al tope final de X. Este valor debería ser 0, por supuesto. Pero si la máquina se ha desviado (por ejemplo, bajando pasos), entonces no será así. Este comando le permite medir y diagnosticar tales problemas. (E se incluye para completar. Normalmente no tiene un tope final).

M117 en Marlin, Smoothie y Duet-dc42: Mostrar mensaje

Ejemplo: M117 Hola Mundo

Esto hace que el mensaje dado se muestre en la línea de estado en una pantalla LCD adjunta. El comando anterior mostrará Hello World.

M118: Negociar características

Ejemplo: M118 P42

Este código M es para pruebas futuras. NO firmware o hostware soporta esto en este momento. Se utiliza junto con la palabra clave FEATURES de M115.

 

M119: Obtener estado de fin de carrera

Ejemplo: M119

Devuelve el estado actual de las paradas finales X, Y, Z configuradas. Tiene en cuenta cualquier configuración de ‘tope final invertido’, por lo que uno puede confirmar que la máquina está interpretando los topes finales correctamente.

M120: empujar

Empuje el estado de la máquina RepRap en una pila. Exactamente qué variables se empujan depende de la implementación (al igual que la profundidad de la pila, una profundidad típica podría ser 5). Sin embargo, un mínimo razonable podría ser

  1. Avance actual, y
  2. Si los movimientos (y la extrusión por separado) son relativos o absolutos

M121: Pop

Recupere el último estado empujado a la pila.

M122: diagnosticar

El envío de un M122 hace que RepRap transmita información de diagnóstico, por ejemplo, a través de un enlace serie USB.

M123: valor del tacómetro

El envío de un M123 hace que RepRap transmita valores de tacómetro de filamento de todas las extrusoras.

M124: parada inmediata del motor

Inmediatamente detiene todos los motores.

M126: válvula abierta

Ejemplo: M126 P500

Abra la válvula del extrusor (si tiene una) y espere 500 milisegundos para que lo haga.

M127: Válvula de cierre

Ejemplo: M127 P400

Cierre la válvula del extrusor (si tiene una) y espere 400 milisegundos para que lo haga.

M128: Extrusora Presión PWM

Ejemplo: M128 S255

Valor PWM para controlar la presión interna del extrusor. S255 es presión total.

M129: presión del extrusor desactivada

Ejemplo: M129 P100

Además de establecer la presión del extrusor en 0, puede desactivar la presión por completo. P400 esperará 100 ms para hacerlo.

M130: establecer el valor PID P

Ejemplo: M130 P 0 S 8.0 # Establece el factor 0 P del calentador en 8.0

Teacup puede controlar varios calentadores con controles PID independientes. Para el valor predeterminado que se muestra en https://github.com/Traumflug/Teacup_Firmware/blob/master/config.default.h , el calentador 0 es el extrusor (P0) y el calentador 1 es la cama (P1).

Las unidades proporcionales PID de la taza de té están en pwm / 255 cuentas por trimestre C, por lo que para convertir de cuentas / C, dividiría por 4. Por el contrario, para convertir de cuenta / qC a cuenta / C, multiplique por 4. En el ejemplo anterior, S = 8 representa un Kp = 8 * 4 = 32 cuentas / C.

M131: establecer el valor PID I

Ejemplo: M131 P 1 S 0.5 # Establece el factor 1 del calentador en 0.5

Las unidades integrales PID de Teacup están en pwm / 255 cuentas por (cuarto C * cuarto de segundo), por lo que para convertir de cuentas / qCqs, dividirías por 16. Por el contrario, para convertir de cuentas / qCqs a cuentas / Cs, multiplica por 16. En el ejemplo anterior, S = 0.5 representa un Ki = 0.5 * 16 = 8 cuentas / Cs.

M132: establecer el valor PID D

Ejemplo: M132 P 0 S 24 # Establece el factor 0 D del calentador en 24.0

Las unidades derivadas PID de Teacup están en pwm / 255 cuentas por (cuarto de grado por 2 segundos), por lo que para convertir de cuentas / C, dividirías por 4. Por el contrario, para convertir de cuenta / qC a cuenta / C, multiplica por 8. En el ejemplo anterior, S = 24 representa un Kd = 24 * 8 = 194 cuentas / (C / s).

M133: Establecer valor límite de PID I

Ejemplo: M133 P 1 S 264 # Establece el valor límite del calentador 1 I en 264

Las unidades de límite integral PID de la taza de té están en cuartos-C * cuartos de segundos, por lo que para convertir de Cs, multiplicaría por 16. Por el contrario, para convertir de qC * qs a C * s, divida por 16. En el ejemplo anterior, S = 264 representa un límite integral de 16.5 C * s.

M134: Escribir valores PID en EEPROM

Ejemplo: M134

M135: Establecer intervalo de muestra PID

Ejemplo: M135 S300

Configure el PID para medir temperaturas y calcule la potencia para enviar a los calentadores cada 300 ms.

M136: Imprimir configuración PID al host

Ejemplo: M136 P1 # calentador de impresión 0 parámetros PID para alojar

M140: temperatura del lecho (rápido)

Ejemplo: M140 S55

Ajuste la temperatura del lecho de construcción a 55 o C y regrese el control al host inmediatamente ( es decir, antes de que el lecho haya alcanzado esa temperatura). Hay un campo R opcional que establece la temperatura de espera de la cama: M140 S65 R40.

M141: Temperatura de la cámara (rápida)

Ejemplo: M141 S30

Ajuste la temperatura de la cámara a 30 o C y regrese el control al host inmediatamente ( es decir, antes de que la cámara haya alcanzado esa temperatura).

M142: Presión de mantenimiento

Ejemplo: M142 S1

Ajuste la presión de mantenimiento de la cama a 1 bar.

La presión de mantenimiento está en bar. Para hardware que solo tiene retención de encendido / apagado, cuando la presión de retención es cero, apague la retención, cuando la presión de retención sea mayor que cero, encienda la retención.

M143: temperatura máxima de final caliente

Ejemplo: M143 S275

Ajuste la temperatura máxima del hot-end a 275C

Cuando la temperatura del hot-end excede este valor, tome contramedidas, por ejemplo, una parada de emergencia. Esto es para evitar daños por calor.

M144: espera junto a tu cama

Ejemplo: M144

Cambie la cama a su temperatura de espera. M140 lo devuelve a su temperatura activa; no es necesario ningún argumento para ese uso de M140.

M160: número de materiales mezclados

Ejemplo: M160 S4

Este comando ha sido reemplazado por el comando de definición de herramienta M563 (ver más abajo).

Establezca el número de materiales, N, que el extrusor actual puede manejar con el número especificado. El valor predeterminado es 1.

Cuando N> = 2, entonces el campo E que controla la extrusión requiere N valores separados por dos puntos “:” después de esto así:

M160 S4
G1 X90.6 Y13.8 E2.24: 2.24: 2.24: 15.89
G1 X70.6 E0: 0: 0: 42.4
G1 E42.4: 0: 0: 0

La segunda línea se mueve directamente al punto (90.6, 13.8) extruyendo un total de 22.4 mm de filamento. La relación de mezcla para el movimiento es 0.1: 0.1: 0.1: 0.7.

La tercera línea retrocede 20 mm en X extruyendo 42,4 mm de filamento.

La cuarta línea no tiene efecto físico.

M190: Espere a que la temperatura de la cama alcance la temperatura objetivo

Ejemplo: M190 S60

Esto esperará hasta que la temperatura de la cama alcance los 60 grados, imprimiendo la temperatura del extremo caliente y la cama cada segundo.

M200: Establecer el diámetro del filamento / Obtener estado final


Sin parámetros, se carga la grilla predeterminada, y con la extensión especificada se intenta cargar la grilla especificada. Si no está disponible no modificará la cuadrícula actual. Si Z se guardó con el archivo de cuadrícula, cargará la Z guardada con la cuadrícula.

M200 Dm.mmm establece el diámetro del filamento en m.mmm milímetros. Se utiliza con la ‘calibración volumétrica’ y el código G generado para un filamento ideal de 1.128 mm de diámetro, que tiene un volumen de 1 mm ^ 3 por milímetro. La intención es poder generar un código g independiente del filamento.

 

 

 

M201: establecer la aceleración máxima de impresión

Ejemplo: M201 X1000 Y1000 Z100 E2000

Establece la aceleración que los ejes pueden hacer en unidades / segundo ^ 2 para los movimientos de impresión. Para mantener la coherencia con el resto del movimiento del Código G, esto debería estar en unidades / (minuto ^ 2), pero eso da números realmente tontos y uno puede perderse en todos los ceros. Entonces para esto usamos segundos.

M202: establecer la aceleración máxima de desplazamiento

en unidades / s ^ 2 para movimientos de desplazamiento (M202 X1000 Y1000) ¡¡Sin usar en Marlin !!

M203: establecer la velocidad de avance máxima

Ejemplo: M203 X6000 Y6000 Z300 E10000

Establece los avances máximos que su máquina puede hacer en mm / min.

M204: establecer la aceleración predeterminada

S movimientos normales T el filamento solo se mueve (M204 S3000 T7000) im mm / seg ^ 2 también establece el tiempo mínimo del segmento en ms (B20000) para evitar la falta de amortiguación y la velocidad mínima de avance M20

M205: configuración avanzada

velocidad mínima de desplazamiento S = durante la impresión T = solo desplazamiento, B = tiempo mínimo de segmento X = máximo tirón xy, Z = máximo tirón Z, E = máximo tirón E

M206:

M206 Marlin – Establecer desplazamiento de inicio

Ejemplo: M206 X10.0 Y10.0 Z-0.4

Los valores especificados se agregan a la posición final cuando se hace referencia a los ejes. Lo mismo se puede lograr con un G92 justo después del recorrido de referencia (G28, G161).

Con el firmware Marlin, este valor se puede guardar en EEPROM con el comando M500.

Un comando similar es G10, la alineación de estos dos está sujeta a discusión .

Con Marlin 1.0.0 RC2, un valor negativo para z eleva (!) Su cabezal de impresión.

Repetidor M206 – Establecer el valor de eeprom

M206 T [tipo] P [pos] [Sint (largo) [Xfloat] Establecer el valor de eeprom

Ejemplo: M206 T3 P39 X19.9

Establece Jerk en 19.9

M207: calibre el eje z detectando la longitud máxima z

Ejemplo: M207

Después de colocar la punta de la boquilla en la posición que espera que se considere Z = 0, emita este comando para calibrar el eje Z. Realizará una rutina de referencia del eje az y calculará la distancia recorrida en este proceso. El resultado se almacena en EEPROM como z_max_length. Para utilizar este método de calibración, la máquina debe estar utilizando un tope Z MAX.

Este procedimiento suele ser más confiable que los ajustes mecánicos de un tope Z MIN.

NOTA: Marlin y Smoothie definen M207 como “establecer la longitud de retracción S [mm positivo] F [avance mm / min] Z [elevación / salto adicional], permanece en mm independientemente de la configuración de M200”

M208: Establecer el recorrido máximo del eje

Ejemplo: M208 X250 Y210 Z180

Los valores especificados establecen los límites del software para el desplazamiento del eje en la dirección positiva.

 

Con el firmware Duet-dc42, en una impresora cartesiana también puede usar este comando para especificar límites de software para el desplazamiento del eje en la dirección negativa, agregando el parámetro S1. Los límites de eje que establece también son las posiciones asumidas cuando se activa un tope final.

NOTA: Marlin / Smoothie define M208 como “recuperación de conjunto = longitud de retracción S [mm positivo excedente al M207 S *] F [avance mm / seg]”

M209: habilitar retracción automática

Ejemplo: M209 S1

Este valor booleano S 1 = verdadero o 0 = falso permite la detección de retracción automática si la rebanadora no era compatible con G10 / 11: cada movimiento normal de solo extrusión se clasificará como retracción según la dirección.

M210: Establecer velocidades de avance de referencia

Ejemplo: M210 X1000 Y1500

Establezca los avances utilizados para el retorno a los valores especificados en mm por minuto.

M211: Deshabilitar / Habilitar paradas finales de software

El valor booleano S 1 = habilitar o 0 = deshabilitar controla el estado del extremo del software.

El valor booleano X, Y o Z 1 = tope final máximo o 0 = tope final mínimo selecciona el tope final que se controla.

Ejemplo: M211 X1 Y1 Z1 S0

Deshabilita los extremos de X, Y, Z max

Ejemplo: M211 X0 S1

Habilita la parada final de X min.

Ejemplo: M211

Imprime el estado actual de las paradas finales de software.

M220: Establecer porcentaje de anulación del factor de velocidad

Ejemplo: M220 S80

S <factor en porcentaje> – establece el porcentaje de anulación del factor de velocidad

M221: Establecer porcentaje de anulación del factor de extrusión

Ejemplo: M221 S70

S <factor en porcentaje> - establece el porcentaje de anulación del factor de extrusión

M226: Pausa iniciada por Gcode

Ejemplo: M226

Inicia una pausa de la misma manera que si se presiona el botón de pausa. Es decir, la ejecución del programa se detiene y la impresora espera la interacción del usuario. Esto coincide con el comportamiento de M1 en el estándar NIST RS274NGC G-code y M0 en el firmware Marlin.

M227: Activar inversión automática y cebado

Ejemplo: M227 P1600 S1600

P y S son pasos.

“Invertir y cebar” significa que el filamento del extrusor se retrae cierta distancia cuando no está en uso y se empuja hacia adelante la misma cantidad antes de volver a usarlo. Esto ayudará a evitar el babeo de la boquilla del extrusor. El firmware de Teacup implementa esto con M101 / M103.

M228: Deshabilitar reversa automática y cebado

Ejemplo: M228

Ver también M227.

M229: Habilitar inversión automática y cebado

Ejemplo: M229 P1.0 S1.0

P y S son rotaciones de tornillo extrusor. Ver también M227.

M230: Deshabilitar / Habilitar espera para cambio de temperatura

Ejemplo: M230 S1

S1 Desactivar espera para cambio de temperatura S0 Activar espera para cambio de temperatura

M240: arranque del motor de la cinta transportadora / eco apagado

Ejemplo: M240

La cinta transportadora permite comenzar la producción en masa de una pieza con un reprap.

El eco puede controlarse en algunos firmwares con M111

M241: Detener el motor de la cinta transportadora / eco activado

Ejemplo: M241

El eco puede controlarse en algunos firmwares con M111

M245: Iniciar enfriador

Ejemplo: M245

Se utiliza para enfriar piezas / calentar el lecho después de la impresión para quitar fácilmente las piezas después de imprimir

M246: detener el refrigerador

Ejemplo: M246

M251: Mida los pasos Z desde la parada de referencia (impresoras Delta)

M251 S0 – Restablecer, S1 – Imprimir, S2 – Almacenar en longitud Z (también EEPROM si está habilitado)

(Esta es una característica única de Repetier-Firmware)

M280: establecer la posición del servo

(Marlin, Repetidor M340 )

M280 – establece la posición del servo absoluta. P: índice de servo, S: ángulo o microsegundos (Marlin)

M300: reproducir sonido de pitido

Uso: M300 S <frecuencia Hz> P <duración ms>

Ejemplo: M300 S300 P1000

Reproduzca un pitido, úselo para notificar eventos importantes como el final de la impresión.  También es compatible con el firmware duet-dc42 a través de la sonda en el panel de control de la pantalla táctil adicional.

M301: establecer parámetros PID

   Ejemplo: M301 P1 I2 D3; Marlin (solo extremo caliente; ver M304 para PID de cama)
   Ejemplo: M301 P1 I2 D3 C5 H1 B20 W127; RepRapFirmware
   Ejemplo: M301 P1 I2 D3 T0.2 H1 B20 W127 S0.8; Duet-dc42
   Ejemplo: M301 S0 P30 I10 D10; Smoothie (S0 es 0 para el hotend, y 1 para la cama, pueden aplicarse otros números a su configuración, dependiendo del orden en que declare los módulos de control de temperatura)

Establece valores proporcionales, integrales y derivados para hot end. El valor C se refiere a una velocidad de extrusión. El valor T es el PWM adicional aproximado (en una escala de 0 a 255) necesario para mantener cada temperatura adicional de 1C, que se usa para preajustar el acumulador I cuando se cambia completamente el encendido / apagado del calentador a PID. H es el número del calentador, predeterminado 1 (es decir, el primer calentador del extrusor).

El firmware Duet-dc42 interpreta un término P negativo como indicativo de que se debe usar el control de bolsa en lugar de PID (no se recomienda para el extremo caliente, pero está bien para H0, que es el calentador de la cama). El factor S está diseñado para permitir que se realice una corrección por un cambio en la potencia del calentador y / o el voltaje de la fuente de alimentación sin tener que cambiar todos los demás parámetros. Por ejemplo, un factor S de 0.8 significa que la salida final del controlador PID debe escalarse a 0.8 veces el valor estándar, lo que compensaría un calentador que es un 25% más potente que el estándar o un voltaje de suministro de 12.5 % más alto que el estándar.

 

Implementación alternativa

Ejemplo: M301 W125

Consulte M130, M131, M132, M133 para ver los códigos de Teacup para configurar los parámetros PID.

M302: permitir extrusiones en frío

Esto le dice a la impresora que permita el movimiento del motor del extrusor, cuando el hotend no está a la temperatura de impresión

Ejemplo: M302

Cuando se utilizan los firmwares Duet-zpl o Duet-dc42, ejecutar M302 solo informará el estado actual de extrusión en frío. Para permitir o denegar extrusiones / retracciones en frío, ejecute “M302 P1” o “M302 P0”.

M303: ejecutar el ajuste PID

La sintonización de PID se refiere a un algoritmo de control utilizado en algunas repeticiones para ajustar el comportamiento de calentamiento para los extremos calientes y las camas calentadas. Este comando genera valores proporcionales (Kp), integrales (Ki) y derivados (Kd) para el hotend o bed (E-1). Envíe el código apropiado y espere a que la salida actualice el firmware.

Uso final caliente:

M303 S <temperatura> C <ciclos>

Uso de la cama:

M303 E-1 C <ciclos> S <temperatura>

Ejemplo:

M303 C8 S175

La sintaxis de Smoothie, donde E0 es el primer módulo de control de temperatura (generalmente el extremo caliente) y E1 es el segundo módulo de control de temperatura (generalmente la cama):

M303 E0 S190

M304: Establecer parámetros PID – Cama

   Ejemplo: M304 P1 I2 D3; establecer kP = 3, kI = 2, kD = 3
   Ejemplo: M301 P1 I2 D3 T0.7 H0 B20 W127; Duet-dc42 firmware
   Ejemplo: M304; Parámetros de informe

Establece valores proporcionales, integrales y derivados para la cama. El firmware Duet-dc42 interpreta un término P negativo como indicativo de que se debe usar el control de la bolsa en lugar del PID. En el firmware Duet-dc42, este comando es idéntico al M301, excepto que el parámetro H (número de calentador) está predeterminado en cero.

 

M305: Establecer parámetros de termistor y ADC


Establece los parámetros para la medición de temperatura. Compatible con la versión RepRapPro de Marlin, RepRapFirmware de 0.78c y firmware Duet-dc42.

Ejemplo: M305 P1 T100000 R1000 B4200

Esto le dice al firmware que para el calentador 1 (parámetro P: 0 = lecho calentado, 1 = primer extrusor) la resistencia del termistor 25C (parámetro T) es 100Kohms, la resistencia de la serie del termistor (parámetro R) es 1Kohms, el termistor beta (parámetro B ) es 4200. Todos los parámetros que no sean P son opcionales. Si solo se proporciona el parámetro P, se muestran los valores existentes.

Además, el firmware Duet-dc42 admite una funcionalidad de corrección ADC y una función de selección de termistor.

Ejemplo: M305 P1 T100000 R1000 B4200 H14 L-11 X2

Aquí la corrección de ADC de extremo alto (parámetro H) es 14, la corrección de ADC de extremo bajo (parámetro L) es -11 y la entrada del termistor n. ° 2 se usa para medir la temperatura del calentador n. ° 1.

M306: establecer el desplazamiento inicial calculado a partir de la posición del cabezal de herramienta

Ejemplo: M306 Z0

Los valores especificados se agregan a la posición final de parada calculada cuando se hace referencia a los ejes. El valor calculado se deriva de la distancia del cabezal de la herramienta desde el punto cero del eje actual.

El usuario normalmente colocaría el cabezal de la herramienta en el punto cero del eje y emitiría el comando M306.

Este valor se puede guardar en EEPROM con el comando M500 (como valor M206).

Implementado en Smoothieware

M320: Activar nivel automático (repetidor)

(Solo repetidor)

M321: Desactivar nivel automático (repetidor)

(Solo repetidor)

M322: restablecer matriz de nivel automático

Ejemplo: M322 S1

El parámetro S1 es obligatorio.

(Solo repetidor)

M340: controla los servos

(Solo repetidor , Marlin ver M280 )

M340 P <servoId> S <pulseInUS> / ServoID = 0..3 pulseInUs = 500..2500

Los servos están controlados por un ancho de pulso normalmente entre 500 y 2500 con 1500 ms en la posición central. 0 apaga el servo.

M355: enciende / apaga las luces de la carcasa

Habilitar luces
M355 S1
Desactivar luces
M355 S0
Estado del informe
M355

Cada llamada o cambio en el menú LCD envía un cambio de estado para el software de alojamiento conectado como

Luces del estuche encendidas
La caja se apaga
Sin luces de caja

M360: informe de configuración de firmware

 

Este comando ayuda al software de alojamiento a detectar detalles de configuración, que el usuario necesitaría ingresar de otra manera. Debería reducir el tiempo de configuración considerablemente si es compatible.

Ejemplo
M360
Respuesta
Config: Baudrate: 250000
Config: InputBuffer: 127
Configuración: NumExtruder: 2
Configuración: MixingExtruder: 0
Configuración: HeatedBed: 0
Configuración: Tarjeta SD: 1
Configuración: Fan: 1
Configuración: LCD: 1
Configuración: SoftwarePowerSwitch: 1
Configuración: XHomeDir: -1
Config: YHomeDir: -1
Configuración: ZHomeDir: -1
Configuración: Soporte G10G11: 1
Config: SupportLocalFilamentchange: 1
Config: CaseLights: 0
Configuración: ZProbe: 1
Config: Autolevel: 0
Configuración: EEPROM: 1
Configuración: PrintlineCache: 24
Configuración: JerkXY: 30.00
Configuración: JerkZ: 0.30
Config: RetractionLength: 3.00
Config: RetractionLongLength: 13.00
Config: RetractionSpeed: 40.00
Configuración: RetractionZLift: 0.00
Config: RetractionUndoExtraLength: 0.00
Configuración: RetractionUndoExtraLongLength: 0.00
Config: RetractionUndoSpeed: 0.00
Configuración: XMin: 0.00
Configuración: YMin: 0.00
Configuración: ZMin: 0.00
Configuración: XMax: 250.00
Configuración: YMax: 150.00
Configuración: ZMax: 90.00
Configuración: X Tamaño: 250.00
Configuración: Y Tamaño: 150.00
Configuración: Z Tamaño: 90.00
Config: XPrintAccel: 250.00
Configuración: YPrintAccel: 250.00
Configuración: ZPrintAccel: 100.00
Configuración: XTravelAccel: 250.00
Configuración: YTravelAccel: 250.00
Configuración: ZTravelAccel: 100.00
Config: PrinterType: Cartesian
Configuración: MaxBedTemp: 120
Config: Extr.1: Jerk: 50.00
Config: Extr.1: MaxSpeed: 100.00
Config: Extr.1: Aceleración: 10000.00
Config: Extr.1: Diámetro: 0.00
Config: Extr.1: MaxTemp: 220
Config: Extr.2: Jerk: 50.00
Config: Extr.2: MaxSpeed: 100.00
Config: Extr.2: Aceleración: 10000.00
Config: Extr.2: Diámetro: 0.00
Config: Extr.2: MaxTemp: 220

Códigos de calibración SCARA (Morgan)

Para facilitar la calibración de Reprap Morgan, se utilizan los siguientes códigos M para configurar la máquina

M360: Mover a la posición Theta de 0 grados

Los brazos se mueven a una posición donde el brazo de dirección Theta es paralelo al borde superior de la plataforma. Luego, el usuario calibra la posición moviendo los brazos con los botones de desplazamiento en software como pronterface hasta que esté perfectamente paralela. El uso de M114 mostrará la compensación de calibración que luego se puede programar en la unidad usando M206 (compensación inicial) X representa Theta.

Smoothieware: M360 P0 tomará la posición actual como paralela al borde de la plataforma y almacenará el desplazamiento en el desplazamiento de ajuste de referencia (M666) No se necesita más interacción del usuario.

M361: Moverse a la posición Theta de 90 grados

Theta se mueve a 90 grados con el borde de la plataforma. El usuario calibra utilizando brazos de desplazamiento para colocar exactamente 90 grados. Los pasos por grado se pueden leer con M114 y programar con M92. X representa a Theta. Programe Y (Psi) al mismo valor inicialmente. Recuerde repetir M360 después de ajustar los pasos por grado.

Smoothieware: M360 P0 aceptará la posición actual como 90 grados al borde de la plataforma. Se calculan nuevos pasos por ángulo y se ingresan en la memoria (M92). No se requiere ninguna otra interacción del usuario, excepto para rehacer M360.

M362: Mover a la posición Psi 0 grados

Los brazos se mueven a Psi 0 grados. Verificar solo después de otras calibraciones Theta

M363: Mover a la posición Psi 90 grados

Los brazos se mueven a Psi 90 grados. Verificar solo después de otras calibraciones Theta

M364: Mover a la posición de 90 grados Psi + Theta

Mueva los brazos para formar un ángulo de 90 grados entre los brazos Psi internos y externos. Calibre moviéndose hasta que el ángulo sea exactamente 90 grados. Lea con M114 y calibre el valor en el desplazamiento inicial M206. Psi está representado por Y.

Smoothieware: M364 P0 aceptará la posición actual como 90 grados entre los brazos. El desplazamiento se almacena como un ajuste de compensación (M666) y no se requiere más interacción del usuario, excepto para guardar todos los cambios a través de M500

M365: factor de escala SCARA

Ajuste la escala XY y Z ingresando el factor. El 100% de escala (predeterminado) está representado por 1

M370: nivel de cama manual Morgan – mapa claro

Borre el mapa y prepárese para la calibración Uso:

      M370

      M370 X <divisiones> Y <divisiones>

Sin parámetros, el valor predeterminado es X5 Y5 (25 puntos de calibración) Al especificar parámetros, se recomiendan números desiguales.

M371: pasar a la siguiente posición de calibración

Mover a la siguiente posición para la calibración. El usuario mueve la cama hacia el hotend hasta que solo toca

M372: registrar el valor de calibración y pasar a la siguiente posición

Se registra la posición de la cama y la máquina se mueve a la siguiente posición. Repita hasta que todas las posiciones programadas

M373: modo de calibración del nivel final del lecho

Finalice el modo de calibración y habilite la matriz de corrección z. No guarda la matriz actual

M374: Guardar cuadrícula de calibración

Guarda la cuadrícula de calibración. (Smoothieware) Uso:

      M374
      M374 <extensión de archivo> Z 

Sin parámetros, la cuadrícula se guarda en el archivo de cuadrícula predeterminado que se carga en el arranque El parámetro especifica la extensión del archivo de cuadrícula, útil para archivos de cuadrícula especiales, como una superficie de impresión especial, como una placa de impresión extraíble. La adición de Z guardará adicionalmente el desplazamiento de referencia M Z6 Z en el archivo de cuadrícula

M375: matriz de visualización / matriz de carga

Mostrar la matriz de calibración de nivel de lecho (Marlin) Cargar archivo de matriz de cuadrícula (Smoothieware)

      M375
      M375 <extensión de archivo>

Sin parámetros, se carga la grilla predeterminada, y con la extensión especificada se intenta cargar la grilla especificada. Si no está disponible no modificará la cuadrícula actual. Si Z se guardó con el archivo de cuadrícula, cargará la Z guardada con la cuadrícula.

M400: espera a que finalicen los movimientos actuales

Termina todos los movimientos actuales y, por lo tanto, borra el búfer. Eso es idéntico a G4 P0.

Ejemplo: M400

M420: Establecer colores RGB como PWM

Uso: M420 R <PWM rojo (0-255)> E <PWM verde (0-255)> B <PWM azul (0-255)>

Ejemplo: M420 R255 E255 B255

Establezca el color de sus LED RGB que están conectados a pines habilitados para PWM. Tenga en cuenta que el color verde está controlado por el valor E en lugar del valor G debido a que el código G es un código primario que no se puede anular.

M540: configurar la dirección MAC

Ejemplo: M540 P0xBE: 0xEF: 0xDE: 0xAD: 0xFE: 0xED

Establece la dirección MAC de RepRap. Esto debe hacerse antes que cualquier otro comando de red. La dirección MAC es seis números hexadecimales de un byte separados por dos puntos. El prefijo 0x es opcional en revisiones de firmware posteriores.

M550: Establecer nombre

Ejemplo: M550 PGodzilla

Establece el nombre de RepRap en (en este caso) Godzilla. El nombre puede ser cualquier cadena de caracteres imprimibles, excepto ‘;’, que aún significa comenzar a comentar.

M551: Establecer contraseña

Ejemplo: M551 Pmy-palabra-muy-secreta

En máquinas que necesitan una contraseña para activarlas, establezca esa contraseña. El código ‘P’ no es parte de la contraseña. Tenga en cuenta que, dado que esto se envía de forma clara, no ofrece (ni pretende) ofrecer un nivel de seguridad muy alto. Pero en las máquinas que están (digamos) en una red, evita que los usuarios no autorizados puedan jugar sin hacer nada. La contraseña puede contener caracteres imprimibles, excepto ‘;’, que aún significa comenzar a comentar.

M552: establecer dirección IP

Ejemplo: M552 P192.168.1.14

Establece la dirección IP de la máquina RepRap en (en este caso) 192.168.1.14. Es posible que sea necesario reiniciar antes de usar la nueva dirección IP. Si no se especifica ningún campo P, esto hace eco de la dirección IP existente configurada. Si S0 se agrega así: M552 S0 P192.168.1.14 la red está deshabilitada.

M553: Establecer máscara de red

Ejemplo: M553 P255.255.255.0

Establece la máscara de red de la máquina RepRap en (en este caso) 255.255.255.0. Es posible que sea necesario reiniciar antes de usar la nueva máscara de red. Si no se especifica ningún campo P, esto hace eco de la máscara de red existente configurada.

M554: Establecer puerta de enlace

Ejemplo: M554 P192.168.1.1

Establece la dirección IP de la puerta de enlace de la máquina RepRap en (en este caso) 192.168.1.1. Es posible que sea necesario reiniciar antes de utilizar la nueva dirección IP de la puerta de enlace. Si no se especifica ningún campo P, esto refleja la dirección IP de la puerta de enlace existente configurada.

M555: Establecer compatibilidad

Ejemplo: M555 P1

Para el firmware que puede hacerlo, establece el firmware en un modo donde su entrada y (especialmente) salida se comporta exactamente como otro firmware establecido. El valor del argumento P es:

Valor P Firmware
0 0 Nativo (es decir, sea cual sea el firmware)
1 RepRap_Firmware
2 Aguja
3 Taza para té
4 4 Sprinter
5 5 Repetidor

M556: compensación del eje

Ejemplo: M556 S100 X0.7 Y-0.2 Z0.6

Aunque con cuidado y ajuste, se puede configurar un RepRap con sus ejes en ángulo recto entre sí dentro de la precisión de la máquina, ¿quién quiere molestarse con cuidado y ajuste cuando el problema puede ser resuelto por el software? Esto le dice al software las tangentes de los ángulos entre los ejes de la máquina obtenidos al imprimir y luego medir una pieza de prueba. El parámetro S (100 aquí) es la longitud de un triángulo a lo largo de cada eje en mm. Las figuras X, Y y Z son el número de milímetros del lado corto del triángulo que representa cuán fuera de verdad es un par de ejes. La figura X es el error entre X e Y, la figura Y es el error entre Y y Z, y la figura Z es el error entre X y Z. Los valores positivos indican que el ángulo entre el par de ejes es obtuso, negativo agudo.

M557: Establecer punto de sonda Z

Ejemplo: M557 P1 X30 Y40.5

Establezca los puntos en los que se sondeará la cama para compensar que su plano esté ligeramente fuera de la horizontal. El valor P es el índice del punto (los índices comienzan en 0) y los valores X e Y son la posición para mover la extrusora 0 a la sonda. Una implementación debe permitir un mínimo de tres puntos (P0, P1 y P2). Esto solo registra las coordenadas del punto; en realidad no hace el sondeo. Ver G32.

M558: Establecer tipo de sonda Z

Ejemplo: M558 P0 X1 Y0 Z1

La sonda AZ puede ser un interruptor, un sensor de proximidad IR o algún otro dispositivo. Esto selecciona cuál usar. P0 indica que no hay una sonda Z presente. P1 proporciona una sonda IR no modulada, o cualquier otro tipo de sonda que emule una sonda IR no modulada (la salida de la sonda es una señal analógica que aumenta al disminuir la altura de la boquilla por encima del lecho). Si hay una señal de control en la sonda, se activa cuando el tipo de sonda es P1. P2 especifica una sonda IR modulada, donde la modulación es ordenada directamente por el firmware de la placa principal utilizando la señal de control a la sonda. P3 selecciona una sonda Z alternativa llevando la señal de control a la sonda baja. P4 selecciona un interruptor (en el Duet, este debe estar conectado a los pines del extremo E0).

Los parámetros X, Y y Z especifican si cada eje usa la sonda Z para referencia o no. Si el parámetro no es cero, la sonda Z se usa para dirigir ese eje. si el parámetro es cero, el interruptor de final de carrera para ese eje se usa para el recorrido de referencia. Ver también G31 y G32.

El firmware Duet-dc42 admite un parámetro R adicional, que especifica el canal de modulación. El canal 0 (predeterminado) usa el pin de modulación de sonda Z estándar en Duet 0.6. El canal 1 selecciona el pin de modulación de sonda Z alternativo en el Duet 0.7.

Las versiones de firmware Duet-dc42 1.00e en adelante admiten el parámetro adicional H. Esto especifica la altura de inmersión desde la cual se realiza el sondeo en respuesta a un comando G30 cuando el parámetro P está presente, o un comando G32.

M559: subir archivo de configuración

Ejemplo: M559

Si RepRap lo admite, esto carga un archivo que se ejecuta al reiniciar para configurar la máquina. Este archivo generalmente es un archivo de código G especial. Después de enviar M559, el archivo debe enviarse, terminando con un M29 (qv).

M560: subir archivo de página web

Ejemplo: M560

Para RepRaps que tienen soporte web y que pueden ser manejados por un navegador web, esto carga el archivo que es la página de control para RepRap. Después de enviar M560, el archivo (generalmente un archivo HTML) debe enviarse, terminado por la cadena

<! - ** EoF ** ->

. Claramente, esa cadena no puede existir en el cuerpo del archivo, pero se puede poner al final para facilitar este proceso. Esto no debería ser una restricción demasiado grave …

M561: Establecer transformación de identidad

Ejemplo: M561

Esto cancela cualquier ajuste del plano de la cama como resultado del sondeo (o cualquier otra cosa) y hace que la máquina se mueva en el sistema de coordenadas del usuario.

M562: error de reinicio de temperatura

Ejemplo: M562 P2

Restablezca una falla de temperatura en el calentador / sensor 2. Si RepRap se apagó y bloqueó un calentador porque detectó una falla, esto restablecerá la condición de falla y le permitirá usar el calentador nuevamente. Obviamente para ser utilizado con precaución. Si la falla persiste, se bloqueará nuevamente después de que haya emitido este comando. P0 es la cama; P1 el primer extrusor, y así sucesivamente.

M563: definir una herramienta

Ejemplo: M563 P3 D0: 5: 6 H1: 3

Las herramientas son generalmente (aunque no necesariamente) extrusoras. El campo P especifica el número de herramienta. Los números de herramienta pueden tener cualquier valor entero positivo y 0. El campo D especifica las unidades utilizadas por la herramienta; en este caso, las unidades 0, 5 y 6. La unidad 0 es la primera unidad de la máquina después de las unidades de movimiento (generalmente X, Y y Z). Si no hay campo D, la herramienta no tiene unidades. El campo H especifica los calentadores de la herramienta; en este caso, los calentadores 1 y 3. El calentador 0 suele ser el lecho caliente (si lo hay), por lo que el primer calentador del extrusor suele ser 1. Si no hay campo H, la herramienta no tiene calentadores.

Las herramientas se manejan utilizando múltiples valores en el campo E de los comandos G1, cada uno de los cuales controla la unidad correspondiente en el campo D anterior, de la siguiente manera:

G1 X90.6 Y13.8 E2.24: 2.24: 15.89
G1 X70.6 E0: 0: 42.4

La primera línea se mueve directamente al punto (90.6, 13.8) extruyendo un total de 2.24 mm de filamento de ambas unidades 0 y 5 y 15.98 mm de filamento de la unidad 6.

La segunda línea retrocede 20 mm en X extruyendo 42,4 mm de filamento desde la unidad 6.

Normalmente, un comando M563 es seguido inmediatamente por un comando G10 para establecer las compensaciones y temperaturas de la herramienta.

Está permitido que diferentes herramientas compartan algunas (o todas) de sus unidades y calentadores. Entonces, por ejemplo, puede definir dos herramientas con hardware idéntico, pero que solo funcionan a diferentes temperaturas.

Si utiliza el comando M563 con un valor P para una herramienta que ya se ha definido, esa herramienta se redefine utilizando los nuevos valores que proporcione.

El firmware Duet-dc42 admite una forma adicional del comando M563. El comando:

M563 S1

significa agregar 1 (el valor del parámetro S) a todos los números de herramienta que se encuentran en el resto del flujo de entrada actual (por ejemplo, el archivo actual si el comando se lee desde un archivo en la tarjeta SD), o hasta un nuevo comando M563 de Este formulario se ejecuta. El propósito de esto es proporcionar compatibilidad entre el firmware Duet, en el que los números de herramienta generalmente comienzan en 1, y programas como slic3r que asumen que las herramientas están numeradas desde cero.

M564: ejes límite

Ejemplo: M564 S0

Permitir movimientos fuera del volumen de impresión, o no. Si el parámetro S es 0, puede enviar códigos G para conducir el RepRap fuera de su volumen de trabajo normal, e intentará hacerlo. Cuidado con el usuario … Si establece el parámetro S en 1, RepRap no pensará fuera de la caja. El comportamiento predeterminado es S = 1.

M565: Establecer desplazamiento de sonda Z

Ejemplo: M565 X3 Y4.5 Z-2.37

Ajuste el desplazamiento desde la punta del extrusor hasta la posición de la sonda. Los valores X, Y y Z son el delta entre el extrusor y la posición real de disparo de la sonda. Si el punto de activación de la sonda está debajo del extrusor (típico), el desplazamiento Z será negativo. Esto solo registra el desplazamiento del punto; en realidad no hace el sondeo. Ver G32.

M566: Establecer cambio de velocidad instantáneo permitido

Ejemplo: M566 X20 Y20 Z2 E10

Evite una limitación del algoritmo de algunos firmwares, que no puede calcular los tiempos de paso para un inicio permanente. Teacup Firmware y Smoothieware no tienen esta limitación, por lo que M566 es obsoleto allí.

M566 establece las velocidades en mm / minuto que los ejes pueden hacer desde un inicio permanente. Si un algoritmo de aceleración comienza un movimiento con una velocidad cero en otros firmwares y luego acelera a partir de eso, puede dar problemas cuando se usa la velocidad inicial cero para calcular un paso de tiempo entre pulsos paso a paso al principio: el paso de tiempo termina siendo infinito. Entonces, estos sistemas tienen pequeñas velocidades iniciales para comenzar. Esto los establece.

La variante dc42 de RepRapFirmware no tiene la limitación, sino que utiliza este parámetro para determinar el cambio de velocidad máximo permitido de cada motor en las curvas.

M567: Establecer relaciones de mezcla de herramientas

Ejemplo: M567 P2 E0.1: 0.2: 0.1: 0.6

El ejemplo establece la relación de mezcla para la herramienta 2 (el valor P). Cuando se activa la mezcla (ver M568), solo se deben enviar valores E individuales en un comando G1 (cualquier valor E adicional se ignorará, pero no es ilegal):

G1 X20 E1.3

Esto se moverá a X = 20 extruyendo una longitud total de filamento de 1.3 mm. La primera unidad de la herramienta 2 extruirá 0.1 * 1.3 mm, la segunda 0.2 * 1.3 mm y así sucesivamente. Las proporciones no tienen que sumar 1.0, el cálculo realizado es como se acaba de describir. Pero es mejor si lo hacen.

Ver también M568.

M568: activar / desactivar las relaciones de mezcla de herramientas

Ejemplo: M568 P2 S0

Active / desactive las relaciones de mezcla automáticas para la herramienta 2. Si el parámetro S es 0, la mezcla se desactiva; si no es cero, está activado.

Después de desactivar el comando, las instrucciones G1 deben enviar tantos valores E como la herramienta tenga unidades:

G1 X20 E0.2: 0.4: 0.166: 0.3

El estado apagado es el predeterminado.

M569: establecer valores de dirección del eje

Ejemplo: M569 P0 S1

Establezca el valor de control para el variador especificado por P que lo envía hacia adelante al valor dado en el campo S. Después de enviar el ejemplo, enviar un 1 a X (unidad 0) lo hará avanzar, enviar un 0 lo hará retroceder. Obviamente para ser utilizado con extrema precaución …

M570: establecer el tiempo de espera del calentador

Ejemplo: M570 S120

Después de encender un calentador, espere 120 segundos para que se acerque a la temperatura establecida. Si lleva más tiempo que esto, marque una falla del calentador.

M571: Establecer salida en extrusión

Ejemplo: M571 S0.5

Esto activa una salida cada vez que se realiza la extrusión y la desactiva cuando finaliza la extrusión. La salida podría controlar un ventilador o un agitador o cualquier otra cosa que necesite funcionar justo cuando está ocurriendo la extrusión. El parámetro S establece el valor de PWM en la salida. 0.0 está apagado; 1.0 está completamente encendido.

M572: Establecer o informar la compensación de elasticidad del extrusor

Ejemplo: M572 P3 S0.06

Esto establece el tiempo de compensación en segundos (parámetro S) para la elasticidad del extrusor Bowden para la unidad especificada (parámetro P). Compatible con el firmware Duet-dc42. Tiene un efecto similar al factor EXTRUDER_ADVANCE_K en el firmware de Marlin. Normalmente, la compensación debe aplicarse solo a las unidades de extrusión (unidades 3 y superiores).

M573: Informe calentador PWM

Ejemplo: M573 P1

Esto proporciona un promedio de funcionamiento (usualmente más de cinco segundos) del PWM al calentador especificado por el campo P. Si conoce el voltaje del suministro y la resistencia del calentador, esto le permite calcular la potencia que va al calentador.

M574: configuración de final de carrera establecida

Ejemplo: M574 X1 Y2 Z0 S1

Esto define el tipo de interruptor de fin de carrera o sensor óptico que tiene la impresora para cada eje: 0 = ninguno, 1 = extremo bajo, 2 = extremo alto. El parámetro opcional S define si la entrada de fin de carrera está activa alta (S1, la predeterminada) o baja (S0). Diseñado para su uso con placas que proporcionan una entrada de tope final único para cada eje que puede usarse para un tope final alto o bajo, como el Duet. Compatible con el firmware Duet-dc42. En las impresoras delta, los parámetros XYZ se refieren a las torres y los topes finales normalmente deberían ser de gama alta.

M575: establecer parámetros de comunicación serie

Ejemplo: M575 P1 B57600 S1

Esto establece los parámetros de comunicación del canal de comunicaciones en serie especificado por el parámetro P. P0 especifica la interfaz serial principal (típicamente un puerto USB, o serial-over-USB), mientras que P1 especifica un puerto serial auxiliar (por ejemplo, el puerto usado para conectar un PanelDue). El parámetro B es la velocidad de transmisión requerida (este parámetro generalmente se ignora si el puerto es un verdadero puerto USB). El parámetro S es un mapa de bits de características. El bit más bajo, si se establece, especifica que solo los comandos que incluyen una suma de verificación válida se deben aceptar desde este canal de comunicaciones.

M665: establecer configuración delta

Ejemplo: M660 L250 R160 S200 (Marlin), M660 L250 R160 B80 H200 (Duet-dc42)

Establezca las variables de calibración delta. L = longitud de la barra diagonal, R = radio delta, S = segmentos por segundo, B = radio del lecho de impresión, H = altura de la boquilla sobre el lecho cuando se dirige después de permitir las correcciones del tope final.

No creo que sea una buena idea tener dos implementaciones diferentes para el mismo código G, y también cuestiono el valor práctico de especificar el radio del lecho de impresión al definir una configuración delta, ya que muchas impresoras delta usan una impresión cuadrada o rectangular cama. Entonces, quizás deberíamos apegarnos al comando definido por Marlin como la definición de este comando, y usar un comando diferente o un conjunto de comandos para definir la forma y el tamaño de la cama de impresión. – AndrewBCN ( charla ) 23:10, 31 de enero de 2015 (PST)

M666: Ajuste el ajuste del tope final

Ejemplo M666 X-0.1 Y + 0.2 Z0

Establece ajustes delta finales.

M906: Establecer corrientes del motor

Ejemplo: M906 X300 Y500 Z200 E350

Establece las corrientes para enviar a los motores paso a paso para cada eje. Los valores están en miliamperios.

M909: establecer microstepping

Ejemplo: M909 X3 Y5 Z2 E3

Establezca el valor de microstepping para cada uno de los steppers. En Canjear, esto se implementa como un valor 2 ^, por lo que
M909 X2 establece micropasos en el eje X en 2 ^ 2 = 4,
M909 Y3 establece microstepping en el eje Y en 2 ^ 3 = 8, etc.

M998: solicitud de reenvío de línea

Ejemplo: M998 P34

Solicite un reenvío de la línea 34. En algunas implementaciones, el código de manejo de entrada sobrescribe el código G entrante con esto cuando detecta, por ejemplo, un error de suma de verificación. Luego lo deja al intérprete GCode para solicitar el reenvío.

M999: reiniciar después de ser detenido por error

Ejemplo: M999

G: Lista todos los códigos G

Ejemplo: G

Esto enumera todos los códigos G implementados en el firmware con descripción y lo envía de vuelta al host.
(Nota: esto se ha implementado en Canjear , por lo que es solo una propuesta)

M: Lista todos los códigos M

Ejemplo: M

Esto enumera todos los códigos M implementados en el firmware con descripción y lo envía de vuelta al host.
(Nota: esto se ha implementado en Canjear , por lo que es solo una propuesta)

T: Seleccionar herramienta

Ejemplo: T1

Seleccione la herramienta (o en el extrusor de implementaciones anteriores) número 1 para construir.

La secuencia seguida es:

  1. Configure la herramienta actual a sus temperaturas de espera especificadas por G10 (ver arriba),
  2. Configure la nueva herramienta a sus temperaturas de operación especificadas por G10 y espere a que todas las temperaturas se estabilicen,
  3. Aplique cualquier desplazamiento X, Y, Z para la nueva herramienta especificada por G10,
  4. Usa la nueva herramienta.

Seleccionar una herramienta inexistente (100, por ejemplo) solo hace el Paso 1. anterior. Es decir, deja todas las herramientas en su estado de espera. Por supuesto, puede usar el comando G10 de antemano para establecer la temperatura de espera en cualquier cosa que desee.

Tenga en cuenta que es posible que desee moverse a una posición de estacionamiento antes de ejecutar un comando T para permitir que el nuevo extrusor alcance la temperatura mientras no está en contacto con la impresión. Es aceptable que el firmware aplique un pequeño desplazamiento [por convención (-1 mm x número de herramienta) en Y] a la posición actual cuando se ingresa la secuencia anterior para permitir que los cambios de temperatura surtan efecto justo fuera de la posición de estacionamiento. Cualquier compensación de este tipo debe, por supuesto, deshacerse cuando finalice el procedimiento.

Si el valor Z cambia en los desplazamientos y la herramienta se mueve hacia arriba, entonces el movimiento Z se realiza antes de que X e Y se muevan. Si Z se mueve hacia abajo, X e Y se hacen primero.

Algunas implementaciones (por ejemplo, RepRapFirmware) le permiten especificar macros de código G de cambio de herramienta. Normalmente hay tres especificados (cualquiera de los cuales no puede contener comandos si se desea) que se ejecutan en este orden:

  1. Acciones para hacer con la herramienta anterior antes de su lanzamiento: nombre de macro: tfreeN.g donde N es el número de herramienta;
  2. (Se lanza la herramienta antigua);
  3. Acciones para hacer con la nueva herramienta antes de seleccionarla: nombre de macro: tpreN.g donde N es el número de herramienta;
  4. (Se selecciona una nueva herramienta); y
  5. Acciones para hacer con la nueva herramienta después de seleccionarla: nombre de macro: tpostN.g donde N es el número de herramienta.

Con tales implementaciones no hay que esperar la estabilización de la temperatura. Eso se puede lograr con un M116 en cualquiera de las macros, por supuesto.

Después de un reinicio, las herramientas no comenzarán a calentarse hasta que se seleccionen. Puede ponerlos todos a su temperatura de espera seleccionándolos por turnos, o dejarlos apagados para que solo se enciendan si / cuando los usa por primera vez. Los comandos M0, M1 y M112 los apagan a todos. Por supuesto, puede apagarlos todos con el comando M1 y luego volver a encenderlos. No olvides también encender la cama caliente (si la hay) si usas ese truco.

La numeración de herramientas puede comenzar en 0 o 1, dependiendo de la implementación. Algunas implementaciones (aquellas que usan el comando M563 para definir herramientas) permiten al usuario especificar números de herramientas, por lo que con ellas puede tener las herramientas 17, 99 y 203 si lo desea. Los números negativos no están permitidos.

Códigos de configuración EEPROM propuestos

BREVEMENTE: cada RepRap tiene una serie de parámetros físicos que deben ser persistentes, pero fácilmente configurables, como pasos de extrusión / mm, varios valores máximos, etc. Estos parámetros están actualmente codificados en el firmware, por lo que un usuario tiene que modificar, recompilar y vuelva a actualizar el firmware para cualquier ajuste. Estas configuraciones pueden almacenarse en la EEPROM de MCU y modificarse a través de algunos códigos M. 

M500: almacenar parámetros en EEPROM

Guardar los parámetros actuales en EEPROM. La bifurcación zpl del firmware Duet implementa esto y permite pasar “S1”, por lo que los parámetros modificados se pueden guardar automáticamente en EEPROM.

En Canjear, cualquier parámetro establecido a través de códigos G / M que sea diferente de lo que se lee de los archivos de configuración, se almacena de nuevo en la configuración local. Por ejemplo, la configuración de la corriente paso a paso y el microstepping a través de M906 y M907 seguido de M500 actualizarán /etc/redeem/local.cfg.

M501: leer parámetros de EEPROM

Establezca los parámetros activos a los almacenados en la EEPROM. Esto es útil para revertir parámetros después de experimentar con ellos.

M502: vuelve a la “configuración de fábrica” ​​predeterminada.

Este comando restablece todos los parámetros ajustables a sus valores predeterminados, como se establece en el firmware. Esto no restablece ningún parámetro almacenado en la EEPROM, por lo que debe seguirse con M501 si desea hacerlo.

M503: configuración de impresión

Este comando le pide al firmware que responda con la configuración de impresión actual almacenada en EEPROM. La salida de respuesta incluye los comandos del Código G para producir cada configuración. Por ejemplo, los valores de Pasos por unidad se muestran como un comando M92.

Respuestas de la máquina RepRap a la computadora host

Toda la comunicación está en caracteres ASCII imprimibles. Los mensajes enviados de regreso a la computadora host son terminados por una nueva línea y se ven así:

xx [número de línea para reenviar] [T: 93.2 B: 22.9] [C: X: 9.2 Y: 125.4 Z: 3.7 E: 1902.5] [Puede haber alguna depuración u otra información aquí]

xx puede ser uno de:

Okay

rs

!!

ok significa que no se ha detectado ningún error.

rs significa reenviar, y es seguido por el número de línea para reenviar.

!! significa que se ha detectado una falla de hardware. La máquina RepRap se apagará inmediatamente después de enviar este mensaje.

Los valores T: y B: son la temperatura del extrusor seleccionado actualmente y el lecho, respectivamente, y solo se envían en respuesta a M105. Si tales temperaturas no existen (por ejemplo, para una extrusora que funciona a temperatura ambiente y no tiene un sensor ), se devuelve un valor por debajo del cero absoluto (-273 o C).

C: significa que las coordenadas siguen. Esos son los valores X: Y: etc. Estos solo se envían en respuesta a M114 y M117.

La máquina RepRap también puede enviar líneas que se vean así:

// Esta es alguna información de depuración u otra información en una línea por sí sola. Se puede enviar en cualquier momento.

Dichas líneas siempre estarán precedidas por // .

En la última versión de Pronterface y pronto Octoprint un comentario especial del formulario:

// action: comando

se permite enviar desde el firmware, el comando actualmente se puede pausar, reanudar o desconectar, lo que ejecutará esos comandos en el host. Como este también es un comentario, otros hosts simplemente ignorarán estos comandos.

La respuesta más común es simplemente:

Okay

Cuando la máquina arranca, envía la cadena.

comienzo

una vez al host antes de enviar cualquier otra cosa. Esto no debe ser reemplazado o aumentado por números de versión y similares. M115 (ver arriba) los solicita.

Todo esto significa que cada línea enviada por RepRap a la computadora host, excepto la línea de inicio, tiene un prefijo de dos caracteres (uno de ok , rs , !! o // ). La máquina nunca debe enviar una línea sin dicho prefijo.


Excepciones :

1. El firmware Marlin 1.0.0 Gen6 no sigue la regla de dos caracteres. ‘rs’ es en realidad ‘Reenviar’ y ‘!!’ es ‘Error’ Líneas de ejemplo:

  • Error: el número de línea no es la línea actual + 1. Última línea: 7
  • Reenviar: 8
  • Escribir en el archivo: print.gco
  • Terminado de guardar el archivo.
  • Archivo abierto: print.gco Tamaño: 22992
  • Archivo seleccionado

¿Cuándo en el código base se produjo este cambio y qué otros firmwares se ven afectados?

2. El firmware Duet-dc42 responde a algunos comandos con una cadena de respuesta en formato JSON, terminada por una nueva línea. Esto permite que las revisiones de firmware posteriores incluyan información adicional sin molestar a los clientes (p. Ej., Paneles de control con pantalla táctil) que no lo esperan, y que las respuestas se describan por sí mismas para que el cliente no se confunda si las respuestas se retrasan o pierden. Los comandos afectados son:

  • M105 S2
  • M105 S3
  • M20 S2
  • M36