Programa GCode (configurable) para Mach3: según una lista de coordenadas de agujeros, slots y cortes lineales, genera código para realizarlasMover 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:
Reserva de Variables (para contar loops): desde #1000No 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.
Reserva de Subrutinas (que no son loops): desde O2000No 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.
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.
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" agujeroO1000 ("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" slotO1005 ("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" lineO1010 ("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) |