Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
SOFTWARES => G-Code => Tópico iniciado por: badade em 26 de Agosto de 2011, 16:43
-
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é.
-
Ola, quero saber como se usa os Operadores lógico, pois eu sei dos significados (abaixo) mas não sei qual usar na hora de programar por exemplo: numa repetição de interpolação helicoidal ou linear, alguem poderia me explicar? Agradeço.
IF- Se
GOTO- Ir Para
WHILE- Enquanto (análise condiçao antes do bloco)
REPEAT - Repetir (análise condiçao depois do bloco)
GE-Maior ou igual
LE-Menor ou igual
LT- Menor
GT-Maior
DO- Fazer (inicia bloco repetiçao)
END- Final (finaliza bloco repeticao)
NE-Diferente
-
esclarencendo;
Tipo:
#1=0 ; inicio em Z
#2=-1 ; Incremento
#3=-10 ; Profundidade final
WHILE[#1NE#3]DO1
#1=#1+#2
execução
END1
"NE" Eu sei que é "diferente" no caso #1 diferente de #3, o que eu procuro é uma explicação mais facil de entender cada operador lógico.
Espero ter sido claro na pergunta.
-
#1=0 significa que a variável 1 é igual a zero;
#2=-1 variável 2 igual a -1
#3= -10 variável 3 igual a -10
While [#1 NE #3] DO1 Enquanto a variável 1 não for igual à variável 3 (que é -10) execute o comando 1
#1 = #1 + #2 variável 1 é igual à 0 + (-1) que é igual a -1; na próxima repetição a variável #1 será -2, e assim por diante, incrementando -1 a cada repetição.
Esse loop será repetido até que #1 (variável 1) seja igual a #3 (-10); então o programa sairá do loop e finalizará no END.
Abç.
Jorge
-
Otima resposta, muito clara, obrigado.
Neste caso eu usei o "NE" Diferente (Não for igual a), a minha dúvida maior e com relação aos outro operadores lógicos, como emprega-los? qual a forma de usar cada um, Abraco.
-
Para aprender a usar os operadores lógicos vc precisa estudar lógica de programação. Dá uma olhada nessa apostila, pra começar...
http://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCsQFjAA&url=http%3A%2F%2Fwww.inf.ufsc.br%2F~vania%2Fteaching%2Fine5231%2FLogica.pdf&ei=y3hEU83sHcnk0gHd3YCgCg&usg=AFQjCNHO1ORDDsZxa0kG5ojKf6ANeLIQHA&sig2=xQa63LVAVQcp1AJLDLWTFg&bvm=bv.64367178,d.dmQ (http://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCsQFjAA&url=http%3A%2F%2Fwww.inf.ufsc.br%2F~vania%2Fteaching%2Fine5231%2FLogica.pdf&ei=y3hEU83sHcnk0gHd3YCgCg&usg=AFQjCNHO1ORDDsZxa0kG5ojKf6ANeLIQHA&sig2=xQa63LVAVQcp1AJLDLWTFg&bvm=bv.64367178,d.dmQ)
-
Muito bom, dei uma passada de olho aqui e vou estudar ...Brigado..valeww ;D
-
Sem dúvida, o maior problema na aplicação dos símbolos de programação paramétrica não está em não saber o seu significado mas como aplicá-lo ao contexto desejado. Por experiência, posso dizer que o problema identifica-se na falta de clareza sobre o que se deseja implementar. Não é para ser mais ou menos inteligente do que os outros, mas para ser menos experiente, quer dizer incapaz de expressar uma ideia , um pensamento na forma correta. Ninguém pode dar regras certas, únicas, que podem resolver todos os problemas relacionados com as diferentes condições (não é este o maior problema), mas com certeza podemos refletir sobre regras gerais, que devem ser aplicadas , na forma adequada, com a situação que temos na frente. Eu não quero falar sobre programação lógica, mas enfrentar de uma forma elementar a transformação pensamento/símbolo.
Primeiro passo: esclarecer o problema.
Segundo passo: a transformação natural na forma especificada (programação paramétrica ) .
Os operadores lógicos são símbolos que traduzem um conceito, um pensamento, através alguns símbolos mnemônicos .
Se Carlos é mais alto do que eu, então ...
Aqui temos uma comparação de altura entre duas pessoas; segue uma ação (então) . No lugar das palavras vamos usar a forma paramétrica
Se -> IF
Carlos -> # 100
alto (maior ) -> GT
eu- > # 101
então -> THEN
IF [ #100 GT #101] THEN...
Um conceito verbal foi transformado em linguagem simbólica !
Como surge, portanto, a escolha de um símbolo em vez de outro ?
Tudo nasce por um pensamento que deve ser a expressão do que queremos fazer !
Vamos realizar o caminho inverso, ou seja simbolo/palavra
IF [#100 NE #101] THEN...
IF -->> se
#100 -->> Carlos
NE -->> diferente
#101 -->> eu
THEN -->> então
em seguida, se Carlos é diferente de mim ( eu), então ...
Diferente não significa maior (não apenas isto) por isso temos que considerar o conceito escrito errado ( não é o mesmo pensamento escrito acima).
Esta é a base para a escolha de cada símbolo; complexa ou menos que seja a expressão condicional.
Um pensamento vai ser transformado por símbolos... mas frequentemente é o pensamento lógico que falta!
Os operadores lógicos aplicados a IF ou GOTO são simples de entender (seguem a expressão verbal). Quando você entra no mundo dos ciclos as coisas ficam complicadas (mas só aparentemente).
Também para os ciclos o discurso é o mesmo: expressão verbal - >> conceito lógico .
Suponha-se analisar as relações de altura entre Carlos e eu ao longo dos anos .
Se Carlos é mais alto do que eu, então ... (2000)
Se Carlos é mais alto do que eu, então ... (2001)
Se Carlos é mais alto do que eu, então ... (2002)
Se Carlos é mais alto do que eu, então ... (2003)
Se Carlos é mais alto do que eu, então ... (2004)
Se Carlos é mais alto do que eu, então ... (2005)
................... .....
Como você pode ver , nada muda , exceto o fato de que temos que repetir varias vezes a mesma operação ( se Carlos é mais alto do que eu) .
Um ciclo não é uma expressão simples, mas uma sequência lógica de operações que normalmente são repetidas (ou deveriam ser repetidas) .
Um ciclo tem um começo, uma avaliação para uma iteração , e um fim.
No exemplo acima escrito: o que é o início do ciclo ?
Poderia ser uma data , por exemplo 1970, quando Carlos e eu tínhamos 5 anos.
O que é a condição de avaliação que serve para determinar a continuação , ou o fim do ciclo ?
A comparação entre as alturas. Por exemplo, se Carlos é mais alto que eu o ciclo vai ser repetido. Pelo contrário, quando eu ficar mais alto que o Carlos o ciclo vai terminar. Quando é preciso realizar uma comparação , utilizamos operadores lógicos que nos permitem estabelecer as relações corretas entre as variáveis em uso (no caso entre eu e Carlos ) . O fim de um ciclo é identificado com o símbolo END, fim. O que é importante notar é o uso dos operadores lógicos : qual usar ? NE, GT , LT ... claro depende das relações que queremos aplicar !
Se Carlos é maior - >> GT (maior que)
Se Carlos é menor - >> LT (menor )
Se Carlos é diferente - >> NE ( não igual)
Cada símbolo tem um significado, sabendo-o podemos escrever uma relação lógica !
O significado do símbolo deve expressar nossa ideia, caso contrário vamos ter resultados inesperados !
Este exemplo mostra como o verdadeiro problema é aplicar o conceito e não tanto em saber o seu significado.
Tem mais um problema!!
Um aspecto importante é que somos livres para construir uma expressão complexa de jeito pessoal: não existe uma solução única , muitas vezes o mesmo conceito é expresso pelo uso de símbolos diferentes.
Se Carlos é menor do que eu .... ou ... Se eu sou maior do que Carlos
As duas expressões usam símbolos diferentes , mas certamente expressam o mesmo conceito
IF [ #100 LT #101] THEN ...
IF [ #101 GT #100] THEN ...
Considere o caso de uma interpolação helicoidal, e vamos tomar a estratégia.
Este movimento é composto de uma interpolação circular com movimento perpendicular à superfície de trabalho (G17, plano formado pelo eixos X e Y, movimento normal ao longo do eixo Z ). Vamos escrever o movimento a ser realizado
G03 X Y I J Z (G03 I/J Z)
Bem, este movimento terá que ser repetido algumas vezes e a condição de repetição deve ser avaliada por um operador lógico. Qual operador deve-se usar? A resposta só pode ser dada depois de ter escolhido a condição de início do loop.
Para executar e monitorar um ciclo normalmente é usada uma variável como contator, que dizer uma variável que muda o seu valor sistematicamente após a repetição do ciclo.
A variável pode ser acrescentada, diminuída ou pode ser una expressão complexa com resultado qualquer.
#100=1(valor inicial contator)
#100=#100+1 (aumento variável)
#100=10(valor inicial contator)
#100=#100-1 (diminuição variável)
#100=[ expressão matemática ou logica ] (valor inicial contator)
#100=#100+[ expressão matemática ou logica ] (mudança valor seguindo una regra)
A variável pode também não existir!
Este discurso sobre a aparência inicial de uma variável pode parecer abstrato, mas não é assim! E ' este valor ( e o método de variação) que determina o operador lógico que você vai escolher no ciclo WHILE.
Exemplos!
#100 = 0 (contator )
WHILE [#100NE10 ] DO1 ( condição de loop )
G91GO2I - 20Z -1 ( interpolação helicoidal)
#100 = #100 +1 ( aumento contator )
END1 (fim )
A cada loop se controla o valor de #100 para ver se fica diferente ou igual a 10.
#100 é diferente de 10?
Não, termina o ciclo !
Sim, continua a repetir!
O operador escolhido (NE) reflete a ideia que até que #100 for diferente de 10, o ciclo deverá continuar.
O mesmo exemplo pondo #100=10
#100 = 10
WHILE[#100NE0]DO1
G91GO2I - 20Z -1
#100 = #100-1
END1
ou em outras formas
#100 = 0 (contator )
WHILE[# 100EQ10 ] DO1
G91GO2I - 20Z -1
#100 = #100 +1
END1 (fim )
#100 = 10
WHILE[#100EQ0 ] DO1
G91GO2I - 20Z -1
#100 = #100-1
END1
o programa não muda , sempre verifica-se a igualdade!
Estes exemplos são todos válidos e corretos ....
Não há uma única maneira de escrever ou um jeito melhor que outro .. tudo depende de nós!
Este raciocínio também se aplica à situação complexa , o método não muda !
Os operadores lógicos deve ser utilizado refletindo o que queremos fazer e sua escolha depende da nossa escritura.
No fórum há vários exemplos de programas paramétricos que usam expressões lógicas. Um bom exercício para aprender o uso dos operadores lógicos é ler e entender os programas escritos por outros. Querendo saber porque foi feita uma escolha em detrimento de outra , pergunte-se se você pode encontrar uma ortografia diferente , tente variar a escrita ...
Aprende-se muito lendo programas escritos por outras pessoas , mas lembre-se que não existem formas únicas ou melhores modos de escrever programas paramétricos!
Com a experiência você vai adquirir o conceito de lógica de programação e você será capaz de escolher facilmente os operadores lógicos