2 Regulering av varmeovn med P-regulator
|
|
- Liv Kristiansen
- 5 år siden
- Visninger:
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!
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
Detaljer2 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:
Detaljer1 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:
Detaljer1 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
DetaljerTest 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
DetaljerPlotting 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.
DetaljerProgram 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
DetaljerProgram 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:
DetaljerInst. 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
DetaljerInst. 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
DetaljerKYBERNETIKKLABORATORIET. 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
DetaljerBrukergrensesnittet 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
DetaljerDet 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 å
DetaljerTetris. 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
DetaljerFYS3240/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
DetaljerHer 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
DetaljerOm 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
DetaljerInst. 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
DetaljerPython: 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:
DetaljerSteg 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
DetaljerDel 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
DetaljerPLS 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
DetaljerInst. 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
DetaljerProgram 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
DetaljerInf109 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
DetaljerBygge 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
DetaljerSprettende 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
DetaljerSprettende 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:
DetaljerKanter, 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
DetaljerBygge 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
DetaljerDel 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
DetaljerZelio 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
DetaljerKan 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
DetaljerArgumenter 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
DetaljerBRUK 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
DetaljerPXT: 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
DetaljerSteg 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
DetaljerHvordan 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
DetaljerVerden - 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.
DetaljerBruksanvisning 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...
DetaljerINF1000 (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
DetaljerHø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
DetaljerHØ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:
DetaljerVerdens 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
Detaljer1. 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
DetaljerSoloball. 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
DetaljerStraffespark 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
DetaljerVisma 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.
DetaljerHØ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
DetaljerNytt 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
DetaljerLeksjon 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,
DetaljerLø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
DetaljerKnarrhultguiden «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
Detaljerbestå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"
DetaljerSimulering - 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
DetaljerProgrammering 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
DetaljerHØ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
Detaljer19.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...
DetaljerOversikt. 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
DetaljerAjourhold 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...
DetaljerKanter, 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
DetaljerOblig2 - 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
DetaljerKan 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
DetaljerToPlayer. 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
DetaljerAUTOCAD 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
DetaljerStart 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
DetaljerTDT4110 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
DetaljerOversikt. 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
DetaljerVH 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
DetaljerPython: 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:
DetaljerTips! 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.
DetaljerForelesning 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
DetaljerForelesning 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
DetaljerLeksjon 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,
DetaljerVindu 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
DetaljerHØ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:
DetaljerFrekvensanalyse 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
DetaljerMAT-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
DetaljerEKSAMEN. 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
DetaljerVerden. 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
DetaljerSteg 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
DetaljerKommunikasjon 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
DetaljerVerden. 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
DetaljerVeiledning 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
DetaljerFø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.
DetaljerITGK - 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
DetaljerSteg 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
DetaljerLayout 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
DetaljerHØ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:
DetaljerToPlayer. 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
DetaljerMAT-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
DetaljerISY 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.
Detaljer1. 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
DetaljerInstallasjon 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
DetaljerOppgave 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)
DetaljerDagens 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
DetaljerEKSAMEN 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
DetaljerEksamensoppgaven: 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
DetaljerOblig2 - 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