2 Regulering av varmeovn med P-regulator

Størrelse: px
Begynne med side:

Download "2 Regulering av varmeovn med P-regulator"

Transkript

1 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

2 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

3 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

4 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

5 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

6 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

7 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

8 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

9 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

10 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

11 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

12 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

13 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

14 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

15 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

16 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

17 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

18 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

19 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

20 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

21 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

22 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

23 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

24 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

25 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

26 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

27 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

28 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

29 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

30 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

31 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

32 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

33 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

34 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

35 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

36 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

37 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

38 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

39 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

40 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

41 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

42 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

43 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

44 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

45 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

46 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

47 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

48 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

49 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

50 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

51 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

52 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

53 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

54 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

55 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

56 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

57 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

58 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

59 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

60 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

61 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

62 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

63 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

64 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

65 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

66 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

67 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

68 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

69 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

70 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

71 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

72 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

73 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

74 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

75 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

76 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

77 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

78 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

79 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

80 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

81 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

82 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

83 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

84 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

85 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

86 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

87 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

88 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

89 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

90 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

91 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

92 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

93 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

94 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

95 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

96 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

97 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

98 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

99 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

100 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

101 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

102 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

103 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

104 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

105 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

106 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

107 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

108 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

109 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

110 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

111 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

112 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

113 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

114 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

115 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

116 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

117 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

118 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

119 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

120 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

121 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

122 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

123 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

124 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

125 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

126 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

127 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

128 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

129 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

130 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

131 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

132 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

133 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

134 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

135 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

136 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

137 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

138 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

139 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

140 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

141 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

142 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

143 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

144 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

145 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

146 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

147 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

148 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

149 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

150 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

151 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

152 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

153 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

154 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

155 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

156 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

157 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

158 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

159 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

160 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

161 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

162 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

163 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

164 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

165 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

166 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

167 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

168 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

169 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

170 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

171 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

172 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

173 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

174 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

175 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

176 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

177 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

178 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

179 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

180 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

181 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

182 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

183 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

184 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

185 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

186 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

187 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

188 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

189 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

190 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

191 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

192 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

193 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

194 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

195 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

196 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

197 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

198 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

199 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

200 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

201 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

202 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

203 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

204 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

205 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

206 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

207 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

208 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

209 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

210 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

211 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

212 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

213 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

214 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

215 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

216 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

217 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

218 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

219 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

220 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

221 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

222 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

223 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

224 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

225 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

226 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

227 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

228 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

229 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

230 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

231 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

232 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

233 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

234 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

235 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

236 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

237 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

238 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

239 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

240 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

241 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

242 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

243 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

244 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

245 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

246 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

247 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

248 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

249 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

250 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

251 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

252 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

253 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

254 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

255 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

256 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

257 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

258 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

259 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

260 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

261 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

262 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

263 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

264 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

265 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

266 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

267 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

268 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

269 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

270 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

271 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

272 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

273 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

274 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

275 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

276 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

277 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

278 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

279 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

280 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

281 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

282 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

283 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

284 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

285 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

286 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

287 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

288 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

289 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

290 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

291 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

292 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

293 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

294 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

295 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

296 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

297 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

298 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

299 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

300 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

301 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

302 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

303 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

304 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

305 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

306 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

307 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

308 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

309 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

310 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

311 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

312 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

313 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

314 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

315 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

316 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

317 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

318 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

319 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

320 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

321 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

322 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

323 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

324 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

325 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

326 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

327 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

328 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

329 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

330 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

331 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

332 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

333 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

334 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

335 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

336 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

337 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

338 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

339 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

340 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

341 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

342 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

343 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

344 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

345 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

346 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

347 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

348 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

349 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

350 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

351 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

352 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

353 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

354 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

355 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

356 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

357 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

358 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

359 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

360 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

361 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

362 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

363 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

364 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

365 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

366 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

367 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

368 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

369 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

370 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

371 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

372 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

373 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

374 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

375 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

376 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

377 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

378 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

379 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

380 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

381 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

382 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

383 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

384 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

385 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

386 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

387 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

388 Side 10 Dataøving 4 SANNTID P-regulator l1) Her skal du sette inn startverdiene du ønsker at de forskjellige ojektene på skjermen skal ha. For visingsfelt kan du ofte bruke terminalen direkte om den fortsatt er ledig. For innmatingsfelter, knapper, lysdioder osv må du oftest bruke lokale variable. Sørg for disse startverdiene: Pådrag u = 0; Prosessverdi y = 0; P-forsterking Kp = 1; Samplingstid h = 1; Kortadresse = 0; Nominelt pådrag u0 = 127; Referanse r = 127; Stopp = false; l2) Oppsett av forbindelse til K8055-kortet: Dersom brukeren har kopla et kort med adresse lik null til PC en så skal forbindelsen til kortet settes opp automatisk. Denne forbindelsen setter du opp på tilsvarende vis som under Kortadresse i hendelsefella. Dersom forbindelsen er rett satt opp skal alle lysdiodene LD1...LD8 lyse. m) Avsluttingskode: Koden for dette skal plasseres i bilde 2 i den store sekvensblokka. Her er det noe du må få til å skje i riktig rekkefølge. Først skal både de analoge og de digitale lysdiodene slukkes. Deretter skal forbindelsen til kortet stenges. n) Kjør programmet: Nå kan du prøvekjøre programmet. Virker det som det skal? Dersom det dukker opp feil må du prøve å utbedre dem helt til programmet virker som det skal. 5 Regulering av varmeovn med P-regulatoren. a) Bruk samplingstid lik 0,5 sekunder. Hvor stort blir det stasjonære avviket når referansen er 150 ved følgende forsterkinger når det nominelle pådraget settes lik 127?: Kp Stasjonært avvik b) Finnes det en verdi for det nominelle pådraget som gjør at det stasjonære avviket blir null uavhengig av forsterkinga? Hvilken verdi er i så fall dette? Prøv ut om du virkelig får 0 stasjonært avvik. Forklar hvorfor det er slik. c) Reduser samplingstida til 0,25 sekunder. Har samplingstida innvirkning på stasjonært avvik? 6 Finjustering av brukergrensesnittet. a) Linjeskriveren. Kanskje er kurvene på skjermen litt vanskelig å se eller har feil farge. Det er relativt raskt å eksperimentere med utformingen av brukergrensesnittet. Alt 1: Alt 2: Gå inn i frontpanelet, høyreklikk i linjerskriveren (Strip Chart) og velger properties. I skillarket Plots er det mange egenskaper du kan eksperimentere med. Farge, linjetype og interpoleringstype for hver enkelt kurve. Dersom diagrammet har Plot Legends synlig kan du klikke med venstre musetast direkt inni den svarte ruta som viser fargen. Da kommer det opp en meny Side 68 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

389 Dataøving 4 SANNTID P-regulator Side 11 for egenskapene som du kan eksperimentere med. Fordelen er at dette også virker under kjøring av programmet. Prøv deg litt fram og se hva som er best av farger og linjebredder. b) Størrelsen på hele frontpanelet under kjøring. Ved vanlig kjøring vil frontpanelet beholde den størrelsen det har fått når du har laga det. Noen ganger kan det f eks være greit å ekspandere panelet til fullskjerm. Problemeter å få satt det opp sånn at frontpanelet og objektene på panelet skaleres i i samme takt. Du bør bare tillate reskalering av vinduet når du er helt ferdig med det. I tillegg må du sette rammene rundt vinduet sånn at det er akkurat passe mye luft rundt på alle kanter. Pass også på å lagre for en versjon som ikke tillater reskalering før du går videre. Tillater de reskalering vil også alt bli reskalert i editeringsmodus også. Dette skaper fort trøbbel. Derfor er det best å lagre en versjon som ikke reskalerer. Dette får du til å aktivere reskalering ved å gå inn på File 6 VI Properties 6 Window Size. Deretter haker du av Scale all objects on front panel as window resizes. Dessverre vil ikke skriftstørrelsen skalere seg med panelet. Det kan derfor fort bli stygt dersom brukeren skal få lov å skalere helt fritt. Du må derfor velge en minimum panel størrelse ved å trykke på knappen Set to Current Panel Size. Prøv om du f eks kan få starta kjøring med panelet i vanlig størrelse og så få skalert til helskjerm under kjøring. 7 Neste øving. I neste øving skal P-regulatoren du har laga nå utvides til en PI-regulator. Du må derfor lagre unna dagens øving. Neste øving må du ta med dette vi et fordi det er utgangspunktet for PIregulatoren. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 69

390 Side 12 Dataøving 4 SANNTID P-regulator Vedlegg: Funksjoner i K8055D.dll fila som alle har fått subvi er for bruk i LabView: NB! Datatypen long i prototypene her tilsvarer datatypen signed 32 bit integer i LabWiew. Datatypen char tilsvarer unsigned 8 bit integer i LabView Forfatteren (PHv) har laga subvi er i LabView som bruker disse prototypene for oppkopling mot funksjonene som finnes i K8055D.dll fila. Disse subvi ene er samla i katalogen K8055 subvi. SubVI ene heter det samme som funksjonene, men med K8055 foran. SubVI et til funksjonen OpenDevice heter da K8055 OpenDevice.vi. Denne har en input-kopling og en output-kopling. SubVI et til funksjonen CloseDevice heter K8055 CloseDevice.vi og har ingen input-kopling og heller ingen output-kopling. SubVI et til funksjonen ReadAnalogChannel heter K8055 AnalogChannel osv. Prototyper for K8055D.dll henta fra K8055D.h: FUNCTION long stdcall OpenDevice(long CardAddress); Åpn opp forbindelsen til et K8055-kort med angitt adresse. Dersom forbindelsen er OK returneres adressa til kortet. Hvis ikke returneres verdien -1. FUNCTION void stdcall CloseDevice(void); Steng forbindelsen til kortet. FUNCTION long stdcall ReadAnalogChannel(long Channel); Les verdien fra AD-omformer på angitt kanal. FUNCTION void stdcall ReadAllAnalog(long *Data1, long *Data2); Les verdien på begge AD-kanaler samtidig. FUNCTION void stdcall OutputAnalogChannel(long Channel, long Data); Send verdien til angitt kanal på DA-omformeren. FUNCTION void stdcall OutputAllAnalog(long Data1, long Data2); Send verdier til begge DA-kanaler samtidig. FUNCTION void stdcall ClearAnalogChannel(long Channel); Nullstill angitt DA-kanal. FUNCTION void stdcall ClearAllAnalog(void); Nullstill begge DA-kanaler samtidig. FUNCTION void stdcall SetAnalogChannel(long Channel); Send 255 til angitt DA-kanal så den får maks spenning. FUNCTION void stdcall SetAllAnalog(void); Send 255 til begge DA-kanaler så de får maks spenning. Side 70 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

391 Dataøving 4 SANNTID P-regulator Side 13 FUNCTION void stdcall WriteAllDigital(long Data); Send en verdi til de digitale utgangene sånn at bitmønsteret bestemmer hvilke utganger som blir høye og lave. En gir høy utgang og null lav. FUNCTION void stdcall ClearDigitalChannel(long Channel); Nulstill angitt digital utgang. FUNCTION void stdcall ClearAllDigital(void); Nulstill alle de digitale utgangene. FUNCTION void stdcall SetDigitalChannel(long Channel); Sett angitt digital utgang høy. FUNCTION void stdcall SetAllDigital(void); Sett alle digitale utganger høye. FUNCTION char stdcall ReadDigitalChannel(long Channel); Les digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadAllDigital(void); Les en 8-bit verdi hvor bitmønsteret på de 5 minst signifikante bitene angir bitmønsteret på de digitale inngangene. En viser høy inngang og null lav. FUNCTION long stdcall ReadCounter(long CounterNr); De digitale inngangene kan koples opp mot en teller som teller antall ganger inngangen går høy. Avlesing av teller på angitt inngang. FUNCTION void stdcall ResetCounter(long CounterNr); Nullstilling av teller på angitt inngang. FUNCTION void stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); Setting av prelltid (i millisekunder?) på angitt inngang. FUNCTION void stdcall Version(void); Viser hvilken versjon av K8055D.dll som brukes. FUNCTION long stdcall SearchDevices(void); Returnerer adressa til gjeldende aktive K8055-kort. FUNCTION long stdcall SetCurrentDevice(long lngcardaddress); Skift aktivt kort til kortet med den angitte adressa. NB! Funksjonene SearchDevices og SetCurrentDevice er mest aktuelle når ett og samme program skal styre flere K8055-kort samtidig. Disse funksjonene må brukes i stedet for OpenDevice. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 71

392 Side 14 Dataøving 4 SANNTID P-regulator For egne notater: Side 72 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

393 D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 4\K8055_LV2012_SANN4_2014.wpd Fag SO507E Styresystemer HIST-AFT feb 14 PHv Dataøving 4 SANNTID MED LABVIEW P-regulator NB! Ta med multimeter! Innleveres: Utført av: Godkjenning: NB! I denne oppgava får du bruk for det du lærte i både dataøving 1, dataøving 2 og dataøving 3. Du må derfor ha med deg oppgaveteksten til disse øvingene når du setter i gang med denne øvinga! P-regulatoren du lager i dag må du lagre unna for den er utgangspunktet for neste øving hvor P-regulatoren skal utvides til PI-regulator. 1 Innledning Formålet med denne oppgaven er å bruke K8055-kortet til å styre en enkel varmeovn med en P-regulator laget med LabView. 2 Regulering av varmeovn med P-regulator En enkel varmeovn oppfører seg som en første ordens prosess. Du skal nå bruke en analog modell av varmeovnen laget av en motstand og en kondensator. Temperaturen skal måles med inngang A1 og effekten til varmeelementet skal sendes ut til utgang DAC1. a) Kopl opp varmeovnen som vist på figuren. (Du skal ikke kople opp lastmotstanden som allerede står på kortet.) Motstanden og kondensatoren(nb! Minus til jord! ) koples direkte i skrutilkoplingene og forbindes med en ledning som vist på bildene. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 59

394 Side 2 Dataøving 4 SANNTID P-regulator NB! Pass på at lasken SK2 bare sitter på den ene pinnen sånn at du får inn et eksternt analogt signal. Pot-meteret ATT1 må stå på maksimum. Dvs at pila skal peke mot Sølv -foten lengst inn på kortet som vist på figuren. b) Hva blir stasjonær forsterking og tidskonstant for varmeovnen ut fra figuren når du tar hensyn til lastmotstanden som står på kortet? 3 Brukergrensesnittet til P-regulatoren. Du skal bruke LabView til å lage brukergrensesnittet som er vist på neste side. Dette frontpanelet består av mange objekter. Alle objektene her har du sett før i en eller annen form. Det er nå to måter å angripe dette på: 1) Starte med et nytt panel og så hente fram alle de forskjellige objektene fra Createmenyen. 2) Starte med et nytt panel og så kopiere over objektene du har bruk for fra andre brukergrensesnitt hvor objektet du er ute etter er i bruk. Eventuelt spe på med objekter som hentes fra Controls-vinduet. (Høyreklikk i frontpanelet for å få det fram.) Hvilken metode som er best avhenger av om det finnes et gammelt brukergrensesnitt som inneholder det meste av det vi har bruk for eller ikke. Som nevnt i øving 3 er det enkelt å kopiere objekter fra et frontpanel til et annet, men kopiering fra et blokkdiagram til et annet Side 60 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

395 Dataøving 4 SANNTID P-regulator Side 3 kan lage mye rot. Dette skyldes at når du setter inn et nytt objekt i et frontpanel, så lages det automatisk en terminal i blokkdiagrammet. Omvendt vil en kopiering av en terminal eller en lokal variabel til et blokkdiagram automatisk skape et nytt objekt frontpanelet. Dette lager fort mye rot og krever ofte mye opprydding. Her skal du kopiere en del objekter til bruk i frontpanelet, men lage blokkdiagrammet helt på nytt. 3.1 Oppretting av et nytt frontpanel Du skal først opprette et nytt vi med et nytt frontpanel som du kaller Preg.vi og lagrer på en egen katalog f eks øving Laging av frontpanelet a) Åpn opp frontpanelet til IOtest.vi som du laga i øving 2. Kopier over Avslutt-knappen til ditt nye panel. b) Kopier deretter over noen av innmatingsfeltene, visningsfeltene og en lysdiode. Nå kan du plassere objektene og eventuelt kopiere dem så du får nok objekter så det tilsvarer alt til venstre for linjeskriver-feltet (Waveform Chart) i brukergrensesnittet for Preg. For hvert av innmatingsfeltene må du gå inn Properties og så først på skillearket Data Type. Her setter du hvilken datatype de forskjellige variablene skal ha. DBL står for double dvs desimaltall. U8 står for unsigned 8 bit integer, dvs positivt heltall på 8 bit som går fra 0 til 255. Etterpå går du inn på skillearket Data Entry og endrer verdiene sånn at brukeren ikke får lov til å sette inn dumme verdier. Forslag til datatyper og verdier. P-forsterking Kp: DBL Minimum: 0,01 Maksimum: 100 Inkrement: 0,1 Referanse r: U8 Minimum: 0 Maksimum: 255 Inkrement: 1 Nominelt pådrag u0:u8 Minimum: 0 Maksimum: 255 Inkrement: 1 Samplingstid h: DBL Minimum: 0,01 Maksimum: 10 Inkrement: 0,1 Kortadresse: U8 Minimum: 0 Maksimum: 3 Inkrement: 1 Response To Values Outside Limits skal stå på Coerce for min og max. For inkrement skal det stå på Ignore. Coerce betyr at brukeren ikke får lov til å sette inn verdier som går utafor området fra minimum til maksimum. Da vil brukeren ikke få lov til å sette inn en verdi utafor tillatt område. For inkrement er det valgt Ignore. Det betyr at brukeren kan sette inn andre verdier enn det som er følger naturlig av inkrement-verdien. c) Gi objektene etiketter (Labels) som i figuren som viser frontpanelet. Lysdioden har også synlig etikett Stopp og skal være mørkegrå når den er avslått og blå når den er påslått. d) Du skal lage et ferdig linjeskriverobjekt av typen Waveform Chart som du plasserer til høyre på ditt panel. Gå deretter inn i Properties og gi det følgende egenskaper i de forskjellige skillearkene: Sidesprang! Øverst på property folderen står det: Chart Properties: Strip Chart. I dette eksempelet er Strip Chart navnet på objektet. Navnet settes i feltet Label. Du får kanskje opp et annet navn, men du kan fritt endre det til hva du vil. Sidesprang slutt. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 61

396 Side 4 Dataøving 4 SANNTID P-regulator d1) Legg merke til at Label ikke skal være Visible. d2) Side 62 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

397 Dataøving 4 SANNTID P-regulator Side 5 I visningsfeltet øverst her står det Antall samplingssteg med... Dette får du ikke satt inn før du kommer til Skillearket Scales. d3) Du skal ha tre kurver totalt. Prosessverdi: Blå farge som vist over. I tillegg må du legge til Pådrag med gul farge og Referanse med grønn farge. Pass på rekkefølgen. Prosessverdi, Referanse og Pådrag. d4) Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 63

398 Side 6 Dataøving 4 SANNTID P-regulator Her står akseteksten på x-aksen. Du velger akse i det øverste feltet og setter inn teksten i feltet som heter Name. d5) Du må også sette inn følgende for y-aksen: Name settes til Amplitude. Videre må du passe på at at det ikke står hake i ruta for Autoscale og at Minimum settes lik null og Maximum settes lik 255. Dette tilsvarer måleområdet for 8-bit ADomformer. d6) Sett på en tekst rett over grafen hvor det står: Referanse, prosessverdi og pådrag e) Plassering av objekter pent på linje eller i kolonne kan være vanskelig. For å få objekter til å stå plassert på linje kan det være et tips å se på knappene. Finjustering av et objekt kan også gjøres ved å markere objektet og så bruke piltastene. 4 Blokkdiagram LabView lager automatisk et blokkdiagram hvor terminalene til alle objektene frontpanelet blir plassert. Kopiering direkte fra et annet blokkdiagram er ikke alltid lønnsomt Da er det bedre å bare se hvordan det er gjort i et blokkdiagram og så bygge det nye blokkdiagrammet på nytt fra bunnen av. I vårt tilfelle kan du hente noen idéer fra Trafikklys.vi: a) Sekvens-stack: I Trafikklys.vi brukte du en sekvens-stakk med 3 bilder. Opprett en sekvensstakk med 3 bilder i Preg.vi sitt blokkdiagram. b) While-løkke: I det midterste bildet, dvs bilde nr 1 (kjøredelen) hadde du ei While-løkke. Inni løkka var det plassert ei hendelsefelle (Event Structure) som var satt opp til å fange opp hendelsen at Avslutt-knappen skifter verdi. Lag ei hendelsefelle som gjør dette i blokkskjemaet ditt. (Dersom du ikke husker hvordan du gjorde det kan du se tilbake i oppgaveteksten for dataøving 2.) Inni hendelsefella plasserer du Avslutt-terminalen. c) Tidtaking med klokkeavbrudd i While-løkke. Det må opprettes ei While-løkke til. Inni denn løkka skal det plasseres en metronom (Wait Until Next ms Multiple). En Side 64 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

399 Dataøving 4 SANNTID P-regulator Side 7 metronom brukes til å holde takten. Den sender ut et taktsslag med helt jamn takt. Tida mellom hvert anslag angis i millisekunder til inngangen på metronomen. Hver gang det kommer et taktslag kjøres den tilhørende While-løkka gjennom en gang. Metronomslagene generer klokkeavbrudd. Dvs at uansett hva datamaskinen holder på med så vil den prioritere klokkeavbruddene. Det datamaskina holder på med blir midlertidig utsatt til den er ferdig med å kjøre programsnutten som er tilknytta klokkeavbruddet. I vårt tilfelle vil det si handlingskoden som står inni While-løkka. Utvid ramma til sekvensbilde 1 og plasser ei ny While-løkke ved siden av (eller under) den første. Plasser deretter en metronom inni løkka. Metronomen trenger en innverdi, men den skal koples opp mot samplingstida og må vente litt. Når løkkene plasseres ved siden av hverandre så betyr det at While-løkka med hendelsefella kjører uavhengig av While-løkka med metronomen. NB! Du kan bare ha ei hendelsesfelle i programmet. Hendelsesfella må alltid stå i ei løkke for seg. Metronomen og alt som skal skje ved hvert metronomslag (samplingssteg) plasseres i ei anna løkke. d) Alle while-løkker må få en stoppordre! For å få avslutta et program må alle While-løkkene få stopp-ordre. Hvis ikke risikerer de å gå til evig tid. While-løkka med hendelsefella får sin stopp-ordre når Avslutt-knappen endrer verdi. Når programmet stopper skal Stopp-dioden lyse. Dette vil skje om terminalen til Stoppdioden koples til NewVal i hendelsefella. While-løkka med metronomen må også få en stoppordre når det trykkes på avsluttknappen. Det gjøres enklest ved å lage en lokal variabel til Stopp-dioden og så kople denne til stoppknappen i while-løkka. Gjør det! Se figur e) Samplingstida i hendelsefella. Programmet skal få lov til å endre samplingstida. Når verdien i innmatingsfeltet endres må dette fanges opp i hendelsefella. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 65

400 Side 8 Dataøving 4 SANNTID P-regulator e1) Legg til fangst av endringer i innmatingsfeltet Samplingstid h[sek] i fella. Det vil si at fella skal reagere på Value Change. e2) Parker terminalen til Samplingstid h[sek] i fella. Lag så en lokal variabel av denne terminalen som du kopler til NewVal i fella. f) Oppkopling av samplingstid mot metronomen: Lag en lokal variabel til av Samplingstid h[sek] og plasser denne i While-løkka med metronomen. I prinsippet kunne denne lokale variablen koples direkte til metronomen, men da blir det trøbbel. Brukeren mater inn samplingstida i sekunder, mens metronomen skal ha samplingstida i millisekunder. Lag en kopling som gjør at dette blir rett! g) Prøvekjør programmet. Derom du får feilmeldinger må du først rette opp dem. Når du ikke får noen feilmeldinger kan du se om du får stoppa programmet ved å trykke på Avslutt. Lyser lysdioden i frontpanelet etter at programmet er stoppa? Pass på å lagre før du går videre. h) Utvid hendeslesfella til å fange opp Value Change for hver av de tre innmatingsfeltene P-forsterking Kp, Nominelt pådrag u0 og Referanse r. Disse skal lages på samme måten som for Samplingstid h[sek]. Dvs parkering av terminalen og en lokal variabel for terminalen som koples til NewVal. i) Kortadresse skal inn i hendelsefella på samme måte, men her skal du ikke lage en lokal variabel. For å se om det virkelig er forbindelse til kortet på den valgte adressa skal alle de digitale lysdiodene på kortet tennes. Følgende ting skal derfor skje i rekkefølge: 1) Slukk de digitale lysdiodene med K8055 Clear All Digital. 2) Steng forbindelsen til kortet med K8055 Close Device. 3) Send verdien fra NewVal inn på K8055 Open Device. Open Device sender ut verdien til kortet desrom forbindelsen er OK. Dersom utverdien er null eller større skal alle lysdiodene på kortet tennes. (Finn ut sjøl hvilket subvi du må bruke.) Tips! Finn ei Comparison-blokk du kan bruke. Du må kanskje bruke både en sekvens-stakk og en Case-struktur for å få dette til. j) Formelboks for regulatoralgoritmen. Algoritmen for P-regulatoren må plasseres i en formelboks i metronomløkka. Venstre rammekant brukes til verdier som skal inn i formelboksen og høyre rammekant brukes til å hente verdier ut av formelboksen. j1) Formelboks med input og output. Lag lokale variable av innmatingsfeltene for Kp, u0 og r som du kopler til venstre ramme av formelboksen. (Du brukte formelboks i Dataøving 3. Har du glemt hvordan du bruker en formelboks kan det være greit å kikke på vi-et for Traffikklys.) Inn på denne ramma tar du også prosessverdien y som du har henta fra ADomformeren. I høyre ramma lager du uttak for y, r og u. Inne i formelblokka rekner du ut pådraget u. u koples til DA-omformeren. For å få skrevet opp u og y i visningsfeltene i frontpanelet lager du først lokale variable av Prosessverdi y og Pådrag u og kopler u og y inn på venstre side av de lokale variablene. (r og y i høyre Side 66 Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012

401 Dataøving 4 SANNTID P-regulator Side 9 rammekant er egentlig ikke nødvendig, men gjør det enklere å forbinde blokker uten for mange kryssinger av ledninger.) j2) Oppkopling av formelboksen: * Kp, u0 og r kan du hente fra lokale variable. * Prosessverdien y skal hentes fra analog-til-digital omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * y og u skal koples til lokale variable for prosessverdi og pådrag sånn at verdiene kan bli vist i frontpanelet. * Pådraget u skal sendes til digital-til-analog omformer 1. (Sjekk vedlegget for prototypene til K8055D.dll for å finne et passende subvi som du kan hente fra katalogen K:\Fag\AFT\EDT\_FAG\SANNTID\LabView\K8055 subvi) * Utgangen r skal du ikke kople til noe akkurat nå. j3) Programmering av formelboksen: Inni formelboksen skal regulatoralgoritmen inn. * Variable som får sine verdier utrekna inni formelboksen må deklareres først. Her er det bare bruk for to variable av denne typen. u_k som er pådraget som desimaltall og u som er pådraget som heltall. Intern i formelbokser bruker LabView andre navn på datatypene enn ellers i LabView. Det er uheldig, men sånn er det bare. Desimaltall av typen double i LabView forkortes dbl, men i formelblokka må double deklareres som float64. Det siste tallet sier noe om hvor mange bit som brukes til lagring av verdien. Vanlig 8 bit heltall fra 0 til 255 heter unsigned char i C, mens den i formelboksen heter uint8. NB! pass på små bokstaver,men stor I. I LabView heter denne datatypen U8. Deklarer u_k som float64 og u som uint8. * Sett opp likninga for pådraget for P-regulator når resultatet skal plasseres i hjelpevariabelen u_k. Dvs u_k =... * Sjekk at pådraget holder seg mellom 0 og 255 og sett pådraget til 0 om det er mindre enn 0 og til 255 om det er større enn 255 * Sett u lik u_k. k) Kurver på linjeskriveren. Når du har utført punktene i j) vil programmet fungere som en P-regulator. Men vi ønsker i tillegg kurver på skjermen i linjeskriverobjektet (Strip-Chart). Linjeskriveren skal ha inndata i form av tre signaler: y, r og u. Ledningene med disse signalene må først samles i en ledningsbunt ved hjelp av ei Bundle-blokk. Ut av Bundle-blokka kommer det en ledningsbunt som calles cluster. Denne ledningsbunten kan så koples til inngangen av Strip Chart-blokka. NB! Øverste ledning inn på Bundleblokka blir vist som kurve 1 osv. NB! Ikke prøvekjør programmet nå. Lag oppstartkoden først. Hvis du likevel vil prøvekjøre programmet før du lager oppstartkoden må du sørge for at den blå Stoppdioden i frontpanelet er avslått før du starter programmet! l) Oppstartkode: Når programmet starter opp kan det være flere ting du ønsker skal skje før brukeren får anledning til å gjøre noe. Koden for dette skal plasseres i bilde 0 i den store sekvensblokka. Styring og regulering av prosesser med PC ved hjelp av K8055-kortet og LabView 2012 Side 67

1 Innledning. Bli kjent med LABVIEW. NB! Ta med multimeter og lite skrujern!

1 Innledning. Bli kjent med LABVIEW. NB! Ta med multimeter og lite skrujern! D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 2\K8055_LV2012_SANN2_2014.wpd Fag SO507E Styresystemer HIST-AFT jan 14 PHv Dataøving 2 i SANNTID MED LABVIEW Bli kjent med LABVIEW NB! Ta med multimeter

Detaljer

2 Regulering av varmeovn med PI-regulator

2 Regulering av varmeovn med PI-regulator D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 5\K8055_LV2012_SANN5_2014.wpd Fag SO507E Styresystemer HIST-AFT jan 14 PHv Dataøving 5 SANNTID MED LABVIEW PI-regulator NB! Ta med multimeter! Innleveres:

Detaljer

1 Innledning TRAFIKKLYS. NB! Ta med Dataøving 2! Fag SO507E Styresystemer HIST-AFT jan 14 PHv Dataøving 3 SANNTID MED LABVIEW.

1 Innledning TRAFIKKLYS. NB! Ta med Dataøving 2! Fag SO507E Styresystemer HIST-AFT jan 14 PHv Dataøving 3 SANNTID MED LABVIEW. D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 3\K8055_LV2011_SANN3_2012.wpd Fag SO507E Styresystemer HIST-AFT jan 14 PHv Dataøving 3 SANNTID MED LABVIEW TRAFIKKLYS NB! Ta med Dataøving 2! Innleveres:

Detaljer

1 Innledning. 2 Virkemåte for kortet. Bli kjent med USB I/O kort K8055. NB! Ta med multimeter og lite skrujern!

1 Innledning. 2 Virkemåte for kortet. Bli kjent med USB I/O kort K8055. NB! Ta med multimeter og lite skrujern! D:\Per\Fag\Styresys\Oppgavebok\K8055LV_12\Øving 1\K8055_LV2012_SANN1_2014.wpd Fag SO507E Styresystemer HIST-AFT jan 14 PHv Dataøving 1 SANNTID MED LABVIEW Bli kjent med USB I/O kort K8055. NB! Ta med multimeter

Detaljer

Test av USB IO-enhet. Regulering og HMI.

Test av USB IO-enhet. Regulering og HMI. Høgskolen i Østfold Avdeling for informasjonsteknologi Lab Industriell IT Fag ITD 30005 Industriell IT Laboppgave 3. Gruppe-oppgave Test av USB IO-enhet. Regulering og HMI. Skal gjennomføres i løpet av

Detaljer

Plotting av data i grafer

Plotting av data i grafer Kapittel 8 Plotting av data i grafer 8.1 Forskjellige typer grafer De viktigste plottetypene eller graftypene er Waveform Chart, som gir kontinuerlig oppdatert plotting, med stadig nye punkter på grafen.

Detaljer

Program for elektro- og datateknikk

Program for elektro- og datateknikk Program for elektro- og datateknikk Fag TELE2001 Reguleringsteknikk Tank 4 øving 1. Utarbeidet: PHv Revidert sist Fredrik Dessen 2015-08-25 Målsetting: I denne oppgaven skal du bli kjent med Simuleringsprogrammet

Detaljer

Program for elektro- og datateknikk

Program for elektro- og datateknikk D:\Per\Fag\Regtek\Oppgavebok\2a Tank 4 øvinger\04_tank4_1_2014_v3.wpd Program for elektro- og datateknikk Fag TELE2001 Reguleringsteknikk Tank 4 øving 1. Utarbeidet: PHv Revidert sist: PHv, aug 2014 Målsetting:

Detaljer

Inst. for elektrofag og fornybar energi

Inst. for elektrofag og fornybar energi Inst. for elektrofag og fornybar energi Fag TELE2001 Reguleringsteknikk Simulink øving 3 Utarbeidet: PHv Revidert sist Fredrik Dessen 2015-09-11 Hensikten med denne oppgaven er at du skal bli bedre kjent

Detaljer

Inst. for elektrofag og fornybar energi

Inst. for elektrofag og fornybar energi Inst. for elektrofag og fornybar energi Utarbeidet: PHv Fag TELE2001 Reguleringsteknikk Revidert sist Fredrik Dessen Tank 4 øving 2 2015-09-21 I denne oppgaven skal du bli mer kjent med simuleringsprogrammet

Detaljer

KYBERNETIKKLABORATORIET. FAG: Industriell IT DATO: 08.14 OPPG.NR.: LV4. LabVIEW Temperaturmålinger BNC-2120

KYBERNETIKKLABORATORIET. FAG: Industriell IT DATO: 08.14 OPPG.NR.: LV4. LabVIEW Temperaturmålinger BNC-2120 KYBERNETIKKLABORATORIET FAG: Industriell IT DATO: 08.14 OPPG.NR.: LV4. LabVIEW LabVIEW Temperaturmålinger BNC-2120 Lampe/sensor-system u y I denne oppgaven skal vi teste et lampe/sensor-system som vist

Detaljer

Brukergrensesnittet i LabVIEW

Brukergrensesnittet i LabVIEW Kapittel 2 Brukergrensesnittet i LabVIEW 2.1 Hvordan starte LabVIEW Programmet LabVIEW kan startes på flere måter: Via Start (på PC ens skrivebord) / Programmer / National Instruments /LabVIEW Du kan åpne

Detaljer

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen. Tetris Introduksjon Processing Introduksjon Lag starten på ditt eget tetris spill! Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å

Detaljer

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill! Tetris Skrevet av: Kine Gjerstad Eide Kurs: Processing Introduksjon Lag starten på ditt eget tetris spill! Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett

Detaljer

FYS3240/4240 Forslag til prosjektoppgave for Lab 4: DAQ-øvelse med LabVIEW

FYS3240/4240 Forslag til prosjektoppgave for Lab 4: DAQ-øvelse med LabVIEW FYS3240/4240 Forslag til prosjektoppgave for Lab 4: DAQ-øvelse med LabVIEW Jan Kenneth Bekkeng, 11.3.2013 Hensikten med denne øvelsen er å lære DAQ-programmering med utviklingsverktøyet LabVIEW. NB: se

Detaljer

Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den.

Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den. PXT: Stein, saks, papir Skrevet av: Bjørn Hamre Kurs: Microbit Introduksjon Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den. Steg 1: Velge tilfeldig

Detaljer

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1. Pingviner på tur Skrevet av: Geir Arne Hjelle Kurs: Scratch Tema: Blokkbasert, Spill Fag: Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon Velkommen til Scratch. Vi skal

Detaljer

Inst. for elektrofag og fornybar energi

Inst. for elektrofag og fornybar energi Inst. for elektrofag og fornybar energi Fag TELE2001 Reguleringsteknikk Simulink øving 1 Utarbeidet: PHv Revidert sist Fredrik Dessen 2015-09-03 Hensikten med denne øvingen er at du skal bli kjent med

Detaljer

Python: Input og output

Python: Input og output Python: Input og output Skrevet av: Oversatt fra microbit-micropython.readthedocs.io (https://microbitmicropython.readthedocs.io/en/latest/tutorials/io.html) Oversatt av: Øistein Søvik Kurs: Microbit Tema:

Detaljer

Steg 1: Katten og fotballbanen

Steg 1: Katten og fotballbanen Straffespark Skrevet av: Erik Kalstad og Geir Arne Hjelle Kurs: Scratch Tema: Blokkbasert, Spill Fag: Matematikk, Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon Vi skal

Detaljer

Del 1 En oversikt over C-programmering

Del 1 En oversikt over C-programmering Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av

Detaljer

PLS PC-øving nr. 3 Global Label og Local Label, flagg og CJ

PLS PC-øving nr. 3 Global Label og Local Label, flagg og CJ PLS PC-øving nr. 3 Global Label og Local Label, flagg og CJ Utgave: 1.02 Utarbeidet av: AH Dato: 10.10.12 Revidert av: AH Dato: 270114 Tema i oppgaven Oppgaven går ut på å lære seg å ta i bruk listene

Detaljer

Inst. for elektrofag og fornybar energi

Inst. for elektrofag og fornybar energi Inst. for elektrofag og fornybar energi Fag TELE2001 Reguleringsteknikk Løsningsforslag, Tank 4 øving 1 Utarbeidet av Erlend Melbye 2015-09-07 Revidert sist Fredrik Dessen 2015-09-07 1 Oppstart av Tank

Detaljer

Program for elektro- og datateknikk

Program for elektro- og datateknikk D:\Per\Fag\Regtek\Oppgavebok\2b Simulinkøvinger\06_SIMULI1_2014a_v2.wpd Program for elektro- og datateknikk Utarbeidet: PHv Fag TELE2001 Reguleringsteknikk Revidert sist: PHv, Sept 2014 Simulink øving

Detaljer

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse.

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse. Inf109 Programmering for realister Uke 5 I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse. Før du starter må du kopiere filen graphics.py fra http://www.ii.uib.no/~matthew/inf1092014

Detaljer

Bygge en kube. Introduksjon. Steg 1: Lage en ny mod. Skrevet av: Pål G. Solheim

Bygge en kube. Introduksjon. Steg 1: Lage en ny mod. Skrevet av: Pål G. Solheim Bygge en kube Skrevet av: Pål G. Solheim Kurs: Learntomod Tema: Blokkbasert, Minecraft Fag: Programmering, Teknologi Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon Vi skal bygge en

Detaljer

Sprettende ball Introduksjon Processing PDF

Sprettende ball Introduksjon Processing PDF Sprettende ball Introduksjon Processing PDF Introduksjon: I denne modulen skal vi lære et programmeringsspråk som heter Processing. Det ble laget for å gjøre programmering lett for designere og andre som

Detaljer

Sprettende ball. Introduksjon: Steg 1: Vindu. Sjekkliste. Skrevet av: Sigmund Hansen

Sprettende ball. Introduksjon: Steg 1: Vindu. Sjekkliste. Skrevet av: Sigmund Hansen Sprettende ball Skrevet av: Sigmund Hansen Kurs: Processing Tema: Tekstbasert, Animasjon Fag: Matematikk, Naturfag, Programmering, Kunst og håndverk Klassetrinn: 8.-10. klasse, Videregående skole Introduksjon:

Detaljer

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen Kanter, kanter, mange mangekanter Skrevet av: Sigmund Hansen Kurs: Processing Tema: Tekstbasert, Animasjon Fag: Matematikk, Programmering, Kunst og håndverk Klassetrinn: 8.-10. klasse, Videregående skole

Detaljer

Bygge en kube. Steg 1: Lage en ny mod. Sjekkliste. Introduksjon

Bygge en kube. Steg 1: Lage en ny mod. Sjekkliste. Introduksjon Bygge en kube Introduksjon Learn To Mod Introduksjon Vi skal bygge en kube i minecraft og lære endel viktige klosser i Learn To Mod. Oppgaven er forklart i detalj og egner seg som den første oppgaven du

Detaljer

Del 4 Noen spesielle C-elementer

Del 4 Noen spesielle C-elementer Del 4 Noen spesielle C-elementer 1 RR 2016 Header-filer inneholder Prototypene til funksjonene i standard biblioteket Verdier og definisjoner som disse funksjonene bruker #include #include

Detaljer

Zelio Soft grunnkurs. Zelio Logic reléerstatter programmering

Zelio Soft grunnkurs. Zelio Logic reléerstatter programmering Zelio Soft grunnkurs Zelio Logic reléerstatter programmering Zelio Soft programvare for programmering av Zelio Logic reléerstatter Grunnkurset forutsetter at Zelio Soft er installert på PC Skjermbilder

Detaljer

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt! Microbit PXT: Terning Skrevet av: Geir Arne Hjelle Kurs: Microbit Språk: Norsk bokmål Introduksjon Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt! Steg 1: Vi rister løs Vi

Detaljer

Argumenter fra kommandolinjen

Argumenter fra kommandolinjen Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene

Detaljer

BRUK AV TiSferaDesign I RINGETABLÅER MED ELEKTRONISK NAVNELISTE:

BRUK AV TiSferaDesign I RINGETABLÅER MED ELEKTRONISK NAVNELISTE: BRUK AV TiSferaDesign I RINGETABLÅER MED ELEKTRONISK NAVNELISTE: (benyttes til å opprette og redigere navneliste, samt laste denne til tablået via USB kabel) TiSferaDesign Kan lastes ned herfra: http://www.homesystems-legrandgroup.com/bthomesystems/productdetail.action?productid=019

Detaljer

PXT: Himmelfall. Introduksjon. Skrevet av: Helene Isnes og Julie Revdahl

PXT: Himmelfall. Introduksjon. Skrevet av: Helene Isnes og Julie Revdahl PXT: Himmelfall Skrevet av: Helene Isnes og Julie Revdahl Kurs: Microbit Tema: Elektronikk, Blokkbasert, Spill Fag: Programmering, Matematikk Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole

Detaljer

Steg 1: Hvordan styre figurer med piltastene

Steg 1: Hvordan styre figurer med piltastene Labyrint Skrevet av: Geir Arne Hjelle Kurs: Scratch Tema: Blokkbasert, Spill Fag: Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon I dette spillet vil vi kontrollere en

Detaljer

Hvordan bruke tidtaker utstyret til Inndal IL

Hvordan bruke tidtaker utstyret til Inndal IL Hvordan bruke tidtaker utstyret til Inndal IL Dette er en enkel beskrivelse på hvordan man bruker tidtaker utstyret som er anskaffet. Det er samme bruksmåte, enten man skal arrangere langrenn, terrengløp

Detaljer

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro Verden - Del 2 Nybegynner Processing Intro Denne oppgaven bygger på oppgaven med samme navn som ligger på introduksjonsnivå her i Processingoppgavene. Klikk her for å gå til introduksjonsoppgaven av verden.

Detaljer

Bruksanvisning Unitronics Vision

Bruksanvisning Unitronics Vision Bruksanvisning Unitronics Vision Ole Einar Moe Innhold 1 Oppsett... 1 1.1 PLS... 1 1.2 Datamaskin... 2 1.3 Kommunikasjon... 2 2 Planlegging... 6 2.1 Digitale Inn/Ut ganger... 6 2.2 Analoge Inn/Ut ganger...

Detaljer

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1000 (Uke 5) Mer om løkker, arrayer og metoder INF1000 (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset Praktisk informasjon Når disse

Detaljer

Høgskoleni østfold EKSAMEN. Oppgavesettet består av 8 sider inklusiv denne forsiden og vedlegg.

Høgskoleni østfold EKSAMEN. Oppgavesettet består av 8 sider inklusiv denne forsiden og vedlegg. Høgskoleni østfold EKSAMEN Emnekode:Emne: ITD13012Datateknikk Dato:Eksamenstid: 13. mai 2015kl. 09.00 til k1.12.00, 3 timer Hjelpemidler: to A4-ark (fire sider) med egne notater Ikke-kommuniserende kalkulator

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 15. mai 2003 Varighet: Fagnummer: Fagnavn: Klasse(r): 3 timer LO116D Programmering i Visual Basic FU Studiepoeng:

Detaljer

Verdens korteste grunnkurs i Excel (2007-versjonen)

Verdens korteste grunnkurs i Excel (2007-versjonen) Verdens korteste grunnkurs i Excel (2007-versjonen) NB! Vær oppmerksom på at Excel kan se annerledes ut hos dere enn det gjør på bildene under. Her er det tatt utgangspunkt i programvaren fra 2007, mens

Detaljer

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14 Kom i gang med 2 I dette heftet skal vi gjøre oss kjent med micro:bit og lære å programmere med blokk-kode. Heftet inneholder seks ulike prosjektoppgaver med differensiert innhold og tema. 1. Rullende

Detaljer

Soloball. Introduksjon. Steg 1: En roterende katt. Sjekkliste. Skrevet av: Geir Arne Hjelle

Soloball. Introduksjon. Steg 1: En roterende katt. Sjekkliste. Skrevet av: Geir Arne Hjelle Soloball Skrevet av: Geir Arne Hjelle Kurs: Scratch Tema: Blokkbasert, Spill Fag: Matematikk, Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon Vi skal nå lære hvordan vi

Detaljer

Straffespark Introduksjon Scratch Lærerveiledning

Straffespark Introduksjon Scratch Lærerveiledning Straffespark Introduksjon Scratch Lærerveiledning Introduksjon Vi skal lage et enkelt fotballspill, hvor du skal prøve å score på så mange straffespark som mulig. Steg 1: Katten og fotballbanen Vi begynner

Detaljer

Visma Contracting Oppgradering til versjon 5.20

Visma Contracting Oppgradering til versjon 5.20 Visma Contracting Oppgradering til versjon 5.20 Oslo, oktober 2013 Før installasjon: SuperOffice De som kjører SuperOffice må få oppgradert denne samtidig. Henvendelse til leverandøren firma KeyForce.

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi C:\Per\Fag\Regtek\Eksamen\Eksamen11\LX2011DesEDT212T.wpd HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi Eksamensdato Fag 20.desember 2011 LØSNINGSFORSLAG EDT212T Reguleringsteknikk grunnkurs Dato: 11.11.12

Detaljer

Nytt prosjekt og programlogikk

Nytt prosjekt og programlogikk Hima myexample steg for steg 1 Generelt Denne steg for steg oppskriften for myexample prosjektet er et supplement til Create Projekt.pdf filen. I Create Project.pdf står det ytterligere informasjon av

Detaljer

Leksjon 3. Kontrollstrukturer

Leksjon 3. Kontrollstrukturer 6108 Programmering i Java Leksjon 3 Kontrollstrukturer Del 2 Løkker Roy M. Istad 2015 Utførelse av et program Programflyt så langt start setning setning setning setning Sekvensielt Alle setninger utføres,

Detaljer

Løypelegging ved bruk av

Løypelegging ved bruk av Løypelegging ved bruk av 1 Innholdsfortegnelse 1 Bruk av OCAD 9...3 2 Kart...3 3 Oppstart...3 4 Plasering av detaljer...5 5 Løyper...7 6 Postbeskrivelse...9 7 Innstillinger...11 7.1 For løyper... 11 7.2

Detaljer

Knarrhultguiden «Klargjøring og testing av Tru-Test XRS lesestav for fostertelling».

Knarrhultguiden «Klargjøring og testing av Tru-Test XRS lesestav for fostertelling». Knarrhultguiden «Klargjøring og testing av Tru-Test XRS lesestav for fostertelling». «Klargjøring og testing av Tru-Test XRS lesestav for fostertelling». I denne Knarrhultguiden skal vi se nærmere på hvordan

Detaljer

består av 7 sider inklusiv denne forsiden og vedlegg. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

består av 7 sider inklusiv denne forsiden og vedlegg. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene. Høgskolen i østfold EKSAMEN Emnekode: ITD13012 Dato: Emnenavn: Datateknikk Eksamenstid: 10.5.16 9.00 12.00, 3 timer Hjelpemidler: To A4-ark (fire sider) med egne notater Faglærer: Robert Roppestad "Ikke-kommuniserende"

Detaljer

Simulering - Sannsynlighet

Simulering - Sannsynlighet Simulering - Sannsynlighet Når regnearket skal brukes til simulering, er det et par grunninnstillinger som må endres i Excel. Hvis du får feilmelding om 'sirkulær programmering', betyr det vanligvis at

Detaljer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi C:\Per\Fag\Regtek\Eksamen\Eksamen12\LX2012desEDT212Tv6.wpd HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi Eksamensdato Fag 17. desember 2012 LØSNINGSFORSLAG (Ikke kvalitetssikra!) EDT212T Reguleringsteknikk

Detaljer

19.03.14 1. HBF Drammen 2014 Tips og triks 1. Innhold... Side. Tips og triks 1... 3

19.03.14 1. HBF Drammen 2014 Tips og triks 1. Innhold... Side. Tips og triks 1... 3 19.03.14 1 HBF Drammen 2014 Tips og triks 1 Innhold... Side Tips og triks 1... 3 Meny Fil i hovedknapperad... 3 Sikkerhetslagring... 3 Presentasjonsegenskap... 4 Detaljoppsett... 4 Lagoppsett... 5 Pennoppsett...

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer

Ajourhold av DMK i FYSAK F2.6 Kokebok Norsk institutt for skog og landskap, Steinkjer

Ajourhold av DMK i FYSAK F2.6 Kokebok Norsk institutt for skog og landskap, Steinkjer Ajourhold av DMK i FYSAK F2.6 Kokebok Norsk institutt for skog og landskap, Steinkjer Innhold Forberedelser... 2 Innstillinger... 2 Åpning av DMK-base og ortofoto... 3 Redigering... 5 Rediger markslagsgrenser...

Detaljer

Kanter, kanter, mange mangekanter

Kanter, kanter, mange mangekanter Kanter, kanter, mange mangekanter Nybegynner Processing PDF Introduksjon: Her skal vi se på litt mer avansert opptegning og bevegelse. Vi skal ta utgangspunkt i oppgaven om den sprettende ballen, men bytte

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Leveringsfrist Oppgaven må leveres senest fredag 30. september kl 16.00. Viktig: les slutten av oppgaven for detaljerte leveringskrav. Formål Formålet

Detaljer

Kan micro:biten vår brukes som et termometer? Ja, den har faktisk en temperatursensor!

Kan micro:biten vår brukes som et termometer? Ja, den har faktisk en temperatursensor! PXT: Temperatur Skrevet av: Kolbjørn Engeland, Julie Revdahl Kurs: Microbit Tema: Blokkbasert, Elektronikk, Spill Fag: Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon

Detaljer

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide ToPlayer Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide Kurs: Processing Tema: Tekstbasert Fag: Matematikk, Programmering Klassetrinn: 8.-10. klasse, Videregående skole Introduksjon: Nå skal vi

Detaljer

AUTOCAD 2008. Artikkelserie. Fra Color til Named og omvendt

AUTOCAD 2008. Artikkelserie. Fra Color til Named og omvendt Odd-Sverre Kolstad AUTOCAD 2008 Artikkelserie Fra Color til Named og omvendt Gyldendal Norsk Forlag AS 2007 Omslag Marianne Thrap Redaktør: Rune Kjelvik Formgiver: Rune Kjelvik 1. opplag ISBN 978-82-05-37108-8

Detaljer

Start et nytt PXT-prosjekt, for eksempel ved å gå til makecode.microbit.org (

Start et nytt PXT-prosjekt, for eksempel ved å gå til makecode.microbit.org ( PXT: Akselerometer Skrevet av: Julie Christina Revdahl Kurs: Microbit Tema: Elektronikk, Blokkbasert Fag: Matematikk, Programmering, Teknologi Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon

Detaljer

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Læringsmål og pensum Mål Vite hva et

Detaljer

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon Oversikt INF1000 Uke 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning Uttrykk

Detaljer

VH Service Software. Dette dokumentet forteller deg i korte trekk hvilke funksjoner denne programvaren har, basert på følgende menyvalg:

VH Service Software. Dette dokumentet forteller deg i korte trekk hvilke funksjoner denne programvaren har, basert på følgende menyvalg: VH Service Software Dette dokumentet forteller deg i korte trekk hvilke funksjoner denne programvaren har, basert på følgende menyvalg: File Settings Test Alarm Help Dette er startsiden i denne service

Detaljer

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre Python: Løkker TDT4110 IT Grunnkurs Professor Guttorm Sindre Denne uka Vi trenger å Støttes av Hente data fra bruker Vise data til bruker Lagre data i minnet for bruk videre i programmet Fra tastatur:

Detaljer

Tips! OMRON ELECTRONICS NORWAY AS

Tips! OMRON ELECTRONICS NORWAY AS Dette dokumentet er ment som et supplement til de originale manualene for produktene. Benytt derfor dette som en hjelp til å bli kjent med produktet, og ikke som en oppskrift for en ferdig installasjon.

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen til et Java-program

Detaljer

Leksjon 3. Kontrollstrukturer

Leksjon 3. Kontrollstrukturer 6108 Programmering i Java Leksjon Kontrollstrukturer Del 2 Løkker Roy M. Istad 2015 Utførelse av et program Programflyt så langt start setning setning setning setning Sekvensielt Alle setninger utføres,

Detaljer

Vindu og dør. Kapittel 3 - Vindu og dør... 3

Vindu og dør. Kapittel 3 - Vindu og dør... 3 19.07.2012 Kapittel 3... 1 DDS-CAD Arkitekt Byggmester - innføring versjon 7 Vindu og dør Kapittel Innhold... Side Kapittel 3 - Vindu og dør... 3 Vinduene 1, 2, 3 og 4... 3 Hvordan ser fasaden ut?... 6

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi Målform: Bokmål Eksamensdato: 15.desember 2014 Varighet/eksamenstid: 0900-1400 Emnekode: Emnenavn: TELE2001-A Reguleringsteknikk Klasse: 2EL 2FE Studiepoeng:

Detaljer

Frekvensanalyse av likestrømsmotor med diskret regulator og antialiasing filter

Frekvensanalyse av likestrømsmotor med diskret regulator og antialiasing filter C:\Per\Fag\Styresys\SANNOV\13LØSØV2.wpd Fag SO507E Styresystemer HIST-AFT Feb 2012 PHv Løsning heimeøving 2 Sanntid Revidert sist: 8/2-13 NB! Matlab har vært under endring de siste årene. Mer og mer baserer

Detaljer

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1 8. september, 2005 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 23/9-2005, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels

Detaljer

EKSAMEN. Informasjon om eksamen. Emnekode og -navn: ITD13012 Datateknikk. Dato og tid: timer. Fagansvarlig: Robert Roppestad

EKSAMEN. Informasjon om eksamen. Emnekode og -navn: ITD13012 Datateknikk. Dato og tid: timer. Fagansvarlig: Robert Roppestad Informasjon om eksamen EKSAMEN Emnekode og -navn: ITD13012 Datateknikk Dato og tid: 13.5.19 3 timer Fagansvarlig: Robert Roppestad Hjelpemidler: - to A4-ark (fire sider) med egne notater - godkjent kalkulator

Detaljer

Verden. Steg 1: Vinduet. Introduksjon

Verden. Steg 1: Vinduet. Introduksjon Verden Introduksjon Processing Introduksjon Velkommen til verdensspillet! Her skal vi lage begynnelsen av et spill hvor man skal gjette hvilke verdensdeler som er hvor. Så kan du utvide oppgava til å heller

Detaljer

Steg 1: Piler og knappetrykk

Steg 1: Piler og knappetrykk PXT: Er du rask nok? Skrevet av: Julie Christina Revdahl Kurs: Microbit Tema: Blokkbasert, Spill, Elektronikk Fag: Programmering, Teknologi Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole

Detaljer

Kommunikasjon mellom XC PLS'er over CAN

Kommunikasjon mellom XC PLS'er over CAN Kommunikasjon mellom XC PLS'er over CAN sdato Dokument Side 1 av 12 Oversikt I eksemplet brukes det 2 stk. XC2 og 1 stk. XC1. XC1/2 (1) XC1/2(2) XC1/2(3) I dette eksempelet lager vi en teller som genereres

Detaljer

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide Verden Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide Kurs: Processing Tema: Tekstbasert Fag: Matematikk, Programmering, Samfunnsfag Klassetrinn: 8.-10. klasse, Videregående skole Introduksjon Velkommen

Detaljer

Veiledning til OpenOffice. Tekstbehandling 2

Veiledning til OpenOffice. Tekstbehandling 2 Veiledning til OpenOffice Tekstbehandling 2 Innføring i OpenOffice.org Writer Grunnskolen i Nittedal Tekstbehandling 2 Når du er ferdig med heftet skal du kunne: Klippe og lime tekst Midtstille, høyre

Detaljer

Før du starter, del 2

Før du starter, del 2 1 Før du starter I Windows må du sørge for at tekst og andre elementer er satt til å vises normalt 100%. Visma Global støtter ikke zooming, da vil noen elementer forsvinne fra programmet og ikke fungere.

Detaljer

ITGK - H2010, Matlab. Repetisjon

ITGK - H2010, Matlab. Repetisjon 1 ITGK - H2010, Matlab Repetisjon 2 Variabler og tabeller Variabler brukes til å ta vare på/lagre resultater Datamaskinen setter av plass i minne for hver variabel En flyttallsvariabel tar 8 bytes i minne

Detaljer

Steg 1: Installere programvaren

Steg 1: Installere programvaren Blinkende lysdiode Skrevet av: Adrian Helle Kurs: Arduino Tema: Elektronikk, Tekstbasert Fag: Programmering, Teknologi Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole Introduksjon Arduino

Detaljer

Layout og publisering

Layout og publisering Layout og publisering Målet for denne kursomgangen er at du skal: - Bli kjent med menyene i ArcMap - Gjøre enkle forandringer i et eksisterende prosjekt - Lage et kart basert på prosjektet, som kan skrives

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi Eksamensdato: 20. Desember 2011 Varighet/eksamenstid: 0900-1300 Emnekode: Emnenavn: Klasse: EDT212T Reguleringsteknikk grunnkurs 2EL Studiepoeng: 7.5 Faglærer:

Detaljer

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon: ToPlayer Introduksjon Processing Introduksjon: Nå skal vi lage et spill som to personer kan spille mot hverandre. Vi har kalt det ToPlayer, men du kan kalle det hva du vil. Målet er å dytte en figur, eller

Detaljer

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1 3. september, 2004 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 17/9-2004, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels

Detaljer

ISY G-prog Beskrivelse 9.4 - Endringsliste

ISY G-prog Beskrivelse 9.4 - Endringsliste ISY G-prog Beskrivelse 9.4 - Endringsliste Ny Excel Eksport Nytt valg som står default på. Eksporterer da direkte inn i excel fremfor å gå via.txt fil. Brukeren må ha Windows Excel installert på sin maskin.

Detaljer

1. Innføring i bruk av MySQL Query Browser

1. Innføring i bruk av MySQL Query Browser Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Innføring i bruk av MySQL Query Browser Kjell Toft Hansen 28.02.2007 Lærestoffet er utviklet for faget LV338D Databaseadministrasjon 1. Innføring

Detaljer

Installasjon av Mediasite Desktop Recorder 2

Installasjon av Mediasite Desktop Recorder 2 Installasjon av Mediasite Desktop Recorder 2 Mediasite Desktop Recorder 2 er et program der du kan gjøre skjerm- og lydopptak direkte fra Canvas. Programmet må installeres før det kan brukes: Når du er

Detaljer

Oppgave 1 Finner den z-transformerte for følgende pulstog:

Oppgave 1 Finner den z-transformerte for følgende pulstog: C:\Per\Fag\Styresys\SANNOV\10LØSØV3.wpd Fag SO507E Styresystemer HIST-AFT Feb 2010 PHv Løsning heimeøving 3 Sanntid Utleveres: Uke 7 Oppgave 1 Finner den z-transformerte for følgende pulstog: a) b) c)

Detaljer

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Dagens tema Dagens tema C-programmering Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Adresser og pekere Parametre Vektorer (array-er) Tekster (string-er) Hvordan ser minnet

Detaljer

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale. Høgskolen i Telemark Fakultet for allmennvitenskapelige fag EKSAMEN I 6108/6108N PROGRAMMERING I JAVA 21. 12. 2015 Tid: 4 timer Sidetall: Hjelpemiddel: Merknader: Framside + 5 sider Alt trykt og skriftlig

Detaljer

Eksamensoppgaven: Hele oppgavesettet består av 8 oppgaver. Hver oppgave har en %-angivelse som angir hvor mye den teller ved sensurering.

Eksamensoppgaven: Hele oppgavesettet består av 8 oppgaver. Hver oppgave har en %-angivelse som angir hvor mye den teller ved sensurering. Informasjon om eksamen EKSAMEN Emnekode og -navn: ITD13012 Datateknikk, deleksamen 2 Dato og tid: 15. mai 2018, 3 timer (fra 09:00 til 12:00) Faglærer: Robert Roppestad Tillatte hjelpemidler: To A4-ark

Detaljer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Oblig2 - obligatorisk oppgave nr 2 (av 4) i INF1000 Leveringsfrist Oppgaven må leveres senest fredag 29 september kl 1600 Viktig: les slutten av oppgaven for detaljerte leveringskrav Formål Formålet med

Detaljer