Introducción a Macros B Fanuc
Aprende los fundamentos de la programación paramétrica para controladores Fanuc. Desde variables básicas hasta estructuras de control avanzadas.
Contenido
¿Qué son las Macros B?
Las Macros B (también conocidas como "Custom Macro B" o programación paramétrica) son una extensión del lenguaje G-Code estándar que permite crear programas CNC dinámicos y reutilizables.
A diferencia de un programa G-Code tradicional donde cada valor es fijo, con Macros B puedes:
- Usar variables para representar dimensiones, velocidades y posiciones
- Realizar cálculos aritméticos directamente en el programa
- Crear bucles para operaciones repetitivas
- Tomar decisiones con estructuras condicionales
Ejemplo comparativo
Sin Macros (código fijo):
G01 X50.0 Y25.0 F200
G01 X100.0 Y25.0
G01 X100.0 Y50.0
G01 X50.0 Y50.0
Con Macros (código paramétrico):
#1 = 50.0 (Posición X inicial)
#2 = 25.0 (Posición Y inicial)
#3 = 50.0 (Ancho del rectángulo)
#4 = 25.0 (Alto del rectángulo)
G01 X#1 Y#2 F200
G01 X[#1+#3] Y#2
G01 X[#1+#3] Y[#2+#4]
G01 X#1 Y[#2+#4]
Con el segundo enfoque, cambiar las dimensiones del rectángulo solo requiere modificar los valores de las variables al inicio.
Variables en Macro B
Las variables son contenedores que almacenan valores numéricos. Fanuc utiliza el símbolo
# seguido de un número para identificar variables.
Tipos de Variables
| Tipo | Rango | Persistencia | Uso |
|---|---|---|---|
| Locales | #1 - #33 | Solo en la macro actual | Parámetros de entrada, cálculos temporales |
| Comunes | #100 - #199 | Hasta apagar máquina | Compartir datos entre programas |
| Permanentes | #500 - #999 | Se mantienen al apagar | Configuraciones, contadores |
| Sistema | #1000+ | Controlador | Leer estado de máquina, fecha, etc. |
Asignación de valores
#100 = 25.5 (Asignación directa)
#101 = #100 * 2 (Resultado de operación)
#102 = [#100 + #101] (Expresión entre corchetes)
⚠️ Importante: Las expresiones complejas deben ir entre corchetes
[ ]
Operadores Aritméticos
Macro B soporta operaciones matemáticas completas:
| Operador | Función | Ejemplo |
|---|---|---|
+ |
Suma | #1 = #2 + 10 |
- |
Resta | #1 = #2 - 5 |
* |
Multiplicación | #1 = #2 * 2 |
/ |
División | #1 = #2 / 4 |
SIN |
Seno | #1 = SIN[#2] |
COS |
Coseno | #1 = COS[#2] |
SQRT |
Raíz cuadrada | #1 = SQRT[#2] |
ABS |
Valor absoluto | #1 = ABS[#2] |
ROUND |
Redondear | #1 = ROUND[#2] |
Ejemplo: Cálculo de RPM
( Calcular RPM desde velocidad de corte )
( #1 = Velocidad de corte en m/min )
( #2 = Diámetro de herramienta en mm )
#100 = [[#1 * 1000] / [3.14159 * #2]]
#100 = ROUND[#100]
S#100 M03 ( Aplicar velocidad calculada )
Estructuras de Control
Condicional IF/THEN
Permite ejecutar código solo si se cumple una condición:
IF [#1 GT 100] THEN #1 = 100
Operadores de comparación:
| Operador | Significado |
|---|---|
EQ |
Igual a (Equal) |
NE |
No igual (Not Equal) |
GT |
Mayor que (Greater Than) |
GE |
Mayor o igual |
LT |
Menor que (Less Than) |
LE |
Menor o igual |
Bucle WHILE/DO
Para repetir código mientras se cumpla una condición:
#100 = 0
WHILE [#100 LT 10] DO1
G01 Z[#100 * -1] F100
#100 = #100 + 1
END1
📌 Nota: El número después de DO y END debe
coincidir (DO1...END1, DO2...END2, etc.)
Macro de Ejemplo Completa
Ciclo de Taladrado con Peck
Esta macro realiza un taladrado profundo con retracción periódica para evacuar viruta:
O9100 ( MACRO: PECK DRILL )
( Parámetros de entrada: )
( #1 = Posición X )
( #2 = Posición Y )
( #3 = Profundidad total (valor negativo) )
( #4 = Incremento de peck )
( #5 = Altura de retracción )
( #6 = Avance de taladrado )
( --- Inicialización --- )
#100 = 0 ( Profundidad actual )
#101 = #5 ( Guardar altura segura )
( --- Posicionamiento --- )
G90 G00 X#1 Y#2 ( Ir a posición XY )
G43 Z#101 H01 ( Altura segura con comp. )
M08 ( Refrigerante ON )
( --- Ciclo de peck --- )
WHILE [#100 GT #3] DO1
#100 = #100 - #4 ( Calcular siguiente peck )
IF [#100 LT #3] THEN #100 = #3 ( Limitar a prof. final )
G01 Z#100 F#6 ( Taladrar )
G00 Z#101 ( Retracción rápida )
END1
( --- Finalización --- )
M09 ( Refrigerante OFF )
G00 Z#5 ( Altura de retorno )
M99 ( Fin de subrutina )
Llamada a la macro:
G65 P9100 X50.0 Y30.0 Z-25.0 Q5.0 R2.0 F150
Buenas Prácticas
- Documenta siempre - Usa comentarios para explicar las variables y la lógica
- Valida entradas - Verifica que los parámetros estén en rangos seguros
- Usa variables con sentido - #100 para resultados, #500+ para configuración permanente
- Prueba con SINGLE BLOCK - Ejecuta paso a paso la primera vez
- Limita valores - Usa IF para evitar velocidades o profundidades peligrosas
Ejercicio Práctico
Crea una macro que dibuje un cuadrado de lado variable:
- Parámetro #1 = Lado del cuadrado
- Parámetro #2 = Posición X inicial
- Parámetro #3 = Posición Y inicial
- Avance fijo de 200 mm/min
Ver solución
O9200 ( MACRO: CUADRADO )
G90 G01 X#2 Y#3 F200 ( Ir a inicio )
G01 X[#2+#1] ( Lado derecho )
G01 Y[#3+#1] ( Lado superior )
G01 X#2 ( Lado izquierdo )
G01 Y#3 ( Cerrar cuadrado )
M99 ( Fin de macro )