Forum Italiano sui Prodotti NI

cancel
Showing results for 
Search instead for 
Did you mean: 

Cicli while annidati

Buongiorno a tutti.

Uso da poco labview e sono sicuro che la mia domanda è banale e probabilmente di natura più concettuale.

Inizialmente avevo creato 2 diversi vi:

- il primo, mi genera un'onda quadra di date caratteristiche in output ad una scheda NI6009 (all'interno di un ciclo while)

- il secondo legge la temperatura di una termocoppia

L'onda quadra serve per un PWM e variare l'alimentazione di una cella peltier, in modo da poter comandare la temperatura.

Volendo creare una semplice retroazione proporzionale ho unito i 2 files e il ho inseriti ognuno in un loop while. E' corretto? 

Il problema è che quando realizzo un collegamento tra i 2 cicli while (retroazionando il valore del duty cicle) non si genera più l'onda quadra.

Perchè si verifica questo? Credo di avere qualche lacuna concettuale sui cicli while e sulla possibilità di creare un collegamento tra i 2.

Qualcuno potrebbe chiarirmi il problema? 

Grazie mille

 

0 Kudos
Message 1 of 5
(3,285 Views)

Gias,

in LabVIEW la sequenzializzazione del codice avviene tramite i fili. Un "blocco" comincia ad eseguire quando ha tutti gli input disponibili. Nel tuo caso specifico, 2 while non gireranno mai in parallelo se un filo esce da un ciclo ed entra i un altro, perchè il secondo aspetterà che il primo finisce per cominciare ad eseguire.

Ci sono vari modi per comunicare tra cicli paralleli:

0 Kudos
Message 2 of 5
(3,255 Views)

Ciao Lamber, grazie della risposta e del chiarimento.

Ho dato un'occhiata ai queqe, ho provato a implementarli nel mio vi, ma continua a non funzionare come dovrebbe.

In pratica ho un ciclo while1 nel quale genero un'onda quadra che tramite mosfet alimenta una cella peltier; nel secondo ciclo while2 la termocoppia acquisisce il valore della temperatura della peltier.

Nel ciclo while2 imposto anche la temperatura di set point e calcolo il valore del Duty Cicle da comunicare al ciclo while1 per la retroazione.

Quello che quindi mi interessa è quindi :

1) far eseguire sempre il ciclo while1 (perchè voglio sempre generare l'onda quadra)

2) Poiche non posso eseguirli in parallelo, eseguire ogni tot tempo il ciclo while2 per l'acquisizione della temperatura e calcolare il nuovo Duty cicle da inviare al ciclo while1.

 

Se ho ben capito quindo con la logica dei queqe, il ciclo while1 dovrebbe essere il mio enqueqe element, mentre il while2 il dequeqe element...E' corretto?

 

0 Kudos
Message 3 of 5
(3,251 Views)

Mi sembra di capire che stai facendo un loop di controllo.

Trovi un sacco di esempi nell'example finder di LabVIEW, sia per quanto riguarda i loop di controllo che per le code (Help-->Example Finder)

Probabilmente per un semplice anello di controllo in temperatura ti basta un solo loop con un controllore PID... ti allego un esempio che ho trovato in LaBVIEW.

 

0 Kudos
Message 4 of 5
(3,246 Views)

Grazie ancora Lamber.

Purtroppo sono costretto a lavorare con un computer obsoleto di laboratorio, in cui è installato la versione Labview 2010. Non ho quindi il pacchetto Simulation and Control.. e non posso installare la versione disponibile on line in quanto richiede almeno windows 7.

Ho letto i link che mi hai inviato e ho provato a fare qualcosa con le queqe ma senza successo, ti allego il vi.

 

0 Kudos
Message 5 of 5
(3,237 Views)