Autor Tópico: Programação paramétrica (2): desvios, repetições, e operações lógicas  (Lida 6881 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline badade

  • Novato
  • *
  • Posts: 65
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Varese
  • Nome:: Pietro
  • Profissão: Programador cnc
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é.

Offline Renato Lins

  • Novato
  • *
  • Posts: 4
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: MG
  • Nome:: Renato Lins
  • Profissão: Fresador CNC
Re:Programação paramétrica (2): desvios, repetições, e operações lógicas
« Resposta #1 Online: 07 de Abril de 2014, 12:09 »
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

Offline Renato Lins

  • Novato
  • *
  • Posts: 4
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: MG
  • Nome:: Renato Lins
  • Profissão: Fresador CNC
Re:Programação paramétrica (2): desvios, repetições, e operações lógicas
« Resposta #2 Online: 07 de Abril de 2014, 12:21 »
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.

Offline Jorge_BH

  • CNCMASTER
  • ******
  • Posts: 2503
  • Sexo: Masculino
  • Jorge Maluf Jacob
  • Cidade - UF: Belo Horizonte-MG
  • Profissão: Administrador de Empresas
Re:Programação paramétrica (2): desvios, repetições, e operações lógicas
« Resposta #3 Online: 07 de Abril de 2014, 19:26 »
#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

Offline Renato Lins

  • Novato
  • *
  • Posts: 4
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: MG
  • Nome:: Renato Lins
  • Profissão: Fresador CNC
Re:Programação paramétrica (2): desvios, repetições, e operações lógicas
« Resposta #4 Online: 08 de Abril de 2014, 12:53 »
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.

Offline Jorge_BH

  • CNCMASTER
  • ******
  • Posts: 2503
  • Sexo: Masculino
  • Jorge Maluf Jacob
  • Cidade - UF: Belo Horizonte-MG
  • Profissão: Administrador de Empresas

Offline Renato Lins

  • Novato
  • *
  • Posts: 4
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: MG
  • Nome:: Renato Lins
  • Profissão: Fresador CNC
Re:Programação paramétrica (2): desvios, repetições, e operações lógicas
« Resposta #6 Online: 09 de Abril de 2014, 15:35 »
Muito bom, dei uma passada de olho aqui e vou estudar ...Brigado..valeww ;D

Offline badade

  • Novato
  • *
  • Posts: 65
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Varese
  • Nome:: Pietro
  • Profissão: Programador cnc
Re:Programação paramétrica (2): desvios, repetições, e operações lógicas
« Resposta #7 Online: 11 de Abril de 2014, 14:31 »
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

 

/** * */