Calcolo media mobile Questo VI calcola e visualizza la media mobile, utilizzando un numero preselezionato. Innanzitutto, il VI inizializza due registri a scorrimento. Il registro a scorrimento superiore è inizializzato con un elemento, quindi aggiunge continuamente il valore precedente con il nuovo valore. Questo registro a scorrimento mantiene il totale delle ultime misurazioni x. Dopo aver diviso i risultati della funzione aggiuntivo con il valore preselezionato, il VI calcola il valore di media mobile. Il registro a scorrimento in basso contiene un array con la media dimensione. Questo registro a scorrimento mantiene tutti i valori della misurazione. La funzione di sostituzione sostituisce il nuovo valore dopo ogni ciclo. Questo VI è molto efficiente e veloce perché utilizza la funzione dell'elemento sostituire all'interno del ciclo while, ed inizializza la matrice prima che entri nel circuito. Questo VI è stato creato in LabVIEW 6.1. Bookmark amp ShareMean PtByPt. vi non si media, una finestra di dati in un problema di tempo: Sto cercando di sottoinsiemi media di 100 punti alla volta da un segnale in arrivo continuo. Il problema è che la media PtByPt. vi in media i primi 100 punti (0hellip99) e poi i successivi 100 punti (1. 100) riutilizzando 99 degli stessi valori. Invece di una finestra mobile media, vorrei implementare blocco media dei dati, cioè, vorrei spezzare i dati in blocchi e registrare il valore medio di ciascun blocco di dati. Soluzione: la funzionalità predefinita della media PtByPt. vi non dà la media di ciascun blocco di dati. Piuttosto, come descritto nel problema, per una data dimensione di finestra n, medie medio PtByPt. vi punti 0 a n-1, quindi i punti da 1 a n, allora i punti 2 di n1, così e ecc. Per eseguire blocco media, è necessario scrivere del codice soluzione. Si dovrebbe eseguire un calcolo del modulo sul conteggio iterazione del ciclo per determinare quando a media e quando trasmettere dati senza media. Calcolando il conteggio iterazione i mod n, quando i0, la fine della finestra è stato raggiunto e la media media PtByPt. vis è corretto. Abbiamo poi memorizzare questo valore in un array o un indicatore. Nella successiva iterazione il valore mod sarà uguale a 1, che reimpostare la media PtByPt. vi e prepararla per il prossimo sottoinsieme di n punti. Il trucco è quello di rendersi conto che le medie ottenute da blocchi di media sono un sottoinsieme della media finestra mobile eseguite da Media PtByPt. VI. In alcuni casi si potrebbe desiderare di tutti i dati per aggiornare sul pannello frontale, mentre solo la registrazione le medie come descritto nella dichiarazione problema di cui sopra. Puoi svolge questa funzione in una maniera simile, vale a dire, eseguendo un'operazione di modulo sul conteggio dell'iterazione e scegliendo un caso in una struttura caso basata su questo. Si prega di fare riferimento all'esempio comunità sotto Link correlati Per ulteriori informazioni su come fare questo e codice di esempio, che analizza e converte i dati dinamici ed esegue il codice functions. Your citato fa ancora non ha senso. Dal momento che si sta chiamando quello scalare subVI alla volta, non si ottiene ciò che si vuole, perché il registro a scorrimento rememebers solo le ultime N scalari, non importa quale canale è da. Il tuo codice è ancora molto inefficiente e contorto. (Ad esempio, perché stai ancora utilizzando inserto in una matrice da aggiungere (sia nel nad mani nel sub). (È possibile utilizzare un subVI reenetrant e una più interna parallela per ciclo, ma che sembra troppo complicato troppo) Se si vuole fare un media in esecuzione su ogni canale, il subVI ha bisogno di mantenere una matrice 2D in subVI Tutto questo è stato fatto prima di poter capire la tua frustrazione -... a maggior ragione quando il contesto di codifica LV è diverso in entrambe le nostre vite per me come un ingegnere meccanico è un add on e che è iniziata come un passaggio di tempo. Quindi il codice non può essere la più efficiente o che estrae l'ultima goccia di succo dalla CPU. infatti nelle applicazioni di controllo della macchina tutta la CPU non fa nulla più la maggior parte delle volte che correre il codice di controllo e con processori come i5 o i7, che rende ancora più facile non sto dicendo che il codice efficiente è una perdita di tempo -... sto solo dicendo il contesto è diverso poco prima ho vento verso il basso qui è un altro un rapido e sporco che fa il lavoro ha fornito i primi valori vengono ignorati - non è un grosso problema in un'applicazione di data logging che corre per ore e ore. Raghunathan LV2012 per automatizzare banchi di prova idraulica. Mi dispiace hai una scarsa considerazione del genere per l'eleganza e correttezza, e che si sente che abbastanza buono è abbastanza buono. Forse, in futuro, si consultare qualcuno che conosce e capisce LabVIEW e semplicemente lui (o lei) dice che cosa si vuole fare e lasciarli fare per voi. Tuttavia, se il vostro obiettivo è quello di (a) raccogliere dati provenienti da canali N a F frequenza (in Hz), ma per visualizzare la media dei punti M (quindi per punti ogni M si genera si traccia 1 punto, la media dei punti M ), ecco un buon modo per farlo: creare un Produttore loop di produzione dei dati impostando il dispositivo di campionamento per darvi M Punti da N canali, campionati a frequenza F. Questo dovrebbe essere un array 2D (m righe di N colonne) . Mettere questo in una coda e ripetere, più e più volte, fino a che il pulsante Stop viene premuto. Dopo essere usciti dal produttore Loop, inviare un array 2D più vuota (youll capire perché in un momento). Creare un ciclo di consumo parallelo e alimentano la coda utilizzata dal produttore Loop. Dequeue Array dati - se è vuoto, sono stati fatti, in modo da liberare la coda e fermare il ciclo dei consumatori. In caso contrario, abbiamo bisogno di consumare (Media e Plot) i dati. Dobbiamo recepire le M Points by N canali array ad un canale N da M Punti array. Alimentare questo Array ad un ciclo for (che sarà ad anello sui canali), calcolare la media o Punto M, e l'uscita questa media. Vogliamo tracciare questo punto (singolo) da tutti i canali N, in modo da farla passare attraverso Costruire Array di fare un 1 per N Array, e tracciare questo. Ecco un frammento di LabVIEW 2012, che consente di simulare tutto questo (che genera punti alla frequenza specificata, max 1 KHz). Ho anche scalare le Plot modo che il tempo è espresso in secondi. Questo non ha ancora tradurre bene per il frammento - in realtà ho usato un Averaged dati Property Node lì. Questo, credo, fa quello che ho capito si voleva davvero, vale a dire di avere un display che mostra la media (ad un tasso più lento rispetto plot dei dati). Youll notare che ogni canale ha un diverso compensato, in modo che quando si guarda la trama, si dovrebbe vedere 16 linee, cercando sempre più liscio come si aumenta la modella indossa una taglia. È necessario specificare i parametri prima di eseguire il codice, dal momento che i principi del flusso di dati (su cui si basa LabVIEW) ignorano le modifiche apportate ai controlli una volta che il programma è in esecuzione. Prima di tutto lasciatemi vi ringrazio per la risposta dettagliata e il frammento di codice. Ho apprecaite vostra intenzione di aiutare. La mia risposta precedente, eventualmente, sembrava un po 'grossolano ma sarò l'ultima persona a rifilare qualcosa che è la metà al forno o instabile. Mi spiego: La mia linea di oleodinamica di attività e ho la mia azienda fondata nel 1995 e, come una proposta di valore oltre i la fornitura di sistemi integrati con instrumenation e software. Operiamo in due grandi vertcials - Turbine eoliche e sistemi di test. E fino ad oggi abbiamo fornito molti sistemi completi che vengono utilizzati ampiamente nell'industria automobilistica qui in India, così come in Europa. Ma la mia azienda non è una organizzazione enorme ed è una di dimensioni medie e qui in vi è una cattura - è quasi impossibile trovare programmatori LabVIEW esperti. L'India ha una grande piscina di ingegneri del software, ma tutti sono in desktop computing e di ingegneri in Physical Computing è quasi nullo o trascurabile. Così, quando i clienti vengono da me con i requisiti freschi (credetemi - sono tutti diversi) prendo la sfida personalmente, ma per fornire i interamente dipendere dal sostegno da parte della comunità on-line. codice LV todate ho sviluppato con successo per ottenere i dati tramite CANopen, Modbus RTU, Profinet e EtherCAT. Con una tale varietà e tempi brevi alle richieste del mercato io non semplicemente hanno le risorse per implementare una squadra enorme di consegnare. Così si riduce allo sviluppo di codice di base o ovvio che fa quello che si suppone e, se il cliente è OK con esso - lasciarlo lì. La sua una differenza tra il codice funzionale e il codice intelligente e mi è stato accennando al meno un. e non lo sviluppo di merda codice Venendo al tuo codice di esempio - questo modello di consumo produttore è un regolare che io uso per tutti i miei progetti in cui ho principale come il produttore e del Sub VI come il consumatore. Con i dati di flusso via coda. Studierò più in dettaglio. Raghunathan LV2012 per automatizzare banchi di prova idraulica.
No comments:
Post a Comment