descargar catálogo completo en formato PDF catálogo pdf

 

Programa GCode (configurable) para Mach3: según una lista de coordenadas de agujeros, slots y cortes lineales, genera código para realizarlas

Mover la herramienta a lo largo de los ejes X,Y,Z es fácil. Escribir un código para realizar la mecanización de alguna forma geométrica simple, ya sean círculos o rectángulos, también lo es. Sin embargo, más simple y rápido sería poder escribir únicamente una lista coordenadas pertenecientes a estas figuras, y que el código GCode se genere en base a dicha lista. Nuevamente, escribir programas tan simples como éste, es fácil, pero se vuelve tedioso hacer el mismo trabajo una y otra vez. A veces es incluso más rápido que ponerse a codificar, es hacerlo moviendo la herramienta de manera manual, sin embargo, cuando la cantidad de perforaciones es alta, ya se complica utilizar el método manual.

También se pueden generar los programas utilizando modelado 3D mediante un software CAD, aunque si la geometría es simple, el código resultante de escribirlo manualmente queda bastante compacto y lindo. Para aliviar un poco la carga de tener que escribir un nuevo programa para cada situación o necesidad, aquí se permite generar el gcode (de la realización de perforaciones en secuencia) ajustando ciertos parámetros.

Consideraciones para configurar correctamente las variables:

  • El orden en el que se encuentran escritas las coordenadas, es el orden en el cual se realizarán las mecanizaciones.

Reserva de Variables (para contar loops): desde #1000

No requiero específicamente "declarar" las variables que voy a usar, pero sí preciso saber que debo reservar el espacio en memoria para dicha variable y no pisarlo con otra. Concretamente, voy a hacer uso de las siguientes variables (no voy a generar código para esta "reserva", sino que es para tenerlo en cuenta al momento de asignarle un número de parámetro a cada variable). Repito, la siguiente enumeración no es código de programa, sino que es dicho con el único fin de "acordarme yo" que estas zonas de memoria las voy a usar para una finalidad ya establecida.

  • contador_plano_z_agujero = #1000 //Cuenta iteraciones sobre plano Z para los agujeros
  • contador_plano_z_slot = #1005 //Cuenta iteraciones sobre plano Z para los slots
  • contador_plano_z_linea = #1010 //Cuenta iteraciones sobre plano Z para las líneas

Reserva de Subrutinas (que no son loops): desde O2000

No se requieren subrutinas.

    Seteo Constantes (hardcoded)

    Las constantes a continuación no pertenecen al código del programa ya que no es necesario memorizarlos dado que estos valores son tomados en el momento de la escritura del código fuente únicamente. Aquí son definidos valores constantes que a lo largo del programa será necesario escribir. Todas las coordenadas espaciales se encuentran en unidades de mm.

    Puede hacer click en parámetros coloreados en azul para modificarlos, y automáticamente la página va a refrescar y mostrar el resultado acorde con el valor ingresado.

    • diametroHerramienta = 3 //unidad=mm, a partir de este valor intenta minimizar la cantidad de pasadas sobre el eje X para ir desvastando un plano XY por completo dado un Z=constante.
    • feedRateSobrevuelo = 1000 //Variable de feedrate, normalmente no requiere cambio cuando se encuentra el feedrate ideal para determinado material
    • feedRateMecanizacion = 100 //Variable de feedrate, normalmente no requiere cambio cuando se encuentra el feedrate ideal para determinado material
    • posIni_x = 0 //Coordenada X inicial y final de la herramienta. Empieza y termina en el mismo lugar.
    • posIni_y = 0 //Coordenada Y inicial y final de la herramienta. Empieza y termina en el mismo lugar.
    • posIni_z = 0 //Coordenada Z inicial y final de la herramienta. Empieza y termina en el mismo lugar.
    • ZmecanizadoIni = 0 //Plano comienzo de mecanización
    • ZmecanizadoFin = -4 //Plano fin mecanización
    • ZmecanizadoDelta = -1 //Tamaño de pasos en mecanización
    • Zsobrevuelo = 10 //Plano Z "seguro" para que la herramienta se mueva
    • holeList = (11,12,4);(5,-1,4) //Listado de coordenadas de agujeros: "(x1,y1,diam1);(x2,y2,diam2)"
    • slotList = (11,12,4,4);(5,-1,4,4) //Listado de coordenadas de slots: "(xa,ya,xb,yb);(...)"
    • lineList = (11,12,4,5);(5,-1,4,6) //Listado de coordenadas de líneas: "(xa,ya,xb,yb);(...)"

    Constantes Calculadas (hardcoded)

    Las variables a continuación tampoco pertenecen al código del programa ya que aquí simplemente son calculados valores constantes que a lo largo del programa será necesario usar, pero no se almacenan en memoria, sino que al momento de escribir el programa se utilizan. No son para que el usuario ajuste el valor, ya que se calculan automaticamente partiendo de los datos previamente ingresados.

    • nPasadasPlano_z = 5 //Valor calculado=round[[ZmecanizadoFin-ZmecanizadoIni]/ZmecanizadoDelta]+1

    Funcion "main"

    G90 (absolute coords)
    G21 (mm mode)
    M3 (spindle on)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[11] Y[12] (Move: posicion agujero 0)
    G91 (incremental coords)
    #3001=0.5 (inicializacion variable auxiliar: radio para el recorrido de la herramienta, agujero D=4mm)
    G01 X[#3001] (mover X incremental coord)
    G90 (absolute coords)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1000 L5 ("subrutina_plano_z_agujero" para agujero 0)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[5] Y[-1] (Move: posicion agujero 1)
    G91 (incremental coords)
    #3001=0.5 (inicializacion variable auxiliar: radio para el recorrido de la herramienta, agujero D=4mm)
    G01 X[#3001] (mover X incremental coord)
    G90 (absolute coords)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1000 L5 ("subrutina_plano_z_agujero" para agujero 1)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[11] Y[12] (Move: posicion slot 0)
    #3006=12.5 (inicializacion variable auxiliar)
    #3007=13.5 (inicializacion variable auxiliar)
    #3008=2.5 (inicializacion variable auxiliar)
    #3009=2.5 (inicializacion variable auxiliar)
    G01 X[#3006] Y[#3007] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1005 L5 ("subrutina_plano_z_slot" para slot 0)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[5] Y[-1] (Move: posicion slot 1)
    #3006=6.5 (inicializacion variable auxiliar)
    #3007=0.5 (inicializacion variable auxiliar)
    #3008=2.5 (inicializacion variable auxiliar)
    #3009=2.5 (inicializacion variable auxiliar)
    G01 X[#3006] Y[#3007] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1005 L5 ("subrutina_plano_z_slot" para slot 1)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[11] Y[12] (Move: posicion line 0)
    #3011=11 (inicializacion variable auxiliar)
    #3012=12 (inicializacion variable auxiliar)
    #3013=4 (inicializacion variable auxiliar)
    #3014=5 (inicializacion variable auxiliar)
    G01 X[#3011] Y[#3012] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1010 L5 ("subrutina_plano_z_linea" para linea 0)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[5] Y[-1] (Move: posicion line 1)
    #3011=5 (inicializacion variable auxiliar)
    #3012=-1 (inicializacion variable auxiliar)
    #3013=4 (inicializacion variable auxiliar)
    #3014=6 (inicializacion variable auxiliar)
    G01 X[#3011] Y[#3012] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1010 L5 ("subrutina_plano_z_linea" para linea 1)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[0] Y[0] (Move: posicion inicial XY)
    G01 Z[0] (Move: posicion inicial Z)
    M5 (Spindle off)
    M30 (Program end and rewind)

    Subrutina "Plano Z" agujero

    O1000 ("subrutina_plano_z_agujero")
    G91 (incremental coords)
    G02 X[0] Y[0] I[#3001*-1] J[0] (incremental coord -> dibujar circulo)
    G01 Z[-1] (incremental coord -> mueve deltaZ)
    G90 (absolute coords)
    M99 (Fin subrutina)

    Subrutina "Plano Z" slot

    O1005 ("subrutina_plano_z_slot")
    G01 X[#3008] Y[#3007] (move)
    G01 X[#3008] Y[#3009] (move)
    G01 X[#3006] Y[#3009] (move)
    G01 X[#3006] Y[#3007] (move)
    G91 (incremental coords)
    G01 Z[-1] (incremental coord -> mueve deltaZ)
    G90 (absolute coords)
    M99 (Fin subrutina)

    Subrutina "Plano Z" line

    O1010 ("subrutina_plano_z_linea")
    G01 X[#3013] Y[#3014] (move)
    G01 X[#3011] Y[#3012] (move)
    G91 (incremental coords)
    G01 Z[-1] (incremental coord -> mueve deltaZ)
    G90 (absolute coords)
    M99 (Fin subrutina)

    Resultado: código gcode completo

    (Parámetros ingresados para la generación del presente código)
    (------------------------------------------------------------)
    (diametroHerramienta = 3)
    (feedRateSobrevuelo = 1000)
    (feedRateMecanizacion = 100)
    (posIni_x = 0)
    (posIni_y = 0)
    (posIni_z = 0)
    (ZmecanizadoIni = 0)
    (ZmecanizadoFin = -4)
    (ZmecanizadoDelta = -1)
    (Zsobrevuelo = 10)

    (Funcion "main")
    (--------------)
    G90 (absolute coords)
    G21 (mm mode)
    M3 (spindle on)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[11] Y[12] (Move: posicion agujero 0)
    G91 (incremental coords)
    #3001=0.5 (inicializacion variable auxiliar: radio para el recorrido de la herramienta, agujero D=4mm)
    G01 X[#3001] (mover X incremental coord)
    G90 (absolute coords)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1000 L5 ("subrutina_plano_z_agujero" para agujero 0)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[5] Y[-1] (Move: posicion agujero 1)
    G91 (incremental coords)
    #3001=0.5 (inicializacion variable auxiliar: radio para el recorrido de la herramienta, agujero D=4mm)
    G01 X[#3001] (mover X incremental coord)
    G90 (absolute coords)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1000 L5 ("subrutina_plano_z_agujero" para agujero 1)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[11] Y[12] (Move: posicion slot 0)
    #3006=12.5 (inicializacion variable auxiliar)
    #3007=13.5 (inicializacion variable auxiliar)
    #3008=2.5 (inicializacion variable auxiliar)
    #3009=2.5 (inicializacion variable auxiliar)
    G01 X[#3006] Y[#3007] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1005 L5 ("subrutina_plano_z_slot" para slot 0)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[5] Y[-1] (Move: posicion slot 1)
    #3006=6.5 (inicializacion variable auxiliar)
    #3007=0.5 (inicializacion variable auxiliar)
    #3008=2.5 (inicializacion variable auxiliar)
    #3009=2.5 (inicializacion variable auxiliar)
    G01 X[#3006] Y[#3007] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1005 L5 ("subrutina_plano_z_slot" para slot 1)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[11] Y[12] (Move: posicion line 0)
    #3011=11 (inicializacion variable auxiliar)
    #3012=12 (inicializacion variable auxiliar)
    #3013=4 (inicializacion variable auxiliar)
    #3014=5 (inicializacion variable auxiliar)
    G01 X[#3011] Y[#3012] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1010 L5 ("subrutina_plano_z_linea" para linea 0)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[5] Y[-1] (Move: posicion line 1)
    #3011=5 (inicializacion variable auxiliar)
    #3012=-1 (inicializacion variable auxiliar)
    #3013=4 (inicializacion variable auxiliar)
    #3014=6 (inicializacion variable auxiliar)
    G01 X[#3011] Y[#3012] (move)
    G01 Z[0] (Move: "ZmecanizadoIni")
    F100 ("feedRateMecanizacion")
    M98 P1010 L5 ("subrutina_plano_z_linea" para linea 1)
    F1000 ("feedRateSobrevuelo")

    G01 Z[10] (Move: "Zsobrevuelo")
    G01 X[0] Y[0] (Move: posicion inicial XY)
    G01 Z[0] (Move: posicion inicial Z)
    M5 (Spindle off)
    M30 (Program end and rewind)

    (Subrutina "Plano Z" agujero)
    (---------------------------)
    O1000 ("subrutina_plano_z_agujero")
    G91 (incremental coords)
    G02 X[0] Y[0] I[#3001*-1] J[0] (incremental coord -> dibujar circulo)
    G01 Z[-1] (incremental coord -> mueve deltaZ)
    G90 (absolute coords)
    M99 (Fin subrutina)

    (Subrutina "Plano Z" slot)
    (------------------------)
    O1005 ("subrutina_plano_z_slot")
    G01 X[#3008] Y[#3007] (move)
    G01 X[#3008] Y[#3009] (move)
    G01 X[#3006] Y[#3009] (move)
    G01 X[#3006] Y[#3007] (move)
    G91 (incremental coords)
    G01 Z[-1] (incremental coord -> mueve deltaZ)
    G90 (absolute coords)
    M99 (Fin subrutina)

    (Subrutina "Plano Z" line)
    (------------------------)
    O1010 ("subrutina_plano_z_linea")
    G01 X[#3013] Y[#3014] (move)
    G01 X[#3011] Y[#3012] (move)
    G91 (incremental coords)
    G01 Z[-1] (incremental coord -> mueve deltaZ)
    G90 (absolute coords)
    M99 (Fin subrutina)

    Powered by Abebashop
    (c) All rights reserved