Entankprosjektrapport



Like dokumenter
Forprosjektrapport. Prosjektoppgave i Styresystemer 2AEL13H våren 2015

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

SIMULERINGSNOTAT. Prosjekt i emnet «Styresystemer og reguleringsteknikk» Gruppe 01. Laget av Torbjørn Morken Øyvind Eklo

TOTANK RAPPORT. Gruppe 1 og 2

Rapport Entank. Prosjekt i emnet «Styresystemer og reguleringsteknikk» Gruppe 01. Høgskolen i Sør-Trøndelag

ENTANK 2EA GRUPPE

Bruksanvisning Unitronics Vision

48 Praktisk reguleringsteknikk

Totankprosjektrapport

HMI standarddokument

Høgskolen i Østfold Avdeling for informasjonsteknologi. Programmering av PLS-styrt Modellandsby ved hjelp av Phoenix Profinet / PCWorX

Forprosjektrapport Prosjektoppgave i faget Styresystemer 2EA våren 2015

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi LØSNINGSFORSLAG EDT208T-A. Programmerbare logiske styringer

KYBERNETIKKLABORATORIET. FAG: Kybernetikk DATO: OPPG. NR.: R134 TEMPERATURREGULERING

HØGSKOLEN I SØR-TRØNDELAG

Utførelse av programmer, metoder og synlighet av variabler i JSP

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi Studieprogram for elektro- og datateknikk 7004 TRONDHEIM

Program for elektro- og datateknikk

EC-Styring med "Magelis" berøringsskjerm. 1. Oppstart og initialisering av maskin... 2

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

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

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

Kanter, kanter, mange mangekanter

Program for elektro- og datateknikk

Zelio Soft grunnkurs. Zelio Logic reléerstatter programmering

Espen Seljemo, Torry Eriksen, Vidar Wensel og Magnus Bendiksen

Enkel veiledning for: GSM key3+

Test av USB IO-enhet. Regulering og HMI.

ENC ENKEL AKSE og KLIPPE LENGDE KONTROLLER for PLATESAKSER

MINIPROSJEKTRAPPORT PROSJEKT I STYRESYSTEMER GRUPPE 1

Slik skal du tune dine PID-regulatorer

DataGuard. Installasjonsguide. Internett. Thomson Speedtouch 585i v7

ASU Monitor inng.: 0= frakoblet, 1= kontakt, 2= temperatur, 3= kont. + temp. 3.

MIK 200 Anvendt signalbehandling, Lab. 5, brytere, lysdioder og logikk.

DRIFTSOVERVÅKNING OG DRIFTSTYRING AV PUMPESTASJONER AVLØP.

PLS PC-øving nr. 2 Trening i programmering

Manusnett - brukerveiledning for forfatter

2-Port transmisjons målinger for Anritsu RF og mikrobølge håndholdte instrumenter

MONTERINGSANVISNING TERMLIFT

Du har sikkert allerede startet noen programmer ved å trykke på kontrollknappen. VINDUER = WINDOWS

Miniprosjektrapport. Prosjektoppgave i Styresystemer 2AEL13H våren 2015

Simuleringsnotat. Prosjekt i emnet «Styresystemer og reguleringsteknikk» Gruppe 6. av Stian Venseth og Kim Joar Øverås

RUTEPLANLEGGINGSSYSTEM BRUKERVEILEDNING

Bruksanvisning - hovedpunkter Floalarm K 4

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Komme i gang med Skoleportalen

Informasjon om din trådløse forbindelse

Prosessgrensesnitt. Generell informasjon. Versjon: 2.2

VANNTETT KOMPAKTKORTLESER

ADDISJON FRA A TIL Å

WinMed3. Release Notes Allmenn Våren Release Notes Allmenn Våren 2013 Versjon Side 1

Brukermanual for kommuneansvarlig og testleder

MAI 2016 ALTIBOX WIFI PLUSS INSTALLASJONS- OG BRUKERVEILEDNING

Brukerveiledning Tilkobling internett

KYBERNETIKKLABORATORIET. FAG: Dynamiske systemer DATO: OPPG.NR.: DS3 MOTOR GENERATOROPPGAVE I

Brukerveiledning Tilkobling internett

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Analog til digital omformer


LINDHOLT DATA Bruksanvisning GT I700 Igangsetting og bruk. Per Lindholt 10/04/2012

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

Turny bladvender Brukerveiledning

Brukermanual for nettpublisering. frivilligsentral.no

Nyheter i Office 2016 NYHETER, FUNKSJONER, FORKLARING

Fag ITD Bildebehandling og mønstergjenkjenning. mandag 28. oktober til fredag 15. november 2013

Guide for tilkobling til HIKT s Citrix løsning

INF1411 Obligatorisk oppgave nr. 4

BRUKER- VEILEDNING ICAS. Hestia 915 Ver.4.4

Veileder for opplasting av AKTIV sporlogg til PC

Hvordan bruke Helsegris for produsenter Innhold:

Brukermanual for RadioLink base

Shellscripting I. Innhold

Avansert oppsett. I denne manualen finner du informasjon og veiledning for avansert oppsett av din Jensen AirLink ruter.

Brukermanual. Revisjon manual 01 Programversjon E

MONTERINGS- OG BRUKSANVISNING FOR GARASJEPORTÅPNER

Forprosjekt. Oppgavens tittel: Motorstyring Dato: Jon Digernes Institutt/studieretning: Program for elektro og datateknikk

Brukerveiledning Tilkobling internett ALT DU TRENGER Å VITE OM BRUKEN AV INTERNETT

Testrapport. Studentevalueringssystem

Inst. for elektrofag og fornybar energi

Posisjonsystemet FRA A TIL Å

HØGSKOLEN I SØR TRØNDELAG AVDELING FOR TEKNOLOGI. Program for data- og elektroteknikk

Dagens tema. Dagens tema hentes fra kapittel 3 i Computer Organisation and Architecture. Sekvensiell logikk. Flip-flop er. Tellere og registre

Brukerveiledning for landsmøtesystemet Easymeet

Eivind, ED0 Ingeniørfaglig yrkesutøvelse og arbeidsmetoder Individuell fremføring

AirLink 2200 FAQ. Side 2 Side 2 Side 3 Side 4 Side 6 Side 7 Side 8 Side 10 Side 11 Side 12 Side 13 Side 13 Side 14 Side 15 Side 16 Side 18

Laget av Atle Hybertsen Høst 2017

Elektriske data Nominell spenning AC/DC 24 V Nominell frekvens

Inst. for elektrofag og fornybar energi

Straffespark Introduksjon Scratch Lærerveiledning

Forprosjektrapport. Gruppe 3 2EA

FLEXIT CS N Hurtigguide CS2000 Automatikk

Elektriske data Nominell spenning AC/DC 24 V Nominell frekvens

RiskManager Avvikshåndtering Kurshefte for behandlere

BRUKERVEILEDNING PROSTEMODUL FOR PROST OG PROSTESEKRETÆR OPPSETT AV PROSTIET

BlindShell bruksanvisning

HALVLEDER-DIODER Karakteristikker Målinger og simuleringer

IP-telefoni Brukerveiledning

Reguleringsutstyr. Kapittel Prosessregulatorer

Prosjektoppgave i faget Styresystemer 2EA våren 2015

Transkript:

Høgskolen i Sør-Trøndelag Entankprosjektrapport Prosjektoppgave i Styresystemer 2AEL13H våren 2015 Gruppe 6 Emil Hatletveit Kristian Strøm Terje Magnus Sørensen Stian Berg Dyrnes Snorre Vongraven Andreas Haugen 28.04.2015

ii

Forord TMS Alle studenter ved automasjonslinjen ved HiST gjennomfører i fjerde semester et større prosjekt i faget Styresystemer og Reguleringsteknikk. Prosjektet har som hensikt å gi studentene trening i samarbeid, rapportskriving og praktisk problemløsning, samt øke den faglige kompetansen hos alle involverte. I entankprosjektet har prosjektgruppa programmert et kontrollsystem for en tank, kontrollsystemet består av en PI-regulator med mulighet for en PD-regulator i foroverkobling. Det er designet et grafisk brukergrensesnitt for HMI i henhold til kravene. I tillegg er brukerpanelet på PLS-riggen programmert med en enkel visuell framvisning. Systemet er testet og demonstrert for veiledere uten problemer. Stian Berg Dyrnes SBD Emil Welde Hatletveit EWH Kristian Strøm KS Terje Magnus Sørensen TMS Snorre Vongraven - SV Andreas Haugen AH Dato 28.04.2015 iii

Sammendrag TMS Denne rapporten har som formål å dokumentere entankprosjektet, som er en del av prosjektoppgaven i faget styresystemer og reguleringsteknikk. Prosjektet gjennomføres i 4. semester på studieretningen automasjon på HiST. Vi skal i løpet av dette prosjektet regulere to forskjellige varianter av væsketanker, først med en tank, og deretter med to tanker. Disse tankene skal reguleres ved hjelp av to PLS-er. Begge disse PLS-ene er styrt av en tredje PLS, som også er programmert i Gx Works2. Det skal i tillegg lages et brukergrensesnitt både på PC og på brukerpanel. Hensikten med entankprosjektet var å nivåregulere en væsketank ved hjelp av PLS. Hvordan dette er gjort er delt opp i flere elementer: - Oppretting av tilordningsliste for å gi en ryddig programmering. - Programmering av master- og slave-pls-er. - Konstruksjon av Anti-aliasingfilter for fjerning av støy. - Operatørbord InTouch. - Oppsett av touchbasert operatørpanel ix-panel TA100. - ix-panel på webserver. Vi har i tillegg oppdatert nettsiden som rapportene blir lagt ut på. I siste del av denne rapporten viser vi en foreløpig bruk av tid i forhold til planlagt. Entankprosjektet ble avsluttet med demonstrasjon. Nivåreguleringen i systemet ble funnet tilfredsstillende og brukergrensesnittet brukervennlig, gruppen kan nå fortsette med prosjektets neste del. iv

Innhold Forord TMS iii Sammendrag TMS iv 1 Innledning 1 1.1 Oppgavetekst TMS 1 1.2 Definisjoner TMS 2 1.3 Prosjektmål TMS 4 1.3.1 Prosessmål 4 1.3.2 Resultatmål 4 2 Teknisk del 5 2.1 Programstruktur PLS SBD 5 2.2 Slave 1 PLS program EWH 7 2.2.1 Sampling 8 2.2.2 Alarmtilstander 9 2.2.3 Styr utganger 12 2.3 Slave 2 PLS program SBD 13 2.3.1 Variabler 13 2.3.2 Adressering 13 2.3.3 Hent data fra master 13 2.3.4 Samplingssteg 14 2.3.5 Prosessverdi 14 2.3.6 Data til regulering 15 2.3.7 P-regulator 16 2.3.8 P-forover 18 2.3.9 PI-regulator 19 2.3.10 D-regulator 22 2.3.11 Anti-windup 23 2.3.12 Grensesjekk 24 2.3.13 Oppdater verdier 25 2.3.14 Manuelt pådrag 25 2.3.15 Pådrag 26 2.3.16 Alarmtilstand slave 2 26 2.3.17 Data til master 27 2.4 Master PLS program EWH 28 2.4.1 Initialisering 28 v

2.4.2 Hovedprogram 28 2.4.3 Rykkfrie overganger 30 2.4.4 Strømbrudd 31 2.5 Simuleringsnotat TMS 32 2.5.1 Reguleringsalternativer 32 2.5.2 Forsøk med verdier på tankriggen 34 2.6 Problemer med utstyret - KS 35 2.7 Filter EWH 37 2.7.1 Krav til filtrering 37 2.7.2 Dimensjonering av filtrene 37 2.7.3 Simulering i Matlab 39 2.7.4 Simulering i Multisim 40 2.7.5 Bestillingsskjema 42 2.7.6 Resultat 43 2.8 IX-panel TMS 45 2.8.1 Kravspesifikasjoner 45 2.8.2 Tags 46 2.8.3 Valg av kontroller 47 2.8.4 Utforming og design 48 2.8.5 Bruksanvisning 49 2.9 InTouch og OPC KS 50 2.9.1 Problemstilling og utfordringer 50 2.9.2 Resultat 51 2.9.3 InTouch - Quick start guide KS 55 2.10 Regulatoralgoritmer SV 60 2.10.1 Forkortelser 60 2.10.2 Diskretisering 60 2.10.3 Enkel Proporsjonal regulator 61 2.10.4 PI-regulator 61 2.10.5 Wind-up kontroll 62 2.10.6 Auto og manuell 62 2.10.7 Foroverkopling 63 2.10.8 Regulator og heltall 64 2.11 Webserver 65 3 Prosjektstyring 73 3.1 Tidsbruk TMS 73 vi

3.2 Prosjektstyring og kvalitetssikring SV 74 3.2.1 Statusrapportering 74 3.2.2 Standardiserte skjemaer 74 3.2.3 Versjonskontroll 74 3.2.4 Tester og sjekklister 74 4 Konklusjon SV 75 5 Litteratur TMS 76 6 Vedlegg 77 vii

1 Innledning 1.1 Oppgavetekst TMS I denne delen av prosjektet skal vi bruke nivåregulering for å få ønsket væskenivået i en tank. Dette skal gjøres via regulatorer som er bygd opp i en PLS. Du skal ha mulighet til å regulere nivået i tanken med P- eller PI-regulator. I tillegg til dette skal det være mulig å bruke foroverkopling fra forstyrrelsen i tank 2. Foroverkoplingen skal kunne brukes som P-, D- eller PD-regulator. Du skal bruke pådrag fra regulatoren til å styre ventilene på innløpet. Figur 1 Oversiktsbilde kobling mellom PLS-rig og tank-rig 1

1.2 Definisjoner TMS AD/DA-omformer: Analog-Digital Digital-Analog, Elektrisk krets som gjør om fra analog signal til binære verdier, og motsatt. HMI: Human Machine Interface. Grensesnittet som brukeren presenteres for når han/hun skal bruke en datamaskin for å utføre en oppgave. Brukergrensesnittet er bare en del av et dataprogram (InTouch). It's Learning: Nettportal tatt i bruk av HiST hvor man kan legge ut filer og faginformasjon. Matlab/Simulink: Program for programmering, brukt for modellering og simulering. GX Works2: Program for programmering av PLS. HiST: Høyskolen i Sør-Trøndelag. InTouch: Program for å konstruere brukergrensesnittet for operatør på PC. ix Panel TA100: Operatørpanel festet på PLS-rigg, med berøring og farge skjerm. PLS: Programmerbar Logisk Styring. En datamaskin med inn- og utganger som du kan koble deg på. Vi benytter to typer under prosjektet to FX1N og en Q00. Samplingstid: Tiden mellom hver gang AD-omformeren gir et signal binært signal, fra et analogt signal. Bit: Enhet for digital informasjon. Kan ha verdien 0 eller 1 (av/på), kan lagre en boolsk verdi. Kan behandles i grupper på 4 (kvartett K1), 8 (byte 1B), 16 (word/dataord) og 32 (double word). Boolsk variable: Variabel som kan ha to verdier 0 eller 1 (av/på). Bufferminne: Lagringssted for digital informasjon. I PLS-modulene er bufferminnet nummerert (D0), alle bufferminner inneholder 16 bit. I/O Input/Output: Innganger og utganger på datamaskiner. LD/ FBD Ladderdiagram/Funksjonsblokkdiagram: Grafiske programmeringsspråk for PLS. IL Instruksjonsliste: Tekst basert programmeringsspråk for PLS. Minne: Ligningssted for digital informasjon. For eksempel 1-bits minneceller (M0) og 16-bits dataregister (D0). POU: Program Organisation Unit, delprogram i GX Works2. Bygd opp av for eksempel Ladderdiagram. Tag: Digital merkelapp. Brukes for å linke dataregister, minneceller eller andre verdier for å gi bedre oversikt i programmeringen. 2

Anti-aliasingfilter: Elektronisk filter bygd opp av operasjonsforsterker, motstand og kondensator. Filteret er et lavpassfilter som vil ta bort høyfrekvent støy for å hindre nedfolding (uønskede lave frekvenser på målingene som skyldes sampling). Foroverkobling: En reguleringsmetode som legges til pådraget for raskere kompensering av forstyrrelser hvor du måler forstyrrelser (kan også kombineres med matematisk modell). Foroverkobling kombineres som regel med tilbakekoblingsregulator (PID). Eventuelle feil i foroverkoblingen vil da kompenseres av tilbakekoblingen. PI-regulator: Proporsjonal- og Integral-regulator. Elektronisk styreenhet som du programmerer med en matematisk algoritme med forskjellige operasjoner. For å regulere prosessen via pådraget. PD-regulator: Proporsjonal- og Derivat-regulator. Elektronisk styreenhet som du programmerer med en matematisk algoritme med forskjellige operasjoner. For å regulere prosessen via pådraget. 3

1.3 Prosjektmål TMS 1.3.1 Prosessmål Gruppemedlemmene skal: Få økt kunnskap og erfaring innenfor prosjektplanlegging og prosjektstyring. Få bedre erfaring med gruppearbeid, og sammen sørge for at prosjektgruppens resultatmål blir oppnådd. Kunne skrive gode rapporter og presentere innholdet. Kunne anvende teorien fra de forskjellige delen av faget Styresystemer på et praktisk problem. 1.3.2 Resultatmål Prosjektgruppen skal: Utarbeide og programmere nivåregulering for tank 2 på en tank-rigg ved hjelp av PLSer. Utarbeide og programmere et brukergrensesnitt ved hjelp av InTouch program og et operatørpanelet av typen ix Panel TA100. Her skal prosessen kunne overvåkes og styres etter gitte operatørspesifikasjoner. Levere fullstendig dokumentasjon av alt utført arbeidet. Levere alle rapporter innen leverings frist. Sørge for at alle deltakerne er kjent med de forskjellige delene av prosjektet Kunne redegjøre for framgang av prosjektet til veileder ved prosjektmøter. 4

2 Teknisk del 2.1 Programstruktur PLS SBD Programmene våre består av flere delprogram, POU-er, som alle gjør en enkelt oppgave. Alle oppgaver som skal gjøres i et program skal ha en egen POU, og det skal ikke skje flere urelaterte ting i en POU. Dette er for at programmene skal være strukturert og at det skal være lett å finne frem til og fikse eventuelle feil i programmet. En annen fordel med å benytte POU, er at programblokker da enkelt kan flyttes mellom andre programmer. Dette gjør at flere kan arbeide med samme program på forskjellige pc-er og enkelt overføre sine POU-er til et felles program. Man kan også flytte på en POU inne i et program, noe som gjør det lett å sette en rekkefølge programblokkene skal arbeide i. Struktur og POU oversikt i riktig rekkefølge for master: Figur 2 Informasjonsflyt og POU rekkefølge for master 5

Struktur og POU oversikt i riktig rekkefølge for slave 1: Figur 3 Informasjonsflyt og POU rekkefølge for slave 1 Struktur og POU oversikt i riktig rekkefølge for slave 2: Figur 4 Informasjonsflyt og POU rekkefølge for slave 2 6

2.2 Slave 1 PLS program EWH Angående kommunikasjonen med master PLS-en og AD/DA omformingen, er dette grundig beskrevet i miniprosjektrapporten. Derfor vil jeg ikke gå noe nærmere inn på dette her, men heller henvise tilbake til miniprosjektet, da det gjøres på nøyaktig samme måte i dette programmet. I figuren under ser vi den globale variabellista, og den viser hvilke navn som er brukt i PLSprogrammet, og til hvilke dataord og minneceller disse er tilknyttet. Figur 5 Global variabelliste 7

2.2.1 Sampling Når det gjelder samplingstid i programmet, så hentes den verdien fra InTouch-programmet på PC-en, via master-pls-en. Denne samplingstiden blir så tatt i bruk i en timer, som pulserer på en minnecelle vi har kalt Sample. Denne minnecellen vil på denne måten gå høy, og sample i takt med det som er skrevet inn av operatøren på PC-en. Vi har løst dette på samme måte i både slave 1 og slave 2. Dette ser slik ut i slave-programmet (se figur under). Figur 6 Viser hvordan samplingen blir gjort 8

2.2.2 Alarmtilstander Kravene i oppgaveteksten er at en alarmlampe skal blinke med en frekvens på 1 gang i sekundet når en avviksalarm er aktivert, dvs. når forskjellen mellom referansen og det målte nivået overstiger 25 % av tankens totale volum. Alarmen skal på samme måte blinke med en frekvens på 3 ganger i sekunder når en kritisk alarm er registrert. En kritisk alarm innebærer enten en alarm for kritisk høyt nivå (over 90 %) eller kritisk lavt nivå (under 10 %). Det skal også være en forsinkelse på alarmene, slik at en alarmtilstand kan være oppfylt i inntil 5 sekunder før alarmen skal gå. Dette er til for å gjøre anlegget mindre sårbart for falske alarmer, spesielt under en innreguleringsprosess. Dersom alarmen blir kvittert fra enten HMI-programmet på PC-en, eller på IX-panelet på riggen, skal lampen slukke. Hvis alarmen blir kvittert ut uten at alarmtilstanden er borte, skal alarmlampen lyse med fast lys. Dette lyset skal slukke når alarmtilstanden forsvinner. Når nivåmåleren på tanken måler noen gitte verdier blir tre forskjellige bitverdier satt høy i slave 2 PLS-en (se avsnitt om slave 2). Det innebefatter en bit for høyt nivå (nivå over 90 %), en bit for lavt nivå (under 10 %), og en bit for høyt avvik (avviket mellom referanse og målt nivå overstiger 25 % av tankens totale volum). Disse tre bit-verdiene blir sendt til slave 1 via master-pls-en, og er det som aktiverer alarmlampen. I programmet i slave 1 (se figur 7 under), ser vi at det også er minnecelle som heter feilkvittering. Denne minnecellen blir satt høy når alarmen blir kvittert. Dette er for å sikre at lampen fortsatt skal lyse når en alarmtilstand er kvittert, men fortsatt er aktiv. Vi ser også at denne feilkvitteringen har sin egen holdekobling. Her ser vi så at vi har tre minneceller i PLS-en som heter husk_høy_alarm, husk_lav_alarm, og husk_avviksalarm. Disse minnecellene blir satt ved alarmsignal fra riggen, og resatt av alarmkvittering. 9

Figur 7 Alarm tilstander 10

I figuren under ser vi at det er lagt inn to forskjellige timere, som skal sørge for at alarmlampa blinker med forskjellig frekvens ved de forskjellige alarmene. Dette er også beskrevet i kommentarene i PLSprogrammet. Figur 8 viser timer for alarmlampen Figur 9 viser når det skal være lys på alarmlampen 11

2.2.3 Styr utganger I denne programbiten skjer den faktiske endringen på PLS-ens utganger. Her blir signalene fra Intouch-programmet/IX-panelet, og fra utregningene i PLS-programmet omsatt i digitale verdier på utgangene. Her ser vi også at det er lagt inn en invertert kontakt på utgangen for pumpen, som gjør at den slår seg av om alarmen for høyt nivå i PLS-en blir aktivert. Figur 10 Viser hvordan utgangene i PLS-en styres og hva de styrer Nederst i programmet ser vi at vi også har en programbit for tilbakemelding fra utgangene. Dette fungerer slik at når en utgang er satt høy, blir det gitt signal tilbake til master-pls-en. Da det ikke er anledning til å skru på riggen, og det ikke finnes noen annen mulighet for tilbakemelding fra komponentene, er nok dette den eneste gode løsningen. Risikoen er selvsagt at vi ikke vet om for eksempel pumpa faktisk går, men kun at utgangen på PLS-en er aktivert. Dette må allikevel sies å være bedre enn ingen tilbakemelding overhodet. 12

2.3 Slave 2 PLS program SBD 2.3.1 Variabler For at programmeringen skal effektiviseres og være mer oversiktlig er det viktig at alle dataord og minneceller som skal brukes tilordnes en egen variabel, med et navn som er forklarende og intuitivt. Alle variablene deklareres i den globale variabellista. Her kan vi tilordne et godt variabelnavn som er lett å huske å bruke senere i programmet, til alle brukte dataord og minneceller. Figur 11 Global variabel liste fra GX Works 2 2.3.2 Adressering Slaven må også få en adresse på profibus-nettverket for å kunne kommunisere med master. Denne adresseringen gjøres på samme måte som i miniprosjektet. Dette er slave 2, og den skal ha adresse 2 på nettverket. Viser til figur 32 i miniprosjektrapporten. 2.3.3 Hent data fra master For at en operatør skal kunne styre parameterne i slaven, må den kommunisere med master. Her hentes verdier for minneceller, Kp, Ti, Referanse, Nominelt pådrag, filtertid, manuelt pådrag samplingstid, flow, Kp for foroverkobligen og Td for foroverkoblingen. Dette gjøres via profibusmodulen hvor hvert 16-bits dataord hentes fra et gitt bufferminne på profibus, på samme måte som i miniprosjekt figur 34. 13

2.3.4 Samplingssteg Ettersom vi har en digital regulator skal data kun samles inn med en viss samplingstid. Denne samplingstiden blir satt av en operatør, og ei minnecelle skal gå høy en gang hver samplingstid, positiv puls. Dette kan løses ved å bruke en timer som skal telle opp og gå høy etter samplingstiden har gått, og deretter koble ut seg selv i neste scan. Denne timeren skal også sette en variabel for å sample. Figur 12 Viser sampling i slave 1 2.3.5 Prosessverdi Prosessverdien, nivået i tanken, måles via en nivåmåler som sender ut et signal mellom 4-20mA og som er koblet til analog inngang 0. Her omformes dette analoge signalet til et 8-bits digitalt signal 0-255 som legges i den globale variabelen «Prosessverdi». Det er dette signalet i bruker videre til all utregning or pådrag fra regulatoren. Vi skal samle inn data en gang hver samplingstid. Figur 13 Viser prosessverdi for regulatoren 14

2.3.6 Data til regulering Før regulatoren kan kjøres må det gjøres noen beregninger på de verdiene som skal reguleres. I dette systemet har vi to prosesser som regulatoren skal ta hensyn til. Den første prosessen er nivået i tanken (prosessverdi) som skal reguleres med P- eller PI-regulator. Det skal her reguleres med hensyn på avviket (e) fra referansen. Operatøren skal ha valget mellom å kjøre regulatoren i direkte eller reversert modus. Direkte modus gir: e = prosessverdi referanse og reversert modus gir: e = referanse prosessverdi. Figur 14 Viser hvordan avviket mellom prosessverdi og referanse gjøres Den andre prosessen vi skal regulere med hensyn på er utløpet fra tanken (flow), og denne skal reguleres med P-, D- eller PD-regulator i foroverkoblingen fra utløpet. Det skal her reguleres med hensyn på forstyrrelsen, som er endringen i flowen. Forstyrrelsen blir da forskjellen på den aktuelle flowen og forrige flow, Forstyrrelse = aktuell flow forrige flow. Figur 15 Viser endring i utstrømming 15

2.3.7 P-regulator En P-regulator fungerer ved å multiplisere forsterkningen med avviket, og deretter addere inn et nominelt pådrag. Denne typen regulator har den enkleste algoritmen av regulatorene vi bruker i dette prosjektet. Viser til kapittel 2.10.3 for algoritme for P-regulator. Denne realiserer vi ved å lage en funksjonsblokk for P-regulator. I denne funksjonsblokken benyttes lokale variabler hvor verdien er avhengig av inputen. For å ikke få problemer dersom utregningene skulle resultere i for store tall underveis i koden, gjøres alt om til 32-bits ord inne i koden. Figur 16 P-regulator Denne programblokken kan nå implementeres i resten av programmet der det er ønskelig. Man må da kalle på denne funksjonsblokken som en lokal variabel der den skal implementeres, og deretter sette input-verdier den skal benytte, og bestemme hvor output verdiene skal skrives til. Figur 17 P-regulator funksjonsblokk 16

Det er forskjellige kriterier for hvordan dette nominelle pådraget skal stilles inn. Dersom regulatoren går fra PI til P, skal d nominelle pådraget bli satt lik forrige pådrag fra PI-regulatoren. Dersom Regulatoren går fra manuell til P, skal det nominelle pådraget bli satt til et manuelle pådraget. Det nominelle pådraget skal kobles ut dersom P-delen i foroverkoblingen er aktiv. Dette er for at programmet skal fungere rykkfritt i overgangen mellom de forskjellige modusene. Alt dette gjøres i en egen programbit i PLS-en. Figur 18 Rykkfri overgang i P-regulator 17

2.3.8 P-forover Programblokken for P-forover er nesten identisk med programblokken for P-regulator, men den mangler nominelt pådrag, og den skal regulere med hensyn på forstyrrelsen istedenfor avviket. Vi kunne derfor ha brukt den samme programblokken i foroverkoblingen med andre input variabler, men ettersom variabelnavn og lignende da kunne vær misvisende, bestemte vi oss for å lage en egen programblokk for denne. Figur 19 P-foroverregulator Denne blir kalt på som en lokal variabel der den skal brukes på samme måte som P-regulator, og settes deretter inn med de input- og output-parameterne vi ønsker. Figur 20 P-foroverregulator funksjonsblokk 18

2.3.9 PI-regulator PI-regulatoren har en litt mer kompleks oppbygning enn P-regulatoren. Viser her til kapittel 2.10.4 for algoritmen til en PI-regulator. Denne blir også realisert ved å lage ei funksjonsblokk, men denne trenger en del flere input-variabler og inneholder flere regneoperasjoner. Input variablene skrives også her til 32-bits dataord på samme måte som i P-regulator. Resultatet av en divisjon eller multiplikasjon av to 32-bits dataord, skrives til et 64-bits dataord. Ettersom PLSen ikke inneholder noen kommando or 64-bits dataord, må dette legges til ei liste (array) av 32-bits dataord med to indekser. Indeks 0 (array[0]) inneholder da det aktuelle tallet, mens array[1] inneholder fortegnet. Dersom tallet skal benyttes videre må det derfor spesifiseres at indeks 0 skal benyttes. Figur 21 Hvordan sette Kp og Ti med mulighet for desimaltall 19

En del av algoritmen skal kun utføres en gang. Vi legger derfor med et hopp (conditional jump) i koden som er avhengig av verdien fra en teller. Denne telleren telles opp så lenge programmet kjøres, og skal gå høy når den har telt opp til 1. Figur 22 Hopp for å hindre at uønskede deler av programmet kjøres Resten av koden for PI-regulatoren er stort sett å følge regulatoralgoritmene for PI-regulator. Til slutt utføres en grensesjekk på det 32-bits dataordet for pådrag, før et skrives ut til det 16-bits dataordet for pådrag. Dette er output variabelen fra denne funksjonsblokken. Figur 23 Viser utganger for PI-regulator sin funksjonsblokk 20

Denne funksjonsblokken deklareres i programmet på samme måte som for P-regulator, og parameterne settes. Det legges også med en kode som skal sette forrige pådrag lik det aktuelle pådraget for P-regulator dersom det endres fra P til PI. Dette er for å sikre en rykkfri overgang P- og PI-regulator. Figur 24 Kode for rykkfri overgang fra P til PI og Inn/utganger PI-funksjonsblokk 21

2.3.10 D-regulator D-regulatoren bygd opp på samme måte som PI-regulatoren med 32-bits dataord istedenfor 16-bits, og at multiplikasjon og divisjon av 32-bits dataord skrives til en array. Alle utregningene benytter de samme metodene som de andre regulatorene, men med en annen algoritme. Les kapittel 2.10.7 for algoritmen for en D-regulator i foroverkobling. Det som er nytt i denne regulatoren er at grensene for pådraget ut settes mellom -255 og 255. Dette er fordi derivatoren skal holdes utenfor antiwindup kontrollen i regulatoren, som er en kontroll av grensene til pådraget. Grunnen til at D-regulatoren skal holdes utenfor dette er at den skal ha muligheten til å se endringer i forstyrrelsen, og derfor motvirke pådraget fra P- eller PI-regulatoren med eller uten P-del i foroverkoblingen. Figur 25 setter grenser for D-delen i regulatoren Denne funksjonsblokken implementeres i programmet på samme måte som alle de andre regulatorene, men det setter her en sjekk på om P-delen i foroverkoblingen er aktiv. Dersom denne ikke er aktiv, skal Kp i algoritmen for D-regulator settes lik 1. I vårt program er alt multiplisert med 10 for å få med en ekstra desimal, og det divideres på 10 inne i funksjonsblokken etter utregningen. Kp fra foroverkoblingen settes derfor til 10 dersom P-delen er koblet ut. Figur 26 Funksjonsblokk for D-regulator 22

2.3.11 Anti-windup Anti-windup fungerer som en grensesjekk på pådraget, og skal utføres dersom D-delen i foroverkoblingen er aktiv. Dette er for at D-delen skal kunne motvirke endringer i forstyrrelsen som ikke er merkbart på tanknivået. D-delen kan fort bli ubetydelig dersom anti-windupen ikke er tilstede. Figur 27 Oppbygning av regulator Et eksempel på denne anti-windupen er dersom vi har valgt PI-regulator med PD i foroverkoblingen. Pådraget fra PI-regulatoren og P fra foroverkoblingen skal da adderes og grensesjekkes før D-delen adderes inn. Dette gjøres med et par enkle regneoperasjoner dersom enkelte boolske krav er oppfylt. Figur 28 Eksempel på anti-windup 23

2.3.12 Grensesjekk Grensene for pådraget må sjekkes før et sendes til DA-omormeren. Dette gjøres på samme måte som i anti-windupen, bortsett fra at dette skal gjøres for det totale pådraget, uansett hvilken regulatortype som er valgt. Figur 29 Grensesjekk 24

2.3.13 Oppdater verdier Ettersom regulatorprogrammet også benytter de forrige verdiene for enkelte tilfeller, må disse oppdateres når neste data skal hentes fra omformeren. Dette gjøres enkelt med noen MOV-blokker. Disse flytter verdier fra et dataord til et annet når samplingsvariabelen er aktiv. Figur 30 Hvordan nåverdi og siste verdi lagres og oppdateres 2.3.14 Manuelt pådrag Regulatoren skal også kunne kjøres i manuell modus, hvor brukeren selv skal kunne sette pådraget. Dette manuelle pådraget hentes fra master og legges i variabelen Um så lenge manuell modus er aktiv, og skrives til det aktuelle pådraget u[1]. For å sikre en rykkfri overgang mellom automatisk og manuell modus, må det manuelle pådraget oppdateres så lenge programmet kjøres i automatisk modus. For å sikre en rykkfri overgang tilbake til automatisk modus, må avviket settes lik 0 så lenge manuell modus er valgt. Dette gjøres ved at referansen settes lik den aktuelle prosessverdien. Figur 31 Viser hvordan mulighet for manuelt pådrag er programmert. 25

2.3.15 Pådrag Pådraget skal sendes til omformeren, og det digitale signalet som ligger mellom 0-255 skal sendes ut som et strømsignal med 4-20mA. Dette gjøres på nesten samme måte som i miniprosjektet, men forskjellen er at dataordet u[1] hvor det aktuelle pådraget ligger skal sendes til omformeren. Figur 32 Sending av pådrag til omformeren 2.3.16 Alarmtilstand slave 2 Slave 1 skal gi alarm ved enkelte tilfeller, se kapittel 2.2.2, som skal hentes fra slave 2 dersom alarmtilstanden varer i mer enn 5 sekunder. Det sjekkes for kritisk alarm ved at prosessverdien sammenlignes med det kritisk lave og det kritisk høye nivået vi har definert på forhånd. Dersom prosessverdien er innenfor et av de definerte kritiske tilfellene i mer enn 5 sekunder, skal en variabel for høy eller lav alarm gå høy. Samtidig sjekkes det om avviket er innenfor det intervallet vi har satt som akseptabelt avvik. Dersom avviket er utenfor dette intervallet i mer enn 5 sekunder vil alarmen for høyt avvik gå. Disse alarmtilstandene settes til minnecellene M60 til M62, og skal sendes tilbake til master. Figur 33 Alarmtilstander 26

2.3.17 Data til master Det siste som skal gjøres i programmet er å sende data tilbake til master. Det som er aktuelt å sende er pådrag, nivåmåling, avvik, alarmtilstander og eventuelle endringer som har blitt gjort i slave 2 på referanse, nominelt pådrag og manuelt pådrag. Figur 34 Dataoverføring mellom slave 2 og master 27

2.4 Master PLS program EWH 2.4.1 Initialisering Når det gjelder initaliseringsdelen i masterprogrammet, vil jeg henvise tilbake til miniprosjektrapporten (Kapittel 2.5.1). Der er initialiseringsprosessen tydelig forklart med både bilde og tekst. Initialiseringen er nøyaktig lik i dette programmet. 2.4.2 Hovedprogram I master-pls-en er det skrevet et hovedprogram som har som hovedoppgave å videreformidle data mellom slave 1, slave 2, og til operatøren gjennom InTouch/ ix-panel. Dette gjøres ved hjelp av flowmålingen hentes fra slave 1, og legges i D121 i master-pls-en. Den blir så sendt til slave 2 via dataordet D209. Videre ser vi at bit-verdiene for alarmtilstandene blir sendt fra slave 2 til slave 1 via minnecellene. Alt dette ser vi i figuren under. Figur 35 Videre formidling mellom slave 2 og slave 1 28

Ettersom tilstander på en del minneceller skal sendes mellom master og slavene, skrives disse minnecellene over til dataord. 16 minneceller kan da legges til et 16-bits dataord, og disse dataordene sendes til slavene via profibus. Tilsvarende skal minneceller hentes tilbake fra dataordene som slavene skriver til. Figur 36 omgjøring av verdier for sending mellom slave 1 master slave 2 29

2.4.3 Rykkfrie overganger I denne delen av programmet sikrer vi at verdier som endres i slave 2 skal oppdateres i master ved riktig tidspunkt. Eksempelvis skal referanseverdien oppdateres dersom manuell modus er aktiv, og manuelt pådrag skal oppdateres dersom regulatoren er satt i automatisk modus. Dette er for å sikre en rykkfri overgang mellom manuell og automatisk modus. Det nominelle pådraget skal oppdateres dersom regulatoren er satt i PI eller manuell modus, eller dersom P-delen i foroverkoblingen er aktiv. Figur 37 rykkfrieoverganger masterdel 30

2.4.4 Strømbrudd For å sikre at regulatoren skal fortsette å regulere etter et eventuelt strømbrudd, må alle parameterne lagres understrømbruddet. I Q-PLSen er batterimatede minneceller av typen L, og batterimatede dataord er av typen R. De vanlige minnecellene og dataordene er M og D. De batterimatede minnecellene og dataordene husker verdiene sine under strømstans. Vi har derfor valgt å skrive alle våre verdier over til batterimatede dataord og minneceller så lenge programmet kjører, bortsett fra i første scan. I første scan henter vi disse verdiene tilbake. Vi bruker her verdien BMOV, som flytter det spesifiserte antallet dataord fra det angitte dataordet. For eksempel vil BMOV D100 16 R100, flytte dataordene D100, D101,, D115 over til R100, R101,, R115. Speisalminnecellen SM402 er aktiv i kun første scan. Figur 38 sikkerhet ved strømbrudd 31

2.5 Simuleringsnotat TMS Som en del av entankprosjektet ble det laget et simuleringsnotat. I notatet er det forsøkt å lage matematiske modeller av prosessen, simulere og finne regulator innstillinger. Simuleringsnotatet kan finnes i sin helhet i vedleggs biten av rapporten. Regulatorinnstillingene ble funnet med utgangspunkt i kravene til innsvingningsforløpet: Ved stabilt nivå og referanse stilt til 60 % (uten stasjonært avvik) skal prosessen ved et sprang i utløpet fra 100 % til 33 % åpent (fra tre til en åpen magnetventil) ha et innsvingningsforløp som tilsvarer minimum areal. Raskest mulig innsvingningstid til nivået holder seg innenfor ± 2 % av måleområdet. Det dynamiske avviket skal være minst mulig. 2.5.1 Reguleringsalternativer Med utgangspunkt i kravene til innstillingsforløp kom vi fram til disse forslagene til innsvingingsforløp. I alle figurene har vi brukt K p = 7.9 og T i = 4,67. I foroverkoblingene er det brukt P-forsterking = 1, og Derivatortid = 1. 34 33.9 PI-regulator uten foroverkopling. Sprang i utløpet 1-3 ventiler ved t=80sek Prosessverdi Referanse 33.8 33.7 Høyde i tanken [cm] 33.6 33.5 33.4 33.3 33.2 33.1 33 80 85 90 95 100 105 110 115 120 Tid [sek] Figur 39 Sprang i utløpet PI-reg 32

34 33.9 PI-regulator med P-foroverkopling. Sprang i utløpet 1-3 ventiler ved t=80sek Prosessverdi Referanse 33.8 33.7 Høyde i tanken [cm] 33.6 33.5 33.4 33.3 33.2 33.1 33 80 85 90 95 100 105 110 115 120 Tid [sek] Figur 40 Sprang i utløpet med PI-reg med P-forover 34 33.9 PI-regulator med D-foroverkopling. Sprang i utløpet 1-3 ventiler ved t=80sek Prosessverdi Referanse 33.8 33.7 Høyde i tanken [cm] 33.6 33.5 33.4 33.3 33.2 33.1 33 80 85 90 95 100 105 110 115 120 Tid [sek] Figur 41 Sprang i utløpet med PI-reg med D-forover 34 33.9 PI-regulator med PD-foroverkopling. Sprang i utløpet 1-3 ventiler ved t=80sek Prosessverdi Referanse 33.8 33.7 Høyde i tanken [cm] 33.6 33.5 33.4 33.3 33.2 33.1 33 33 80 85 90 95 100 105 110 115 120 Tid [sek] Figur 42 Sprang i utløpet med PI-reg med PD-forover

2.5.2 Forsøk med verdier på tankriggen Ved forsøk på den reelle tanken fikk vi følgende forløp med PI regulator og PD foroverkobling. K p = 7.9, T i = 4.67, K pff = 0.4, T dff = 1.3 Figur 43 Test av regulatorinnstillinger på den reelle tanken, visers i InTouch 40 35 30 25 20 15 10 5 0 0 50 100 150 Figur 44 Test av regulatorinnstillinger på simulinkmodellen, Sprang i forstyrrelsen i rød ring Som vi ser av de to figurene stemte verdiene veldig bra med den reelle tanken. Vi syntes innsvingningen ble meget tilfredsstillende. Den forskjellen vi fikk på innsvingingene er at tanken gir noe mindre svingninger enn den matematiske modellen. Ved sprang i utløpet ble det nesten ikke svingninger i det hele tatt. Noe som kommer av at ventilen i prosessen er meget rask. 34

2.6 Problemer med utstyret - KS Allerede før tanken ble tilkoblet ble det fort åpenbart at vår rigg ikke var helt som de andre. Det første vi måtte ta stilling til var at gjennomstrømningsmåleren som skulle brukes i forbindelse med foroverkoblinga måler utløpet i tank 2. Dette er lite hensiktsmessig siden denne tanken er utstyrt med en lynrask pneumatisk ventil og vil dra mye mindre nytte av foroverkobling enn den andre tanken som har en treg motordrevet ventil. Etter rådføring med veileder ble det likevel besluttet at vi skulle bruke utstyret som det var, og ikke bry oss så mye om dette. Etter at tilkoblingen var gjort fortsatte problemene. Vi oppdaget alarmlampa og vannpumpa alltid var aktivert, og at kabelen som går mellom riggene ble god og varm. Vi feilsøkte litt på egen hånd og fant en potensialforskjell på 24v mellom ramma på riggen og 0v på strømforsyninga. På dette tidspunktet fant vi ut at vi skulle rekvirere noen av de som var ansvarlige for utstyret til å se på saken. Lab. ass. Daniel i samråd med veileder Sigurd monterte et eksternt relé på utgangen på slave1-plsen med et par ledninger direkte opp til lampa, og et par andre ledninger direkte til releet som står mellom frekvensomformeren og vannpumpa. Se vedlegg 7 for en grov skisse av koblingene som ble gjort. Nå kunne vi endelig begynne å jobbe med oppgaven. Det ble under videre arbeid observert at magnetventilene på utgangene ikke er tett. Ved full tank ble det så mye som 3 l/min i utløpet med lukkede ventiler. 35

Det viste seg også at når tanknivået kjøres så lavt (eller høyt) at alarmlampa utløses, og tilbake igjen mens lampa fortsatt blinker, blir reguleringen helt utilregnelig. Se figur 41. Figur 45 Viser støy på nivåmåler og pådraget Med en god blanding av kvalifisert gjetting og flaks ble det foreslått å undersøke reléet som nettopp hadde blitt montert i forbindelse med denne lampa. Her viser det seg at det mangler en diode for å dempe spenningstransienten som oppstår når en induktans, i dette tilfellet reléspolen, mister spenning. Se figur 42 for forklaring av prinsipp. Figur 46 Diode egenskap Med dette på plass fungerer riggen endelig tilfredsstillende! Figur 47 - Sprang med diode 36

2.7 Filter EWH 2.7.1 Krav til filtrering Det skal i prosjektet benyttes to antialiasingfiltre. Disse skal brukes på strømsløyfen for målt nivå, og på strømsløyfen for målt utløp. Hele hensikten med disse filtrene er at de skal fjerne uønsket støy i målesløyfene, slik at vi får bedre og penere måle-verdier. Det stilles krav i oppgaveteksten om at det ene filteret skal være av andre orden, og det andre av valgfri orden. Vi har valgt å lage begge filtrene identisk, og av andre orden. Dette ivaretar kravene i oppgaveteksten, samtidig som det gir oss kun en utregning av knekkfrekvens, og dimensjonering av komponenter. Filtrene skal lages med brikka LM358, som inneholder to operasjonsforsterkere. Disse må bestilles av veileder/labingeniør, sammen med resten av komponentene vi trenger. Verdien på disse komponentene må først regnes ut, før vi kan sende inn bestillingsskjemaet. I tillegg må det bestilles koblingskort, ledninger og bananplugger, samt to stk. 250Ω motstander, som skal brukes for å kunne regulere om strømmen i målesløyfa(4-20ma) til en spenning mellom 1-5 V. Grunnen til dette er at vi skal ha et spenningsbasert filter, som trenger en spenning i dette området for å fungere. 2.7.2 Dimensjonering av filtrene Når vi ikke kjenner støyen, må vi sørge for tilstrekkelig demping ved halve samplingsfrekvensen. Ideelt sett burde all tenkelig støy dempes til 1 LSB(Least significant bit) ved halve 2 samplingsfrekvensen, men det krever enten en alt for lav knekkfrekvens, eller en urealistisk høy filterorden. Her må det gjøres et kompromiss, slik at dempingen ved halve samplingsfrekvensen ikke blir så bra som vi kunne ønsket. I utregningen på neste side har vi brukt en praktisk dempning ved halve samplingsfrekvensen på 20 db, lest ut i fra tabellen på side 43 i boka Sanntidsdatateknikk av Per Hveem. Samplingsfrekvens = ω s = 2π ( 1 h ) h = Samplingstid = 0.1 ω 0 = ω k = knekkfrekvensen 37

ω s 2 = 2π 2h = π rad = 31.4 h s ω 0 = ( u 1 h støy etter filter ω s ) u støy 2 ( u støy etter filter u støy ) = ønsket demping = 20dB = 0.1 ω 0 = (0.1) 1 2 31.4 rad s rad = 0.316 31.4 s = 9.92 rad s Går ut fra at begge kondensatorene er 1µF for enkelhets skyld: α = ω 0 cos 45 = 9.92 rad s rad cos 45 = 7.01 s R 1 = 1 1 = 2αC 1 2 7.01 (1 10 6 = 71.3 kω ) R 2 = 2α 1 2 = C 2 9.92 2 (1 10 6 = 142 kω ) ω 0 Det mest nærliggende her blir motstandsverdier på 68KΩ og 150KΩ, når kondensatorverdien er 1µF. Det er disse verdiene vi må føre opp på bestillingsskjemaet. Overføringsfunksjonen for filteret blir følgende: 2 ω 0 S 2 2 + 2 α S + ω = 1 1 0 S 2 2 ω + 2αS = 0 ω + 1 S 2 = 2 7.01 S 0 2 9.922 + 9.92 2 + 1 1 0.01 S 2 + 0.142 S + 1 38

2.7.3 Simulering i Matlab Figur 48 Viser overføringsfunskjonen og komandoen for å tegne bodediagrammet Her får vi skrevet ut et bode-diagram av overføringsfunksjonen. Figur 49 Viser bodediagrammet til overføringsfunksjonen Her ser vi at vi har fått en forventet karakteristikk for både magnitude og forsterkning for et andreordens lavpassfilter. 39

2.7.4 Simulering i Multisim Her har vi koblingsskjemaet i til filtrene i multisim. Figur 50 Koblingsskjema for filter Her er et bilde av passområdet til filteret. Figur 51 bodediagram for filteret 40

Figur 52 Viser hvordan filteret er testet Her vises innsignalet med blå kurve og utsignalet med rød kurve. Frekvensen på innsignalet er 20 Hz, og vi ser at ingenting av dette støyet slipper igjennom på utsignalet. Vi har også lagd en DC-spenningsendring på innsignalet fra 1V til 5V og tilbake til 1V. Dette vises tydelig på grafen under. Figur 53 Testresultat for filteret fra multisim 41

2.7.5 Bestillingsskjema - 2 stk. operasjonsforsterkerbrikker, type LM358-2 stk. motstander med motstandsverdi på 68 KΩ - 2 stk. motstander med motstandsverdi på 150 KΩ - 4 stk. kondensatorer med kapasitansverdi på 1µF - 2 stk. 250Ω motstander - 2 stk. kretskort med langsgående ledebaner - 2 stk. sokler til operasjonsforsterkerbrikkene - 8 stk. bananplugger - 1,5 meter ledning Figur 54 koblingsskjema filter 42

2.7.6 Resultat Når vi koblet på det første filteret på nivåmålesløyfen, fikk vi umiddelbart en stor og merkbar forbedring på måleverdiene. Dette ser vi i grafen på figuren under. Figur 55 Viser hvordan filteret forbedrer måleresultatet Her ser vi nivåmålingen med rød farge, og flow målingen med blå farge. Referansen vises i grønt. Den røde grafen før «spikeren», viser nivåmålingen uten filter. Etter at filteret ble koblet inn ser vi et lite innsvingningsforløp, før det blir en tydelig forbedring i den tilsynelatende stabiliteten i målingen. Her fungerer filteret perfekt! 43

Figur 56 Ferdig filter Når det gjelder tilkoblingen av filteret på målesløyfen på utløpet, fungerte ikke koblingene på riggen. Grunnen til at vi har truffet denne konklusjonen, er at når vi kobler til filteret, får vi ingen signal fra flow måleren, noe som indikerer brudd i sløyfa. Denne problematikken knytter seg til strømforsyningen på PLS-riggen, og forårsaker at filteret ikke fungerer som det skal. Samtidig skal det sies at det er svært lite støy på denne målingen, og at vi derfor neppe ville merket noen forbedring ved tilkobling av filteret uansett. 44

2.8 IX-panel TMS 2.8.1 Kravspesifikasjoner Oppgaven ga noen spesifikke krav til hva som måtte være med på panelet. Kravene er vist i tabell 1. Variable Skrives Leses Referanse til tank X X Manuelt pådrag til tank X X Omstilling fra manuelt pådrag til automatisk X X nivåregulering for tank Pådrag for tank X Nivå tank X Melding om alarmer fra tank X Kvittering av alarmer fra tank X Start/stopp pumpe X Tabell 1 - Tabell som viser ønskede skrive- og leserrettigheter for operatørpanelet X Vi har valgt å legge til noe ekstra informasjon, i tabell 2 kan du se hva vi har lagt til ekstra. Variable Skrives Leses Flow-måler X Utventiler X X Tabell 2 - Tilleggs info for IX-panelet Det er også slik at det skal være mulig å styre panelet fra webserveren. 45

2.8.2 Tags De verdiene vi ønsker å sette og lese hos PLS-ene må legges inn som tags i ix Developer. Dette gir tag listen vist i figur 53. Vi skriver direkte adressen på det minnet vi ønsker å lese/skrive til PLS-en. Hvilke minner vi kan benytte ser vi i tilordningslisen som er vist på figur 17. Det var også nødvendig å skalere verdiene for å få rett enhet. Vi har for eksempel ganget referansen med 0.39 for å gjøre om fra bit til prosent. Bit-verdien 255 gir referanse på 100. Figur 57 Tagliste I tag listen ser man også adressen og datatypen som er brukt i Master PLS-en (Melsec Q00). Dette ser du under «Contollers». Under «Tag» feltet ser man navnet på taggen internt i programmet og datatypen det skal behandles som. Når vi nå har satt opp de objektene vi ønsker å benytte på panelet må vi knytte de opp mot tiltenkte funksjoner. Vi gjør dette ved å velge hvilken tag objektet skal knyttes til og funksjonen til tagen. 46

2.8.3 Valg av kontroller Panelet vi bruker kan kommunisere med flere kontrollere samtidig, men vi kommunisere kun med Master-PLS over Ethernet. Innstilligene for kontrolleren skal være satt til «MC Protocol», vi må også fortelle panelet hvor den finner PLS-en. Du må sette IP adressen og porten som PLS-en bruker. Se figur 18. Figur 58 Viser kontroller med IP-adresse og port. 47

2.8.4 Utforming og design Når vi har laget utformingen av panelet er det lagt vekt på en oversiktlig utforming, hvor alle symboler skal være store. Det er kun prioritert å legge ved informasjon om flow-målingen og mulighet for å endre status på utventilene i tillegg til det som er spesifisert i oppgaveteksten. Figur 59 IX panel For å vise om pumpe, ventiler og regulatorventil er i arbeid endrer de farge. Under arbeid er de grønn og ute av arbeid grå. Det er også gjort slik at referanse, tanknivå og pådrag blir gitt i prosent. Valget mellom manuell og auto på pådraget er gjort slik at den som er i bruk blir mørk. Samt at teksten i pådragsboksen endrer seg mellom «Man. Pådrag» og «Pådrag». Vi har sørget for å være konsekvent med fargebruk og symbolbruk, derfor har vi blant annet brukt like symboler i både InTouch og på IX panelet. Vi har benyttet rødt som farge for feil, grønn for under kjøring og grått for ikke i bruk. 48

2.8.5 Bruksanvisning 3. 6. 8 1. 12. 7. 9 9 10. 11. 5. 2. 4. 13. 14 Figur 60 Bruksanvisning IX panel. 1. Viser visuelt nivået i tanken. 2. Viser om pumpen er på eller av, trekanten blir grønn ved drift og grå ellers. 3. Viser om du har pådrag fra regulatorventilen. Grønn i drift og grå ellers. 4. Viser om ventilen er på eller av. Grønn i drift og grå ellers. 5. Viser hvor stor væskestrøm du har ut av tanken, gitt i l/min. 6. Viser om du har alarm, rød ved alarm og grå når det ikke er alarmtilstand. 7. Lyser rødt om alarmen er kvitert og det fortsatt er alarmtilstand. 8. Innmatingsfelt for referansen i tanken, du kan sette inn en verdi mellom 0 og 100. 9. Viser nivået i tanken. 10. Man. pådrag/pådrag, ved innstilling manuell viser knappen Man. pådrag da har du mulighet til å justere pådraget mellom 0 og 100. Når du er stilt inn på auto viser dette hvor stort pådrag reguleringsventilen gir. 11. Du kan her velge om du ønsker automatisk eller manuelt pådrag. Den varianten du velger blir mørk. 12. Kvitterer ut alarm, vil fjerne alarm blinking så lenge du er ute av alarmtilstand, ved kvittering i fortsatt alarmtilstand vil det fortsatt lyse. 13. Åpner utgangsventiler, du har tre slike knapper som er henvist til hvilken ventil som åpnes. 14. Kan starte å stoppe pumpen til tanken. 49

2.9 InTouch og OPC KS 2.9.1 Problemstilling og utfordringer Oppgaven lyder på at det skal lages ett eller flere skjermbilder som skal styre og overvåke prosessen. Styresystemet skal ha skjermbilder for å vise/skrive følgende: prosessbilde der det blant annet skal fremkomme informasjon om pumpens tilstand, nivå i tankene, pådrag og alarmtilstander lesing/logging av alarmer kvittering av alarmer mot PLS sanntidstrender i prosessen over den siste tiden historiske trender et vindu der operatøren må logge seg inn med eget passord Ut over dette gir oppgaveteksten mer eller mindre frie tøyler når det gjelder utforming av grensesnittet. Erfaringer fra miniprosjektet tyder på at det ikke går an å sende desimaltall mellom PC og PLS, her må det gjøres noe smart. En annen erfaring fra miniprosjektet var at InTouch rett og slett er så stort og avansert at muligheten for å rote seg bort i alle mulighetene er absolutt tilstede. Det var i tillegg spesifisert ett sett med rettigheter som skulle implementeres i programmet, se figur. Figur 61 Krav til InTouch brukergrensesnitt 50

2.9.2 Resultat Det skulle altså være mulig å kontrollere anlegget med en Windows-pc, og brukergrensesnittet som vises på skjermen ble laget i et program som heter Wonderware InTouch. Med over 25 år i bransjen er dette et solid produkt som av mange regnes for å være «Rolls Royce» av denne typen designverktøy. Kommunikasjon mellom PLS og PC skjer via en teknologi som heter OPC (Object Linking and Embedding for Process Control). Dette er en åpen standard, som er svært fleksibel og utbredt i industrien, på tvers av produsenter og produkter. Se figur 58 for en illustrasjon av generell OPC struktur, og figur 59 for en litt mer detaljert fremstilling av dataflyt i vårt anlegg. Figur 62 (opcdatahub.com) Figur 63 Tenkt informasjonsflyt for OPS server Beijer OPC server kommuniserer altså med InTouch via OPC Link, som alle tre er programmer som er installert på samme pc. Kommunikasjon med master PLS skjer over Ethernet via en innebygd klient i selve OPC server. Flere detaljer rundt dette kan leses i miniprosjektrapporten. 51

Det første som ble gjort var å lage et excel-ark med et system på dataord og minneceller, så alle kunne jobbe samtidlig med minst mulig misforståelser. Se vedlegg 8. For enkelhets skyld heter dataord og minneceller det samme i OPC server, som i PLS. Figur 64 Tags i OPC server Grensesnittet mellom menneske og maskin ble laget etter «det enkle er ofte det beste»-prinsippet, med kun ett skjermbilde som viser og betjener alle nødvendige parametere uten forstyrrende og unødvendige ekstrafunksjoner. For enkelte verdier finnes det ekstravindu som kan vise flere detaljer. For å gjøre det enda mer lettfattet vil knapper til funksjoner som ikke er i bruk forsvinne, som f.eks. inntasting av referanse når du har satt regulatoren i manuell modus. Figur 65 InTouch brukergrensesnitt 52

De tre brukerprofilene Operatør1, Operatør2 og Operatør3 har henholdsvis en «access level» (brukernivå) på 1000, 2000 og 3000. Disse verdiene brukes til å bestemme hvilke funksjoner som er synlige og tilgjengelige. Hvis du prøver å betjene en verdi du ikke har rettigheter til vil en feilmelding dukke opp på skjermen. Problemet med skriving av desimaltall løses ved at verdien som operatøren skriver inn blir ganget med 10 før den sendes til pls, der den deles på 10 igjen for å få tilbake det opprinnelige tallet. I intouch ser dette slik ut: Figur 66 Begrensing av Kp På samme måte regnes verdier som fra A/D kommer som 0-255 om til prosent slik: Figur 67 Begrensing av referanse 53

En av de få funksjonene som er tatt med på eget initiativ er varsling når en enhet på profibussen ikke er tilgjengelig. Status på profibusslaver leses fra et eget bufferminne i profibusmodulen på master PLS. Figur 68 Hvordan status for profibusslaver leses fra eget bufferminne i master PLS-en Vi har bare to enheter tilkoblet på denne bussen, og følgelig er det mer enn nok å legge hver bit fra bare det første dataordet i hver sin minnecelle. Figur 69 Feilmelding på profibus test 54

2.9.3 InTouch - Quick start guide KS Ved oppstart av programmet blir du møtt av et innloggingsvindu, trykk «Logg inn» Figur 70 Innloggingsvindu Skriv inn brukernavn og passord, og trykk «Fortsett» Figur 71 Viser hvilken operatør du er logget inn som, og ber det om å bekrefte ved å trykke fortsett For å bytte bruker benyttes «Innlogget som:» knappen helt til venstre i menylinja. Avloggingsknappen er plassert rett til høyre. Figur 72 Viser hvordan du logger ut når du er innlogget som en operatør 55

Til venstre vises en representasjon av anlegget med alle aktive komponenter. Utløpsventiler og pumpe aktiveres når de betjenes med venstre museknapp, og blir da grønn. Innløpsventil «fylles» med grønnfarge nedenfra og opp for å illustrere grad av åpning. Tanknivå vises som en søyle der blåfarge representerer nivå. Med aktivert regulator viser en lilla strek hvor referansen er satt. Hvis kommunikasjon (over profibus mellom master og slave-pls) forsvinner vil det utstyret som nå er utilgjengelig begynne å blinke. Dette vil forsvinne av seg selv når feilen er utbedret. Ved å trykke nettverk» i menyen øverst får du mer informasjon om hvor problemet ligger. Figur 73 Visuell visning av hele prosessen i InTouch 56

I midten finnes felt for innmating og avlesing av verdier. Noen av disse forsvinner når de ikke er i bruk, og i tillegg gjelder visse restriksjoner på hvem som kan se og betjene de forskjellige knappene. Knapper er synlig med følgende innstillinger og rettigheter: Figur 74 viser hvilke knapper som er synlig for den enkelte operatør Og knapper kan betjenes med følgende rettigheter: Figur 75 viser hvilke verdier den enkelte operatør har tillatelse til å endre 57

Til høyre finnes to sanntidskurver. Den øverste viser referanse, pådrag og nivå angitt i prosent, og den nederste viser væskestrøm ut av tanken angitt i antall liter per minutt. Figur 76 Viser santidskurvene vi får ut i InTouch For å se loggede kurver trykker du «historiske grafer» i menyen. 58 Figur 77 Mulighet for historisk graf

Nederst på skjermen vises alle alarmer som enten er aktiv og ukvittert (rød), aktiv og kvittert (sort), eller gammel og ukvittert (blå). Figur 78 liste med de siste alarmene og deres tilstand Så lenge en alarm er aktiv vises det også helt til høyre i menyen, med merknaden Figur 79 alarmlampe ved feil Og når alle tilstander har gått tilbake innenfor sine grenser vises følgende merknad Figur 80 alarmlampe ved ingen feil For å se en komplett liste over gamle alarmer, og hvem som var på vakt da alarmen gikk, trykk «Alarmlogg» i menyen for å få dette vinduet: Figur 81 Fullstendig alarm liste 59

2.10 Regulatoralgoritmer SV 2.10.1 Forkortelser u: Pådraget ut ifra regulatoren u 0 : Nominelt pådrag* u k : Gjeldende pådrag u k 1 : Forrige pådrag k p : Proporsjonalforsterkingen e: Avviket mellom referansen r, og prosessverdien y h: Samplingstiden: Tiden mellom hver gang regulatoren leser og sender verdier T i : Integraltiden T d : Derivasjonstid V: Forstyrrelse** N: Filtertid * Det nominelle pådraget er som oftest satt til 50% av maks pådrag for de fleste regulatorer. Dette pådraget er der for å holde prosessverdien i det normale arbeidsområdet. Ved bruka av proporsjonal foroverkobling brukes ikke nominelt pådrag. ** I vårt tilfelle har vi en forstyrrelse i form av tankens utløpsventiler. 2.10.2 Diskretisering Når vi skal regulere en prosess med en digital regulator, i vårt tilfelle et system av PLSer, dukker det ganske raskt opp problemer. Vi må få en datamaskin som ikke jobber kontinuerlig og analogt, til å regne på et kontinuerlig analogt signal. For så å sende et analogt signal tilbake. For å realisere dette systemet diskretiser vi den analoge delen, og lar regulatoren jobbe med «punkter» av informasjon fra prosessen. Når vi jobber med dynamiske systemer slik som tankriggen vår, overfører vi som oftest differensialligningene fra tidsplanet over til Laplace-planet(S-planet). Det vil si at vi ser på prosessen med henhold på frekvens heller en tid. Ved diskretisering tar vi dette et skritt videre og overfører til Z-planet. Sammenhengen mellom S og Z er e hs = Z 1. Da ser vi at en tidsforsinkelse i S-planet, på et samplingssteg(h), blir det samme som et «forrige punkt» i Z-planet. Videre skal vi se på hvordan regulatoralgoritmene blir seende ut. Dette blir da de matematiske funksjonene vi må programmere inn i PLSene vi jobber med, slik at de selv regulerer nivået i tanken basert på hvilke verdier de får. 60

2.10.3 Enkel Proporsjonal regulator En enkel proporsjonal regulator tar bare hensyn til avviket mellom prosessverdi y og ønsket prosessverdi(referanse) r. Den multipliserer avviket med en Kp verdi som operatøren selv må bestemme. Vi vil aldri kunne få en stasjonær prosessverdi lik referansen bare med en proporsjonal regulator. Tidsplan: u = k p e + u 0 Z-plan: u k = k p e k + u 0 2.10.4 PI-regulator En Proporsjonal Integral regulator bruker, i tillegg til proporsjonal forsterkning, arealet mellom referansen og prosessverdien til å regne ut pådraget. Vi får dermed ikke noe stasjonært avvik. Tidsplan: u = k p (e + 1 T i e dt) S-plan: u (s) = k p (e (s) + 1 T i 1 S ) Her må vi bruke bakover-differanse når vi diskretiserer, det vil si at vi bruker differansen mellom forrige og nåværende prosessverdi til utregning av nytt pådrag. Z-plan: u k = k p (e k + 1 T i s 1 z 1 h 1 1 z 1 h e k ) (1 z 1 ) u k (1 z 1 ) = k p (e k (1 z 1 ) + h T i e k ) (u k z 1 = u k 1 ) u k = u k 1 + k p ((1 + h T i ) e k e k 1 ) 61

2.10.5 Wind-up kontroll For å sørge for at integratoren ikke går mot uendelig hvis avviket blir for stort må vi ha noe som kalles wind-up kontroll. Den fungerer slik at hvis integratoren overstiger en verdi som vi har satt, skal regulatoren gå over til kun å være P-regulator. Da kan vi få problemer med store sprang i pådraget. Dette er ikke ønskelig, og vi må programmere slik at vi får «rykkfrie overganger». Ved overgang fra PI til P-regulator setter vi u 0 = u k 1 Vi setter altså det nominelle pådraget til å være forrige pådrag da regulatoren var PIregulator For overgangen fra P til PI-regulator setter vi u k 1 = u kp Det forrige pådraget settes lik pådraget regulatoren hadde som P-regulator. Gjennom disse små tiltakene i regulatorprogrammet sørger vi for at pådraget, og følgelig prosessverdien holder seg jevnt, selv når vi veksler mellom forskjellige regulatortyper. 2.10.6 Auto og manuell Det skal være mulig å sette regulatoren i manuell. Da skal operatøren selv bestemme pådraget til systemet. I motsetning til auto hvor regulatoren regner ut et pådrag basert på algoritmene vi har gitt den. Vi må da igjen sørge for at vi ikke får for store hopp i pådraget i det vi veksler mellom de to. Ved overgang fra P regulator og over til manuell setter vi enkelt og greit det nye pådraget lik pådraget vi hadde sist som P-regulator. Når vi skal gå den andre veien setter vi det nominelle pådraget lik pådraget som ble brukt i manuell drift. Mellom PI og manuell gjelder: PI til MAN: MAN til PI: u m = u k 1 u k 1 = u m I begge tilfeller setter vi også referansen like prosessverdien for å sikre 0 avvik etter bytte. 62

2.10.7 Foroverkopling Hensikten med en foroverkobling er å motvirke en forstyrrelse. Ideelt skal pådraget fra foroverkoblingen utligne forstyrrelsen, og hindre at prosessverdien endres ved sprang i nevnt forstyrrelse. Vi skal i prosjektet ha mulighet til å bruke proporsjon, derivasjon eller begge til foroverkobling. Dette vil føre til en svært rask innsvingning ved sprang i utløpsventilene. P-foroverkobling: D-foroverkobling: PD-foroverkobling: u pff = k pff V u dff = T d N u pdff = T f u dk 1 + T f K pff (V k V k 1 ) h + T f Ved ren D-foroverkobling settes Kp=1 i ligningen over. D delen i foroverkoblingen bør holdes utenfor wind-up kontrollen. 63

2.10.8 Regulator og heltall I PLS-programmet er det krevende å jobbe med desimaler. Desimalene og heltallet ender i forskjellige dataregistre, og vanskeligjør jobben med å lage en godt fungerende regulator. For å forenkle jobben multipliserer vi alle verdiene vi skal regne på med en faktor, slik at vi bare regner med heltall. For eksempel vil verdien til Kp gjerne gå fra 0.1 til 100 sett fra operatørens side, men i regulatoren ganger vi verdien med 10, slik at Kp sett fra regulatoren går fra 1 til 1000. Vi må da følgelig dele svaret vi får med 10 igjen, før vi sender pådraget ut til prosessen. For å klare denne jobben må vi bruke doble dataregistre. Hvis ikke vil vi raskt kunne overgå de 16 bit et dataregister har til rådighet. 64

2.11 Fjernstyring av panelet AH 2.11.1 Aktivering av fjernstyring I oppgaveteksten er det et krav at operatørpanelet skal settes opp som web-server med fjernstyring av tankriggen via internett. For å få til dette må vi benytte oss av en innebygd VNC-funksjon i ix panelet. VNC står for Virutal Network Computing. Denne funksjonen gjør det mulig å dele «skrivebordet» på panelet med en annen pc. VNC en bruker en Remote Frame Buffer protocol (RFB), som overfører hva som skjer med tastaturet og musa fra pc-en til operatørpanelet. Da vil det være mulig å fjernstyre panelet via en ekstern pc tilkoblet gjennom internett. For å aktivere VNC-funksjonen må man huke av «Enable Remote Access Server» i ix Developer. Figur 82 Aktivering av Remote Access Server Samtidig som man velger å aktivere «Remote Access Server» må det velges to forskjellige porter som har anledning til å koble seg til VNC en. Videre er det viktig at disse portene blir gjort tilgjengelig utenfor det lokalet nettverket. Det må benyttes «Port Forwarding» i routeren. Denne delen er forklart under punkt 2.11.2 «Oppsett av Router DI-624» senere i rapporten. 65

Vi har lagt inn passord for fjernstyring, slik at ikke hvem som helst kan styre prosessen. Det er bare mulighet for å ha en pc tilkoblet panelet omgangen. Vi har linket webvieweren til prosjektets hjemmeside. Da er det mulighet for fjernstyring gjennom nettsiden. Ved hjelp av pc-musen og/eller tastaturet er det mulig å endre på de forskjellige parameterne. Slik ser panelet ut på nettsiden. Figur 83 Slik ser ix-panelet ut på nettsiden HTML-kode for å linke ix Panelet til nettsiden: <section> <h1>web server</h1><br> <iframe src="http://158.38.53.139:5800" height="680" width="850"></iframe> </section> Iframe kommandoen gjør at det dukker opp en rute som er linket direkte til ix Panelet. Vi oppdaget et problem når vi skulle få ix-panelet til å dukke opp i nettleseren. Fordi vi har en eldre versjon av ix Developer ville ikke brukergrensesnittet vises med den nyeste versjonen av Java. Løsningen var å bruke en eldre versjon av Java. Med Java 7 fungerte det, panelet ble vist i nettleser. 66

2.11.2 Oppsett av Router D-Link DI-624 Ethernett kommunikasjon skjer gjennom en trådløs router som sitter i styreskapet. Routeren må konfigureres slik at fjernstyringen skal fungere. Aller først er det viktig å gi noen av komponentene en statsisk IP-adresse. Dette gjøres fordi andre enheter tilkoblet samme nettverk ikke kan bli tildelt denne IP-adressen. ix-panelet, Master-PLS en og pc-ene vi har tilkoblet blir gitt en statisk IP-adresse. Figur 84 Komponenter med statisk IP-adresse 67

Routeren er tilkoblet skolens nettverk, den blir da tildelt en IP-adresse som er routerens IP-adresse ut til internett. Det er denne IP-adressen man vil kalle på hvis man ønsker å koble seg til routeren eller utstyr som er tilkoblet via internett. Denne IP-adressen er av typen WAN-IP. WAN står for «Wide Area Network». Alt utstyr som er koblet til routeren er av typen LAN (Local Area Network). Figur 85 Router WAN-IP 68

2.11.3 Port-forwarding For å kunne koble seg til lokalt utstyr via internett, må man først koblet seg til nettverket med IPadressen 158.38.53.139, routerens IP-adresse ut til internett. Videre må man konfigurere porter slik at man blir videresendt til riktig lokal IP-adresse, altså de forskjellige enhetene tilkoblet routeren. På bildet nedenfor kan man se hvilke porter vi har valgt for videresending. Figur 86 Port-forwarding 69

Hvis man skriver 158.38.53.139:5800 i en nettleser, blir man videresendt til 192.168.1.101:5800 på det lokalet nettverket. Da vil ix-panelet dukket opp, fordi det er port 5800 som er linket til panelet. Det er lagt inn port-forwarding for både ix-panelet (Port: 5800) og webserveren (Port: 800). Nedenfor kan man se hvordan tilkobling fungerer mellom internett og ix-panelet. Figur 87 Tilkobling fra internett til ix-panel 70

2.12 Webserver SV For å kunne fjernstyre tankriggen via internett har vi flere muligheter. En av disse er å sette opp noe som Beijer Electronics kaller for en web-server. Dette fungerer slik at vi lager en html-kodet nettside som henter og sender verdier til og fra panelet, og lagrer denne på ixpanelet. Panelet fungerer da som en server og med de rette kodene kan vi da se og kommunisere med denne nettsiden fra en hvilken som helst datamaskin som er koblet til internett. 2.12.1 Port-forwarding ix-panelet er koblet opp mot en ruter på et LAN nettverk. For å nå tak i panelet fra «utsiden» av dette lokale nettverket må vi gå inn på ruteren og fortelle hva vi skal kommunisere med når vi skriver en IP-adresse. I web-server oppsettet satte vi port 80 til nettsiden. Vi gikk så inn i ruteren og gjorde port 80 på ix-panelet «synlig» for skolens nettverk. Ved å nå taste inn riktig IP-adresse var det nå mulig å se websiden som var plassert på ix-panelet. Se mer om dette i avsnitt 2.11.3. 2.12.3 Javascript I figur 84 kan du se et utdrag av koden som ble brukt til å vise, og skriver verdier til og fra ixpanelet. Figur 88 Javascript Her var det viktig å bruke samme variabelnavn som brukes i ix-panelet for at kommunikasjonen skulle fungere. 71

På internettsiden vår har vi laget en ramme som viser nettsiden til ix-panelet. I figur 84 kan du ser hvordan dette ble seende ut. Figur 89 Web-server Web serveren er satt opp som en tabell. I første kolonne har vi satt navnet til den parameteren det gjelder. I neste kolonne får vi vite status til den aktuelle parameteren, dette blir oppdatert hvert 2.sekund. Det er ikke nødvendigvis opplagt, men i statuser som bare viser 0 og 1, betyr verdien 0 at parameteren er deaktivert, og 1 at den er aktivert. For å kunne skrive til en parameter, hvor det er mulig, må man taste inn ønsket verdi i tilsvarende rad i 3 kolonne, for så å trykke på «send» knappen i 4. og siste kolonne. Hvis man sender verdien 1 til parameteren «Manuelt pådrag» går regulatorprogrammet over i manuell drift. Det vil da ikke skje noe om man sender verdier til referanse. Det samme gjelder i motstående tilfelle. Hvis regulatoren ikke står i manuell (viser verdien 0), vil ikke Pådrag kunne endres av operatør. For å kvittere ut alarmtilstand må man trykke inn verdien 1, og trykke på «kvitter(1)». Man får ikke tilgang til web-serveren før man logger inn med det brukernavnet og passordet som ble oppgitt i oppgaveteksten. 72

3 Prosjektstyring 3.1 Tidsbruk TMS Vi har brukt noe mindre tid enn planlagt på dette stadiet i prosjektet, grunnen til dette må være at det er vanskelig å planlegge hvor mye tid som trengs til enkeltdelene av prosjektet. Samt at vi har vært effektive og arbeidet bare for å få flere timer. Spesielt lagingen av filteret har gått mye raskere enn antatt. Ukenummer Utført arbeid Planlagte timer 9 44 30 10 132 110 11 303 190 12 394 410 13 556 680 14 566 680 15 731 922 16 941 1067 17 1181 1367 18 1300 (Tirsdag) 1607 Tabell 3 Arbeidsdagbok Figur 42 viser grafisk hvordan vi ligger an i mengde arbeid. 1800 1600 1400 1200 1000 800 600 400 200 Arbeidsmengde 0 9 10 11 12 13 14 15 16 17 18 19 20 Planlagt tidsbruk Tid brukt Figur 90 Grafisk framvisning av timer brukt i forhold til timer planlagt 73

3.2 Prosjektstyring og kvalitetssikring SV Prosjektet skal til enhver tid ha en leder. Lederen byttes hver uke, og ved prosjektets slutt skal hver enkelt gruppedeltaker ha fått prøvd seg i jobben. Lederen er ansvarlig for møteinnkalling, saksliste og gjennomføring av det ukentlige møtet. Han vil også være ansvarlig for prosjektets framgang, og tidsfrister. 3.2.1 Statusrapportering Møteleder skal vær uke fremlegge en statusrapport, som skal gjennomgås på prosjektmøtet. Møteinnkallelser, møtereferat og annen relevant dokumentasjon lastes opp til felles dropbox-mappe. 3.2.2 Standardiserte skjemaer Gruppen skal bruke standardiserte skjemaer for møteinnkalling, møtereferat, og arbeidspakkeskjema. Disse ligger tilgjengelig på It s Learning under faget «TELE2008-A 15V Styresystemer og reguleringsteknikk». 3.2.3 Versjonskontroll Dokumenter og filer som blir produsert i forbindelse med prosjektet blir lagret i en felles Dropbox-mappe. Filene skal ha beskrivende navn, og inneholde versjonsnummer eller dato. 3.2.4 Tester og sjekklister Programmer og sjekklister skal sammenlignes mot mål og spesifikasjoner nevnt i forprosjektrapporten. Eventuelle avvik skal dokumenteres og rettes. 74

4 Konklusjon SV I denne rapporten har vi dokumentert alt arbeidet vi har utført i entank-delen av prosjektet i faget «styresystemer og reguleringsteknikk» våren 2015. Rapporten beskriver hvordan vi har gått fram for å løse oppgaven i henhold til de kravene som var satt i oppgaveteksten, samt enkle bruksanvisninger for bruk av brukergrensesnittene vi har utarbeidet. Oppgaven besto av å programmere tre PLS-er slik at de regulerer nivået i en væsketank. For å kunne overvåke og styre prosessen måtte vi utarbeide brukergrensesnitt på stasjonær pc og ix-operatørpanel. Samt mulighet for fjernstyring av ix-panelet via internett. Parallelt med entank-oppgaven har vi utarbeidet en matematisk modell av tanken og regulatoren. Ved hjelp av den har vi simulert prosessen og kommet fram til regulatorinnstillinger til videre bruk på den reelle regulatoren. Det viste seg at dette ble svært nyttig da innstillingene stemte bra. Notatet fra simuleringene ligger i sin helhet under vedlegg. Vi har også konstruert to 2.ordens filter til nivåmåler og utløpsmåler. Dette fungerte godt og vi fikk et tilfredsstillende resultat med merkbart mindre støy på nivåmålesløyfa, mens på flow-måleren fungerte ikke strømtilførselen til filteret riktig. Dette medførte at vi ikke brukte filter på flow-målingen. Vi fikk uansett en fin måling på utløpet, så det er tvilsomt om vi ville merket noen vesentlig forskjell med filteret montert. Gruppen har hele tiden klart å opprettholde en god driv i arbeidet og hele oppgaven har blitt løst uten større uforutsette problemer. Vi sitter nå igjen med noe vi selv mener er et meget godt resultat. 75

5 Litteratur TMS Vi bruke følgende verker under entankprosjektet. Arnfinn Hofstad «PLS-teknikk; Mitsubishi Melsec FX0(S) og FX2N; GX Works2» Per Hveem «Sanntidsdatateknikk; Digitale regulatorer, Forelesningsnotater» Per Hveem, Kåre Bjørvik «Reguleringsteknikk» Kåre Bjørvik «Dynamiske systemer» Prosjektperm lagt ut offentlig på It's Learning. Sebord,Edgar,Mellichamp og Doyle «Process Dynamics and Control» InTouch HMI 9.5 Fundamentals of Aplication Development Course. 76

6 Vedlegg 1. Figurliste 2. Arbeidspakkeskjema 3. Master PLS-program 4. Slave 1 PLS-program 5. Slave 2 PLS-program 6. Simuleringsnotat 7. Sjekkliste ved test av entank 8. Feilretting på riggen koblingsskjema 9. Tilordningsliste 77

Figurliste Figur 1 Oversiktsbilde kobling mellom PLS-rig og tank-rig... 1 Figur 2 Informasjonsflyt og POU rekkefølge for master... 5 Figur 3 Informasjonsflyt og POU rekkefølge for slave 1... 6 Figur 4 Informasjonsflyt og POU rekkefølge for slave 2... 6 Figur 5 Global variabelliste... 7 Figur 6 Viser hvordan samplingen blir gjort... 8 Figur 7 Alarm tilstander... 10 Figur 8 viser timer for alarmlampen... 11 Figur 9 viser når det skal være lys på alarmlampen... 11 Figur 10 Viser hvordan utgangene i PLS-en styres og hva de styrer... 12 Figur 11 Global variabel liste fra GX Works 2... 13 Figur 12 Viser sampling i slave 1... 14 Figur 13 Viser prosessverdi for regulatoren... 14 Figur 14 Viser hvordan avviket mellom prosessverdi og referanse gjøres... 15 Figur 15 Viser endring i utstrømming... 15 Figur 16 P-regulator... 16 Figur 17 P-regulator funksjonsblokk... 16 Figur 18 Rykkfri overgang i P-regulator... 17 Figur 19 P-foroverregulator... 18 Figur 20 P-foroverregulator funksjonsblokk... 18 Figur 21 Hvordan sette Kp og Ti med mulighet for desimaltall... 19 Figur 22 Hopp for å hindre at uønskede deler av programmet kjøres... 20 Figur 23 Viser utganger for PI-regulator sin funksjonsblokk... 20 Figur 24 Kode for rykkfri overgang fra P til PI og Inn/utganger PI-funksjonsblokk... 21 Figur 25 setter grenser for D-delen i regulatoren... 22 Figur 26 Funksjonsblokk for D-regulator... 22 Figur 27 Oppbygning av regulator... 23 Figur 28 Eksempel på anti-windup... 23 Figur 29 Grensesjekk... 24 Figur 30 Hvordan nåverdi og siste verdi lagres og oppdateres... 25 Figur 31 Viser hvordan mulighet for manuelt pådrag er programmert.... 25 Figur 32 Sending av pådrag til omformeren... 26 Figur 33 Alarmtilstander... 26 Figur 34 Dataoverføring mellom slave 2 og master... 27 Figur 35 Videre formidling mellom slave 2 og slave 1... 28 Figur 36 omgjøring av verdier for sending mellom slave 1 master slave 2... 29 Figur 37 rykkfrieoverganger masterdel... 30 Figur 38 sikkerhet ved strømbrudd... 31 Figur 39 Sprang i utløpet PI-reg... 32 Figur 40 Sprang i utløpet med PI-reg med P-forover... 33 Figur 41 Sprang i utløpet med PI-reg med D-forover... 33 Figur 42 Sprang i utløpet med PI-reg med PD-forover... 33 Figur 43 Test av regulatorinnstillinger på den reelle tanken, visers i InTouch... 34 Figur 44 Test av regulatorinnstillinger på simulinkmodellen, Sprang i forstyrrelsen i rød ring... 34 Figur 45 Viser støy på nivåmåler og pådraget... 36 Figur 46 Diode egenskap... 36 78

Figur 47 - Sprang med diode... 36 Figur 48 Viser overføringsfunskjonen og komandoen for å tegne bodediagrammet... 39 Figur 49 Viser bodediagrammet til overføringsfunksjonen... 39 Figur 50 Koblingsskjema for filter... 40 Figur 51 bodediagram for filteret... 40 Figur 52 Viser hvordan filteret er testet... 41 Figur 53 Testresultat for filteret fra multisim... 41 Figur 54 koblingsskjema filter... 42 Figur 55 Viser hvordan filteret forbedrer måleresultatet... 43 Figur 56 Ferdig filter... 44 Figur 57 Tagliste... 46 Figur 58 Viser kontroller med IP-adresse og port.... 47 Figur 59 IX panel... 48 Figur 60 Bruksanvisning IX panel... 49 Figur 61 Krav til InTouch brukergrensesnitt... 50 Figur 62 (opcdatahub.com)... 51 Figur 63 Tenkt informasjonsflyt for OPS server... 51 Figur 64 Tags i OPC server... 52 Figur 65 InTouch brukergrensesnitt... 52 Figur 66 Begrensing av Kp... 53 Figur 67 Begrensing av referanse... 53 Figur 68 Hvordan status for profibusslaver leses fra eget bufferminne i master PLS-en... 54 Figur 69 Feilmelding på profibus test... 54 Figur 70 Innloggingsvindu... 55 Figur 71 Viser hvilken operatør du er logget inn som, og ber det om å bekrefte ved å trykke fortsett... 55 Figur 72 Viser hvordan du logger ut når du er innlogget som en operatør... 55 Figur 73 Visuell visning av hele prosessen i InTouch... 56 Figur 74 viser hvilke knapper som er synlig for den enkelte operatør... 57 Figur 75 viser hvilke verdier den enkelte operatør har tillatelse til å endre... 57 Figur 76 Viser santidskurvene vi får ut i InTouch... 58 Figur 77 Mulighet for historisk graf... 58 Figur 78 liste med de siste alarmene og deres tilstand... 59 Figur 79 alarmlampe ved feil... 59 Figur 80 alarmlampe ved ingen feil... 59 Figur 81 Fullstendig alarm liste... 59 Figur 82 Aktivering av Remote Access Server... 65 Figur 83 Slik ser ix-panelet ut på nettsiden... 66 Figur 84 Komponenter med statisk IP-adresse... 67 Figur 85 Router WAN-IP... 68 Figur 86 Port-forwarding... 69 Figur 87 Tilkobling fra internett til ix-panel... 70 Figur 88 Javascript... 71 Figur 89 Web-server... 72 Figur 90 Grafisk framvisning av timer brukt i forhold til timer planlagt... 73 79

HØGSKOL I SØR- TRØNDELAG Avdeling for teknologi Studieprogram for elektro- og datateknikk 7004 TRONDHEIM Fag: Styresystemer og reguleringsteknikk Dato: 02.03.15 Prosjekt: Entankprosjekt Aktivitet: Filter Aktivitet nr: 06 Startdato: 24.03.15 Sluttdato: 16.04.15 Avhengighet: Foregående aktiviteter: Miniprosjekt Etterfølgende aktiviteter: Testing og samkjøring Mål: -Bygge antialiasingfilter for målt nivå i tank -Bygge antialisingfilter for målt utløp fra tank Arbeidsbeskrivelse: -Beregne komponentverdier til filtrene -Måle frekvensområde for støy -Montering av filter -Skrive god dokumentasjon for arbeidet som har blitt gjort Timeverk: 50 timer Fordeling: Kristian Strøm: 25 timer Stian B. Dyrnes: 25 timer Kostnader: Skolen dekker komponentkostnader. Ressurser: Gruppens arbeidstimer Risiko: Det kan være problemer med målingene som resulterer i filtrene ikke stemmer, og gruppen må begynne forfra igjen. Faglig ansvarlig: Kristian Strøm, krisstro@student.hist.no tlf: 45665826 Prosjektmedarbeidere: Stian B. Dyrnes, sbdyrnes@gmail.com tlf:45407852

HØGSKOL I SØR- TRØNDELAG Avdeling for teknologi Studieprogram for elektro- og datateknikk 7004 TRONDHEIM Fag: Styresystemer og reguleringsteknikk Dato: 02.03.15 Prosjekt: Entankprosjekt Aktivitet: Modellering og simulering Aktivitet nr: 07 Startdato: 24.03.15 Sluttdato: 20.04.15 Avhengighet: Foregående aktiviteter: Miniprosjekt Etterfølgende aktiviteter: Testing og samkjøring Mål: -Lage en enkel matematisk modell for nivåregulering av tanken -Få en god å nøyaktig regulering på tanken som oppfyller kravspesifikasjonene Arbeidsbeskrivelse: -Regne ut en enkel matematisk modell som gir en nøyaktig beskrivelse av tanken -Gjøre gode simuleringer og analysere resultatet i matlab -Komme frem til regulatorinnstillinger som oppfyller kravspesifikasjonene -Lage god dokumentasjon på arbeidet de har gjort Timeverk: 50 timer Fordeling: Emil W. Hatletveit: 25 timer Terje M. Sørensen: 25 timer Kostnader: Det er ingen kostnader ved dette prosjektet. Ressurser: Gruppens arbeidstimer Risiko: Det kan oppstå uforutsette problemer med modelleringen som resulterer i at tidsplanen ikke overholdes. Faglig ansvarlig: Terje M. Sørensen, terjemagnusbs@gmail.com tlf: 91593355 Prosjektmedarbeidere: Emil W. Hatletveit, Emilw@student.hist.no tlf: 98480973

HØGSKOL I SØR- TRØNDELAG Avdeling for teknologi Studieprogram for elektro- og datateknikk 7004 TRONDHEIM Fag: Styresystemer og reguleringsteknikk Dato: 02.03.15 Prosjekt: Entankprosjekt Aktivitet: Programmering Aktivitet nr: 08 Startdato: 24.03.15 Sluttdato: 21.04.15 Avhengighet: Foregående aktiviteter: Miniprosjekt Etterfølgende aktiviteter: Testing, feilsøking og samkjøring Mål: -Komme frem til et velfungerende PLS-program for å styre tankriggen -Oppnå et velfungerende program for regulatorstyring Arbeidsbeskrivelse: -Skrive et PLS-program som regulerer tanken -Skrive et program slik at brukerpanelet kan styre tankriggen og regulatorinnstillinger -Lage god dokumentasjon for programmet Timeverk: 360 timer Fordeling: Kristian Strøm: 60 timer Stian B. Dyrnes: 60 timer Snorre Vongraven: 60 timer Emil W. Hatletveit: 60 timer Andreas Haugen: 60 timer Terje M. Sørensen: 60 timer Kostnader: Det er ingen kostnader ved dette prosjektet. Ressurser: Gruppens arbeidstimer Risiko: Det er et stort program og mye kode som skal skrives, så det kan fort oppstå problemer i koden dersom det er dårlig kommunikasjon mellom deltagerne. Faglig ansvarlig: Andreas Haugen, andrhaug@student.hist.no tlf: 97643272 Prosjektmedarbeidere: Kristian Strøm, krisstro@student.hist.no tlf: 45665826 Stian B. Dyrnes, sbdyrnes@gmail.com tlf:45407852 Snorre Vongraven, snorrevongraven@gmail.com tlf: 91370220 Terje M. Sørensen, terjemagnusbs@gmail.com tlf: 91593355 Emil W. Hatletveit, Emilw@student.hist.no tlf: 98480973

HØGSKOL I SØR- TRØNDELAG Avdeling for teknologi Studieprogram for elektro- og datateknikk 7004 TRONDHEIM Fag: Styresystemer og reguleringsteknikk Dato: 02.03.15 Prosjekt: Entankprosjekt Aktivitet: Testing, feilsøking og samkjøring Aktivitet nr: 09 Startdato: 21.04.15 Sluttdato: 28.04.15 Avhengighet: Foregående aktiviteter: Filter Modellering og simulering Programmering Etterfølgende aktiviteter: Bonusoppgave Totankprosjekt Mål: -Få samkjørt alle deloppgaver -Fremstille et komplett resultat som tilfredstiller prosjektkravene -Få rettet opp evnetuelle feil Arbeidsbeskrivelse: -Sette sammen filter på måleelementet -Få PLS-programmet til å regulere med de regulatorinnstillingene vi har funnet -Koble opp slik at brukerpanelet kan styre tankriggen Timeverk: 300 timer Fordeling: Kristian Strøm: 50 timer Stian B. Dyrnes: 50 timer Snorre Vongraven: 50 timer Emil W. Hatletveit: 50 timer Andreas Haugen: 50 timer Terje M. Sørensen: 50 timer Kostnader: Det er ingen kostnader ved dette prosjektet. Ressurser: Gruppens arbeidstimer Risiko: Det er mange småting som kan ha gått galt under prosjektet, og som ikke har kommet frem før alt skal samkjøres. Faglig ansvarlig: Stian B. Dyrnes, sbdyrnes@gmail.com tlf:45407852 Prosjektmedarbeidere: Kristian Strøm, krisstro@student.hist.no tlf: 45665826 Andreas Haugen, andrhaug@student.hist.no tlf: 97643272 Snorre Vongraven, snorrevongraven@gmail.com tlf: 91370220 Terje M. Sørensen, terjemagnusbs@gmail.com tlf: 91593355 Emil W. Hatletveit, Emilw@student.hist.no tlf: 98480973

IL 28.04.2015 Data Name : Init (* Exchange PLC data with Profibus DP *) (* Module Type PB92D - Mode E *) LD X1B (* write communication READY signal *) AND X1D (* write Module READY *) BMOV_M D100, K16, DP_ARRAY[0] (* DP slave with FDL 1 *) BMOV_M D200, K16, DP_ARRAY[16] (* DP slave with FDL 2 *) TO_M DP_ARRAY[0], K0, K960, K32 (* Write output data to master *) OUT_M Y00(* Exchange start request signal *) AND X00 (* Data exchange done *) FROM_M K0, K0, K32, DP_ARRAY[0] (* Read input data from master *) BMOV_M DP_ARRAY[0], K16, D120 (* DP slave with FDL 1 *) BMOV_M DP_ARRAY[16], K16, D220 (* DP slave with FDL 2 *) 1

Structured Ladder/FBD 28.04.2015 Data Name : MAIN_PRG_LD 1 FROM 0 n1 d K1M300 2113 K1 n2 n3 Feilmeldinger på profibus D121 s MOV d D209 Videreformidling av flow fra slave1 til M60 M61 M62 M5 M6 M7 Videreformidling av kritisk høy alarm fra slave 2 til Videreformidling av kritisk lav alarm fra slave 2 til Videreformidling av avviksalarm fra slave 2 til slave 2 K4M0 s MOV d D100 Videreformidling av boolske verdier fra master til slave 1 D120 s MOV d K4M20 Videreformidling av boolske verdier fra slave 1 til master K4M40 s MOV d D200 Videreformidling av boolske verdier fra master til slave 2 D220 s MOV d K4M60 Videreformidling av boolske verdier fra slave 2 til master Legger samme samplingstid i slave 1 og slave 2 Samplingsti d slave 2 D203 s MOV d D101 Samplingsti d slave 1 2

Structured Ladder/FBD 28.04.2015 Data Name : Rykkfri 1 M40 M43 M41 Oppdaterer verdier som kan endres i slave 2 Alltid aktiv D225 Henter data fra bufferminne Legger pådrag fra PI til det nominelle pådraget når PI er valgt. Denne må endres tilbake s MOV d D205 Legger data over til det satte nominelle M43 D224 s MOV d D204 Videreformidling av referanse fra slave 2 ved valg av manuelt pådrag i regulator M43 D226 s MOV d D206 Videreformidling av manuelt pådrag fra slave 2 når automatisk regulering er valgt 3

Structured Ladder/FBD 28.04.2015 Data Name : Strømbrudd 1 Programmet kjør er Flytter data til de batterimatede dataordene så lenge programmet kjører, men ikke i første scan. Dette lagrer verdiene i tilfelle det skulle Denne er lav i førse scan, men Flytter 16 dataord fra og med D100, over til 16 R-serien er batterimatede dataord, som husker verdien ved Flytter 16 dataord fra og med D200, over til 16 Flytter 16 minneceller fra og med M0, over til 16 minneceller fra L-serien er batterimatede minneceller, som husker verdien ved strømbrudd Flytter 16 minneceller fra og med M40, over til 16 minneceller fra SM402 BMOV BMOV MOV D100 16 s n d R100 D200 16 s n d R200 K4M0 s d K4L0 K4M40 s MOV d Flytter 16 minneceller fra og med M40, over til 16 minneceller fra MOV d K4L40 2 Oppstart Henter data fra de batterimatede dataordene i første scan, men ikke ellers. Dette henter de forrige verdiene programmet hadde før eventuelt Denne er høy i førse scan, men Flytter 16 dataord fra og med R100, over til 16 Flytter 16 dataord fra og med R200, over til 16 Flytter 16 minneceller fra og med L0, over til 16 minneceller fra Flytter 16 minneceller fra og med L40, over til 16 minneceller fra SM402 BMOV BMOV MOV R100 16 s n d D100 R200 16 s n d D200 K4L0 s d K4M0K4L40 s MOV d Flytter 16 minneceller fra og med L40, over til 16 minneceller fra MOV d K4M40 4

Structured Ladder/FBD 28.04.2015 Data Name : Alarm 1 Setter slik at alarmtilstander huskes helt til de kvitteres ut. Disse skal ikke huskes dersom de er feilaktig kvittert ut HøyAlarm Feilkvittering husk_høy_alarm S LavAlarm Feilkvittering husk_lav_alarm S AvviksAlarm Feilkvittering husk_avviksalarm S 2 Setter variabel for feilkvittering dersom alarmen kvitteres men det fremdeles er HøyAlarm LavAlarm AvviksAlarm OR Alarmkvittering Feilkvittering HøyAlarm LavAlarm AvviksAlarm OR Feilkvittering Denne variabelen holdes høy så lenge det er 3 4 Alarmkvittering Resetter tidligere alarmtilstander dersom de kvitteres ut husk_høy_alarm R husk_lav_alarm R husk_avviksalarm R Er høy 0.2 sekunder og lav i 0.2 sekunder dersom det har vært alarm for høyt eller lavt nivå som ikke er kvittert ut OR TS1 OUT_T husk_høy_alarm husk_lav_alarm TC0 2 TCoil TValue TC1 4 OUT_T TCoil TValue 5 Er høy i 0.5 sekunder og lav i 0.5 sekunder dersom det har gått alarm for høyt avvik som ikke er kvittert ut, eller om det ikke ligger inn en alarm for høyt eller lav nivå samtidig husk_avviksalarm husk_høy_alarm husk_lav_alarm TS3 OUT_T TC2 5 TCoil TValue TC3 10 OUT_T TCoil TValue 6 Alarmlampa skal lyse konstant dersom alarmtilstanden er feilkvittert Feilkvittering Alarmlampe Alarmlampa skal lyse i 0.2 sekunder av og på dersom det har gått alarm for høyt eller lavt nivå TS0 Alarmlampa skal lyse i 0.5 sekunder av og på dersom det har gått alarm for høyt avvik TS2 1

Structured Ladder/FBD 28.04.2015 Data Name : Kommunikasjon_master 1 Sett slave 1 adre sse Setter adressen til slave 1. Dette må gjøres når programmet startes opp. M8002 er 1 i første scan. M8002 Data som skal skrives Modulnr (1 = Profibus) Bufferminne på Profibus Antall 16-bit ord 1 1 27 1 s n1 n2 n3 TO 2 Hent data fra ma ster Modulnr (1 = Profibus) Bufferminne på Antall 16-bit ord profibus --> dataregister FROM 1 0 1 n1 n2 n3 d Minneceller_fra_master Minneceller_fra_master dataregister --> minneceller s MOV d Modulnr (1 = Profibus) Bufferminne på Antall 16-bit ord FROM 1 1 1 n1 n2 n3 d Samplingstid dataregister --> minneceller MOV d K4M0 2

Structured Ladder/FBD 28.04.2015 Data Name : Kommunikasjon_master 3 Skriv data tilmast er minneceller --> dataregister dataregister --> profibus K4M20 s MOV d Minneceller_til_master Data som skal skrives Modulnr (1 = Profibus) Bufferminne på Profibus Antall 16-bit ord Minneceller_til_master 1 0 1 s n1 n2 n3 TO Data som skal skrives Modulnr (1 = Profibus) Bufferminne på Profibus Antall 16-bit ord Flowmåling 1 1 1 s n1 n2 n3 TO 3

Structured Ladder/FBD 28.04.2015 Data Name : Omformer 1 Analog til digital Leser analoge innganger 4-20mA og legger data 0-255 i D2. I dette tilfellet er utganger og innganger koblet Setter hvilken analog kanal som skal leses Kommando for start av AD omforming Sample Analog kanal som skal leses 1 Modulnr. AD/DA omformer 0 Bufferminne på omformer 17 Antall 16 bit 1 s n1 n2 n3 TO Start AD omforming Modulnr. AD/DA Bufferminne på omformer Antall 16 bit 2 0 17 1 s n1 n2 n3 TO >>00 Modulnr. AD/DA Bufferminne på omformer Antall 16 bit Sender omformet signal til oppgitt dataregister >>00 Modulnr. AD/DA Bufferminne på omformer FROM 0 n1 d Flowmåling Dataregister 0 n2 1 n3 4

Structured Ladder/FBD 28.04.2015 Data Name : Samplingssteg 1 2 Timer MOV M8002 1 s d Samplingstid TS5 Gir en positiv puls ved hver samplingstid TC5 Samplingstid OUT_T TCoil TValue 3 Aktiver sampling Den globale variabelen for å sample går høy ved hver TS5 Sample 5

Structured Ladder/FBD 28.04.2015 Data Name : Styr_utganger 1 Sett uganger Alarmlampe Denne utgangen er koblet til Y5 Denne utgangen er koblet til pumpa. Skal kobles ut når det er for Pumpe HøyAlarm Y13 Magnetventil1 Magnetventil2 Magnetventil3 Y10 Y11 Y12 Disse utgangene er koblet til de 3 magnetventilene som styrer utløp Y5 Tilb_alarmlampe Y13 Y10 Y11 Tilb_pumpe Tilb_magnetventil1 Tilb_magnetventil2 Dette er en tilbakekobling fra alle utgangene som benyttes for å se om de har gått aktive Y12 Tilb_magnetventil3 6

Structured Ladder/FBD 28.04.2015 Data Name : Adressering_Slaver 1 Sett slave 2 adre sse Setter adressen til slave 2. Dette må gjøres når programmet startes opp. M8002 er 1 i første scan. M8002 Adressen til slaven Modulnr. Bufferminne Antall 16 bit 2 1 27 1 s n1 n2 n3 TO 1

Structured Ladder/FBD 28.04.2015 Data Name : AnalogTilDigital 1 Nivå i tank Leser analoge innganger 4-20mA hver gang variabelen sample går høy, og legger data 0-255 i prosessverdi. Detter er den samplingstiden vi har satt for vår regulator. Gir en puls og aktiverer omformingen hver samplingspunkt Sample 0 Kommando for kanal 0 0 Modulnr. AD/DA 17 Bufferminne på omformer 1 Antall 16 bit Kommando for å velge kanal 0 s n1 n2 n3 TO Kommando for start AD Modulnr. AD/DA Bufferminne på omformer Antall 16 bit 2 0 17 1 Kommando for start av AD omforming s n1 n2 n3 TO Modulnr. AD/DA Bufferminne på omformer Antall 16 bit Sender omformet signal til oppgitt dataregister 0 0 1 FROM n1 n2 n3 Sender omformet signal til oppgitt dataregister n1 n2 n3 FROM d Prosessverdi[1] Dataregister 2

Structured Ladder/FBD 28.04.2015 Data Name : Avvik 1 Regner ut det aktuelle avviket mellom refeanse og prosessverdi dersom reversert modus er valgt. Dette brukes videre til reguleringen uavhengig av regulatortype. Revers Referanse Prosessverdi[1] SUB_E _IN1 _IN2 e[1] Aktuelt avvik 2 Regner ut det aktuelle avviket mellom refeanse og prosessverdi dersom direkte modus er valgt. Dette brukes videre til reguleringen uavhengig av regulatortype. Revers Prosessverdi[1] Referanse SUB_E _IN1 _IN2 e[1] Aktuelt avvik 3

Structured Ladder/FBD 28.04.2015 Data Name : D-regulator 1 Aktiv når foroverkoblingen kun kjører som P_FF Dersom P-del er koblet ut skap KpFF settes til 1. Ettersom vi har multiplisert med 10 for å få med flere desimaler må KpFF her settes til 10 dersom foroverkoblingen kun skal MOV 10 s d KpFF 2 KpFF TdFF filtertid Samplingstid Forstyrrelse[1] Forstyrrelse[0] udff[0] D_reg1 D-reg Forsterkning Derivasjonstid filterkonstant Sampling Aktuell_forstyrrelse Forrige_forstyrrelse forrige_pådrag Pådrag udff[1] Egenlagd regulatorblokk. Gjør utregninger for pådrag i en D-regulator med de parametrene som er satt. 4

Structured Ladder/FBD 28.04.2015 Data Name : DataFraMaster 1 Minneceller Henter verdien på 15 minneceller fra bufferminne 0 på FROM M8000 1 n1 d K4M40 0 1 n2 n3 2 RegulatorNivå Henter data til nivåregulering fra de forskjellige bufferminnene på profibus som sendes fra master. Dette skjer så lenge programmet M8000 FROM FROM FROM FROM >>00 1 n1 d Kp 1 n1 d Ti 1 n1 d Samplingstid 1 n1 d Referanse 1 n2 2 n2 3 n2 4 n2 1 n3 1 n3 1 n3 1 n3 >>00 FROM FROM Referanse 1 n1 d Nominell 1 n1 d Um 5 n2 6 n2 1 n3 1 n3 3 Foroverkobling Henter data til regulering av forstyrrelsen fra master M8000 1 7 1 n1 n2 n3 FROM d KpFF 1 8 1 n1 n2 n3 FROM d TdFF 1 9 1 n1 n2 n3 FROM d Flow[1] 1 10 1 n1 n2 n3 FROM d FROM d filtertid 5

Structured Ladder/FBD 28.04.2015 Data Name : DataTilMaster 1 Nivå Alle data fra nivåreguleringen som master skal hente. Disse sendes så lenge Alltid aktiv TO TO M8000 >>00 Prosessverdi[1] s u[1] s e[1] Prosessverdi skal Aktuelt pådrag skal Aktuelt avvik skal 1 n1 1 n1 1 Modulnr. Profibus Modulnr. Profibus Modulnr. Profibus 1 n2 2 n2 3 Bufferminne Bufferminne Bufferminne 1 n3 1 n3 1 Antall 16-bits dataord Antall 16-bits dataord Antall 16-bits dataord >>00 e[1] 1 3 1 s n1 n2 n3 TO 2 Alarm 3 PådragPI Alltid aktiv Minneceller skal Modulnr. Profibus Bufferminne Antall 16-bits dataord Parametere som kan endres i programmet, og som skal oppdateres i master sendes her Minneceller som forteller om alarmtilstander skal sendes. Disse sendes så lenge M8000 K4M60 1 0 1 s n1 n2 n3 TO Alltid aktiv TO TO M8000 >>00 Referanse s Nominell s Referanse skal sendes Nominelt pådrag skal Manuelt pådrag skal 1 n1 1 n1 Modulnr. Profibus Modulnr. Profibus Modulnr. Profibus 4 n2 5 n2 Bufferminne Bufferminne Bufferminne 1 n3 1 n3 Antall 16-bits dataord Antall 16-bits dataord Antall 16-bits dataord >>00 Manuelt pådrag skal Modulnr. Profibus Bufferminne Antall 16-bits dataord Um 1 6 1 s n1 n2 n3 TO 6

Structured Ladder/FBD 28.04.2015 Data Name : DigitalTilAnalog 1 Pådrag nivå Omformer digital data 0-255 til analog utgang Setter signal som skal omformes.her er Kommando for valg av kanal 0 Alltid aktiv M8000 Digitalsignal til omforming u[1] Modulnr. AD/DA 0 Bufferminne på omformer 16 Antall 16 bit 1 s n1 n2 n3 TO Velger kanal på omformer 0 Modulnr. AD/DA omformer Bufferminne omformer Antall 16 bit 0 0 17 1 s n1 n2 n3 TO >>00 Start DA omforming Modulnr. AD/DA omformer Bufferminne omformer Antall 16 bit Kommando for å starte DA omforming >>00 Start DA omforming Modulnr. AD/DA omformer Bufferminne omformer 4 0 17 1 s n1 n2 n3 TO 7

Structured Ladder/FBD 28.04.2015 Data Name : Grenser 1 Nedre grense Setter nedre grense for pådrag til 0. Dette skal skje hele tiden Alltid aktiv M8000 LD< MOV u[1] s1 0 s d u[1] 0 s2 2 Øvre grense Setter øve grense for pådrag til 255. Dette skal skje hele tiden Alltid aktiv M8000 LD> MOV u[1] 255 s1 s2 255 s d u[1] 8

Structured Ladder/FBD 28.04.2015 Data Name : Manuell 1 Avvik=0 Aktiv når manuell MAN Prosessverdi[1] Setter refeansen lik prosessverdien. Dette sikrer at avviket blir 0. Dette sikrer rykkfri overgang tilbake til auto. s MOV d Referanse 2 PI_til_MAN Sikrer rykkfri overgang fra PI-regulator til manuell regulator Manuell modus valgt MAN Aktiv dersom PI Aktiv dersom regulatoren er satt som PI, og manuell modus er av Setter det manuelle pådraget lik forrige pådrag for PI for å sikre rykkfri overgang AND MOV PI u[0] s d Um Forige pådrag fra Manuelt pådrag 3 P_til_MAN Manuell modus valgt MAN PI Aktiv dersom PI ikke var valgt, altså Aktiv dersom regulatoren er satt som P og manuell modus er av AND u[1] Aktuelt pådrag fra P Setter det manuelle pådraget lik det aktuelle pådraget for P for å sikre rykkfri s MOV d Um Manuelt pådrag 4 Setter nedre grense for manuelt pådrag til 0. Dette skal skje hele tiden Alltid aktiv M8000 LD< MOV Um s1 0 s d Um 0 s2 5 Setter øve grense for manuelt pådrag til 255. Dette skal skje hele tiden Alltid aktiv M8000 LD> MOV Um 255 s1 s2 255 s d Um 9

Structured Ladder/FBD 28.04.2015 Data Name : NominellPådrag 1 EndringerPI Aktiv når PI er Forrige pårag for Setter det nominelle pådraget lik forrige pådrag for PI. Sikrer rykkfri overgang fra PI til P PI u[0] s MOV d Nominell Nominelt 2 EndringerMAN Sikrer rykkfri overgang fra manuell til automatisk modus Aktiv når MAN er Manuelt pådrag MAN Um s MOV d Nominell Nominelt 3 EndringerPff Aktiv når foroverkobling med P-del er valgt Setter det nominelle pådraget lik 0 nårp-delen i foroverkoblingen er aktiv MOV P_FF 0 s d Nominell Nominelt 10

Structured Ladder/FBD 28.04.2015 Data Name : OppdaterVerdier 1 Oppdaterer verdier fra Gir en puls hvert Oppdaterer forrige verdi av det totale Oppdaterer forrige verdi av avvik. Oppdaterer forrige verdi av forstyrrelse MOV MOV MOV Sample u[1] s d u[0]e[1] s d e[0] Flow[1] s d Flow[0] Forstyrrelse[1] Aktuelt pådrag Forrige pådrag Aktuelt avvik Forrige avvik Aktuell Utstrømning Forrige Utstrømning Aktuell forstyrrelse >>00 >>00 s MOV d Forstyrrelse[0] Prosessverdi[1] Forrige forstyrrelse Aktuell prosessverd s MOV d Prosessverdi[0] Forrige prosessverd 2 Oppdaterer verdier fra de forskjellige Gir en puls hvert Oppdaterer forrige verdi av pådrag fra Oppdaterer forrige verdi av pådrag fra Oppdaterer forrige verdi av pådrag fra P-reg fra foroverkobling MOV MOV MOV Sample u_p[1] s d u_p[0] u_pi[1] s d u_pi[0]upff[1] s d upff[0] udff[1] Aktuelt P-reg pådrag Forrige P-reg pådrag Aktuelt PI-reg pådrag Forrige PI-reg pådrag Aktuelt P-reg pådrag fra Forrige P-reg pådrag fra Aktuelt D-reg pådrag fra Oppdaterer forrige verdi av pådrag fra D-reg fra foroverkobling s MOV Oppdaterer forrige verdi av pådrag fra D-reg fra foroverkobling s MOV d udff[0] Forrige D-reg pådrag fra 11

Structured Ladder/FBD 28.04.2015 Data Name : P-forover 1 KpFF Forstyrrelse[1] Egenlagd regulatorblokk for regulering av forstyrrelse Preg_forover_1 P-reg_forover Forsterkning Pådrag Vk upff[1] 12

Structured Ladder/FBD 28.04.2015 Data Name : P-regulator 1 Kp e[1] Nominell Egenlagd funksjonsblokk for utregning av pådrag i P-regulator. Bruker de Forsterkning Avvik u0 P_reg1 P-reg Pådrag u_p[1] 13

Structured Ladder/FBD 28.04.2015 Data Name : PI-regulator 1 Sikrer en rykkfri overgang fra P til PI. 2 PI Samplingstid Ti Kp e[1] e[0] u[0] Gir en puls ved endring til PI PLS d u_p[1] Forrige pådrag settes lik det aktuell pådraget for P-reg s MOV d Egenlagd regulatorblokk for PI-regulering. Sender inn variablene, og henter ut det aktuelle pådraget. PI_reg1 PI-reg Ts Integrasjonstid Forsterkning Avvik ForrigeAvvik ForrigePaadrag Pådrag u[0] u_pi[1] 14

Structured Ladder/FBD 28.04.2015 Data Name : PådragManuell 1 Setter pådraget lik det manuelle Aktiv når manuell modus er valgt Manuelt pådrag MAN Um s MOV d u[1] Aktuelt 15

Structured Ladder/FBD 28.04.2015 Data Name : PådragRegulator 1 P-reg Aktiv dersom P-reg er valgt Aktiv dersom ingen PI P_FF D_FF u_p[1] s Legger pådraget fra P-reg som MOV d u[1] Aktiv dersom P-foroverkobling P_FF u_p[1] upff[1] D_FF ADD Adderer pådrag fra P-reg og P-forover Aktiv dersom D-foroverkobling D_FF u_p[1] udff[1] Aktiv dersom P_FF P_FF ADD Adderer pådrag fra P-reg og D-forover upp upff[1] D_FF ADD Adderer summen av pådragene fra P-reg og P-forover etter aniwindup, Setter pådrag u[1] lik summen av pådrag fra P-reg og s MOV d u[1] Setter pådrag u[1] lik summen av pådrag fra P-reg og s MOV d u[1] Setter pådrag u[1] lik summen av pådrag fra P-reg og s MOV d u[1] 16

Structured Ladder/FBD 28.04.2015 Data Name : PådragRegulator 2 PI-reg Aktiv dersom P-reg er valgt Aktiv dersom ingen PI P_FF D_FF u_pi[1] Legger pådraget fra PI-reg som s MOV d u[1] Aktiv dersom P-foroverkobling P_FF u_pi[1] upff[1] D_FF ADD Adderer pådrag fra PI-reg og P-forover Setter pådrag u[1] lik summen av pådrag fra PI-reg og s MOV d u[1] Aktiv dersom D-foroverkobling D_FF P_FF u_pi[1] udff[1] Aktiv dersom upip udff[1] P_FF ADD Adderer pådrag fra PI-reg og D-forover D_FF ADD Adderer summen av pådragene fra PI-reg og P-forover etter aniwindup, s Setter pådrag u[1] lik summen av pådrag fra P-reg og s MOV d u[1] Setter pådrag u[1] lik summen av pådrag fra PI-reg og MOV d u[1] 17

Structured Ladder/FBD 28.04.2015 Data Name : Samplingssteg 1 Nedre grense Setter en nedre grense for samplingstid til 1 = 0.1 sekund. Dette skjer så lenge programmet kjører LD< MOV M8000 Samplingstid s1 1 s d Samplingstid 1 s2 2 Timer TS0 Gir en positiv puls ved hver samplingstid TC0 Samplingstid OUT_T TCoil TValue 3 Aktiver sampling Den globale variabelen for å sample går høy ved hvert samplingssteg TS0 Sample 18

Structured Ladder/FBD 28.04.2015 Data Name : AntiWindup 1 P-reg D-forover 2 P-reg PD-forover 3 PI-reg D-forover Denne programblokken fungerer som anti windup før Denne programblokken fungerer som anti windup før Sjekker om pådrag fra Aktiv dersom P-reg med D-forover Setter nedre grense or P-reg lik 0 dersom det er valgt D-forover LD< PI P_FF D_FF MOV u_p[1] s1 0 s d u_p[1] 0 s2 Sjekker om pådrag fra Aktiv dersom P-reg med D-forover Setter pådrag fra P-reg lik 255 dersom det er valgt D-forover LD> PI P_FF D_FF MOV u_p[1] s1 255 s d u_p[1] 255 s2 Sjekker om pådrag upp<0 Aktiv dersom det er P-reg med PI P_FF D_FF u_p[1] upff[1] Adderer pådrag fra P-reg og ADD Aktiv dersom det er P-reg med Legger summen av pådragene til variabelen upp dersom vi har valgt s MOV d upp Setter nedre grense for upp lik 0 dersom det er valgt P-reg LD< PI P_FF D_FF MOV upp s1 0 s d upp 0 s2 Sjekker om pådrag fra Aktiv dersom det er P-reg med Setter øvre grense for upp lik 255 dersom det er valgt P-reg med LD> PI P_FF D_FF MOV upp s1 255 s d upp 255 s2 Sjekker om pådrag u_pi<0 Aktiv dersom det er PI-reg med D-forover Setter nedre grense for u_pi lik 0 dersom det er valgt D-forover LD< PI P_FF D_FF MOV u_pi[1] s1 0 s d u_pi[1] 0 s2 Sjekker om pådrag u_pi>255 Aktiv dersom det er PI-reg med D-forover Setter øvre grense for u_pi lik 255 dersom det er valgt D-forover LD> PI P_FF D_FF MOV u_pi[1] 255 s1 s2 255 s d u_pi[1] 19

Structured Ladder/FBD 28.04.2015 Data Name : AntiWindup 4 PI-reg PD-forove r Aktiv dersom det er PI-reg med PI D_FF P_FF Sjekker om pådrag upip<0 u_pi[1] upff[1] Adderer pådrag fra PI-reg og ADD Aktiv dersom det er PI-reg med PD-forover Legger summen av pådragene til variabelen upip dersom vi har valgt s MOV d Setter nedre grense for upp lik 0 dersom det er valgt PI-reg LD< PI P_FF D_FF MOV upip s1 0 s d upip 0 s2 Sjekker om pådrag u_pi>255 Aktiv dersom det er PI-reg med PD-forover Setter øvre grense for upip lik 255 dersom det er valgt PI-reg LD> PI P_FF D_FF MOV upip 255 s1 s2 255 s d upip upip 20

Structured Ladder/FBD 28.04.2015 Data Name : Alarmtilstand 1 Prosessverdi[1] 25 s1 s2 LD< KritiskLav Sjekker om prosessverdien er under 10% Prosessverdi[1] 225 s1 s2 LD> KritiskHøy Sjekker om prosessverdien er over 90% LD< e[1] -63 s1 s2 OR e[1] 63 s1 s2 LD> HøytAvvik Sjekker om avviket er over 25% 2 KritiskLav KritiskHøy OR TC1 50 OUT_T TCoil TValue Sjekker om tilstandene holder seg i mer enn 5 sekunder. Timeren går høy dersom dette er tilfelle. 3 HøytAvvik TC2 50 OUT_T TCoil TValue Sjekker om tilstanden holder seg i mer enn 5 sekunder. Timeren går høy dersom dette er tilfelle. 4 KritiskHøy TS1 HøyAlarm KritiskLav TS1 LavAlarm HøytAvvik TS2 AvviksAlarm Setter alarmer avhengig av tilstand, dersom disse har ligget inne i mer enn 5 sekunder 21

Structured Ladder/FBD 28.04.2015 Data Name : autotune1 1 2 auto HoppA p CJ e[1] u[0] prosessverdi[1] prosessverdi[0] autotune_1 autotune Avvik ForrigePådrag Nivå ForrigeNivå KpForslag TiForslag Pådrag ForslagKp ForslagTi u[1] 3 HoppA: 22

Structured Ladder/FBD 28.04.2015 Data Name : Forstyrrelse 1 Aktuell utstrømning Forrige utstrømning Flow[1] Flow[0] Regner ut forstyrrelsen. Endringen i utstrømningen SUB Forstyrrelse[1] Forstyrrelse, V 23

FB/FUN Program 28.04.2015 Data Name : D-reg Function Block 1 Flytter alle input-dataene til doble dataord. 16-bits ord til Derivasjonstid _INT INT_TO_DINT Derivasjonstid32 filterkonstant Sampling Aktuell_forstyrrelse Forrige_forstyrrelse forrige_pådrag Forsterkning _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT filterkonstant32 Sampling32 Aktuell_forstyrrelse32 Forrige_forstyrrelse32 forrigepådrag32 Forsterkning32 2 Hindrer at filterkonstanten blir satt 3 4 LD= DMOV M8000 filterkonstant s1 1 s d filterkonstant32 0 s2 M8000 Derivasjonstid32 filterkonstant32 Dividerer derivasjonstiden på s1 s2 DDIV d Regner ut endringen i TfFF Multipliserer Kp med endring i forstyrrelse, DSUB DMUL M8000 V[1] Aktuell_forstyrrelse32 s1 d s1 d TdKpDdeltaV KpDeltaV[0] Forrige_forstyrrelse32 s2 Forsterkning32 s2 Derivasjonstid32 V[0] Multipliserer derivasjonstiden med endring i s1 s2 DMUL d derivasjonstiden med Dette gjøres fordi både Td og Kp er multiplisert med 10 DMUL d StorTdKpDdeltaV StorTdKpDdeltaV[0] 10 s1 s2 DDIV d TdKpDdeltaV 5 Adderer produktet av filtertid Multipliserer og forrige pådrag, med derivatorens filtertid produktet av derivasjonstid med forrige pådrag. og endring i forstyrelse. Dividerer summen av Td*DeltaV+Tf*u[0] på summen av h+tf DMUL DADD DDIV M8000 TfFF[0] s1 d TfU_1 TdKpDdeltaV[0] s1 d s1 d Pådrag32 forrigepådrag32 s2 TfU_1[0] s2 s2 Pådraget blir (Tf*u[0] + Td*(V[1] - V[0])) / (h+tf) DADD M8000 Sampling32 TfFF[0] s1 s2 d Adderer samplingstid med iltertiden. h+tf 24

FB/FUN Program 28.04.2015 Data Name : D-reg Function Block Pådraget blir (Tf*u[0] + Td*(V[1] - V[0])) / (h+tf) 6 Flytter pådragsverdien fra et 32-bits ord til et 16-bits ord Pådrag32[0] _DINT DINT_TO_INT Pådrag 7 Setter nedre grense for pådrag til -255. Dette skal skje hele tiden Alltid aktiv M8000 LD< MOV Pådrag s1-255 s d Pådrag -255 s2 8 Setter øve grense for pådrag til 255. Dette skal skje hele tiden Alltid aktiv M8000 LD> MOV Pådrag 255 s1 s2 255 s d Pådrag 25

FB/FUN Program 28.04.2015 Data Name : P-reg Function Block 1 Flytter alle input-dataene til doble dataord. 16-bits ord til 32-bits ord Forsterkning _INT INT_TO_DINT Forsterkning32 Avvik _INT INT_TO_DINT Avvik32 u0 _INT INT_TO_DINT u032 2 Multipiserer avviket med forsterkningen og legger det til ekp. e*kp Dividerer ekp med 10 for å fjerne desimaler og legger dette til ekp2 ekp2=ekp/10 Adderer ekp2 med nominelt pådrag ekp2+u032 Gjør pådraget om fra 32-bit til 16-bits M8000 Avvik32 Forsterkning32 s1 s2 DMUL d ekp ekp[0] 10 s1 s2 DDIV d ekp2 ekp2[0] u032 s1 s2 DADD d _DINT DINT_TO_INT Pådrag 26

FB/FUN Program 28.04.2015 Data Name : P-reg_forover Function Block 1 Flytter alle input-dataene til doble dataord. 16-bits ord til Forsterkning _INT INT_TO_DINT Forsterkning32 Vk _INT INT_TO_DINT Vk32 2 Multipliserer forstyrrelse med forsterkning Vk*Kp=VkKp Dividerer DvKp med 10 for å fjerne desimaler DvKp/10=Pådrag DMUL DDIV M8000 Vk32 Forsterkning32 s1 s2 d VkKp VkKp[0] 10 s1 s2 d Pådrag32 Pådraget er lik Kp*(V[1]-V[0]) 3 Pådrag32[0] Gjør pådraget om fra 32-bit til 16-bits _DINT DINT_TO_INT Pådrag 27

FB/FUN Program 28.04.2015 Data Name : PI-reg Function Block 1 Forsterkning Flytter alle input-dataordene til doble dataord. 16-bit til _INT INT_TO_DINT forsterkning32 Integrasjonstid Avvik ForrigeAvvik Ts ForrigePaadrag _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT _INT INT_TO_DINT integrasjonstid32 avvik32 forrigeavvik32 Ts32 forrigepaadrag32 2 Dividerer Ti på h, og legger resultatet til Tih. Dette er en endring av regulatoralgoritmen som skulle vært h/ti, men ettersom Ti>h ville dette gitt 0 når vi regner me heltall. integrasjonstid32 Ts32 s1 s2 DDIV d Tih 3 Multipliserer avvik og forsterkning e*kp og legger produktet forsterkning32 avvik32 s1 s2 DMUL d ekp Multipliserer Tih med 10, og legger resultatet i UtvidetTih. Dette gjøres får å få med flere DMUL 10 s1 d UtvidetTih Tih[0] s2 4 Hopper over følgene kode når CS0 går høy. Denne går høy etter programmet har kjørt en gang, fordi. Dette gjøres for at heltallsdivisjonen ikke skal bli 0 før det stasjonære avviket er 0 CS0 Hopp2 p CJ 5 ekp[0] UtvidetTih[0] Dividerer ekp på UtvidetTih, ekp/(10*tih) og legger resultatet i s1 s2 DDIV d Uik 28

FB/FUN Program 28.04.2015 Data Name : PI-reg Function Block 6 ekp[0] UtvidetTih[0] Gjør operasjonen modulo mellom ekp og UtvidetTih. Denne operasjonen henter resten fra heltallsdivisjonen i MOD _IN1 _IN2 RestUik 7 Hopp2: Markerer slutten på hoppet, koden som hoppes over skal kun kjøres en gang. M8000 CC0 1 Teller opp så lenge programmet kjører. Telleren går høy etter å ha telt opp til OUT_C CCoil CValue 8 M8000 RestUik Flytter det doble dataordet fra RestUik til ForrigeRest. s DMOV d ForrigeRest 9 Adderer forrige rest Dividerer summen av forrige rest og ekp på UtvidetTih ForrigeRest ekp[0] s1 s2 DADD d UtvidetTih[0] s1 s2 DDIV d Uik 10 Kjører modulooperasjonen ForrigeRest ekp[0] Adderer forrige rest s1 s2 DADD d UtvidetTih[0] på summen av forrige rest og ekp med UtvidetTih. Denne legger resten av MOD _IN1 _IN2 RestUik 11 Dividerer KpDe på 10. Subtraherer avvik på forrige avvik. Dette gir endringen i Multipliserer endringen i avvik med forsterkningen Kp*(e[1]-e[0]) og legger resultatet i Dette er fordi vi multiplisere med 10 tiligere, og vi ønsker nå å fjerne en desimal. Svaret legges nå til MindreKpDe DSUB DMUL DDIV >>00 avvik32 s1 d s1 d KpDe KpDe[0] s1 d MindreKpDe MindreKpDe[0] forrigeavvik32 s2 forsterkning32 s2 10 s2 Adderer Uik med forrige pådrag og legger resultatet i Uik[0] forrigepaadrag32 s1 s2 DADD d UikU0 29

FB/FUN Program 28.04.2015 Data Name : PI-reg Function Block Adderer resultatet av de tiligere utregningene og legger dette til det 32-bits dataordet >>00 MindreKpDe[0] UikU0 s1 s2 DADD d Pådrag32 Pådrag= u[0] + Uik + (Kp*10*(e[1] - e[0])/10 12 Sjekker om Pådrag32 er Setter Pådrag32 lik 0 dersom LDD< DMOV Pådrag32 s1 0 s d Pådrag32 0 s2 Sjekker om Pådrag32 er over Setter Pådrag32 lik 255 dersom sammenligningen 13 LDD> DMOV Pådrag32 s1 255 s d Pådrag32 255 s2 Skriver det doble dataordet Pådrag32 til det 16-bits dataordet Pådrag som sendes ut av regulatoren Pådrag32 _DINT DINT_TO_INT Pådrag 30

FB/FUN Program 28.04.2015 Data Name : autotune Function Block 1 M8000 Avvik 0 Sjekker om avviket blir 0. Dette markerer starten på en ny s1 s2 LD< PLS d Markerer ny halvperiode NyPeriode 2 OppdaterTid Oppdaterer forrige Oppdaterer nåværende MOV MOV MOV NyPeriode >>00 Periodetid[1] s d Periodetid[0] Tid s d Periodetid[1] Bunn_Nivå[1] s d Bunn_Nivå[0] Aktuell Forrige Teller periodetide Aktuell periodeti >>00 Bunn_Nivå[0] Topp_Nivå[1] s MOV d Topp_Nivå[0] 3 ResetVerdier NyPeriode Reseter timeren som teller Reseter teller 1 Reseter teller 2 RST d RST RST Tid d CC1 d CC2 4 Sjekker om nivået er over referansen Denne er aktiv så lenge programmet ikke er klar til å Setter pådraget til 0 dersom avviket er mindre enn 0, altså at nivået ligger over referansen LD< StartRegning MOV Avvik s1 0 s d Pådrag 0 s2 Teller hvert 0.1 sekund, noe som vil gi Nivå ForrigeNivå s1 s2 LD< Sjekker om nivået er synkende AND M8012 StartRegning PLS d CS1 ForrigeNivå s INC d MOV d Legger forrige nivå som toppnivå dersom nivået er synkende Tid Topp_Nivå[1]CC1 1 Denne telleren teller opp når forrige nivå bli lagt som toppnivå, slik at denne ikke blir overskrevet før neste OUT_C CCoil CValue 31

FB/FUN Program 28.04.2015 Data Name : autotune Function Block 5 Sjekker om nivået er over referansen Denne er aktiv så lenge programmet ikke er klar til å Setter pådraget til maks dersom avviket er større enn 0, altså at nivået ligger under referansen Nivå ForrigeNivå LD> StartRegning MOV Avvik s1 255 s d Pådrag 0 s2 s1 s2 LD< Sjekker om nivået er stigende eller synkende AND M8012 StartRegning PLS d CS2 ForrigeNivå Teller hvert 0.1 sekund, noe som vil gi s INC d MOV d Legger forrige Nivå som toppnivå dersom nivået er synkende Tid Bunn_Nivå[1]CC2 1 Denne telleren teller opp når forrige nivå bli lagt som toppnivå, slik at denne ikke blir overskrevet før neste OUT_C CCoil CValue 6 SammenlignPeri ode Aktuell periodetid Forrige M8000 Topp_Nivå[1] Topp_Nivå[0] Sammenligner forrige og nåværende topp og bunn. Dersom disse er like har vi funnet kritisk forsterkning, og vi kan regne ut parametrene. Sjekker også at disse er 0, ettersom det vil si at s1 s2 LD= Går høy dersom forrige og nåværende topp og M8000 Bunn_Nivå[1] Bunn_Nivå[0] M8000 Bunn_Nivå[1] 0 s1 s2 LD= LD<> s1 s2 AND StartRegning M8000 Topp_Nivå[1] 0 LD<> s1 s2 M8000 Periodetid[1] Periodetid[0] s1 s2 LD= 7 Bunn_Nivå[1] _INT INT_TO_DINT Bunn32 Topp_Nivå[1] _INT INT_TO_DINT Topp32 8 StartRegning DSUB DDIV DMUL >>00 Topp32 s1 d Konstant s1 d Kk Kk[0] s1 d Kp_1000 Kp_1000[0] Bunn32 s2 s2 45 s2 1000 32

FB/FUN Program 28.04.2015 Data Name : autotune Function Block >>00 Kp_1000[0] 1000 s1 s2 DDIV d Kp32 9 Periodetid[1] _INT INT_TO_DINT Tk 10 DMUL DDIV StartRegning Tk s1 d Ti_100 Ti_100[0] s1 d Ti32 85 s2 100 s2 11 Ti32[0] Kp32[0] _DINT DINT_TO_INT _DINT DINT_TO_INT ForslagTi ForslagKp 33

Label 28.04.2015 Data Name : Global1 Global Label Setting Class Label Name Data Type Constant Device Address Comment Remark Relation with System Label System Label Name Attribute 1 VAR_GLOBAL u Word[Signed](0..1) D230 %MW0.230 Pådrag 2 VAR_GLOBAL e Word[Signed](0..1) D240 %MW0.240 Avvik 3 VAR_GLOBAL Kp Word[Signed] D202 %MW0.202 Forsterkning 4 VAR_GLOBAL Ti Word[Signed] D204 %MW0.204 Integraltid 5 VAR_GLOBAL Referanse Word[Signed] D206 %MW0.206 Referanse 6 VAR_GLOBAL Prosessverdi Word[Signed](0..1) D208 %MW0.208 Prosessverdi 7 VAR_GLOBAL Nominell Word[Signed] D210 %MW0.210 Nominelt Pådrag 8 VAR_GLOBAL Samplingstid Word[Signed] D212 %MW0.212 Samplingstid 9 VAR_GLOBAL filtertid Word[Signed] D214 %MW0.214 filtertid 10 VAR_GLOBAL Um Word[Signed] D216 %MW0.216 Manuelt pådrag 11 12 13 VAR_GLOBAL PI Bit M40 %MX0.40 1=PI 0=P 14 VAR_GLOBAL P_FF Bit M41 %MX0.41 1=foroverkobl. med P-reg 15 VAR_GLOBAL D_FF Bit M42 %MX0.42 1=foroverkobl. med D-reg 16 VAR_GLOBAL MAN Bit M43 %MX0.43 1=Manuell modus, 0=Automatisk modus 17 VAR_GLOBAL Revers Bit M44 %MX0.44 18 VAR_GLOBAL auto Bit M100 %MX0.100 19 20 21 VAR_GLOBAL KpFF Word[Signed] D218 %MW0.218 Forsterkning på forstyrrelse 22 VAR_GLOBAL TdFF Word[Signed] D220 %MW0.220 Derivasjonstid 23 24 25 VAR_GLOBAL Flow Word[Signed](0..1) D222 %MW0.222 Utstrømning 26 VAR_GLOBAL Forstyrrelse Word[Signed](0..1) D224 %MW0.224 Forstyrrelse, V 27 VAR_GLOBAL Sample Bit M16 %MX0.16 Sample når denne er høy 28 29 30 VAR_GLOBAL u_p Word[Signed](0..1) D300 %MW0.300 Pådrag P-reg 31 VAR_GLOBAL u_pi Word[Signed](0..1) D302 %MW0.302 Pådrag PI-reg 32 VAR_GLOBAL upff Word[Signed](0..1) D304 %MW0.304 Pådrag foroverkobling P-reg 33 VAR_GLOBAL udff Word[Signed](0..1) D306 %MW0.306 Pådrag foroverkobling D-reg 34 VAR_GLOBAL upp Word[Signed] D308 %MW0.308 Sum pådrag P-reg og P-del forover 35 VAR_GLOBAL upip Word[Signed] D310 %MW0.310 Sum pådrag PI-reg og P-del forover 36 37 38 VAR_GLOBAL KritiskHøy Bit M101 %MX0.101 Prosessverdien er kritisk høy, over 90% 39 VAR_GLOBAL KritiskLav Bit M102 %MX0.102 Prosessverdien er kritisk lav, under 10% 40 VAR_GLOBAL HøytAvvik Bit M103 %MX0.103 Avviket er for stort, 25% avvik 41 VAR_GLOBAL HøyAlarm Bit M60 %MX0.60 Aktiv når alarmen for høyt nivå går 42 VAR_GLOBAL LavAlarm Bit M61 %MX0.61 Aktiv når alarmen for lavt nivå går 43 VAR_GLOBAL AvviksAlarm Bit M62 %MX0.62 Aktiv når alarmen for stort avvik går 44 45 VAR_GLOBAL ForslagKp Word[Signed] D320 %MW0.320 Forslag til Kp fra autotuning 46 VAR_GLOBAL ForslagTi Word[Signed] D322 %MW0.322 Forslag til Ti fra autotuning 34

Label 28.04.2015 Data Name : Adressering_Slaver Local Label Setting Class Label Name Data Type Constant Device Address Comment 35

Label 28.04.2015 Data Name : AnalogTilDigital Local Label Setting Class Label Name Data Type Constant Device Address Comment 36

Label 28.04.2015 Data Name : Avvik Local Label Setting Class Label Name Data Type Constant Device Address Comment 37

Label 28.04.2015 Data Name : D-regulator Local Label Setting Class Label Name Data Type Constant Device Address Comment 1 VAR D_reg1 D-reg 38

Label 28.04.2015 Data Name : DataFraMaster Local Label Setting Class Label Name Data Type Constant Device Address Comment 39

Label 28.04.2015 Data Name : DataTilMaster Local Label Setting Class Label Name Data Type Constant Device Address Comment 40

Label 28.04.2015 Data Name : DigitalTilAnalog Local Label Setting Class Label Name Data Type Constant Device Address Comment 41

Label 28.04.2015 Data Name : Grenser Local Label Setting Class Label Name Data Type Constant Device Address Comment 42

Label 28.04.2015 Data Name : Manuell Local Label Setting Class Label Name Data Type Constant Device Address Comment 43

Label 28.04.2015 Data Name : NominellPådrag Local Label Setting Class Label Name Data Type Constant Device Address Comment 44

Label 28.04.2015 Data Name : OppdaterVerdier Local Label Setting Class Label Name Data Type Constant Device Address Comment 45

Label 28.04.2015 Data Name : P-forover Local Label Setting Class Label Name Data Type Constant Device Address Comment 1 VAR Preg_forover_1 P-reg_forover 46

Label 28.04.2015 Data Name : P-regulator Local Label Setting Class Label Name Data Type Constant Device Address Comment 1 VAR P_reg1 P-reg 47

Label 28.04.2015 Data Name : PI-regulator Local Label Setting Class Label Name Data Type Constant Device Address Comment 1 VAR PI_reg1 PI-reg 48

Label 28.04.2015 Data Name : PådragManuell Local Label Setting Class Label Name Data Type Constant Device Address Comment 49

Label 28.04.2015 Data Name : PådragRegulator Local Label Setting Class Label Name Data Type Constant Device Address Comment 50

Label 28.04.2015 Data Name : Samplingssteg Local Label Setting Class Label Name Data Type Constant Device Address Comment 51

Label 28.04.2015 Data Name : AntiWindup Local Label Setting Class Label Name Data Type Constant Device Address Comment 52

Label 28.04.2015 Data Name : Alarmtilstand Local Label Setting Class Label Name Data Type Constant Device Address Comment 53

Label 28.04.2015 Data Name : autotune1 Local Label Setting Class Label Name Data Type Constant Device Address Comment 1 VAR autotune_1 autotune 54

Label 28.04.2015 Data Name : Forstyrrelse Local Label Setting Class Label Name Data Type Constant Device Address Comment 55

Label 28.04.2015 Data Name : D-reg Function/FB Label Setting Class Label Name Data Type Constant Comment 1 VAR_INPUT Forsterkning Word[Signed] 2 VAR_INPUT Derivasjonstid Word[Signed] 3 VAR_INPUT filterkonstant Word[Signed] 4 VAR_INPUT Sampling Word[Signed] 5 VAR_INPUT Aktuell_forstyrrelse Word[Signed] 6 VAR_INPUT Forrige_forstyrrelse Word[Signed] 7 VAR_INPUT forrige_pådrag Word[Signed] 8 VAR Forsterkning32 Double Word[Signed] 9 VAR Derivasjonstid32 Double Word[Signed] 10 VAR filterkonstant32 Double Word[Signed] 11 VAR Sampling32 Double Word[Signed] 12 VAR Aktuell_forstyrrelse32 Double Word[Signed] 13 VAR Forrige_forstyrrelse32 Double Word[Signed] 14 VAR forrigepådrag32 Double Word[Signed] 15 VAR Pådrag32 Double Word[Signed](0..1) 16 VAR TfFF Double Word[Signed](0..1) 17 VAR KpDeltaV Double Word[Signed](0..1) 18 VAR StorTdKpDdeltaV Double Word[Signed](0..1) 19 VAR TdKpDdeltaV Double Word[Signed](0..1) 20 VAR TfU_1 Double Word[Signed](0..1) 21 VAR_OUTPUT Pådrag Word[Signed] 56

Label 28.04.2015 Data Name : P-reg Function/FB Label Setting Class Label Name Data Type Constant Comment 1 VAR_INPUT Forsterkning Word[Signed] 2 VAR_INPUT Avvik Word[Signed] 3 VAR_INPUT u0 Word[Signed] 4 VAR Forsterkning32 Double Word[Signed] 5 VAR Avvik32 Double Word[Signed] 6 VAR u032 Double Word[Signed] 7 VAR ekp Double Word[Signed](0..1) 8 VAR ekp2 Double Word[Signed](0..1) 9 VAR_OUTPUT Pådrag Word[Signed] 57

Label 28.04.2015 Data Name : P-reg_forover Function/FB Label Setting Class Label Name Data Type Constant Comment 1 VAR_INPUT Forsterkning Word[Signed] 2 VAR_INPUT Vk Word[Signed] 3 VAR Forsterkning32 Double Word[Signed] 4 VAR Vk32 Double Word[Signed] 5 VAR VkKp Double Word[Signed](0..1) 6 VAR Pådrag32 Double Word[Signed](0..1) 7 VAR_OUTPUT Pådrag Word[Signed] 58

Label 28.04.2015 Data Name : PI-reg Function/FB Label Setting Class Label Name Data Type Constant Comment 1 VAR_INPUT Ts Word[Signed] Samplingstid 2 VAR_INPUT Integrasjonstid Word[Signed] 3 VAR_INPUT Forsterkning Word[Signed] 4 VAR_INPUT Avvik Word[Signed] 5 VAR_INPUT ForrigeAvvik Word[Signed] 6 VAR_INPUT ForrigePaadrag Word[Signed] 7 VAR RestUik Double Word[Signed] 8 VAR Tih Double Word[Signed](0..1) 9 VAR ForrigeRest Double Word[Signed] 10 VAR Uik Double Word[Signed](0..1) 11 VAR Ts32 Double Word[Signed] 12 VAR integrasjonstid32 Double Word[Signed] 13 VAR forsterkning32 Double Word[Signed] 14 VAR avvik32 Double Word[Signed] 15 VAR forrigeavvik32 Double Word[Signed] 16 VAR forrigepaadrag32 Double Word[Signed] 17 VAR ekp Double Word[Signed](0..1) 18 VAR UtvidetTih Double Word[Signed](0..1) 19 VAR KpDe Double Word[Signed](0..1) 20 VAR MindreKpDe Double Word[Signed](0..1) 21 VAR UikU0 Double Word[Signed] 22 VAR Pådrag32 Double Word[Signed] 23 VAR test1 Double Word[Signed] 24 VAR test2 Double Word[Signed] 25 VAR_OUTPUT Pådrag Word[Signed] 59

Label 28.04.2015 Data Name : autotune Function/FB Label Setting Class Label Name Data Type Constant Comment 1 VAR_INPUT Avvik Word[Signed] 2 VAR_INPUT ForrigePådrag Word[Signed] 3 VAR_INPUT Nivå Word[Signed] 4 VAR_INPUT ForrigeNivå Word[Signed] 5 VAR Tid Word[Signed] 6 VAR Topp_Nivå Word[Signed](0..1) 7 VAR Bunn_Nivå Word[Signed](0..1) 8 VAR NyPeriode Bit 9 VAR StartRegning Bit 10 VAR_CONSTANT Konstant Double Word[Signed] 32385 11 VAR Bunn32 Double Word[Signed] 12 VAR Topp32 Double Word[Signed] 13 VAR Kk Double Word[Signed](0..1) 14 VAR Kp_1000 Double Word[Signed](0..1) 15 VAR Kp32 Double Word[Signed](0..1) 16 VAR Periodetid Word[Signed](0..1) 17 VAR Tk Double Word[Signed] 18 VAR Ti_100 Double Word[Signed](0..1) 19 VAR Ti32 Double Word[Signed](0..1) 20 VAR_OUTPUT KpForslag Word[Signed] 21 VAR_OUTPUT TiForslag Word[Signed] 22 VAR_OUTPUT Pådrag Word[Signed] 60

Høgskolen i Sør-Trøndelag Simuleringsnotat Prosjektoppgave i Styresystemer 2AEL13H våren 2015 Gruppe 6 Emil Hatletveit Kristian Strøm Terje Magnus Sørensen Stian Berg Dyrnes Snorre Vongraven Andreas Haugen 19.04.2015

Sammendrag-TMS Simuleringsnotatet viser våre simuleringer og modelleringer av prosessen til prosjektet. Dette er gjennomført for å lette arbeidet med å finne regulatorinnstillinger for PLS regulatoren. Det er gitt et krav om innsvingingsforløp av typen minimum areal. Prosessen er bygd opp av en pumpe på innløpet, en tank og tre magnetventiler. Innløpstrømmen er bestemt av innløpsventilen som skal reguleres. Utløpet har tre magnetventiler som er festet parallelt (bestemmer utløpet). Regulatoren som blir benyttet er av typen PI, det skal i tillegg være mulighet for foroverkopling av typene P/D/PD. Foroverkoblingen måler dirkete på flowmåleren, og vil bidra til at tidsforsinkelsen i nivåmåleren blir mindre synlig. Ut i fra tidligere erfaringer med bruk at modellerte verdier på virkelige tanker har vi ikke så store forhåpninger om at innstillingene fungerer optimalt på tank-riggen. For å finne innstillinger, har vi gjennomført logging av forskjellige senarioer på tanken, bant annet tømming og fylling. Det ble utfra disse loggingene laget en modell i Simulink og Matlab. ii

Innhold Sammendrag-TMS ii 1 Innledning TMS 4 2 Krav til regulering TMS 6 3 Krav regulator - TMS 6 4 Plotting av sprangrespons - TMS 7 5 Målinger, utregninger og modellering 8 5.1 Fylling av tanken-sv 9 5.2 Utløpsventiler-SV 10 5.3 Tank-SV 12 5.4 Innløpsventil-SV 13 5.5 Signalgiver-AH 14 5.6 Omformer-AH 15 5.7 Måleelement-AH 16 5.8 Regulator med foroverkobling og anti-windup-sv 17 5.9 Foroverkobling-SV 18 6 Reguleringsstrategi TMS 19 7 Frekvensanalyse-AH 20 8 Reguleringsalternativer-AH 23 9 Forsøk med verdier på tankriggen 25 10 Konklusjon TMS 26 10 Litteraturliste - TMS 27 iii

1 Innledning TMS Entankprosjektet er nivåregulering av en sylindrisk tank. Prosessen har en pumpe som går med fast turtall, der pådraget reguleres av en pneumatisk ventil som er montert på toppen av tanken. Nivået måles med en trykkmåler. Det er disse to komponentene som trengs for å regulere nivået i tanken til å holde seg stabilt rundt 60%. Reguleringen blir testet med forskjellige sprang i utløpet. Innløpsventil tank Flowmåler Figur 1 - tankrigg Innløpsventilen blir styrt av et strømsignal fra PLS en. Signalet ligger mellom 4-20 ma. Det er en veldig rask ventil når den er på, men du har ganske stor tidsforsinkelse ved oppstartsfasen. Tanken er sylindrisk med en høyde på 64 cm og har en radius på 5,5cm. Volumet er omtrent 5,7 liter. Vi har valgt å la full tank være på 61cm og tom tank på 5cm, for å gjøre både avlesning og regulering enklere. Dette hindre overløp og forstyrrelser på nivåmåling. Nivåmåleren er en trykkmåler som er i bunn av tanken. Denne sender ut et signal fra 4-20 ma, noe som representerer 0 100 % nivå i tanken. Verdien sendes til PLS-en hvor verdien 4

blir representert fra 0 255, som bruker denne avlesningen til å regulere innløpet for å stabilisere nivået. Nivåmåleren sender 20 ma ved en vannstand på 61cm og 4mA ved nivået 5cm. Utløpet består av tre magnetventiler. Det er disse som utgjør forstyrrelsen som det skal simuleres. Det skal kjøres et sprang fra 1-3 åpne ventiler og motsatt. I figur 2 kan man se de tre ventilene montert på riggen. Dette er hurtige ventiler som går fra lukket til fullt åpen på veldig kort tid. Det blir derfor en lav tidsforsinkelse i selve spranget Figur 2 - utstrømmingsventiler 5

2 Krav til regulering TMS Ved referanse på 60 % og stabilt nivå (ikke stasjonært avvik) skal et sprang i utløpet fra 100 % til 33 % (fra tre til en åpen magnetventil) ha et innsvingingsforløp som tilsvarer minimum areal. Minimum areal tilsvarer 4-6 halvperioder innsvingingstid. - Det skal være raskest mulig innsvingingstid til et nivå som holder seg innenfor ±2 % av målområdet. - Ønsker minst mulig dynamisk avvik. 3 Krav regulator - TMS Krav: - Skal fungere som både P- og PI-regulator - Overganger mellom moduser og regulatortype skal være rykkfrie. - Skal ha mulighet for foroverkobling av P/D/PD-type Parametere du kan stille inn: - Proporsjonal forsterkning (Kp) - Integrasjonstid (Ti) - Referanse - Samplingstid - Parametere i foroverkoblingen o Kp o Td o N 6

4 Plotting av sprangrespons - TMS Vi ønsket å logge forskjellige verdier for å lage en overføringsfunksjon til simulinkmodellen. Dette gjorde vi ved hjelp av InTouch, som et verktøy for å lage HMI-grensesnitt. Dette ble gjort ved at vi laget et real-time vindu som vi hentet verdiene fra både nivåmåleren og flowmåleren, dette ga oss en graf som vist i figur 3. Figur 3 eksempel på logging av verdier i InTouch 7

5 Målinger, utregninger og modellering Figur 4 Modellering av tankriggen i simulink For å kunne simulere tankriggen på en tilfredsstillende måte måtte vi utføre målinger på prosessen, og bruke de målte verdiene til å utarbeide en matematisk modell. I de kommende sidene skal vi ta for oss disse målingene, og hvordan vi utarbeidet en akseptabelt nøyaktig modell rundt de. For å effektivisere arbeidet noe har vi tatt utgangspunkt i en tidligere modell utarbeidet av Anderas Haugen og Snorre Vongraven. 8

5.1 Fylling av tanken-sv Figur 5 Fylling av tank uten utløp Her har vi laget et sprang i pådraget fra 0 til 255(maks), uten noe utløp for å finne tiden det tar å fylle tanken. Fra pådraget(gul linje) til prosessverdien(rød linje) kan det se ut som prosessen har en tidsforsinkelse på 5 sekunder. 0.5 sekunder av dette ligger i systemet, de resterende er tiden det tar å fylle tanken opp til et nivå som trykkmåleren faktisk registrerer. Derfor kan vi se bort fra det meste av forsinkelsen, da vi aldri skal regulere så lavt i tanken. Vi ser også at oppfyllingen ikke er helt lineær. Dette kommer av at ventilen bruker i overkant av 5 sekunder på å åpne seg helt opp. Tanken bruker 14.55 sekunder på å bli fylt opp til 61 cm. Den blå linjen er flow-måleren, siden det ikke var noen åpne ventiler er de utslagene vi ser bare forstyrrelser. 9

5.2 Utløpsventiler-SV På tankriggen er det tre identiske utgangsventiler. For å finne ut av de forskjellige ventilkonstantene satte vi et fast pådrag på innløpsventilen for å få et stasjonært nivå i tanken. For å få resultater som gjenspeiler reguleringen best justerte vi pådraget slik at høyden ble i nærheten av arbeidspunktet. Når tanken har blitt stasjonær leser vi av flowmåleren, og bruker utstrømningen til å regne ut ventilkonstanten. Vi oppdaget underveis at det som i utgangspunktet er tre helt identiske ventiler har forskjellig utstrømning. I samråd med veiledere konkluderte vi med at dette bare kan skyldes plasseringen til ventilene på riggen. Ventil nummer to og tre ligger i parallell etter ventil nummer en, og har dermed lengre vei til utløpet, og følgelig mer friksjon. Vi valgte derfor å simulere med 1, 2 eller 3 åpne ventiler. Vi får da mindre valgfrihet når det gjelder utløp, da ventilene som brukes er satt. 1 ventil åpen tilsvarer da ventil nr 1, 2 ventiler tilsvarer ventil nr 1 og 2 åpen, og 3 ventiler tilsvarer alle 3 ventilene åpen. For 1 ventil åpen får vi følgende utregning: 6,10 l m 60s 1000 = 101.67 cm3 s Cv = qv h Cv1 = 101.67 cm3 s 31,5cm Cv1 = 18,12 cm2.5 s 10

Utregning for alle ventilkonstantene. Tabell 1 Utregninger av utløp ved 1,2 og 3 åpne ventiler Nivå i tank (cm) Flow (cm^3/s) Ventil konstant 1 Ventil åpen 31,5 101,7 18,12 2 Ventiler åpen 31,5 110 19,6 3 Ventiler åpen 31,5 115,8 20,63 11

5.3 Tank-SV Tanken vi bruker er en sylinder med nyttehøyde på 56 cm, og radius 5,5 cm. Dette gir et volum på 5,32 Liter. Den dynamiske ligningen for systemet blir dv dh = πr2 h (q inn q ut ), q ut = Cv h dv = πr 2 dh = 1 (qinn Cv h) πr2 Figur 6 Skjermdump av væsketank-blokken i Simulink 12

5.4 Innløpsventil-SV Tankriggens pneumatiske innløpsventil styres av et strømsignal på 4mA til 20mA. Den pneumatiske ventilen bruker ca 1 sekund på å starte opp i fra vi endrer pådraget, og litt over 5 sekunder fra 0 til 100% åpning. Bak ventilen står det et konstant vanntrykk matet fra en vannpumpe. For å finne overføringsfunksjonen til ventilen ville vi finne ut hvor mye som vann som går igjennom ventilen ved maks pådrag. Dette gjorde vi ved å dele tankens målbare volum på tiden det tar å fylle tanken. Ved gjentatte målinger kom vi fram til at den bruker 14.55 sekunder på å nå 100%, og vi får 5.32 l da et innløp på = 0.37 l 14.55 s s Dette vil selvfølgelig ikke være helt nøyaktig da noe av tiden blir brukt på å åpne ventilen helt opp. Vi fikk inntrykk av at ventilen var opp mot 100% åpen før vannstanden hadde kommet opp til 0 nivå, og velger derfor å se bort ifra dette. For å gjøre omregningen fra pådraget i ma til innløp i cm^3 må vi gange med 24.5. I tillegg til dette må vi bruke en førsteordens overføringsfunksjon slik at ventilen bruker i overkant av 5 sekunder på å nå 100% åpning. Figur 7 Skjermdump av regulatorventil-blokken 13

5.5 Signalgiver-AH Signalgiveren konverterer referansen som er i centimeter til milliampere. h = 0 56cm, I = 4 20mA Forholdet mellom centimeter og ampere blir da 16 56 = 2 7 Når ventilen er helt åpen (20mA) blir nivået i tanken 56cm. Figur 8 Signalgiver blokk 14