FIFO per eseguire un azione

Discussioni generali sulla programmazione in LabVIEW, domande, problemi e soluzioni.

Moderatore: ILVG mod

  • Advertisement

FIFO per eseguire un azione

Messaggioda gepponline » ven feb 15, 2019 4:00 pm

...ma ciao!
ho un applicazione in cui devo eseguire una certa azione trascorso TOT tempo da un segnale di trigger.
Tra il trigger e il tempo dell'azione, mi puo' arrivare un altro trigger pero', quindi non posso semplicemente ritardare ma devo in qualche modo creare una coda, fifo o qualche altro tipo.
Qual'e' la soluzione migliore secondo voi usando LabVIEW?
Esistono degli strumenti già implementati a questo scopo magari?
grazie!
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda paracarro » lun feb 18, 2019 5:29 pm

gepponline ha scritto:...ma ciao!
ho un applicazione in cui devo eseguire una certa azione trascorso TOT tempo da un segnale di trigger.
Tra il trigger e il tempo dell'azione, mi puo' arrivare un altro trigger pero', quindi non posso semplicemente ritardare ma devo in qualche modo creare una coda, fifo o qualche altro tipo.
Qual'e' la soluzione migliore secondo voi usando LabVIEW?
Esistono degli strumenti già implementati a questo scopo magari?
grazie!


Non hai specificato cosa vuoi che succeda quando il secondo trigger interviene, cmq ti ho confezionato questo esempio che spero possa esserti utile.

NotifierTimeout.vi
LV2016
(18.08 KiB) Scaricato 17 volte


In un vecchio progetto avevo un certo numero di questi loop in cui un notifier attendeva un evento per un certo periodo di tempo: il passaggio di oggetti da una antenna RFID generava un evento che resettava ogni volta l'attesa. Se gli oggetti non passavano dall'antenna per un certo periodo di tempo, voleva dire che probabilmente questi oggetti si erano incastrati da qualche parte. L'uscita dall'attesa di notifica per timeout rappresentava un allarme.

bye
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO

Re: FIFO per eseguire un azione

Messaggioda gepponline » mar feb 19, 2019 9:22 am

Grazie per la risposta, poi come avviene spesso, subito dopo al momento in cui chiedo aiuto, arriva il "lampo di genio" :)
In effetti non ho specificato che il secondo e i vari trigger seguenti fanno la stessa cosa che fa il primo trigger. Cioè scatenano un evento che fa eseguire un azione sempre uguale alla macchina.
Allego il riassunto di quello che ho sviluppato sfruttando le code usando come hai fatto tu un indicatore stringa per dare un idea.
C'e' qualche criticità in questo tipo di approccio secondo te?
Allegati
FIFO.vi
(16.91 KiB) Scaricato 19 volte
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda paracarro » mar feb 19, 2019 11:04 am

LabVIEW 2016, please!

Cmq per fare quello che vuoi tu, basterebbe creare una istanza di un VI rientrante che fa quello che deve fare quando scatta il trigger: la prima cosa che farà questo VI è attendere un tempo congruo prima di procedere.

bye
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO

Re: FIFO per eseguire un azione

Messaggioda gepponline » mer feb 20, 2019 9:09 am

C'e' qualche problema al server e non mi lascia uploadare file.
Ci riprovo piu' tardi.
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda gepponline » mer feb 20, 2019 1:02 pm

Ok, ho messo un snippet fatto con la 2012, dovrebbe andare ;)
Allegati
FIFO_snippet.png
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda paracarro » mer feb 20, 2019 4:06 pm

Ciao.


Scusami Geppo, ma... non mi piace.

Usi una coda contenente un timestamp, ma poi fai un polling disperato sull'orologio di sistema.

Il ritardo dal trigger, poi, può cambiare anche durante l'attesa e necessariamente deve essere lo stesso per tutti i trigger generati che sono pendenti

Cmq dipende da quello che devi fara.

Se a te va bene, va bene pure a me.

bye
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO

Re: FIFO per eseguire un azione

Messaggioda gepponline » mer feb 20, 2019 4:24 pm

Considera che il ciclo va temporizzato, qui mi son dimenticato e che il tempo di attesa potrebbe anche essere inserito nella coda insieme al timestamp.
Ma detto questo, e' per questo che ho chiesto qui.
Il problema di usare eventi o notifier o cose simili era che l'evento mi scatena subito un azione.
Per ritardare l'azione dovrei temporizzare, ma la temporizzazione non mi deve impedire di ricevere i nuovi eventi e non deve cancellare quelli vecchi.
Allo stesso tempo non so a priori quanti eventi possono avvenire tra un evento e la sua azione, possono avvenirne tanti o nessuno, quindi il ciclo dovrebbe comunque andare in polling.
Tral'altro la coda arresta il ciclo se è vuota, quindi il polling si arresterebbe.
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda paracarro » mer feb 20, 2019 6:03 pm

Questa è la mia soluzione.

Come ti ho scritto sopra, non ho usato code, ma solo un VI rientrante che viene istanziato al momento del trigger.

Per evitare casini, il subVI "LogMe" è semaforato (non è rientrante).

bye
Allegati
StartWithDelay.llb
LV2016 run "MyMain"
(54.73 KiB) Scaricato 15 volte
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO

Re: FIFO per eseguire un azione

Messaggioda gepponline » gio feb 21, 2019 12:25 pm

Soluzione interessante, la valuto sicuramente ;)
Non mi è chiaro perchè esegui il RunMe e il log prima del ciclo pero'..
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda paracarro » gio feb 21, 2019 2:59 pm

gepponline ha scritto:Soluzione interessante, la valuto sicuramente ;)
Non mi è chiaro perchè esegui il RunMe e il log prima del ciclo pero'..


Eseguo il "Runme.vi" solo per comodità.

Come avrai notato, se il parametro "Number" vale 0, allora Runme.vi non esegue nulla ed esce subito.
Quindi la chiamata fuori dal loop non fa ...niente.
In compenso permette di avere il "Runme.vi" caricato in memoria unitamente a "MyMain.vi" in quanto subVI referenziato direttamente dallo stesso.

Ciò consente:
1) di passare alla funzione "Open VI reference", il nome del SubVI "RunMe.vi" come stringa e non come path (perchè si trova già in memoria)
2) nel caso dovessi creare l'eseguibile, non avresti la necessità di includere esplicitamente il VI "runme.vi" in quanto caricato dinamicamente.

il log viene chiamato per inizializzazione.

Quando al VI di log viene passato il reference dellindicatore stringa in cui loggare i messaggi, il reference dell'indicatore viene memorizzato all'interno di LogMe.vi, di modo che non sia più necessario passarlo nuovamente. oltre alla memorizzazione del reference, la stringa viene azzerata.


bye
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO

Re: FIFO per eseguire un azione

Messaggioda gepponline » ven feb 22, 2019 9:10 am

Perfetto, sospettavo fosse un caricamento in funzione di un eseguibile o robe simili, ma volevo essere certo di non aver perso qualche passaggio per strada.
La parte del log invece, doovendo poi escludere tutta la parte di messaggistica direi che mi resta superflua visto che devo solo eseguire un azione.
E adesso aggiungero' quindi un altro step ai miei dubbi con un altro post, visto che l'azione che devo eseguire, la devo eseguire da due eseguibili separati ma che utilizzano la stessa risorsa HW.
..ma ciao!
Immagine
Avatar utente
gepponline
Moderatore
 
Messaggi: 2117
Iscritto il: ven gen 28, 2005 11:27 am
Località: Monticello Brianza

Re: FIFO per eseguire un azione

Messaggioda paracarro » mer feb 27, 2019 10:45 am

Dipende da quanto deve essere il ritardo a partire dall'evento di trigger, ma,
- se il ritardo è nell'ordine dei secondi
- se fosse necessario abortire l'esecuzione del codice associato all' evento,

allora consiglio di usare un Notifier per gestire l'attesa.
se dal VI di attesa di notifica si esce per Timeout, allora tutto OK, altrimenti vuol dire che un evento di ABORT è stato attivato.

bye
Mai dire Mai
paracarro
Moderatore
 
Messaggi: 875
Iscritto il: lun ago 18, 2003 3:04 pm
Località: MILANO



  • Advertisement

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron

Pannello di Controllo Utente

Login

Advertisement

Chi c’è in linea

In totale c’è 1 utente connesso :: 0 iscritti, 0 nascosti e 1 ospite (basato sugli utenti attivi negli ultimi 5 minuti)
Record di utenti connessi: 119 registrato il dom mar 31, 2013 11:39 pm

Visitano il forum: Nessuno e 1 ospite