Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

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
Messaggio 1 di 5
3.280Visualizzazioni

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
Messaggio 2 di 5
3.250Visualizzazioni

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
Messaggio 3 di 5
3.246Visualizzazioni

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
Messaggio 4 di 5
3.241Visualizzazioni

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
Messaggio 5 di 5
3.232Visualizzazioni