Truco del código G

Escribir código que se repite en diferentes ubicaciones xy. 4 de junio de 2004
Pregunta
Máquina:
Controlador Andi Exact 51/ Fanuc 18. Cámara alfa

Además, ¿hay alguna forma de insertar un código antes de 'M00' para hacer sonar un timbre y avisar al operador que es hora de voltear una pieza o limpiar los cortes antes de la siguiente operación? Respuestas del foro
(Foro CNC) Del colaborador G:

Una subrutina paramétrica es perfecta para esta aplicación. Trabajo con controladores Fagor, por lo que mi código real es diferente, pero deberías poder descifrarlo y aplicarlo. Funciona así. Vaya a la ubicación de su primer círculo u otro elemento y luego marque este lugar como el comienzo de su subrutina. El fogor usa esto:

G23N8
(G23 es el comienzo de la rutina y N8 es el nombre de la subrutina; puede ser entre N0 y N99)

Luego cambie a programación incremental (G91) y produzca una pieza.
Señale el final de la subrutina con G24.
Vuelva a absoluto (g90).


Vaya al siguiente punto de inicio y active la subrutina con G21 N8.1.
(El N8.1 debe llamar al programa N8 una vez)

Si la forma de tu pieza es extensa, esto funciona de maravilla. También funciona bien si tienes que hacer varias pasadas por la misma parte.

En total, se ve así:

(MOVER A LA 1.ª UBICACIÓN)
G23N8
G91
(AQUÍ ESTÁN TUS LÍNEAS DE CÓDIGO)
G24
G90
(MOVER A UNA NUEVA UBICACIÓN)
G21N8.1
(MOVER A UNA NUEVA UBICACIÓN)
G21N8.1
(MOVER A NUEVO....ETC.)


Del colaborador K:

Mi Multicam tiene un comando que convierte la última posición del trabajo en el nuevo hogar desde donde comenzar y reinicia el trabajo desde allí. Aún así, esto sólo tiene sentido cuando el trabajo tiene muchas líneas, formas 3D o algo así. Puedes recorrer un largo camino con una hoja de cálculo (Excel) para desmontar, editar y volver a montar.

Del colaborador J:

Está utilizando casi exactamente la misma combinación de máquinas que yo, por lo que es posible que pueda proporcionarle un código muy preciso.

Sin embargo, tengo algunas preguntas. Supongo que un diseño estándar de fila/columna no es aceptable, ya que seguramente no ofrece un rendimiento muy bueno. (¿Quieres filas escalonadas?)
¿Cómo sueles sujetar las piezas? ¿Aspirar solo?

Aquí también ejecutamos un Andi/Fanuc 11/AlphaCAM.


Del interrogador original:

Lo que necesito saber es cómo hacer algo como la publicación anterior. Un procedimiento de 'repetición en x##,y##'. La razón de todo esto es que podríamos economizar la memoria de nuestro controlador ya que mantenemos una cantidad de programas diarios en la máquina y aún tenemos espacio para especiales.


Del colaborador J:

El primer bucle...

ContarA=0


2 - hacer un cambio de coordenadas una cantidad de veces esa contravariable
G52 x-(CuentaA*200)
El 200 es el turno que requieres para tu circulo o lo que sea
3 - corte su círculo básico en la esquina de su hoja (tenga en cuenta que el programa cortará en la ubicación del stock porque el desplazamiento es "cero" debido a que el contador está configurado en cero al inicio)
4 - pregunte si tiene la cantidad de filas que necesita (probablemente no); Si es así, sal del circuito.
IR AL FINAL
5 - agrega un número al contador
ContarA=ContarA+1
6 - repite este bucle
IR A inicio

Lo principal a tener en cuenta es que cuando vayas a repetir este bucle, *no* debes repetir la línea que pone el contador a cero. Obviamente, la condición que estableciste para salir del bucle nunca se cumplirá si cometes este error. Aquí hay un código:

N1
CONTADOR=0
N2
G52 X-(CONTADOR*200)
*cortar caminos*
N3
SI CONTADOR=5 IR AL FINAL
CONTADOR=CONTADOR+1
IR A 2
FIN

Este bucle simple ejecutará su programa seis veces (nunca olvide el momento en que la máquina corta cuando el contador está configurado en 0), desplazando 200 mm al negativo en x cada vez. Tenga en cuenta que cuando el programa se repite, *no* repite el paso de poner el contador a cero.

Dejaré que eso se asimile y haré el doble bucle en otra publicación, luego intentaré un doble bucle real en mi máquina ya que el código debería ser casi idéntico.


Del colaborador C:

Aquí tienes un programa principal y un subprograma escritos a mano para hacer lo que quieras. Se supone que X0Y0 está en la esquina trasera derecha de la máquina, el eje X va de izquierda a derecha, el eje Y de adelante hacia atrás y se utiliza el sistema de coordenadas cartesiano estándar; por lo tanto, todas las ubicaciones absolutas de X e Y son negativas. También se supone que Z0 es la parte superior. Cada máquina es diferente, por lo que es posible que tengas que reorganizar un poco el código de tu máquina.

El programa principal va a cada punto de inicio en sucesión, trabajando de izquierda a derecha y de atrás hacia adelante. En cada punto inicial, se llama al subprograma (M98) y se ejecuta. Al final del subprograma, el control regresa al principal (M99), que avanza al siguiente punto de inicio.

Este es el estilo de programación manual básico que utilizamos durante años antes del software CAM. El uso de subprogramas puede ahorrar mucho espacio cuando tienes varias piezas sobre la mesa, especialmente si las formas son complejas. También simplifica los ajustes, ya que solo tiene que tratar con un subprograma en lugar de múltiples apariciones dentro del principal. Si tiene Macro-B (opción Fanuc) habilitada en su control, puede hacer que este programa sea más corto y paramétrico. ¡De hecho, podría hacer que el programa calcule cuántos círculos caben según el diámetro del círculo y el tamaño de la hoja utilizada!

Hoy en día utilizamos principalmente programas CAM, ya que son mucho más rápidos y precisos (¡sin errores matemáticos ni tipográficos!). La memoria también es barata, por lo que el tamaño del programa no es realmente un factor.

De todos modos, prueba esto y ve si funciona para ti.

O100(18 EN CÍRCULOS - PRINCIPAL)
(HERRAMIENTA 1 - 1/2 RECTA -G54-H11-D1)
-
-
BLOQUE DE SEGURIDAD
Y
SELECCIÓN DE HUSILLO, INICIO, ETC.
-
-
G54G90G0X-7.25Y-.25 (PUNTO DE INICIO DE LA FILA SUPERIOR DEL PRIMER CÍRCULO)
G1G43H11Z.50F200.(ACTIVAR LA COMPENSACIÓN DE ALTURA - LLEVAR AL PLANO DE SEGURIDAD .500)
M98P105(LLAMADA SUBPROGRAMA)
G90G0X-26.Y-.25
M98P105
G90G0X-44.75Y-.25
M98P105
G90G0X-63.5Y-.25
M98P105
G90G0X-82.25Y-.25
M98P105
G90G0X-82.25Y-19.(PRIMER CÍRCULO SEGUNDA FILA)
M98P105
G90G0X-63.5Y-19.
M98P105
G90G0X-44.75Y-19.
M98P105
G90G0X-26.Y-19.
M98P105
G90G0X-7.25Y-19.
M98P105
G90G0X-7.25Y-37.75(PRIMER CÍRCULO TERCERA FILA)
M98P105
G90G0X-26.Y-37.75
M98P105
G90G0X-44.75Y-37.75
M98P105
G90G0X-63.5Y-37.75
M98P105
G90G0X-82.25Y-37.75
M98P105
-
-
APAGAR - IR A CASA
-
-
M30

O105(18 EN CÍRCULOS - SUBPROGRAMA)

G91G1G42D1X-1.Z-1.30F200.(COMP ON - RAMPA DE ABAJO)
(EL VALOR Z REPRESENTA EL PLANO DE SEGURIDAD Y LA TABLA DE 3/4 Y EL CORTE PASANTE - .50+.75+.05=1.30)
X-1.F400.
G02J-9.(CÍRCULO COMPLETO - EL VALOR J DEFINE LA UBICACIÓN RELATIVA DEL PUNTO CENTRAL)
G01X-1.
G40X-1.Z1.30(COMP OFF - RAMPA HACIA EL PLANO DE SEGURIDAD)
M99(REGRESAR AL PROGRAMA PRINCIPAL)


Del colaborador C:

Después de leer la publicación del colaborador J, se me ocurre que los lenguajes macro probablemente hayan progresado un poco desde el lenguaje Macro-B de Fanuc que usé. ¡Imagínese, nombres de variables reales en lugar de números de variables!

Sólo por diversión, aquí hay una macro antigua (tenga en cuenta la fecha) que solíamos dejar residente en el control y que fue utilizada por muchos de nuestros programas antiguos. Se le pasaron variables al llamar desde el programa principal:
G65P4028A0D2.25F200.H1R.5T3.Z.50

No preguntes cómo se me ocurrió 4028 como número de programa. ¡No tengo idea!

O4028 (PERFORACIÓN DE AGUJEROS)
(VERSIÓN 1.2 - 19/08/89 - CERDOS FUERA DEL CENTRO DEL CÍRCULO)
(PARA SACAR EL CENTRO DEL AGUJERO, ESTABLEZCA H EN 1 AL LLAMADA A LA MACRO)
(LA POS DE INICIO DEBE ESTAR SOBRE EL CENTRO DEL AGUJERO)
(A=#1=AJUSTE DE DIÁMETRO)
(D=#7=DIÁMETRO DEL AGUJERO)
(F=#9=AVANCE)
(H=#11=ESTABLECER EN 1 AL CENTRO DE CERDO)
(R=#18=DISTANCIA DE VIAJE RÁPIDO A LA SUPERFICIE DE TRABAJO)
(T=#20=N° DE COMPENSACIÓN PARA EL RADIO DE LA HERRAMIENTA)
(Z=#26=PROFUNDIDAD DEL AGUJERO DESDE LA SUPERFICIE DE TRABAJO)
#2=#5001(X POS INICIO)
#3=#5002(X POS INICIO)
#4=#5003(X POS INICIO)
#12=#[2000.+#20](LEER COMPENSACIÓN DE DIÁMETRO)
#10=[#7/2-#12]+[#1/2](CALC RAD Y AGREGAR AJUSTE)
IF[#11EQ1.]GOTO100(¿CENTRO DEL CERDO?)
G91G00X[#10-.03]Z-[ABS[#18]]
G02I-[#10-.03]Z-[ABS[#26]]F#9
G01X.03
G02I-#10
X-[#10*2]I-#10Z[ABS[#26]]
G90G01Z#4
X#2Y#3
GOTO500
N100#21=[#12*.9]
G91G00X#21Z-[ABS[#18]]
G02I-#21Z-[ABS[#26]]FA#9
I-#21
#23=#21
#22=#21*2
MIENTRAS[#22LT#10]HAGA1
G01X#21
G02I-#22
#23=#22
#22=#22+#21
FIN1
G01X-[#10-#23]
G02I-#10
X-#10Y#10I-#10
X-[#10*.9]Y-[#10*.9]J-[#10*.9]Z[ABS[#26]]
G90G01X#2Y#3Z#4
N500M99


Del colaborador J:

Una cosa que no mencioné:
los bucles tienen dos funciones. No solo repiten la ruta de corte las veces requeridas, sino que también proporcionan los medios para que el programa calcule los cambios de coordenadas crecientes que necesita cada ruta de corte.

Aquí está el primer bucle nuevamente:

N10
CONTADOR=0
N20
G52 X-(CONTADOR*200)
*cortar caminos*
N30
SI CONTADOR=5 IR AL FINAL
CONTADOR=CONTADOR+1
IR A 2
FIN

Voy a cambiar los números de línea solo agregando ceros para poder agregar el segundo bucle.

Lo que debes recordar sobre el segundo ciclo es que deseas repetir el primer proceso *completo*. Nuevamente, observe dónde envía el programa para que los contadores se restablezcan correctamente. Para el siguiente bucle, que hará las columnas, *quieres* que el contador del primer bucle se restablezca a cero para obtener todas las filas.

CONTADOR1=1
N10
CONTADOR=0
N20
G52 X-(CONTADOR*200)
*cortar caminos*
N30
SI CONTADOR=5 IR A 40
CONTADOR=CONTADOR+1
IR A 2
N40
G52 Y(CONTADOR1*200)
SI CONTADOR1=3 IR AL FINAL
CONTADOR1=CONTADOR1+1
IR A 10
FIN

Es difícil verlo correctamente en esta pequeña ventana, así que escribiré el código de un programa real y lo probaré. ¿Puedes proporcionar el código de corte que tienes ahora?

Creo que podrás ver una vez que aprendas a programar bucles que puedes hacer muchas cosas con programas cortos. Mucho mejor que un programa de subrutina como se publicó anteriormente. Una de las razones es que al editar (o convertirlos en variables) los dos números que gobiernan las filas y columnas, puedes cambiar esas cantidades fácilmente. Para piezas más pequeñas, hay muchas menos líneas cuando se usan bucles.


Del colaborador J:

Colaborador C, menciona un buen punto que fui una tontería no señalar. De hecho, no puedes usar variables con nombre en el FANUC que usamos; Simplemente estaba tratando de hacer que el código fuera más fácil de entender dándole nombres significativos a las variables. Debería haberlo aclarado. Las variables en mi máquina en realidad se parecen mucho más a lo que usted dice, es decir, #123. Esto es desafortunado ya que hace que la depuración sea un poco más difícil, especialmente cuando recién estás aprendiendo.

Del colaborador C:

Colaborador J, ahora me siento mejor; por un momento pensé que estaba muy atrasado. No sé cuál es el lenguaje macro actual de Fanuc, pero cuando apareció Macro-B, ¡fue como moverse hacia la luz! Macro-A era abrumador para escribir y editar.

Se veía así:
G65H02P#102Q#101R.500

Significa agregar .500 a la var #101 y almacenar en la var #102

G65 = Esta es una declaración macro:
cada línea macro comienza con esto
H02 = La operación es suma:
cada operación tenía su propio código H
P = Dónde almacenar el resultado
Q = Primer número a sumar
R = Segundo número a sumar

¡Me alegro de que ya no tengamos que hacer eso!

PD:
Es mucho más fácil escribir tu mensaje en el Bloc de notas que pegarlo en la pequeña ventana de mensajes.


Del colaborador B:



Del colaborador S:

Colaborador C, buenas publicaciones. Puedo relacionar. Cuando se trata de Macro B, sabía más hace 3 años que ahora. Seguro que es agradable poder subirnos a nuestro Weeke y sacar parámetros que antes me llevaban una semana. La macro B todavía tiene su lugar y la uso de vez en cuando. Es como subirme a mi caballo y dar un paseo lento y seguro, en lugar de subirme a mi auto y pisar el acelerador.

Del colaborador J:

No estaba pensando cuando escribí el control que usamos. También tenemos un Fanuc 18M, por lo que esperamos que funcione en su máquina con pocas modificaciones, si es que hay alguna. El cero de nuestra máquina está atrás a la derecha, usamos la hoja unida a los pasadores en la parte delantera derecha y usamos el material inferior como cero (no preguntes, yo también lo odio).

TEN CUIDADO SI PRUEBAS ESTO SIN EDITAR---> ¡PRUEBA PRUEBA PRUEBA! él él

Espero que esto ayude:

COMENZAR
'(HOJADE15CÍRCULOS)
%
O3333 (HOJA DE 15 CÍRCULOS)
G17 G90 G21 G40 G80
M68
G08 P1
M06
'(OP 1 FINALIZAR PASAR HERRAMIENTA 101 1_2 COMP)
'(DIÁMETRO EFECTIVO 12.7)
N1 (HERRAMIENTA #101)
(1_2 COMP - PASE DE FINALIZACIÓN)
T101
M5
M11
#111=1 (CONTADOR DE FILAS)
N2
#122=0 (CONTADOR DE COLUMNAS)
N3
G52 X-[#122*395]
G0 G90 G54 X-130.157 Y-1160.915 M13 S18
G0 G43 H1 Z100.
G0 Z40.
X-130.157 Y-1160.915
Z25.
G1 G42 D33 X-193.137 Y-1133.124 F1500. Z0.
G3 X-304.675 Y-1098.475 R196.85 F6000.
X-501.525 Y-1295.325 R196.85
X-304.675 Y-1492.175 R196.85
X-107.825 Y-1295.325 R196.85
X-193.137 Y-1133.124 R196.85
G0 Z40.
SI [#122EQ5] IR A 4 (EL NÚMERO 5 ES EL CONTROL DE FILA)
#122=#122+1
IR A 3
N4
G52 Y+[#111*395]
#111=#111+1
SI [#111EQ4] IR A 5 (EL NÚMERO 4 ES EL CONTROL DE COLUMNA)
IR A 2
N5
G17 G91 G28 Z0 M95
M92
G08 P0
M07
M69
G91 G28 Z0
G28 X0Y0
G52 X0 Y0 Z0
M30
%

Viajo a 40 mm por encima de la mesa y rápido a 25 mm cuando la hoja es de 19 mm como estaba programado aquí.

¡No asumo ninguna responsabilidad por accidentes! Pruebe esto primero, utilice el bloqueo z, etc.


Del colaborador L:

COMENZAR
O0001
G91 G28 X0 Y0 Z0
G90 G40 G49 G17 M92
M06
M13 S18(12MM PLANO)
M11
G90 G54
G0 G43 H1 Z70.
X2222.4 Y415.5
M98 P2
G0 X2222.4 Y837.
G52X0. Y421.5
M98 P2
G52X0Y0
G0 X2005.95 Y1183.5
G52X-216.45Y768.
M98 P2
G52X0Y0
G0 X1872.6 Y625.65
G52 X-349.8 Y210.15
M98 P2
G52X0Y0
G0 X1768.05 Y1515.
G52 X-454.35 Y1099.5
M98 P2
G52X0Y0
G0 X1656.9 Y972.
G52 X-565.5 Y556.5
M98 P2
G52X0Y0
G0 X1522.8 Y415.5
G52 X-699.6 Y0.
M98 P2
G52X0Y0
G0X1419. Y1303.5
G52 X-803.4 Y888.
M98 P2
G52X0Y0
G0 X1306.5 Y762.
G52 X-915.9 Y346.5
M98 P2
G52X0Y0
G0 X1093.35 Y414.
G52 X-1129.05 Y-1.5
M98 P2
G52X0Y0
G0 X1068.6 Y1093.5
G52 X-1153.8 Y678.
M98 P2
G52X0Y0
G0 X1069.95 Y1515.
G52 X-1152.45 Y1099.5
M98 P2
G52X0Y0
G0 X855.45 Y745.5
G52X-1366.95Y330.
M98 P2
G52X0Y0
G0 X719.7 Y1305.15
G52 X-1502.7 Y889.65
M98 P2
G52X0Y0
G0 X617.55 Y414.
G52 X-1604.85 Y-1.5
M98 P2
G52X0Y0
G0X506.4Y957.
G52X-1716. Y541.5
M98 P2
G52X0Y0
G0 X369.75 Y1515.15
G52 X-1852.65 Y1099.65
M98 P2
G52X0Y0
G0 X268.5 Y625.5
G52 X-1953.9 Y210.
M98 P2
G52X0Y0
M92 G0 G49 H0 Z0.
M95
G91 G28 Z0
M07
G91 G28 X0Y0
M30
O2
G0 Z20.
G1 Z-12. F3600
G3 X2234.4 Y403.5 R12. F5000
G2 X2404.595 Y108.786 R196.5
X2064.205 R196.5
X2234.4 Y403.5 R196.5
G3 X2246.4 Y415.5 R12.
G0 Z30.
M99 (FIN DEL SUB 2 )
%

Puedes comprar un detector sensible (la gente lo usa para su gato o visitante) en Walmart o K-Mart. Colóquelo en el punto cero de la máquina. ¡Barato y fácil!

View full size image


Los comentarios a continuación se agregaron después de que esta discusión del foro se archivara como un artículo de la base de conocimientos (add your comment).

Comment from contributor T:
¡Demasiado trabajo manual! Prueba esto:

Escriba un programa que inicie la boquilla en la esquina de su material y ubique todos los ejes menos X e Y, luego llame a otro programa y luego ubique la máquina nuevamente. Este será su programa principal.

O1513(PRINCIPAL)
N0001 G91 G28 Z0.0
N0002 G28 A0.0 B0.0
G90
G92 X9.25 Y.25 Z11.5 A0.0 B0.0
(EN LA SIGUIENTE LÍNEA VERÁS P51514)
(LOS PRIMEROS 5 DICEN A SU SISTEMA CUÁNTOS)
(HORAS PARA LLAMAR PROGRAMA # 1514)
M98 P51514
N0003 G91 G28 Z0.0
N0004 G28 A0.0 B0.0
N0005 G28 X0.0 Y0.0
M30

Escriba un programa de movimiento de filas que indique su programa de pieza y establezca los movimientos de filas.

O1514 (MOVIMIENTO DE FILA)
(LLAMA PRIMERO AL PROGRAMA DE PIEZA X NÚMERO DE VECES)
(EN ESTE CASO SON 3 VECES)
M98P31515
G91
G28 Z0.0
G28 A0.0 B0.0
G91
G00 X-18.0 Y54.625
G92 X0.0 Y0.0
M21
M99

Ahora escriba su programa de pieza.
O1515(PROGRAMA DE PIEZAS)
G90
G52 X0.0 Y0.0 Z0.0
N0006 G00 X0.0 Y0.0
N0007 G00 Z0.0
(INICIAR LA ENTRADA)
G90
G01 Y-0,125
G02 J-9.0
(APAGADO)
M98P8000
N0008 G00 Z0.0
(LA SIGUIENTE LÍNEA ES UN MOVER AL PUNTO DE INICIO DE LA SIGUIENTE PARTE)
N0009 G00 Y-18.125
N0010 G00 A0.0 B0.0
N0011 G92 X0.0 Y0.0
M99

Cuando finalice el programa de pieza, se repetirá la cantidad de veces que especificó moviéndose a la ubicación de la siguiente pieza, que también especificó al final del programa de pieza. Luego, el programa de pieza volverá al programa de filas y terminará de ejecutarse allí, lo que moverá su herramienta a la parte superior de la siguiente fila. El programa de fila finaliza y se ejecuta nuevamente porque le indicó que se ejecutara 5 veces en el programa principal. Lo primero en el programa de fila es una llamada al programa de pieza que nuevamente se ejecuta 3 veces. El ciclo completo se repite hasta que se hayan realizado todas las repeticiones y el programa principal finalice y salga.