Operatori logici AND, OR, XOR

Sezione Fanuc
Rispondi
CMZTD35Y
Newbie
Newbie
Messaggi: 4
Iscritto il: venerdì 19 febbraio 2021, 21:01

Operatori logici AND, OR, XOR

Messaggio da CMZTD35Y » mercoledì 22 settembre 2021, 10:19

Ciao a tutti,
da 6 mesi sto iniziando ad approfondire il mondo della parametrica. Partendo da zero, sono riuscito fino ad ora a togliermi qualche piccola soddisfazione.
Spesso mi trovo nelle condizioni di voler creare una frase del genere SE [1=2] ALLORA 5=3, ALTRIMENTI 5=4.
Dunque applico ciò che ho appreso e inizio IF[#1=#2]THEN#5=#3 e qui mi fermo.

E' possibile compilare, con l'utilizzo degli operatori logici, una frase come riportato o magari anche più complessa?
Qualcuno è in grado di spiegarmi l'applicazione dei 3 operatori?

Un grazie in anticipo a chiunque mi sarà d'aiuto!!

qandro
Member
Member
Messaggi: 252
Iscritto il: lunedì 29 ottobre 2018, 9:54

Re: Operatori logici AND, OR, XOR

Messaggio da qandro » mercoledì 22 settembre 2021, 11:02

Per chi vuole sfruttare al massimo la potenza del linguaggio Macro di Fanuc, consiglio questo libro, che è un MUST, sebbene sia un po' datato.
https://www.amazon.it/Fanuc-Custom-Macr ... 0831132841

Da pagina 174 in poi viene descritta IF THEN.

torn24
God
God
Messaggi: 5318
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Operatori logici AND, OR, XOR

Messaggio da torn24 » mercoledì 22 settembre 2021, 11:39

Il linguaggio macro Fanuc è molto limitato, in molte cose è più limitato del Basic commodore 64, che in ambito informatico è un linguaggio limitato e non ha strutture di controllo strutturate.
In macro fanuc devi fare molto uso del santo condizionato, e incondizionato, per ottenere quello che in molti linguaggi si ottiene semplicemente con un ELSE :D

Ti mostro come ottenere quello che vuoi in fanuc, che non puoi ottenere con IF THEN in quanto non dispone dell'ELSE..

Codice: Seleziona tutto

IF[#1EQ#2]GOTO100
IF[#1NE#2]GOTO200
GOTO300
N100 #5=#3
GOTO 300
N200 #5=#4
N300

( Le righe N100 e N200, possono essere eseguite solo come destinazione di salto goto, prima delle righe c'è un salto alla riga N300 che le salta,
 Quindi sono eseguite solo se un salto le raggiunge goto. Abbiamo una condizione if SE uguale, ma non avendo else, dobbiamo fare una seconda
 condizione if Se non uguale)
 
 In macro fanuc se sembra impossibile farlo, se si pensa di risolverlo con IF GOTO e il semplice GOTO , spesso si riesce a trovare una soluzione.
 
CIAO A TUTTI !

qandro
Member
Member
Messaggi: 252
Iscritto il: lunedì 29 ottobre 2018, 9:54

Re: Operatori logici AND, OR, XOR

Messaggio da qandro » mercoledì 22 settembre 2021, 12:16

Hai perfettamente ragione torn24.
Il linguaggio Fanuc Macro è rimasto fermo nella sintassi da anni ed anni, in linea con la mentalità di Fanuc di modificare solo il necessario.

Quando abbiamo implementato il linguaggio Macro Fanuc-B, infatti, abbiamo deciso di estenderlo aggiungendo cose che altrimenti
rendevano la scrittura delle macro una cosa da pochi:

- aggiunte le named-parameters cosi da non usare solo #1,#2 ma anche #<_uscite.pistone> (locale) e #<uscita.pistone> (globale) comprese le matrici #<uscita.pistone[1][2]...>". Per esempio molte informazioni della CNC sono esportate anche come named parameters semplificando lo sviluppo (es: #<cnc.x.max_lim> per recuperare la MCS massima asse X di setup).

- esteso IF [], IF [] THEN, aggiungendo IF [] THEN ENDIF, IF [] THEN ELSE ENDIF e IF [] THEN ELIF [] THEN ELIF [] THEN ENDIF

- aggiunti gli operatori a BIT per AND OR XOR ( #1=[#1 | 16 & 64 ^ 128).

- aumentato di brutto il limite dei 9 annidamenti di call.

- aggiunto la chiamata a macro con CALL/G65/G66/M98 P<numero> CALL/G65/G66/M98 P"miamacro".

- aggiunta la definizione di macro locali con nome: CALL p"CALCOLA" ... SUB "CALCOLA" ENDSUB.

E un'infinità di altre cose che sono presenti nelle CNC moderne.
L'importante è mantenere compatibilità verso il basso :)

Codice: Seleziona tutto

IF[#1EQ#2]GOTO100	( Fanuc Macro-B)
IF[#1NE#2]GOTO200
GOTO300
N100 #5=#3
GOTO 300
N200 #5=#4
N300

IF [#1 EQ #2] THEN01 ( RosettaCNC Fanuc-B extended language)
	#5=#3
ELSE01
	#5=#4
END01

CMZTD35Y
Newbie
Newbie
Messaggi: 4
Iscritto il: venerdì 19 febbraio 2021, 21:01

Re: Operatori logici AND, OR, XOR

Messaggio da CMZTD35Y » giovedì 23 settembre 2021, 13:36

torn24 ha scritto:
mercoledì 22 settembre 2021, 11:39
Il linguaggio macro Fanuc è molto limitato, in molte cose è più limitato del Basic commodore 64, che in ambito informatico è un linguaggio limitato e non ha strutture di controllo strutturate.
In macro fanuc devi fare molto uso del santo condizionato, e incondizionato, per ottenere quello che in molti linguaggi si ottiene semplicemente con un ELSE :D

Ti mostro come ottenere quello che vuoi in fanuc, che non puoi ottenere con IF THEN in quanto non dispone dell'ELSE..
Ciao torn24, grazie per la risposta.

Ti chiedo un chiarimento sull'esempio che mi hai postato,

Codice: Seleziona tutto

IF[#1EQ#2]GOTO100
IF[#1NE#2]GOTO200
Per come sono scritte le 2 condizioni sopra, una delle due dovrà sempre risultare vera.

GOTO300
Non capisco dunque il senso d'inserire un salto dopo entrambe le condizioni che verrà sempre bypassato da uno dei 2 precedenti salti.

N100 #5=#3
GOTO 300
N200 #5=#4
N300 

torn24
God
God
Messaggi: 5318
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Operatori logici AND, OR, XOR

Messaggio da torn24 » giovedì 23 settembre 2021, 16:44

Semplicemente l'abitudine di programmare in modo che vada bene in tutte le situazione, se costa poco farlo :D
Quello che dici nel caso particolare è vero, ma se le condizione sarebbero , maggiore di e minore di, potrebbero risultare false tutte e due se invece il confronto risulta uguale, se è uguale non è ne maggiore ne minore :D
Allora penso che avere l'abitudine di scrivere codice che vada bene in tutte le situazioni sia una cosa positiva, senza pensarci in automatico fai la cosa giusta :D
CIAO A TUTTI !

CMZTD35Y
Newbie
Newbie
Messaggi: 4
Iscritto il: venerdì 19 febbraio 2021, 21:01

Re: Operatori logici AND, OR, XOR

Messaggio da CMZTD35Y » venerdì 24 settembre 2021, 12:27

Giusta osservazione, nei vari copia e incolla non si sa mai cosa può succedere :D

Per quanto riguarda il vero titolo del topic, sapresti darmi degli esempi di applicazione dei 3 operatori logici x apprenderne il significato e l'eventuale applicazione a svariati programmi?

torn24
God
God
Messaggi: 5318
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Operatori logici AND, OR, XOR

Messaggio da torn24 » venerdì 24 settembre 2021, 15:28

Gli operatori logici hanno lo stesso significato in Fanuc di tutti i linguaggi di programmazione.
Esempi da farti non me ne vengono, si usano in situazioni particolari e esigenze particolari, non si usano tanto frequentemente da ricordarmi esempi
di applicazione.

Noi creiamo una condizione IF GOTO o IF THEN, se è vera facciamo qualcosa...
Può capitare che dobbiamo fare qualcosa non se si verifica una condizione, ma se si verificano più condizioni, e gli operatori permettono questo.
AND si usa quando più condizioni devono essere vere, IF[#100 GT #110] AND [#110 GY #120] GOTO, abbiamo due condizioni per fare qualcosa
devono essere vere tutte e due

OR si usa quando almeno una condizione deve essere vera, una può essere falsa ma una deve essere vera, possono essere vere tutte e due

XOR simile a OR, una delle due deve essere vera, ma a differenza di OR non possono essere vere tutte e due , altrimenti non esegue

Comunque primo dovresti saper fare molto usando una semplice condizione prima di usare più condizioni.
In generale non basta leggere un argomento e passare al successivo, ma fare molti esercizi su quell'argomento, cosa che fanno anche a scuola, più esercizi sullo stesso argomento :D
CIAO A TUTTI !

TIRZAN
God
God
Messaggi: 3193
Iscritto il: sabato 27 luglio 2013, 16:54
Località: AQ

Re: Operatori logici AND, OR, XOR

Messaggio da TIRZAN » venerdì 24 settembre 2021, 21:46

Nel 99% dei programmi che capitano di fare per lavoro si riesce sempre a risolvere con espressioni semplici.
Piuttosto che complicare le espressioni preferisco fare più righe con le varie condizioni.
Finora le espressioni più complicate che ho usato sono state quelle con IF THEN in programmi di gestione portabarre e cambio barra che permettevano di fare uno stesso pezzo di diverse lunghezze o pezzi diversi e con diverse quantità gestendoli in base alla lunghezza della barra.
Per tutto il resto ho sempre risolto tutte le varie situazioni con il salto condizionato IF.

Rispondi

Torna a “Fanuc”