PROGRAMA DO MANUAL FANUC – SIMULAÇÃO DO CICLO FIXO G81

O programa de macro apresentado neste exemplo, tem o mesmo efeito de operação que o ciclo fixo de furação G81. O programa principal, faz uma chamada modal à macro, permitindo por isso a execução deste “ciclo” (macro), após o posicionamento nas coordenadas de cada bloco programado, entre as instruções G66 e G67.
Para simplificação do programa, todos os dados relativos à furação são especificados em coordenadas absolutas (G90).Chamamos a especial atenção para esta técnica de programação, dado o grande interesse que apresenta.

Naturalmente que se trata de um exemplo de referência, simulando o ciclo fixo G81, para que se torne claro o processo de utilização das macros, e da sua chamada modal.
Não será lógico utilizar este código em substituição do próprio ciclo, mas pretende-se mostrar como um qualquer ciclo fixo pode ser simulado e, principalmente, como pode ser optimizado para as necessidades específicas de um determinado trabalho, ou ajustado às características particulares de uma determinada máquina-ferramenta.

Apresentamos exemplos concretos de customização dos tradicionais ciclos fixos, para sua utilização numa máquina particularmente vocacionada para furação. O facto desta máquina possuir características especiais, como a possibilidade de refrigeração interna a alta pressão, e de ser importante a optimização dos processos utilizados, justifica algum investimento neste tipo de programação.

O ciclo fixo consiste nas seguintes operações básicas:

Operação 1
Posicionamento – em movimento rápido – nos eixos X e Y.Este posicionamento é feito no plano inicial (I), onde se encontra a ferramenta quando o ciclo é activado.
Operação 2
Translacção rápida para o ponto/plano R (plano de segurança).
Operação 3
Deslocamento (furação) em avanço de trabalho até ao plano Z (profundidade do furo).
Operação 4
Movimento rápido de retorno aos planos R ou I (Ver nota (b) ao programa)

Formato de chamada

G66 P9110 Xx Yy Zz Rr Ff Ll
Endereço
Função
Variável
X
Coordenada X do furo (especificação absoluta)
#24
Y
Coordenada Y do furo (especificação absoluta)
#25
Z
Profundidade dos furos (especificação absoluta)
#26
R
Plano de segurança
#18
F
Velocidade de avanço de trabalho
#9
L
Número de repetições
#4

Programa Principal

O001
G28 G91 X0 Y0 Z0
G90 G92 X0 Y0 Z50.
G00 G90 X100. Y50.
G66 P9110 Z-20. R5. F500
G90 X20. Y20.
X50.
Y50.
X70. Y80.
G67
M30

Macro (Programa Chamado)

O9110
#1=#4001 Guarda G00 ou G01 (a)
#3=#4003 Guarda G90 ou G91 (a)
#4=#4109 Guarda o actual avanço de trabalho (a)
#5=#5003 Guarda o valor de Z, antes de iniciar o processo de furação (b)
G00 G90 Z#18 Posicionamento no plano de segurança R
G01 Z#26 F#9 Descida (furação) em avanço de trabalho até à profundidade Z
IF[#4010 EQ 98] GOTO 1 Sobe à posição 1, após salto (c)
G00 Z#18 Posicionamento – em alternativa – no plano de segurança R (c)
GOTO 2
N1 G00 Z#5 Posicionamento no plano inicial – posição 1
N2 G#1 G#3 F#4 Recupera a informação modal, inicial (a)
M99

Notas

(a)

Como é sabido, alguns códigos da linguagem são modais, isto é, mantêm-se activos até ser especificado outro código – exclusivo – do mesmo grupo.

Quando, num programa principal, em qualquer posição do seu código, se faz uma chamada a uma macro, pode ser importante guardar a informação modal activa ao momento. Muitas vezes, a chamada à macro faz-se numa fase intermédia de um programa extenso, que continua a sua execução após o retorno da macro com M99.

Esta técnica, que recomendamos como prática, em programas de utilização frequente por vários operadores e eventualmente em diferentes máquinas, garante a recuperação dos dados, ainda que por imposição dos processos programados na macro, tenham que ser alterados.

De todos, achamos porventura, como mais importante, a memorização, e posterior recuperação, do valor do código do grupo 3 (G90, G91). Pode tornar-se extremamente perigoso o programa principal continuar o seu fluxo, após macro, com o tipo de coordenadas alterado, de incrementais para absolutas, ou vive versa.

Outros casos comuns, são a necessidade de alteração, nas macros, dos valores dos avanços – de trabalho e eventual alteração para translação rápida. É óbvio o perigo de ser executado um movimento, programado no programa principal com um determinado avanço de trabalho, e a macro ter alterado o código de G01 para G00.

Parece-me extremamente importante chamar a atenção, durante a formação, para estas questões, e fazer notar que o programa principal e a macro são, por vezes, programados em tempos diferentes, e ainda do normal esquecimento de verificação destes pormenores.

A programação do bloco N2 (N2 G#1 G#3 F#4) recupera e activa assim, os dados guardados, no início da macro, nas variáveis #1, #3 e #4, garantindo a sua integridade no retorno ao programa principal de chamada. Notar que este bloco se encontra imediatamente antes do código de retorno M99.

(b)
Num ciclo fixo de furação, depois de ser atingida a profundidade Z especificada, e antes do posicionamento nas coordenadas do furo seguinte, o retorno da ferramenta (normalmente em avanço rápido), pode fazer-se a uma de duas posições, conforme o código programado:

  G98 – retorno ao chamado plano inicial, isto é, a coordenada Z em que se encontrava a ferramenta, antes de iniciar o processo de furação.
  G99 – retorno ao chamado plano de segurança, designado segundo a norma, pelo endereço R, e especificado no ciclo – ou no bloco de chamada da macro com G66.

(É importante considerar o tipo de retorno, para evitar colisões durante os movimentos de posicionamento)

Para a decisão do retorno, é guardado na variável local #3 o valor da variável de sistema #5003.
Como foi descrito, esta variável guarda a posição, ao final do bloco e em coordenadas peça, do eixo correspondente ao primeiro dígito. Neste caso o valor do eixo Z (eixo 3), é memorizado, antes de ser efectuado qualquer outro movimento, na macro.
Assim, se o retorno for programado com G98, será utilizado o valor da variável local #3.
Caso o código activo (grupo 10) seja 99, o retorno far-se-á ao plano R.

Chamamos a atenção para a evidente necessidade de “passar” o valor da posição actual para uma variável local, uma vez que a variável de sistema é dinâmica, isto é, actualiza o seu valor no final de cada novo bloco com movimento.

Esta técnica é mostrada em vários exemplos apresentados, como seja a execução de furos com fresagem helicoidal. (Ver exemplo “Helicoidal_iso”)

(c)

Chamamos aqui a atenção da técnica utilizada para configurar uma estrutura de decisão, utilizando a função IF.

Como foi visto, esta função é extremamente limitada, quando comparada com as comuns linguagem para PC. Não dispõe das opções THEN, ELSE, ou ELSE IF, que simplificariam bastante o código para a decisão. Não está também disponível nas linguagens comuns de CNC a estrutura / função SELECT CASE.

Assim, faz-se recurso ao salto incondicional GOTO, para evitar os blocos entretanto executados, quando a comparação é válida:

Se a comparação “IF[#4010 EQ 98] GOTO 1” é verdadeira, o programa transfere a execução (salta) para o bloco “N1 G00 Z#5”, não executando obviamente “G00 Z#18”. Caso contrário, será executado o bloco seguinte à comparação IF, “G00 Z#18” e logo em seguida transfere-se a execução, com salto incondicional GOTO, para depois de “N1 G00 Z#5”, evitando assim a sua execução.

A programação equivalente em Visual Basic seria sensivelmente:

If [#4010 EQ 98] Then
G00 Z#5
(ElseIf no caso de mais condições)
Else
G00 Z#18
End If

Código NC não comentado

%
O001
G28 G91 X0 Y0 Z0
G90 G92 X0 Y0 Z50.
G00 G90 X100. Y50.
G66 P9110 Z-20. R5. F500
G90 X20. Y20.
X50.
Y50.
X70. Y80.
G67
M30
%

%
O9110
#1=#4001
#3=#4003
#4=#4109
#5=#5003
G00 G90 Z#18
G01 Z#26 F#9
IF[#4010 EQ 98] GOTO 1
G00 Z#18
GOTO 2
N1 G00 Z#5
N2 G#1 G#3 F#4
M99
%