Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

subvi, valori passati fuori da loop

Salve, sono un principiante e mi scuso se questo non e' il forum adatto in cui postare, ma non ho trovato una soluzione sul web...
Allora, ho un vi che genera numeri casuali dentro un while loop. Se mando i valori ad una chart dentro il loop vedo i numeri che si generano in tempo reale sul panel (se aggiungo un ritardo...). Se invece collego un grapg _fuori_ dal loop, sul display mi appare il grafico solo a loop ultimato.
Ora, se metto questo subvi in un altro vi, e collego le uscite chart e graph con altrettante nel nuovo vi, la chart non mostra niente, il graph i valori tutti insieme solo alla fine del loop. Questo perche' i valori sono passati dal sub al vi solo a loop ultimato. La mia domanda e':
posso usare il suddetto subvi in un vi, e visualizzare in quest'ultimo i valori man mano che si generano, real time insomma?
Nel mio caso specifico, non e' possibile copiare il codice del subvi nel vi, in quanto e' abbastanza complesso.
Spero di essere stato abbastanza chiaro...
Grazie in anticipo per l'aiuto,
mirko
0 Kudos
Messaggio 1 di 4
5.062Visualizzazioni

Direi che si puo' pensare di usare

  • Global Variables
  • Control References
  • Function Globals

Utilizzando ad esempio un Control Reference di un oggetto che si trova su  Front Panel del SubVI puo' essere piazzato nel main VI per avere aggiornamento in tempo reale di quello che succede.

http://zone.ni.com/devzone/conceptd.nsf/webmain/68D318643AFA3CA086256928006C64A4

 

0 Kudos
Messaggio 2 di 4
5.052Visualizzazioni

In un certo senso sono anche io un principiante

Anche io faro’ uno sforzo di chiarezza, perdona la prolissità della risposta.

 

Quando si programma con LabView bisogna  sempre tenere a mente che l’ordine di esecuzione è controllato dai dati che scorrono attraverso il programma (DataFlow).

E’ naturale dunque che nella situazione da te descritta  il Vi chiamante si aggiorni solo quando l’esecuzione del subVi chiamato termina. Questo accade perche’ solo al termine dell’esecuzione del subVi il dato è pronto per essere trasferito all’esterno.

 

Il fenomeno puo’ sembrare  analogo al return di un dato in una funzione C, solo quando la funzione chiamata ha finito di operare restituisce il dato alla funzione chiamante, in realtà c’e’ una differenza radicale che bisogna chiarire subito.

 

Labview opera secondo uno paradigma di DataFlow cio’ significa che le azioni vengono effettuate quando i dati sono pronti. In LabView due azioni che non si scambiano dati all’interno di uno stesso codice possono essere eseguite contemporaneamente.

 

Per renderti conto di cio’ puoi fare un semplice Vi con 2 cicli while e 2 bottoni di stop separati. In ciascun ciclo inserici un wait con valori differenti e generi un random number che aggiorna una chart. Vedrai che i due cicli vivono di vita propria. Generare un esempio analogo in C non e’ altrettanto semplice, perche’ una volta entrato in un ciclo è necessario terminarlo prima di eseguire il successivo. Il C è un linguaggio Procedurale quindi i comandi vengono eseguiti come compaiono nel listato. LabView è un linguaggio di Dataflow i comandi vengono eseguiti quando i dati sono pronti.

 

Dopo questa premessa passiamo ad affrontare il tuo problema specifico.

 

Per risolvere il tuo problema esistono alcune possibilità.

Queste due mi vengono in mente subito.

 

1) Se il problema è sclusivamente di visualizzazione puoi semplicemente aprire il FrontPanel del subVi e “guardare” la sua esecuzione.

2) Se il problema è più complicato e richiede l’elaborazione dei dati “Real-Time” mentre questi vengono prodotti dal SubVi puoi usare l’ottimo suggerimento di Alessio.

 3) Un ulteriore alternativa può essere il metodo di programmazione “producer-consumer” che sfrutta le code per passare dati tra più cicli di uno stesso Vi.

Tieni conto che la gestione delle code non è mai semplice e che generalmente usare questo metodo ha senso solo se il ciclo che “produce” i dati deve viaggiare con un rate ben specifico, chiaramente dipende dall’applicazione.

Puoi trovare ulteriori informazioni a questo URL

 

http://zone.ni.com/devzone/conceptd.nsf/webmain/C54BADADD8BBDE4286256C5200533B80

 

 

Buon Lavoro.

 

Filippo

Message Edited by FiloP on 09-05-2006 08:14 AM

FiloP
It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong.
Richard P. Feynman
0 Kudos
Messaggio 3 di 4
5.040Visualizzazioni


@zampala wrote:
Salve, sono un principiante e mi scuso se questo non e' il forum adatto in cui postare, ma non ho trovato una soluzione sul web...


Mirko, oltre a questo esiste il forum di ILVG - Italian LabVIEW user Group su cui puoi cercare o chiedere aiuto, abbiamo aiutato tanti "principianti" come te 😉

Ciao,

Alessandro Ricco
0 Kudos
Messaggio 4 di 4
5.001Visualizzazioni