Due funzioni fondamentali che spesso vengono confuse, approfondiamo in questo articolo le funzioni di timing, “wait” e “wait until next multiple” e come utilizzarle.
Wait

La funzione Wait(ms) semplicemente blocca l’esecuzione fino a che il tempo specificato non trascorre.
Wait until next ms multiple

La funzione “Wait Until Next ms Multiple”, invece blocca l’esecuzione aspettando un multiplo del clock di sistema, espresso in millisecondi, non è divisibile per valore specificato nella funzione.
Entrambe hanno funzione di “Attesa” o “Delay”, ma dalla descrizione capiamo che hanno un funzionamento diverso.
Test
Proviamo con un esempio pratico.

Usiamo il TickCount, come cronometro.

La funzione tick count (ms) viene utilizzata in LabVIEW come un cronometro, essa restituisce il tempo di esecuzione in millisecondi(ms), perciò può essere molto utile anche per fare dei test di prestazione dei propri VI.
Ricordare che utilizzandolo per comparazione ed essendo 32Bit quindi la capacità di 2^32-1.
LabVIEW HelpThe base reference time (millisecond zero) is undefined. That is, you cannot convert millisecond timer value to a real-world time or date. Be careful when you use this function in comparisons because the value of the millisecond timer wraps from (2^32)–1 to 0.
Va bene per cronometri nell’ordine dei ms ma non usare per misurare tempi più lunghi dove si può usare la funzione “Get Date/Time in seconds“, che fornisce un timestamp in secondi.

Tornando a noi, cosa fa e come si comporta il VI?

In sequenza viene preso un Tcount0, la funzione Wait attende esattamente il tempo impostato in waitTime.
Proseguendo la funzione Wait Until aspetta il primo multiplo dei ms impostati al suo terminale.
Quindi se la waitTime del primo wait è impostata a 50ms e il terminale di WaitUntil è 200ms, la wait until dovrà attendere 150ms prima di trovare il suo prossimo multiplo.
Di conseguenza
wait 50ms (impostato a 50ms)
wait until 150ms (impostato a 200ms)
Tempo ciclo totale 200ms
Come e dove usarli?
- Inserire un ritardo fisso dopo una funzione, come una write per inviare un comando. In questo caso usare Wait in serie al codice.
- Fornire un loop rate fisso indipendente dal tempo operazione.Wait in parallelo
- Loop rate adattabile al tempo del codice. Wait Until in serie al codice.
Consigli
- Per mantenere reattivo il codice e soprattutto la UI, non mettere tempi di pausa alti. Esempio se devi creare una pausa di 10s o più, usa Time Elapsed con un wait ciclo di 200ms.
- Temporizzare sempre i loop in caso di polling, in windows inutile scendere sotto i 50ms se il loop aggiorna una Interfaccia Utente usare da 150:250ms relativamente alla percezione dell’ occhio umano.
Approfondimenti
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P82BSAS&l=it-IT
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA03q000000YKYzCAO&l=it-IT
https://www.ni.com/it-it/shop/labview/timing-and-synchronization-in-ni-labview.html