Forum Italiano sui Prodotti NI

cancel
Showing results for 
Search instead for 
Did you mean: 
Reply

reinizializzare un arrey e fare un a media

Solved!
Go to solution
Highlighted

Buonasera, devo acquisire e comandare delle misure di pressione in tempo reale e ho pensato ad un array su labview. Vorrei sapere se esiste un array che mi permetta di fare una media ogni n valori e mandarla in uscita.

Per comprenderci meglio dovrei fare una media mobile degli n-valori di pressione in modo da stabilizzare il controllo di una valvola di riduzione delle pressioni visto che il segnale del misuratore di pressione oscilla eccessivamente. 

grazie e spero di essere stato chiaro.

 

 

0 Kudos
Message 1 of 9
(419 Views)

La funzione Mean Point By Point, che trovi nella palette Signal Processing -> Point By Point -> Prob & Stat, risolve tutti i tuoi problemi senza dover creare un array. Restituisce la media su un numero fisso di campioni.

Se però hai bisogno di elaborazioni più raffinate, per esempio variare il numero di campioni in base al valore, allora devi implementare un buffer circolare, col quale potrai fare tutto ciò che vuoi (con un po' di lavoro).

Paolo
-------------------
LV 7.1, 2011, 2017
0 Kudos
Message 2 of 9
(389 Views)

Ciao, ti ringrazio per avermi risposto.

Ho provato la mean ptbypt  ad esempio se imposto sample lenght 5 il VI dovrebbe darmi la media ogni 5 valori in ingresso, giusto?

Nello schema allegato però non funziona, mi restituisce lo stesso numero che il generatore di numeri casuali mi fornisce. Perchè?

Grazie ancoraaa

 

 

0 Kudos
Message 3 of 9
(375 Views)

Se passi sempre true all'input di Reset, il vi ogni volta ricomincia dall'inizio.

Devi resettare, una sola volta, per sbarazzarti dei dati vecchi quando passi da una sessione di misura ad un'altra.

Paolo
-------------------
LV 7.1, 2011, 2017
0 Kudos
Message 4 of 9
(365 Views)

Perdona la mia inesperienza, ma se metto come sample lenght=2 e i valori di input sono 1 ogni secondo dovrebbe restituirmi 1 valore mediato ogni due secondi (se ho capito bene) e questo lavoro lo dovrebbe fare in continuo così da mandare a comando la media.

ps Ho corretto il true con un boolean, l' ho inizializzato con true e poi sono passato a false mai da sempre lo stesso problema e cioè mi da i valori del random number. 

ripeto scusa la mia inesperienza e ti ringrazio tantissimo.

0 Kudos
Message 5 of 9
(357 Views)

Restituisce, ogni secondo, il valore mediato sugli ultimi due secondi.

Dal momento in cui passi false in poi, comincia a mediare, prima ovviamente no.

Manda il vi oppure un'immagine se hai LabVIEW 2018 (con LV2017 non lo potrei aprire).

Paolo
-------------------
LV 7.1, 2011, 2017
0 Kudos
Message 6 of 9
(350 Views)

Quindi ogni secondo avrei la media degli ultimi due e automaticamente al primo secondo avrei lo stesso numero del random number ovviamente.

TI ho allegato immagine e VI (ho il 2017 purtroppo);

Quando eseguo a rallentatore, in uscita (Numeric 2 sul VI), leggo sempre lo stesso numero del random number.

perchè?

 

 

0 Kudos
Message 7 of 9
(343 Views)
Solution
Accepted by topic author Fabrisalsh
02-13-2019 06:01 AM

Se mandi un true nel Conditional Terminal, il loop termina subito e così il vi. Siccome hai usato Run Continuously, però, il vi viene continuamente riavviato. Questo vuol dire che ad ogni iterazione si riparte da zero; il risultato è quello che vedi, ed è equivalente a resettare ogni volta.

Ti consiglio di non usare mai Run Continuously, genera più danni che altro. Crea invece un pulsante per terminare il loop  (rimuovi la costante booleana e il suo filo, poi fai right-click sull'input del Conditional Terminal e seleziona Create Control). Usa il bottone Run per avviare il vi.

 

Paolo
-------------------
LV 7.1, 2011, 2017
0 Kudos
Message 8 of 9
(340 Views)

Ora si che funziona! graziee

Lo implemento nel mio PID e ti faccio sapere, intanto ti ringrazio..mi hai risolto un problemoneSmiley HappySmiley Happy

0 Kudos
Message 9 of 9
(335 Views)