Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Operazioni in sequenza

Salve a tutti.

Sono nuovo ed avrei bisogno di una mano d'aiuto.
Ho la necessita di realizzare un piccolo software con Labview tale da controllare in sequenza l'apertura di 4 valvole per un tempo stabilito.

Esempio:
La valvola 1 deve stare aperta 10 s, dopo di che si deve chiudere e si deve aprire la valvola 2 per 20 s, dopo la due si chiede e si apre la 3 per 30 s, dopo si chiude la 3 e si apre la 4 per 40 s. Alla fine il ciclo deve ricominciare (cioè 1 per 10s, 2 per 20s, 3 per 30 s.....ecc. ecc. ciclicamente continuamente)

Come faccio???

Grazie a tutti quelli che vorranno rispondere
0 Kudos
Messaggio 1 di 6
5.355Visualizzazioni
Per sequenziare le operazioni in labview ci sono diversi sistemi.
Anche se potrebbe sembrare il contrario, ci sono fondate ragioni per non usare le sequence, e se cerchi nel forum troverai un sacco di discussioni su questo argomento.
Piuttosto potresti usare uno dei paradigmi fondamentali di LV: il flusso dati attraverso i fli. Questo paradigma permette di sequenziare delle operazioni se puoi tirare un filo da un output di un vi a un input del successivo: sarai sicuro che il secondo non viene eseguito se il primo non è stato completato. A questo scopo sono molto comodi i cluster error in / out presenti in molti vi fra i quali il Time Delay.vi (che può essere usato nella gestione delle pause) oppure quelli relativi a I/O digitali su schede DAQ oppure all'utilizzo della linea seriale, per citare alcuni metodi per pilotare dei relè per pilotare le valvole.
Se invece la domanda era proprio su cosa usare per pilotare le valvole dovresti darci qualche informazione in più sulle valvole e sull'hardware che hai a disposizione (ad esempio eventuali schede daq o altro) o che intendi comunque utilizzare.

Message Edited by Roberto Bozzolo on 03-02-2007 12:27 AM



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 2 di 6
5.349Visualizzazioni
In realtà cercavo una soluzione software! Il mio hardware è un cFP-RLY, e non ho nessun problema a controllare le valvole.
Ieri ho trovato una soluzione di cui però non sono molto soddisfatto. Ho usato un ciclo Case all'interno di un WHILE con un shift register! Esegue le operazioni in sequenza, e ricomincia, ma mi blocca tutto il resto!!!! Nel senso che mentre esegue il ciclo while, non acquisisce più le altre grandezze.......temperature e corrente. Molto strano.

Comunque grazie per il suggerimento.

Lunedì provo!!
0 Kudos
Messaggio 3 di 6
5.342Visualizzazioni
Non è un cattivo metodo quello che hai trovato! Hai descritto esattamente una macchina a stati (stale machine) per la quale troverai miriadi di post sul forum e diversi esempi (tanto per citarne uno: State Machine Test Sequencer.vi, lo trovi con l'example finder cercando per "state"). Questa è una struttura modulare e flessibile che si presta bene a flussi di operazioni come i tuoi. Non te ne ho accennato perchè non sapendo bene qual'era il tuo problema e il tuo livello di conoscenza del linguaggio ho preferito stare su soluzioni più lineari. Comunque se fai un Create New... From template c'è una struttura di base per creare una macchina a stati.
 
Il blocco del sistema può dipendere dal fatto che non concedi spazio per l'esecuzione di altri pezzi di software: prova ad inserire nel while un Wait Until Next ms Multiple adatto al livello di controllo che ti aspetti dal tuo sistema (probabilmente puoi limitarti a ciclare 4-5 volte al secondo, quindi passare al vi un valore 200-250 msec).


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 4 di 6
5.340Visualizzazioni
Uhm! Non ne sto venendo a capo! Anche inserendo un valore più basso al Wait Until Next ms Multiple non sucecde nulla, una volta entrato nell loop, non fa più niente ed è impossibile riprendere il controllo del programma!!

Al momento non ho nessuna soluzione. Mi sembra un problema così banale, e sono sicuro che anche la soluzione sarà banale, ma non mi sovviene.

E' possibile far fare ad una struttura Sequence un loop continuo. Cioè, c'è qualche impostatzione che permetta ad una Sequence di ricominciare quando finisce???


0 Kudos
Messaggio 5 di 6
5.328Visualizzazioni

Forse il problema è proprio nella pausa: a puro titolo sperimentale dovresti provare a passare un valore alto al Wait: devi considerare che il metronomo non è una pausa fissa eseguita dopo le altre operazioni del loop ma un intervallo di tempo che comprende anche le cose che fai nel loop; in pratica, quel vi mette a riposo il loop fino alla scadenza dell'intervallo di tempo che gli passi; se il valore è troppo basso potresti trovarti nella condizione che il vi non viene eseguito affatto (ad es. hai messo un valore di 10 ms ma il tuo tempo di loop considerate le altre operazioni che esegui ad ogni iterazione è lungo 9 msec o più: in queste condizioni il metronomo non lavora proprio perchè appena va in esecuzione scopre che il suo tempo di attesa è praticamente scaduto e ripassa il controllo al loop!).

Per quanto riguarda le sequenze, non ti perdere troppo: il loro problema è caso mai quello opposto al tuo, vale a dire riuscire a saltarne fuori prima della fine oppure modificarne le modalità di esecuzione (di solito le condizioni di emergenza richiedono di interrompere i funzionamenti in corso o alterare la sequenza di eventi per mettere le macchine in condizioni di sicurezza, cosa abbastanza facile con una macchina a stati e molto più ardua con una sequenza)

Message Edited by Roberto Bozzolo on 03-05-2007 02:49 PM



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 6 di 6
5.321Visualizzazioni