Case Structure, impostazione del range di valori di accettab

Discussioni generali sulla programmazione in LabVIEW, domande, problemi e soluzioni.

Moderatore: ILVG mod

  • Advertisement

Case Structure, impostazione del range di valori di accettab

Messaggioda giuseppe.l74 » ven feb 08, 2019 1:45 pm

Ciao,
in una case structure se scrivo 1..10 significa che deve eseguire il contenuto di quel case se il valore in entrata è compreso fra 1 e 10 estremi inclusi.
Come posso dire di escludere uno dei due estremi? cioè esegui se compreso fra 1 e 10 ma 10 escluso?
..non voglio più dire è tardi o è peccato..
giuseppe.l74
Utente Attivo +
Utente Attivo +
 
Messaggi: 134
Iscritto il: dom ott 09, 2005 2:04 pm
Località: Torino

Re: Case Structure, impostazione del range di valori di accettab

Messaggioda paracarro » ven feb 08, 2019 4:21 pm

giuseppe.l74 ha scritto:Ciao,
in una case structure se scrivo 1..10 significa che deve eseguire il contenuto di quel case se il valore in entrata è compreso fra 1 e 10 estremi inclusi.
Come posso dire di escludere uno dei due estremi? cioè esegui se compreso fra 1 e 10 ma 10 escluso?


ciao Giuseppe

vado per deduzione, spero di azzeccare.

Ti riporto una parte dell'HELP di LabVIEW2016 ottenuto selezionando la vista dettagliata:
<<
Case selector—Selects which case to execute based on the value of the input data. The input data can be a Boolean, string, integer, enumerated type or error cluster. The data type you wire to the case selector determines the allowed cases you can enter in the selector label.
>>
Come ti ho evidenziato, la struttura "case" può essere controllata tramite valori di tipo "discreto", (non continuo).
In soldoni, non può essere controllata da un numero in virgola mobile.
Il motivo è molto semplice ed è lo stesso per il quale, quando si controlla un valore numerico in virgola mobile, sia esso FLOAT o DOUBLE o altro, non si usa MAI l'operatore di uguaglianza (floiat x; if (x == 3.3) per es. non si fa MAI), ma si controlla che esso sia entro un certo range.

Se per caso ti fosse venuto in mente di collegare un filo arancione (float o double) all'ingresso del case selector, avrai notato il pallino (coercion dot) di "conversione automatica forzata" mentre il colore del case selector sia blu (non arancione): questo significa che il tuo valore in virgola mobile viene convertito in intero.

E come viene convertito un numero in virgola mobile in intero? Per arrotondamento.
Significa che da x.0 a x.49999999999999999999999 --> si ottiene x
da x.5000000000000000001 a x.9999999999999999999 --> si ottiene x+1
per x.5 --> si ottiene il numero pari + vicino (es. 0.5 --> 0; 1.5 --> 2; 2.5 --> 2; 3.5 --> 4; 4.5 -->4 ecc)

per concludere risolvendo il tuo quesito:
se stai manipolando numeri interi --> basta specificare il range 1..9
se stai manipolando numeri floating point -->
1) aggiungi Functions-->Comparison-->In Range and Coerce
2) sistema opportunamente i limiti di confronto
3) sfrutta l'uscita booleana dell' "In Range and Coerce" e collegala al case selector

bye
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO

Re: Case Structure, impostazione del range di valori di accettab

Messaggioda giuseppe.l74 » lun feb 11, 2019 10:25 am

Grazie,
hai ragione, non ci avevo pensato!
..non voglio più dire è tardi o è peccato..
giuseppe.l74
Utente Attivo +
Utente Attivo +
 
Messaggi: 134
Iscritto il: dom ott 09, 2005 2:04 pm
Località: Torino



  • Advertisement

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron

Pannello di Controllo Utente

Login

Advertisement

Chi c’è in linea

In totale ci sono 2 utenti connessi :: 0 iscritti, 0 nascosti e 2 ospiti (basato sugli utenti attivi negli ultimi 5 minuti)
Record di utenti connessi: 119 registrato il dom mar 31, 2013 11:39 pm

Visitano il forum: Nessuno e 2 ospiti