Norges landbrukshøgskole, Institutt for tekniske fag


TEL220 Måling og styring med datamaskin

LabVIEW-kurs

Tid og sted: Torsdagene 24.1 og 31.1 2002 kl. 1215 - 1600 på datasalen i kjelleren ved ITF.

Litteratur: Lær LabVIEW.

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


Oppstart av LabVIEW

[Kap. 2.1, 2.2]

Å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.

VI'en har (som andre VI'er):

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

Noen eksempler på hva LabVIEW kan brukes til

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

Brukergrensesnittet i LabVIEW

Vi tar en kikk på menylinja og verktøylinja!

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).

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

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
  • Endre maks og min på skalaene: Bare skriv inn nye tall direkte på skalaen!
  • 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

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.

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).

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.

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))

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.

 

Selvstendig øving 1


Øvingen gjennomgås i begynnelsen av del 2 av kurset (torsdag 31.1 kl. 1215 på datasalen ved ITF). Det er fint hvis noen av dere (arbeid gjerne i selvvalgte grupper) vil presentere sin løsning da.


Lag en VI ihht. følgende spesifikasjoner:

  • VI'en skal brukes som en kalkulator for beregning av massestrømningen w gjennom en måleblende som funksjon av tenkt målt trykkfall over måleblenden slik:

    w = k1*sqrt(k2*p)

    Formelen skal realiseres vha. en formelnode.

  • VI'en skal gå kontinuerlig med tidsskritt 0,1 sek. og kunne stoppes med en stoppknapp på frontpanelet.
  • Standardverdier er k1 = 0,5, k2 = 2 og p = 5.
  • Brukeren skal kunne stille inn verdien av p på en vertikal skyver (vertical slide), som skal ha en alternativ innstilling via et tallfelt (digital display) (som altså hører sammen med skyveren). Skalaen for p skal ha minimalverdi lik 0 og maksimalverdi lik 10. Inkrementet for innstillingen skal være 0,1. p skal vises med 1 desimal. Brukeren skal ikke kunne stille inn en negativ verdi (høyreklikk på frontpanelelementet / Data Range).
  • Dersom brukeren angir en verdi for p i tallfeltet som er større enn  maksimalverdien, skal en varsellampe (boolsk indikator) vise rød farge - ellers skal lampen vise grønn farge. Skriv en passende tekst ved lampen.
  • k1 og k2 skal kunne justeres via pot-metere m/tallfelter med inkrement 0,1.
  • w skal vises med en viser (gauge) med passende skala, samt i et (tilhørende) tallfelt.
  • Det skal være en passende beskrivende tekst (fritekst) for VI'en på frontpanelet.
  • Frontpanelet (og gjerne frontpanelelementene) skal ha en annen farge enn standardfargen(e).
  • Tiden i sekunder fra VI'en startes skal vises på frontpanelet.
  • Nåværende tid (dato og klokkeslett) skal vises på frontpanelet.

Løsningsforslag

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.

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

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.

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

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.

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.

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

[Kap. 17]

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

IO mot fysisk prosess med FieldPoint

FieldPoint er ett av National Instruments' systemer for distribuert IO. Dere skal bruke LabVIEW og FieldPoint for måling og styring i flere leksjoner i kurset.

Vi går igjennom FieldPoint-utstyret sammen.

Vi må laste ned og installere FieldPoint Server fra ftp.ni.com

Hvordan tas FieldPoint i bruk sammen med LabVIEW? Her er en VI-mal: innut_fieldpoint.vi som benytter seg av denne FieldPoint-konfigureringsfila: iak130102.iak.

Vi prøver (I/O mot en RC-krets).

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


Dere skal lage en simulator for et generelt 1. ordens system gitt ved transferfunksjonen

y(s)/u(s) = K/(Ts + 1)

der K er forsterkningen og T [sek] er tidskonstanten. Denne transferfunksjonen tilsvarer differensiallikningen

Tdy(t)/dt - y(t) = Ku(t)

Det kan vises at diskretisering av denne differensiallikningen vha. trapesmetoden (også kalt Tustins metode), som er en brukbar diskretiseringsmetode i mange situasjoner, gir følgende sammenheng (differenslikning) mellom inngangen u og utgangen y:

y(k) = ((2-A)/(2+A))*y(k-1) + ((K*A)/(2+A))*(u(k) + u(k-1))

der

A = Ts/T

Ts [sek] er tidsskrittet.

Lag en VI ihht. følgende spesifikasjoner:

  • VI'en skal gå kontinuerlig inntil brukeren trykker på en stoppknapp på frontpanelet.
  • Inngangen u, dvs. u(k), skal kunne stilles inn med et passende element på frontpanelet. 
  • K og T skal kunne stilles inn på frontpanelet. Standardverdiene er K = 1 og T = 1. T skal ikke kunne gis mindre verdi enn 0,1. K og T skal samles i et cluster på frontpanelet.
  • Ts skal ha verdi 0,01 sek.
  • u(k) og utgangen y(k) skal plottes i ett og samme diagram (chart) med korrekt tidsakse.
  • Differenslikningen skal uttrykkes i en formelnode.
  • Formelnoden skal være i en subVI, som dessuten skal inneholde en egen while-løkke med skiftregister for lagring av y(k) og u(k) slik at de blir tilgjengelige som y(k-1) hhv. u(k-1) i neste tidsskritt. Formelnoden skal stå inne i denne while-løkka. While-løkka skal ha en logisk konstant med verdi FALSE tilkoplet løkke-terminalen nede til høyre i løkka (dette sikrer at løkka går bare én gang når den blir kalt).

    Tips: Du skal lage en hovedVI hvis frontpanel realiserer brukergrensesnittet. HovedVI'en skal ha en while-løkke som vil sørge for at applikasjonen går kontinuerlig. Denne hoved-while-løkka skal inneholde bl.a. subVI'en nevnt ovenfor.

    Kommentar: Å realisere dynamiske systemer vha. subVI'er som i denne oppgaven gir mulighet til enkelt realisere sammensatte dynamiske systemer - du kopler bare subVI'ene sammen som i blokkdiagrammer dere kjenner fra fag som Lineære systemer og Reguleringsteknikk.

  • Nogo attåt! Legg inn en eller flere tilleggsfunksjoner etter eget ønske (f.eks. fillagring, alarmmeldinger, valg mellom flere simulatormodeller enn bare 1. ordens system, ...).

Legg gjerne ut løsningen på web, slik at vi raskt kan laste ned og prøve de ulike løsningene på datasalen.

Dette er kanskje en krevende oppgave. Derfor legger jeg ut et løsningsforslag allerede nå. Og her er løsningen i form av en LabVIEW-applikasjon (dvs. at diagrammet er fjernet).


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