in data 10-19-2015 01:50 PM
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?
in data 10-20-2015 03:06 AM
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:
Spero le indicazioni possano esserti utili!
Ciao!
Licia
in data 10-21-2015 01:24 PM
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!
in data 10-21-2015 01:30 PM
Che serve il blocco prima dell'uscita dal loop e dove lo trovo?
in data 10-21-2015 01:45 PM
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?
in data 11-20-2015 06:23 AM
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.
in data 01-21-2016 03:42 AM
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.