in data 02-11-2019 03:49 PM
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.
Risolto Andare alla soluzione.
in data 02-12-2019 06:00 AM
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).
in data 02-13-2019 03:27 AM
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
in data 02-13-2019 05:09 AM
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.
in data 02-13-2019 06:30 AM
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.
in data 02-13-2019 06:57 AM
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).
in data 02-13-2019 07:27 AM
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è?
in data 02-13-2019 07:48 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.
in data 02-13-2019 08:03 AM
Ora si che funziona! graziee
Lo implemento nel mio PID e ti faccio sapere, intanto ti ringrazio..mi hai risolto un problemone:):)
in data 05-30-2019 04:51 AM
Salve, avrei un dubbio e mi rivolgo subito a te pincpanter, visto che l'ultima volta mi hai risolto subito il problema. Intanto ti ringrazio, vorrei chiederti come faccio a far partire un ciclo dopo che si è verificata una certa condizione? Sto lavorando ad un sistema con logica PI (proporzionale integrativo) e vorrei che l'integrativo partisse da un certo punto in poi (per non cumulare troppo errore). come posso risolvere? grazieeee