Continuamos nossa discussão analisando o que se pode fazer com as variáveis: desvios, repetições, e operações lógicas.
O fluxo do programa pode ser controlado usando frases especiais capazes de realizar desvio ou repetições.
[1] GOTO desvio incondicional
[2] IF desvio condicional: Se, embora, então
[3] WHILE repetição: Enquanto, repetir até que...
[1] GOTO
Você pode controlar o desvio para um bloco específico (para o número de seqüência N) usando a expressão GOTO N,
definido como o desvio incondicional porque é sempre realizado para qualquer condição.
exemplo
GOTO100 desvia para o bloco N100
GOTO#100 desvia para o bloco atribuído à variável 100 (se #100=10 desvia para o bloco N10)
[2] IF Desvio condicional pois é necessário definir uma condição para desviar
IF [expressão condicional] GOTO N
(ler desta forma)
se a expressão condicional for satisfeita, executa-se um desvio para o numero de seqüência N
Se a expressão condicional for falsa executa-se o bloco seguinte a declaração IF.
exemplo IF[#100 EQ 0] GOTO100 (EQ ler igual)
se #100 é igual a 0, executa-se um desvio para o numero de seqüência N100,
caso contrário, vai ter a continuação linear do programa.
Outra forma para especificar o IF é a seguinte
IF [expressão condicional] THEN [expressão]
onde a expressão representa qualquer um dos termos obtidos de forma válida.
exemplo IF[ ROUND[ABS[#3+#4]] LT SQR[ABS[#10]] ] THEN #110=1000
Se o arredondamento do valor absoluto da soma de #3 + #4 é menor do que a raiz
quadrada do valor absoluto de #10, então, a #110 é atribuído o valor de 1000.
O CNC aceita ambas as especificações: IF[#100 EQ 0] THEN GOTO100
A expressão condicional deve incluir um operador lógico (veremos mais adiante) imprensado entre duas expressões simples ou não, e deve ser delimitada por colchetes.
Tempo de processamento: Quando se executa um desvio a um numero de seqüência especificada em uma declaração GOTO se busca um numero de seqüência:
a busca é feita sempre para a frente.
Por este motivo o processamento no sentido inverso (para trás), demora-se mais que o processamento no sentido direto (para frente), porque precisa ler todo o programa e voltar para o início.
Possivelmente usar GOTO sempre dirigido para a frente e não muito longe.
[3] WHILE
O loop WHILE define a repetição de uma parte do programa (rotina), enquanto a expressão condicional especificada for verdadeira.
Se a expressão condicional for falsa o programa continua sendo executado a partir do bloco que vem depois de END
WHILE [expressão condicional] Do m
N10 programa
-----
-----
N20 END m
Enquanto a expressão condicional for satisfeita, a parte do programa de N10 até N20 será repetido
(as letras N só foram introduzidas para especificar a parte do programa repetitivo, e não são necessários).
exemplo
WHILE [#100 NE 0] DO1
G91 G01 Z-2 F500
-----
-----
#100= #100-1
END1
Nota-se a correspondência entre o DO1 e END1.
A letra m pode assumir os valores 1,2,3.
Os loops WHILE podem ser aninhados (um dentro do outro), mas em nenhum caso,
devem-se cruzar (entrelaçados), caso contrário o CNC não encontrará mais correspondência entre DO e END.
bom exemplo
WHILE [] DO1
execução :
END1
maus exemplo (Não podemos sobrepor os intervalos DO)
WHILE [] DO1
execução :
WHILE [] DO2
execução :
END1
END2
Usando apenas Dom sem especificar WHILE você vai ter um loop infinito.
Tempo de processamento: utilizando a declaração WHILE para repetição se reduz o tempo de processamento
pois o programa está preso entre DO e END.
Operadores lógicos
Operadores lógicos consistem de duas letras e são usados para comparar dois valores para determinar se são iguais ou se um valor e menor ou maior que outro.
O termo valores referem-se a números ou mesmo ao resultado de expressões complexas.
Lista de operadores lógicos
Operador Significado exemplo
EQ igual a #100 EQ 39
NE diferente de #100 NE ABS[#120]
GT maior que #100 GT SQRT[ABS[#120]]
GE maior ou igual a #100 GE #120
LT menor que [#1+#2] LT [SQRT[ABS[#100-#120]]]
LE menor ou igual a [#112-#102] LE 3
Em uma expressão condicional nulo é visto como zero.
Devemos prestar muita atenção aos erros que podem ocorrer para expressões condicionais usando
operadores lógicos.
IF[#1 EQ #2] é afetada pelo erro de #1 e #2, e pode levar a uma decisão errada. Assim, em vez de
comparar as duas variáveis seria melhor testar a diferença entre elas com
IF[ABS[#1-#2] LT 0.001, assumindo que o valor das variáveis é o mesmo se a diferença é
inferior a um valor-limite (neste caso 0.001).
Vou preparar uns exemplos ... está na hora de concretizar os conhecimentos adquiridos.
Até.