Saturday 18 November 2017

Labview Bevegelig Gjennomsnitt Vi


Beregner Moving Average. This VI beregner og viser det bevegelige gjennomsnittet ved å bruke et forhåndsvalgt nummer. First initierer VI to skiftregister. Toppskiftregisteret initialiseres med ett element, og legger kontinuerlig den forrige verdien med den nye verdien. Dette skiftregisteret holder summen av de siste x-målene Etter å dele resultatene av add-funksjonen med den forutbestemte verdien, beregner VI den bevegelige gjennomsnittsverdien. Bunnskiftregisteret inneholder en matrise med dimensjonen Gjennomsnitt Dette skiftregisteret beholder alle verdier av verdien. Utskiftningsfunksjonen erstatter den nye verdien etter hver sløyfe. Denne VI er veldig effektiv og rask fordi den bruker erstatningselementfunksjonen i løpet av løpet, og den initialiserer arrayet før den går inn i sløyfen. Denne VI ble opprettet i LabVIEW 6 1.Bookmark Share. Gjennomsnitt betyr ikke gjennomsnittlig et vindu med data om gangen. Problem Jeg prøver å gjennomsnittlige delsett på 100 poeng av gangen fra et kontinuerlig innkommende signal The Problemet er at gjennomsnittet vil gjennomsnittlig de første 100 poengene 0 99 og deretter de etterfølgende 100 poengene 1 100 gjenbruk 99 av de samme verdiene i stedet for et bevegelige vindues gjennomsnitt, vil jeg gjerne implementere blokkverdi av dataene, det vil jeg liker å bryte opp dataene i biter og registrere gjennomsnittet av hver bit av data. Oppløsning Standardfunksjonaliteten til Mean gir ikke gjennomsnittet av hver bit av data. I stedet for, som beskrevet i problemstillingen, for en gitt vindusstørrelse n , Gjennomsnitt gjennomsnitt poeng 0 til n-1, deretter poeng 1 til n, deretter poeng 2 til n 1, så og så videre For å utføre blokk gjennomsnitt må du skrive noen løsningskode Du bør utføre en modulberegning på iterasjonen teller av sløyfen for å bestemme når til gjennomsnitt og når du skal videresende data uten gjennomsnitt. Ved å beregne iterasjonstellingen i mod n, Når jeg 0, er slutten av vinduet nådd og gjennomsnittlig gjennomsnittet er riktig. Vi lagrer denne verdien i et array eller en indikator på neste ite ration modverdien vil være lik 1, som vil tilbakestille Mean og forberede den til neste delmengde av n poeng. Tricket er å innse at gjennomsnittene oppnådd ved blokkmiddelverdi er en delmengde av det bevegelige vindues gjennomsnittet utført av Mean. In some tilfeller du kanskje vil at alle dataene skal oppdateres på frontpanelet mens du bare logger gjennomsnittene som beskrevet i problemstillingen over Du kan utføre denne funksjonen på en lignende måte, nemlig ved å utføre en modulusoperasjon på iterasjonstellingen og velge en sak i en saksstruktur basert på dette Vennligst referer til fellesskapseksempelet under Beslektede lenker for mer informasjon om hvordan du gjør dette og eksempelkoden som analyserer og konverterer dynamiske data og utfører de nevnte funksjonene. Din kode har fortsatt ingen betydning Sinnes du ringer til subVI en skalar om gangen, får du ikke det du vil fordi skiftregisteret bare rememebers de siste N-skalarene, uansett hvilken kanal den er fra Koden din er fortsatt veldig ineffi cient og convoluted, for eksempel hvorfor bruker du fortsatt innsats i array for å legge til både i mani nad i underen Du kan bruke en reenetrant subVI og en parallell innerste FOR-sløyfe, men det virker altfor komplisert også. Hvis du vil gjøre et løpende gjennomsnitt På hver kanal trenger subVI å holde en 2D-array i subVI Alt dette har blitt gjort før. Jeg kan forstå din frustrasjon - mer så når konteksten til LV-koding er forskjellig i begge våre liv For meg som mekanisk ingeniør er det en legg til, og det som startet som en tidspass, så koden er kanskje ikke den mest effektive eller en som trekker ut den siste dråpen juice fra CPUen. I virkeligheten i maskinstyringsapplikasjoner gjør hele CPUen ikke noe mer de fleste ganger enn å kjøre kontrollkode Og med prosessorer som i5 eller i7, gjør det enda enklere Jeg sier ikke at effektiv kode er sløsing med tiden - jeg sier bare at konteksten er forskjellig. Bare før jeg går ned her er en annen en rask og skitten som gir arbeidet fi REST få verdier blir ignorert - ikke en stor sak i et datalogging program som går i timevis på slutten. Raghunathan LV2012 til Automate Hydraulic Test Rigs. Jeg beklager at du har så lite hensyn til eleganse og korrekthet, og at du føler det bra Nok er godt nok Kanskje i fremtiden vil du konsultere noen som kjenner og forstår LabVIEW og bare fortell ham eller henne hva du vil gjøre og la dem gjøre det for deg. Men hvis målet ditt er å samle data fra N kanaler med frekvens F i Hz, men for å vise gjennomsnittet av M poeng så for hver M poeng du genererer du plot 1 punkt, gjennomsnittet av M poeng, her er en god måte å gjøre det. Lag en produsent Loop som genererer dataene ved å sette samplingsenheten til å gi deg M-poeng fra N-kanaler, samplet ved frekvens F Dette bør være en 2D-array M rader med N kolonner Sett dette i en kø og gjenta, om og om igjen, til Stop-knappen er trykket. Etter spennende Produsent Loop, send en tomere 2D array du vil se hvorfor i et øyeblikk. Opprett en parallell forbrukerløp og mate den køen som brukes av produsenten Loop Dequeue Data Array - hvis den er tom, blir vi ferdig, så slipp køen og stopp forbrukerløpet. Ellers må vi forbruke gjennomsnitt og plott dataene vi trenger for å transponere M poeng ved N kanaler array til en N kanal av M poeng array Feed dette arrayet til en for loop som vil sløyfe over kanalene, beregne gjennomsnittet o the m poeng, og utdata dette gjennomsnittet vi vil plotte dette punktet fra alle N-kanalene, så send det gjennom Build Array for å lage en 1 ved N Array, og plott dette. Her er en utdrag i LabVIEW 2012 som lar deg simulere alt dette, som genererer poeng på frekvens du spesifiserer, maks 1KHz Jeg skal også plotte plottet slik at klokken er i sekunder Dette fortolkes ikke bra for koden - jeg har faktisk brukt en gjennomsnittlig dataindeks der. Dette tror jeg gjør det jeg forstår du virkelig ønsket, nemlig å ha en skjerm som viser gjennomsnittet ved en langsommere tomt enn t han data Du vil legge merke til at hver kanal har en annen offset, så når du ser på plottet, bør du se 16 linjer, ser mer og mer glatt ut som du øker prøvestørrelsen Du må angi parametrene før du kjører koden, siden prinsippene for dataflyt som LabVIEW er basert på, vil ignorere endringer du gjør til kontrollene når programmet kjører. Først la meg takke deg for det detaljerte svaret og kodestykket jeg antyder din intensjon om å hjelpe. Mitt tidligere svar hørtes muligens litt brutto, men jeg vil være den siste personen som skal håndtere noe som er halvt bakt eller ustabilt. La meg forklare. Min aktivitet med oljehydraulikk og jeg har mitt eget selskap etablert i 1995, og som et verditillatelsesforslag leverer jeg integrerte systemer med instrumentering og programvare Vi opererer i to store vertcials - WInd Turbines and Test Systems og til nå har vi levert mange komplette systemer som brukes mye i bilindustrien her i India, så vel som i E urope. Men mitt firma er ikke en stor organisasjon og er en mellomstor en og her er det en fangst - det er ved siden av umulig å finne ekspert LabVIEW programmerere India har et stort utvalg av programvare ingeniører, men alle er i desktop computing og av ingeniører i fysisk databehandling er nesten null eller ubetydelig SÅ når klienter kommer til meg med nye krav, stoler på meg - alt er annerledes, jeg tar opp utfordringen personlig, men for å levere, er jeg helt avhengig av støtte fra on-line fellesskap Todate, har jeg utviklet LV kode for å få data via CanOpen, Modbus RTU, Profinet og EtherCAT Med slik variasjon og kort tid til markedskrav, har jeg rett og slett ikke ressursene til å distribuere et stort lag til å levere. Så det koker ned til å utvikle grunnleggende eller åpenbar kode som gjør hva det er skal og hvis klienten er ok med det - la det være Det er en forskjell mellom funksjonskode og smart kode, og jeg hintet på den tidligere og utviklet ikke crappy-koding til prøvekoden din - t hans produsent forbruker modell er en vanlig som jeg bruker for alle mine prosjekter der jeg har Main som produsent og Sub VI som forbruker Med data flow via køen vil studere det mer i detalj. Raghunathan LV2012 å automatisere hydrauliske test rigger.

No comments:

Post a Comment