Norges landbrukshøgskole, institutt for tekniske fag


TEL220 Måling og styring med datamaskin

LabVIEW-kurs

Fredag 30.1.04 ca. kl. 1315-1600, rom TF01

Om kurset

Om LabVIEW

LabVIEW utgis av firmaet National Instruments. LabVIEW er en forkortelse for "Laboratory Virtual Instrument Engineering Workbench". I LabVIEW benytter brukerne grafisk programmering for å lage sine programmer (men det er også muligheter til å inkludere tekstbaserte programmer i et LabVIEW-program).

LabVIEW er ett av de mest benyttede programutviklingsverktøy anvendt i laboratorier, eksperimentoppstillinger og testeapplikasjoner. LabVIEW brukes også for implementering av funksjoner og brukergrensesnitt i andre utviklingsomgivelser. LabVIEW har et rikt funksjonsbibliotek for nær sagt alt en trenger for å bygge opp et system for behandling, visualisering og analyse av innsamlede data fra fysiske prosesser (loggdata) og for styring av prosesser.

Mål med kurset

Dere skal i løpet av dette LabVIEW-kurset bli i stand til å utvikle VI'er  for bl.a. generering av signaler, presentasjon, analyse og lagring av signaler, samt kopling av VI mot fysisk prosess vha. et I/O-kort. (VI = Virtual Instruments, som er betegnelsen på brukerutviklede LabVIEW-programmer.)

Litteratur

Lærebok for dette LabVIEW-kurset er Lær LabVIEW trinn for trinn.

Kursopplegg

Kurset baseres på forelesninger/demonstrasjoner via storskjerm, etterfulgt av selvstendig arbeid med oppgaver med tilgang til veileder.

Kurslærer

Siv.ing. Finn Haugen, TechTeach. (E-post: finn@techteach.no)

Oppstart av LabVIEW

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

Vi kjører VI'en Examples / Analysis Demonstrations / Temperature System Demo.vi, som er tilgjengelig via pila til høyre på Open-knappen i LabVIEWs oppstartsvindu.

Hvordan er VI'er laget?

Hver VI har et 

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

Vi studerer Temperature System Demo.vi.

Vi lager vår første VI

[Kap. 3.1-3.6 i læreboka]

Vi skal lage en VI, sigtrans.vi, som er beskrevet i kap. 3 i læreboken.

Paletter som benyttes under programmeringen:

  • Tools palette (Window / Show Tools palette). Merk muligheten til å velge automatisk, kontekst-avhengig musmarkør.
  • Controls palette (Window / Show Control palette) - kun for frontpanelet. (I LabVIEW 7.0 kan høyreklikk / Properties-menyen brukes som ett menyvalg (tidligere måtte en velge blant flere menyer) til konfigurering av diverse egenskaper for frontpanelelementer.)
  • Functions palette (Window / Show Functions palette) - kun for diagrammet

Du kan sette diverse opsjoner for redigeringen, f.eks.

  • vise rutenett (grid) som hjelp for posisjonering
  • mulighet til å slette frontpanelelementer fra blokkdiagrammet
  • utseendet av signalledningene i blokkdiagrammet
  • definere desimalskilletegn (velge Windows-standarden på PC'en eller bruke punktum)

Feilsøking

[Kap. 3.7]

Vi legger inn noen feil i sigtrans.vi.

Hjelp

[Kap. 3.8]

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.

Øving 1:

Signalgenerator

Veiledning v/Finn Haugen 30.1.04 på TF01


Lag en VI ihht. følgende spesifikasjoner:

  • VI'en skal gå kontinuerlig (realiseres med en while-løkke), med en stopp-knapp på frontpanelet for kontrollert stopp.
  • Tidsskrittet skal være fast 0,05 sek, som skal være satt i et tallfelt på frontpanelet. Tallfeltet skal være de-aktivert (disabled) [Tips: Høyreklikk / Properties.]
  • VI'en skal realisere en signalgenerator for et signal som er summen, y, av følgende (del)signaler, altså y = u1 + u2 + B:
    • Sinussignalet u1(t)=A*sin(2*pi*f*t) der A og f er justerbare fra frontpanelet. Bruk gjerne en egnet funksjon på Functions Palette / All Functions / Analyze / Point by Point.
    • Randomsignalet u2(t) som er uniformt fordelt mellom -R og R der R er justerbar fra frontpanelet. Bruk gjerne en egnet funksjon på Functions Palette / All Functions / Analyze / Point by Point.
    • Biasen B der B er justerbar fra frontpanelet.

    Standardverdier (default-verdier) er A=1, f=1, R=0,2, B=0.

    A, f og R skal ikke kunne være negative, og alle skal kunne justeres i trinn på 0,1, og de skal også vises med én desimal.

  • y skal vises med en søyleindikator med tilhørende tallfelt.
  • Middelverdien av de 10 siste verdiene av y skal angis i et tallfelt. Bruk funksjonen MeanPtByPt (Point-by-point) som fins på paletten Functions Palette / All Functions / Analyze / Point By Point.
  • Dersom middelverdien av y er negativ, skal en lampe tennes. Bruk en komparator på Functions Palette / All Functions / Comparison.
  • 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).

Løsning

Fredag 13.2.04 kl. 1015-1600, rom TF01

Dokumentasjon av VI

[Kap. 4.1]

Vi lager HTML-dokumentasjon av sigtrans.vi.

Datatyper i LabVIEW

[Kap. 5]

Vi ser på datatyper.vi.

Spesielle datatyper:

Tekstbaserte programmeringsvinduer

[Kap. 6]

Egenskapsnode (property node)

[Kap. 7]

En egenskapsnode brukes for å sette diverse egenskaper for frontpanelelementer programmatisk. Vi prøver: egenskap.vi.

Plotting i diagrammer

[Kap. 8]

Vi lager plott.vi, som demonstrerer 3 forskjellige diagramtyper, på basis av sigtrans.vi.

Grafikk på frontpanelet

[Kap. 9.1 og 9.2]

Vi legger inn et bilde.

Obs: Det kan være nødvendig å skyve bildet til bakgrunnen på frontpanelet, slik at andre elementer ikke blir inaktive.

Sub-VI

[Kap. 10]

En sub-VI er som en subrutine eller en funksjon inne i en (hoved-)VI. Vi skal lage en hoved-VI og en sub-VI på basis av sigtrans.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

LLB-filer

VI'er som inneholder sub-VI'er kan lagres som LLB-filer (LabVIEW Library). Demo: hovedvi.llb.

Du kan redigere LLB'er via menyvalget Tools / Edit VI Labrary, bl.a. definere hvilken av VI'ene i LLB'en som skal være på "top level" (en slik VI vil da automatisk bli vist når LLB-filen åpnes).

Opsjoner ved fillagring

[Kap. 3.8]

File / Save with Options...

Øving 2:

Signalgenerator forts.

Veiledning v/Finn Haugen: Fredag 13.2 på rom TF01.


Ta utgangspunkt i losning1.vi, og legg inn følgende (den resulterende VI'en betegnes her losning2.vi):

  • Et cluster som inneholder parametrene A, f, R og B (på frontpanelet i losning2.vi).
  • En subvi som summerer de tre signalene s1 (sinus), s2 (random) og s3 (bias). Summen av signalene kan kalles y. SubVI'en skal ha s1, s2 og s3 som innganger, og y som utgang. SubVI'en skal lages fra scratch, og summasjonen skal realiseres med en formelnode. Lag et eget ikon for subVI'en. Benytt subVI'en i losning2.vi.
  • En graf (chart) som plotter y og dens middelverdi, my, som beregnet fra middelverdifunksjonen som ble lagt inn i losning1. Grafen skal ha rutenett (grid), og x-aksen skal gå fra 0 til 30 sek, hvilket skal defineres med en egenskapsnode for chart'en. Oppdateringsmodus skal være Sweep Chart. Grafen skal være blank (tømmes) hver gang VI'en startes.

Lagre hovedVI'en og subVI'en i en LLB-fil.


Løsning: losning2.llb

Leksjon 4: Tirsdag 27.2.04 kl. 1015-1600 1500, rom TF01

Lokale variable

[Kap. 11.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.

Vi lager lokal.vi

Globale variable

[Kap. 11.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.

Flere enn én globale variablel kan lagres i én global VI. Her er en global VI: global1.vi, som brukes i skriv_til_global.vi og les_fra_global.vi.

Programstrukturer

[Kap. 12]

Strukturering av VI'er som utfører parallelle operasjoner

[Kap. 13]

Parallelle operasjoner kan realiseres vha. parallelle while-løkker. Eksempel: parallell.llb (hoved-VI'en er parallell.vi).

Skiftregister

[Kap. 14]

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

Feedback-node kan brukes som erstatning for skiftregister-terminalene på programløkken der skiftregisteret inngår. Denne er tilgjengelig på Functions Palette / Structures. Et eksisterende skiftregister kan erstattes med en feedback-node ved å høyreklikke på en skiftregister-terminal.

Skrive data til fil

[Kap. 15.1, 15.2]

Følgende VI lagrer arrays (serier) av data på fil etter at while-løkken har stoppet, som en batchoperasjon: fillagring.vi.

Følgende VI lagrer data til fil kontinuerlig med start/stopp initiert fra frontpanelet: fillagring_kont.vi.

Lese data fra fil

[Kap. 15.3]

Eksempel: fil_lesing.vi leser data fra filen logg1.txt.

Sette VI'ens egenskaper

[Kap. 16]

Menyvalg: File / VI Properties. Vi tar utgangspunkt i sigtrans.vi.

PID-regulator i LabVIEW

[Står ikke i LabVIEW-boka]

Se Functions Palette / Control / PID Advanced.

De inngangene som du i det minste må bruke, er

  • setpoint (settpunktet eller referansen)
  • process variable (prosessmålingen)
  • PID gains. Obs: Ti og Td er i minutter.
  • dt (som er samplingsintervallet i antall sekunder)
  • output (pådraget)

Øving 3a:

Simulator for væsketank

Veiledning v/Finn Haugen 27.2.04 på TF01


Figuren nedenfor viser en væsketank.

En dynamikk-modell for væskenivået h kan finnes fra massebalanse:

d(rAh)/dt = rqi - rqu

som gir

Adh/dt = qi - qu

Implementer en simulator for tanken ihht. følgende spesifikasjoner:

  • qi, qu og A skal kunne justeres fra simulatorens frontpanel.

  • h skal plottes i en Chart.

  • Simuleringen skal forløpe i sann (virkelig) tid.

  • Simuleringen skal realiseres i en While-løkke som skal gå med tidsskritt 0,02 sek, mens plottingen skal realiseres i en (annen) While-løkke som skal gå med tidsskritt 0,1 sek.

  • Et varsel-tekstfelt skal vises dersom nivået er over en maksimumsgrense, som skal kunne settes via frontpanelet. Realiser dette vha. en Case-struktur.

Tips: Eulers forovermetode som derivasjonsapproksimasjon lyder generelt

d[x(tk)]/dt er tilnærmet lik [x(tk+1)-x(tk)]/T

der T er tidsskrittet og k er tidsindeksen (heltallig).


Løsning: losning3.llb

Øving 3b:

PID-regulering

Veiledning v/Finn Haugen 27.2.04 på TF01


Her er en VI som du kan bruke som en mal for et simulert reguleringssystem: pidregulering.llb. Prosesssimulatoren er allerede lagt inn (se blokkdiagrammet i pidregulering.vi).

  1. Legg den innebygde PID-regulatoren PID Advanced fra Functions Palette / Control inn i while-løkka kalt Regulering i pidregulering.vi. Gjør regulatorparametrene justerbare fra VI'ens frontpanel (tips: høyreklikk på PID Gains-inngangen på PID-blokka og velg Create Control i menyen som åpnes). Du kan i utgangspunktet bruke følgende PID-parametre: Kc (=Kp) = 6, Ti = 0,05 min og Td = 0,013 min (som jeg har funnet vha. Ziegler-Nichols' lukket-sløyfe-metode). Virker reguleringen av den simulerte prosessen? Er stabiliteten ok? Hva blir det stasjonære reguleringsavviket ved sprang i referansen?

  2. Legg inn en Chart for plotting av pådraget u.


Løsning: pidregulering_losning.llb

I/O mot fysisk prosess med FieldPoint

Innledning

FieldPoint er ett av National Instruments' systemer for distribuert modulær I/O. Figuren nedenfor viser FieldPoint-utstyret som skal brukes her. Racket inneholder til venstre kommunikasjonsmodulen FP1000, som sørger for seriekommunikasjon med PC'en og til høyre diverse I/O-moduler som hver har 2 kanaler (Dual Channel-moduler).

Vi skal se hvordan FieldPoint kan benyttes for analog I/O mot et fysisk system, som er RC-kretsen vist nedenfor.

Vi skal se hvordan LabVIEW og FieldPoint kan brukes til å sette ut et spenningssignal, v1, og lese inn et spenningssignal. Som fysisk prosess skal vi bruke en likestrømsmotor:

Konfigurering og testing vha. FieldPoint Explorer

Før LabVIEW-programmeringen starter, må FieldPoint-utstyret konfigureres (bl.a. kan I/O-kanaler gis mer brukervennlige navn enn standardnavnene Channel 0, Channel 1 osv.) og testes. Dette gjøres via programmet FieldPoint Explorer, hvis installeringsfil er gratis tilgjengelig fra National Instruments' FTP-server:

ftp://ftp.ni.com/support/fieldpoint/server/nifp30.exe

Når FieldPoint Explorer er installert, er programmet tilgjengelig via

Start / Programs / National Instruments / FieldPoint Explorer

FieldPoint-konfigureringen lagres i en *.iak-fil.

Vi ser på bruk av FieldPoint Explorer.

Hvordan benytte FieldPoint-I/O-kanaler i LabVIEW

Det er to måter å ta i bruk FieldPoint-I/O-kanaler på i LabVIEW:

  • Vha. FieldPoint-funksjoner i FieldPoint-subpaletten i Functions Palette i LabVIEW (denne subpaletten legges automatisk inn i Functions Palette når FieldPoint Explorer blir installert). Eksempel: innut_fieldpoint_med_iofunksjoner.llb.
  • Vha. FieldPoint Explorers OPC-server. I/O-kanalene blir variable (eng.: items) i OPC-serveren. OPC-variablene kan aksesseres i LabVIEW vha. funksjonene DataSocket Read og DataSocket Write (de fins på subpaletten Communication / DataSocket). 

Av de to metodene som er demonstrert ovenfor er OPC-metoden enklest å bruke, dvs. krever minst programmering. Metoden med FieldPoint-funksjonene har imidlertid den fordel at FPWrite- og FPRead-funksjonene kan skrive/lese til/fra mange kanaler på én gang, dvs. at funksjonene håndterer arrays av data.

Vi skal prøve OPC-metoden.

Bruk av FieldPoints OPC-server og DataSocket

Det forutsettes at en FieldPoint-konfigureringsfil, her: iak130102.iak, har vært åpnet i FieldPoint Explorer.

Tilknytningen til OPC-serveren (vha. DataSocket) kan foretas på forskjellige måter:

  • Programmatisk i VI'ens diagram. Eksempel: innut_fieldpoint_med_datasocket_og_opc.vi
  • Via Høyreklikk / Data operations / DataSocket enten på VI'ens frontpanel eller i VI'ens diagram, hvoretter du "browser" deg fram til OPC-datapunktene:

Til informasjon: Funksjonen DataSocket Read bruker ca. 0,01 ms for å lese data fra FieldPoints OPC-server. DataSocket Write bruker ca. 8 ms for å skrive data til OPC-serveren.

Webressurser for LabVIEW og NI

  • National Instruments' websted internasjonalt. Vi ser spesielt på 
    • produktkatalogen
    • developer's zone / resource library / application notes
  • National Instruments har norsk websted.
  • Nyhetsgrupper (via Google Groups)

Avslutning

  • Forslag til forbedring av opplegg og innhold?
  • Quiz

Oppdatert 27.2.04 av Finn Haugen (finn@techteach.no)