SIG50 Signalbehandling

LabVIEW-kurs

Tid og sted: Fredagene 4.1 og 11.1 2002 kl. 0820 - 1530. Rom B-234, C210 og C226.

Referanselitteratur for kurset: Lær LabVIEW.

Dette webdokumentet bør leses i Internet Explorer eller de nyligste versjonene av Netscape og Opera.


Kursets mål

Dere skal i løpet av dette LabVIEW-kurset bli i stand til å utvikle VI'er (Virtual Instruments, som er betegnelsen på brukerutviklede LabVIEW-programmer) for bl.a. generering av signaler og filtrering, lagring og presentasjon av signaler. (Kopling av VI mot fysisk prosess undervises ifm. senere lab-oppgaver.)

Undervisningsopplegg

Forelesning/demonstrasjon på storskjerm etterfulgt av praktisk arbeid på PC. Dette gjøres for hvert emne.

Oppstart av LabVIEW

[Kap. 2.1, 2.2]

Vi starter LabVIEW via Start-knappen på PC'ens skriverbord og gjør oss litt kjent med knappene på LabVIEWs oppstartsvindu.

Åpne og kjøre en VI

[Kap. 2.4]

Vi kjører VI'en Search Examples / Demonstrations / Analysis Demonstrations / Temperature System Demo.vi.

Hvordan er VI'er laget?

[Kap. 2.3]

Vi studerer Temperature System Demo.vi.

Noen eksempler på hva LabVIEW kan brukes til

  • Vi kjører noen innebygde demo'er (i oppstartsvinduet: Search Examples eller i menylinja: Help / Examples)

    • Fundamentals / Analysis / Mathematics / Statistics / Running Histogram
    • Fundamentals / Analysis / Mathematics / Linear Algebra / Linear Algebra Calculator
    • Measurements Examples / Digital Filtering / FIR Filters
  • Vi ser raskt på Solutions på NIs webside (http://ni.com)
  • SYSLAB (http://www.techteach.no/syslab) er et virtuelt laboratorium utviklet i LabVIEW.

LabVIEW Tutorial

Vi tar en kikk (fra oppstartsvinduet: LabVIEW Tutorial, eller fra menylinja: Help / Contents and Index / Tutorial).

Brukergrensesnittet i LabVIEW

Menylinja og verktøylinja

Vi tar en kikk!

Programmeringsverktøy

Vi har oppe den siste demonstrasjons-VI'en (se ovenfor).

Hver VI har et 

  • frontpanel (Window / Show Panel) og et tilhørende 
  • diagram (Window / Show Diagram).

Paletter som benyttes under programmeringen:

  • Tools palette (Window / Show Tools palette)
  • Controls palette (Window / Show Control palette) - kun for frontpanelet
  • Functions palette (Window / Show Functions palette) - kun for diagrammet

Vi lager vår første VI

[Kap. 3]

Vi skal lage en VI som skal implementere følgende funksjonssammenheng mellom inngangssignalet u og utgangssignalet y:

y = K*u + b

der

  • u og b skal justeres fra frontpanelet med en vertikal skyver
  • K skal justeres fra frontpanelet med en skruknapp (pot-meter)
  • y skal
    • vises med en viser
    • vises i et tallfelt

(Vi skal lage forsterker.vi.)

Vi skal teste VI'en ved å kjøre den kontinuerlig (Run Continuously-knappen i LabVIEWs verktøylinje).

Deretter ser vi på følgende emner som er viktige ved all LabVIEW-programmering:

Hvordan finne sammenhørende elementer på frontpanel og i diagram? Høyreklikk / Find Terminal.

Hvordan manipulere elementer på frontpanelet og i diagrammet (flytte, kopiere, slette, forstørre og forminske, fargelegge).

Hvordan finposisjonere elementer på frontpanelet og i diagrammet vha. piltastene?

Hvordan distribuere elementer på frontpanelet og i diagrammet f.eks. slik at elementene blir venstrejustert mot en tenkt felles venstre kantlinje.

Hvordan skrive vilkårlig tekst på frontpanelet og i diagrammet?

Hvordan konfigurere elementene:

  • Vise tallfelt (digital display) for grafisk element: Høyreklikk / Visible items / Digital display
  • Definere navn (label) for element: Høyreklikk / Visible items / Label
  • Definere elementbeskrivelse (caption) for element: Høyreklikk / Visible items / Caption
  • Definere forhåndsverdi (Default value) for et enkelt element: Høyreklikk / Data operations / Make current value default. operate
  • Definere forhåndsverdi (Default value) for alle elementene på frontpanelet: Menyvalg: Operate / Make current values default.
  • Fargelegge elementet: Velg Set Color-knappen i Tools Palette / Høyreklikk på elementet
  • Endre inkrementet på et tallfelt (Digital Display): Høyreklikk på elementet / Data Range / Increment
  • Erstatte elementet med et annet: Høyreklikk / Replace / Velg nytt element fra Controls Palette

Lab-arbeid:

Lag forsterker.vi fra scratch.

Feilsøking

Feil kan være

  • programfeil, som LabVIEW elegant selv detekterer.
  • funksjonsfeil, som vi kan finne med
    • prober
    • trinnvis eksekvering

Hjelp

Høyreklikk på et element på frontpanelet eller i blokkdiagrammet og velg Help.

Eller søk i dokumentasjonen som følger med LabVIEW via menyvalget Help osv.

Datatyper i LabVIEW

[Kap. 4]

LabVIEW har en rekke forskjellige datatyper:

  • Flyttall
  • Heltall
  • Logiske (boolske) data
  • Tekst
  • Clustere (som er en samling av data av vilkårlig type)

Disse datatypene kan benyttes 

  • frontpanelet (legges der inn via Controls Palette), som controls eller indikatorer
  • i diagrammet (legges der inn via Functions Palette), som 
    • terminaler (eller variable)
    • konstanter

Vi ser på datatyper.vi.

Arrays

[Kap. 4]

Elementene i et array kan inneholde nesten hvilken som helst datatype (bare ikke array).

Legges inn på frontpanelet slik:

Controls Palette / Array & Cluster

Et array kan ha dimensjon større enn 1.

En array-konstant kan legges inn i diagrammet:

Functions Palette / Array 

Vi ser på array.vi

LabVIEW har mange funksjoner som opererer på arrays. Disse funksjonene er tilgjengelige via

Functions Palette / Array 

Vi blir kjent med disse funksjonene etterhvert.

Formel-node

[Kap. 5]

Formel-noden (Formula Node) er et formelvindu i VI'ens blokkdiagram der vi kan skrive matematiske uttrykk. Meget praktisk alternativ til å legge inn uttrykkene grafisk - spesielt ved innholdsrike eller kompliserte matematiske uttrykk.

Formel-noden legges inn slik:

Functions Palette / Structures / Formula node.

Innganger til og utganger fra formel-noden opprettes ved å høyreklikke på formel-nodens kantlinje.

Husk at hver intern utgangsvariabel i uttrykkene i formelnoden må ha en utgangsterminal på formelnoden!

Vi lager formelnode.vi.

VI'er som skal gå kontinuerlig realisert med while-løkke

[Kap. 8]

Spesifikasjoner:

Vi lager while.vi.

  • VI'en skal kjøres kontinuerlig med et fast tidsskritt, som skal kunne justeres fra frontpanelet. Dette realiseres med en While-løkke (Functions Palette / Structures) m/wait-funksjon (Functions palette / Time and Dialog / Wait).
  • VI'en skal kunne stoppes med en stoppknapp, som er tilgjengelig via Functions Palette / Boolean
  • Tiden skal indikeres på frontpanelet: Lages som tidsskritt multiplisert med løkkeindeksen (som er tilgjengelig fra den blå I-terminalen nede til venstre i while-løkka).

Plotting i diagram

[Kap. 9]

Diagrammer legges inn på frontpanelet via 

Controls Palette / Graph

Det er en rekke ulike diagramtyper tilgjengelige. De viktigste:

  • Chart er diagram med løpende oppdatering (Chart), som i et Y(t)-plott.
  • Graph er diagram som plotter eksisterende dataserier, som i et XY-plott. (Den variabelen som skal plottes, må føres til while-løkkas kantlinje hvilket oppretter et termineringspunkt på kantlinja for variabelen. På dette termineringspunktet må du høyreklikke og velge Enable Indexing, hvilket medfører at det lages et array (tidsserie) mens while-løkka kjøres. Termineringspunktet skal så forbindes til diagrammets terminal.)

Vi lager plott.vi.

Noen spesialiteter:

  • Oppdateringsmåten kan velges via Høyreklikk på diagrammet / Advanced / Update Mode.
  • Grid: Høyreklikk på diagrammet / X-Scale / Formatting
  • Diagrambeskrivelse: Høyreklikk / Visible Items / Plot Legend
  • Farge, tykkelse, linjetype m.m. for selve plottelinja (høyreklikk på diagrambeskrivelsen (legend))

Skiftregister. Realisering av dynamisk system

[Kap. 16.2, 16.3]

Et skiftregister benyttes for å huske tidligere sampelverdier av en variabel.

Med while-løkke med skiftregister kan du realisere

  • Sanntids filtere
  • Sanntids simulatorer
  • Regulatorer

Du kan legge inn et skiftregister i en while-løkke (og i en for-løkke):

Høyreklikk på løkke-ramma / Add shift register

Vi lager lavpassfilter.vi, som realiserer følgende filteralgoritme:

y(i) = a*y(i-1) + (1-a)*u(i)

y er filterutgangen og u er filterinngangen. a er filterparameteren. Filteret skal utføre sanntids filtrering, dvs. filtrere det sist tilgjengelige målesignalet, u(i). 

Krav til innhold i VI'en:

  • a skal kunne justeres via en skruknapp (potmeter) fra frontpanelet.
  • u skal kunne justeres via en skyver fra frontpanelet.
  • u og y skal plottes i ett og samme Y-t-plott (chart).
  • Tiden skal vises på frontpanelet.
  • Samplingsintervallet skal kunne justeres i trinn på 0,1 sek fra frontpanelet.
  • VI'en skal kunne stoppes via en stoppknapp på frontpanelet.

Et annet eksempel på dynamisk system realisert med while-løkke og skiftregister er tanksimulator.vi.

Lab-arbeid:

  1. Last ned og prøv ut datatyper.vi.
  2. Last ned og prøv ut array.vi.
  3. Lag formelnode.vi fra scratch.
  4. Lag lavpassfilter.vi fra scratch.

 

Selvstendig øving 1


Alle gruppene skal presentere sin løsning i plenum i klasserommet fra 0820 fredag 11.1. Filene lagres på diskett eller på egnet plass på nettet slik at løsningen kan vises uten unødige forsinkelser.


Lag en VI som implementerer en generator for et signal som skal bestå av en sum av to sinussignaler (som kan tenkes å representere ideell måleverdi hhv. målestøy), samt et diskret filter som skal virke på signalet. Spesifikasjonene er som følger:

  • Sinussignalenes amplitude og frekvens [Hz] skal kunne justeres på frontpanelet.
  • Filteret skal være et diskret 1. ordens Butterworth-lavpassfilter basert på diskretisering vha. bilineær transformasjon med frekvenskorreksjon.
  • Filterets båndbredde [Hz] skal kunne justeres på frontpanelet.
  • Det skal ikke være mulig å sette båndbredden til null, og et varsel skal gis på frontpanelet dersom brukeren har forsøkt å angi båndbredde null.
  • Filterets inngang og utgang skal plottes fortløpende i samme diagram.

Løsningsforslag

Cluster

[Kap. 7]

Er en samling av mange (gjerne ulike typer) variable i én ny variabel.

Opprettes på frontpanelet:

Controls Palette / Array and Cluster

Vi lager cluster.vi

Lab-arbeid:

Lag cluster.vi fra scratch.

Sub-VI

[Kap. 6]

En sub-VI er som en subrutine inne i en VI.

Du lager en sub-VI som en vanlig VI, men med terminaler, som editeres ved å høyreklikke på ikonet oppe til høyre i VI'en.

Vi lager hoved_vi.vi med forsterker_subvi.vi som subVI.

Inkludere en sub-VI i diagrammet:

Functions palette / Select a VI

Viktig: Dersom du skal benytte flere kopier av sub-VI'en i en og samme (hoved)VI, må du angi sub-VI'en som reentrant. Dette gjøres slik:

Høyreklikk (på VI'ens ikon oppe til høyre i sub-VI'ens frontpanel) / VI Properties / Category / Execution

Ovenfor laget vi subVI'en manuelt. Du kan lage den automatisk også! Vi prøver.

Lagre som llb-fil (LabVIEW library)

[Kap. 3.7]

Du kan lagrer et VI-hierarki (hoved-VI med sub-VI'er) i et "arkiv", som blir én fil. Dette arkivet kalles LabVIEW library.

Llb lagres via Save with options / Development distribution.

Lab-arbeid:

Lag hoved_vi.vi med forsterker_subvi.vi fra scratch, og lagre VI'ene som én llb-fil.

Egenskapsnode (property node)

[Kap. 10]

Egenskapsnode lages via 

Høyreklikk / Property Node

Vi skal lage egenskap.vi.

Lokale variable

[Kap. 12.1]

En lokal variabel er en "kopi" av en variabel (terminal). Den lokale variabelen kan benyttes hvor som helst internt i den aktuelle VI'en.

Lokale variable kan både leses og skrives.

Lokale variable legges inn i diagrammet slik:

Functions Palette / Structures / Local

Vi lager lokal.vi

Globale variable

[Kap. 12.2]

En global variabel er funksjonelt sett lik en lokal variabel, men den globale variabelen er tilgjengelig for alle andre VI'er.

En global variabel inkluderes i en VI på samme måte som en vanlig sub-VI inkluderes.

Globale variable opprettes i et diagram slik:

Functions Palette / Structures / Global

Vi lager skriv_til_global.vi og les_fra_global.vi og global1.vi.

For-løkke

[Kap. 13]

En For-løkke er i prinsippet nokså lik en While-løkke, men en For-løkke gjennomløpes et forhåndsbestemt antall ganger.

For-løkka legges inn i diagrammet slik:

Functions Palette / Structures / For Loop

Vi laster ned og kjører forlokke.vi.

Case-struktur

[Kap. 13]

Case-strukturen gir mulighet for at bestemte programdeler skal utføres avhengig av verdien av en velgervariabel ("selektor").

For-løkka legges inn i diagrammet slik:

Functions Palette / Structures / Case

Vi laster ned og kjører case.vi.

Lab-arbeid:

Lag egenskap.vi fra scratch.

Lag lokal.vi fra scratch.

Lag forlokke.vi fra scratch.

Lag case.vi fra scratch.

Sekvensstruktur

[Kap. 13]

Med sekvensstrukturen (sequence) kan du spille av programdeler i en bestemt sekvens (rekkefølge).

For-løkka legges inn i diagrammet slik:

Functions Palette / Structures / Sequence

Vi laster ned og kjører sekvens.vi.

Grafikk på frontpanelet

Du kan legge inn grafikk(objekter) fra andre tegne- eller bildeprogrammer slik:

  • Lagre grafikkobjektet som wmf- fil eller bmp-fil.
  • Menyvalg (i LabVIEW): Edit / Import picture
  • manyvalg: Edit / Paste 

Eksempel: http://www.techteach.no/syslab/nivaaregulering_flistank/nivaaregulering_flistank.exe

En wmf-fil

Skrive data til fil

[Kap. 19.2]

Du kan skrive en dataserie (array) til fil vha. en innebygd VI, som legges inn i diagrammet. VI'en er tilgjengelig slik:

Functions Palette / File I/O / Write to spreadsheet file

Denne VI'en legges utenfor while-løkka.

Du kan også skrive data til fil fortløpende vha. 

Functions Palette / File I/O / Write character to  file

Denne VI'en legges innenfor while-løkka.

Vi lager fil_lagring.vi med utgangspunkt i formelnode.vi.

Lese data fra fil

[Kap. 19.3]

Du kan lese en dataserie fra fil vha. en innebygd VI, som legges inn i diagrammet. VI'en er tilgjengelig slik:

Functions Palette / File I/O / Read from spreadsheet file

Denne VI'en legges utenfor while-løkka.

Du kan også lese data fortløpende fra fil vha. 

Functions Palette / File I/O / Read character from  file

Denne VI'en legges innenfor while-løkka.

Vi lager fil_lesing.vi.

Lab-arbeid:

Lag fil_lagring.vi med utgangspunkt i formelnode.vi fra scratch.

Lag egenskap.vi fra scratch.

Lag fil_lesing.vi fra scratch.

Lag forlokke.vi fra scratch.

Lag case.vi fra scratch.

Strukturering av sammensatte VI'er for styring og overvåking

[Kap. 17]

Vi studerer og prøver pid_regulering.vi i pid_regulering.llb.

Dokumentasjon av VI

[Kap. 11]

Du kan legge inn en beskrivelse av de enkelte elementene (for dokumentasjon): Høyreklikk / Description. For å få vist beskrivelsen (i et lite vindu): Menyvalg Help / Context Help.

Du kan lage et Html-dokument (eller Rtf- eller vanlig tekstdokument) som dokumentasjon av VI'en: Menyvalg: Print / Documentation. Det gir bl.a. muligheten til å lage et Html-dokument.

Matlab-node

Matlab-noden er et vindu mot Matlab. (Matlab-noden likner mye på formelnoden.) Du kan skrive Matlab-uttrykk i Matlab-noden, som om du jobbet på Matlabs kommandolinje.

Matlab-noden legges inn i diagrammet slik:

Funtions Palette / Analyze / Mathematics / Matlab node

Webressurser for LabVIEW og NI

  • National Instruments' websted internasjonalt Vi ser spesielt på 
    • produktkatalogen
    • developer's zone / resource library / application notes

    og i Norge.

  • Nyhetsgrupper (via Google Groups)

 

Selvstendig øving 2


Løsningen (fasit) gjennomgås i plenum i klasserommet fra 0820 fredag 18.1. De som ønsker å presentere sin løsning, er selvsagt velkomne til å gjøre det.


Ta utgangspunkt i lpfilter_oving1.vi (løsning til selvstendig øving 1). Videreutvikle denne VI'en ihht. følgende spesifikasjoner:

  1. Det skal lages en subVI som genererer et sinussignal x som funksjon av tiden, dvs. x(t)=A*sin(2*p*F*t). A og F skal samles i et cluster (på frontpanelet). Clusteret og tiden t skal være innganger til subVI'en, og x er utgang. Denne subVI'en skal benyttes (2 ganger) for å lage det sammensatte sinussignalet som er filterets inngang (til erstatning for formelnoden som nå er benyttet). 
  2. Det skal være rutenett i en ikke-påtrengende gråfarge i begge akseretninger i diagrammet.
  3. Tidsinkrementet langs tidsaksen i diagrammet skal settes vha. diagrammets egenskapsnode (slik at tidforløpet blir korrekt uansett hvor stort tidsskrittet settes (på frontpanelet).
  4. Tiden t, filterinngangen u og filterutgangen y skal lagres på fil (tekstfil) etter at stoppknappen er trykket. I tekstfila skal det være én kolonne for hver av variablene.
  5. Ekstraoppgave: Implementer (i tillegg til lavpassfilteret) et 1. ordens høypassfilter med samme grensefrekvens som for lavpassfilteret. Tips: Høypassfilteret kan enkelt lages slik: yHP = u - yLP. Filtrene skal legges inn i hver sin case-ramme. Brukeren skal kunne velge mellom HP-filteret og LP-filteret via en svitsj på frontpanelet. 
  6. Applikasjonen (VI'ene) skal lagres som én llb-fil.
  7. Applikasjonens hoved-VI skal dokumenteres i et Html-dokument.
  8. Ingen LabVIEW-oppgave, riktignok: Importer (manuelt) ovennevnte datafil i Excel (menyvalg Data / Hent eksterne data), og plott u og y som funksjoner av t i ett og samme diagram i Excel (menyvalg Data / Diagram).

Løsningsforslag

Hva vi skal gjennomgå senere i faget

  • I/O mot fysisk prosess vha. National Instruments' FieldPoint-system for distribuert I/O
  • Bruk av LabVIEW-funksjoner for signalbehandling

11.1 2002, Finn Haugen (e-postadresse: finn@techteach.no).