Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

abortire subvi

Salve,

 

Ho un vi main che chiama un subvi. Io vorrei arrestare il subvi che legge e scrive dei tag dall'opc siemens che a volte dura parecchio tempo la sua esecuzione. Come posso fermare solo l'esecuzione del subvi? 

0 Kudos
Messaggio 1 di 7
5.279Visualizzazioni

Ciao!

Una soluzione potrebbe essere chiamare il subVI dinamicamente tramite VI Server anzichè chiamarlo staticamente come subVi. Trovi un esempio qui. In questo modo puoi anche utilizzare il metodo di Abort per fermare il VI (vedi qui). 

Oppure potresti passare al subVI (chiamato staticamente) una reference ad un controllo booleano sul main VI e leggerne il valore nel subVI per controllare lo stop del loop:

 

Capture.PNG

 

Spero le indicazioni possano esserti utili!

Ciao!

 

Licia

0 Kudos
Messaggio 2 di 7
5.268Visualizzazioni

Se provo a caricare dinamicamente il subvi mi da errore 1039 se tento di abortire il sub vi se non metto a false la spunta wai until done nel metodo run!

 

 

 

0 Kudos
Messaggio 3 di 7
5.255Visualizzazioni

Che serve il blocco prima dell'uscita dal loop e dove lo trovo?

0 Kudos
Messaggio 4 di 7
5.252Visualizzazioni

La soluzione del loop così com'è non mi è di molto utilità. Io devo effettuare una serie di letture e scritture con un certo ordine che in un ciclo non saprei come utilizzarle. Se c'è una avaria dovrei fermarmi e non leggere giù. il metodo abort non lo posso utilizzare per un problema di sincronizzazione magari tra spdue subvi prima leggo e poi scrivo o viceversa! E il comando stop non funzionorebbe?

 

0 Kudos
Messaggio 5 di 7
5.249Visualizzazioni

studiati le code e il producer consumer, cosi' puoi far comunicare in modo corretto due vi.

 

In ogni caso l'architettura che stai mettendo in piedi per risolvere il problema e' sbagliata.

 

0 Kudos
Messaggio 6 di 7
5.055Visualizzazioni

Il problema è che per poter fermare un subVI, devi fare in modo che il VI che lo controlla sia libero.

Se tu in un loop apri un subVI con un altro loop, ovviamente non reiteri il loop principale che rimane congelato.

 

Indipendentemente dal fatto che usi VIServer,ProducerConsumer o altro, quello che devi fare è creare un loop parallelo dove richiami il subvi da quello principale che rimane libero, quindi puoi usare, una architettura producer consumer (Meglio) o semplicmente una variabila locale per l'interruzione del ciclo e una per chiamare il subvi, meglio se usi magari una Functional Global Variable (trovi ampia documentazione. Ti allego un esempio per la via BASIC...

Non è il metodo consigliato ma prendilo solo come spunto per partire pensando di separare i due processi, poi veramente anche io ti consiglio di studiarti la producer consumer che trovi nei template di labview.

 

 

Nicola
LabVIEW DeveloperByteLABS.
0 Kudos
Messaggio 7 di 7
4.745Visualizzazioni