1 Sisällysluettelo 2 Alkuperäinen tehtävänkuvaus... 3 3 Yleistä projektista... 4 3.1 Suunniteltu työn rakenne... 4 3.1.1 Määrittelyvaihe... 4 3.1.2 Toteutusvaihe... 4 3.1.3 Integraatiovaihe... 4 4 Projektin toteutus... 5 4.1 Uudet ominaisuudet... 5 4.1.1 Master-sekvenssi... 5 4.1.2 Diagnostiikkasekvenssi... 6 4.1.3 Puhdistussekvenssi... 8 4.1.4 Lokitus... 8 4.1.5 Nopeat pinnankorkeuden mittaukset... 9 4.2 Muutokset aiempaan ohjelmakoodiin... 9 4.3 Ajankäyttö... 10 4.4 Kantapään kautta opitut asiat ja huomiot jatkokehitykseen... 11 5 Käyttöohje... 12 5.1 Master-näkymä... 12 5.2 Diagnostiikkanäkymä... 12 5.3 Puhdistusnäkymä... 14 5.4 Muutos sekvenssissä... 15 5.5 Vikatilanteet... 16 6 X-connector... 16 2
2 Alkuperäinen tehtävänkuvaus (Tässä alkuperäisellä tehtävänkuvauksella käytetään wiki-sivulla ollutta projektityön kuvausta. Siinä ei ole otettu huomioon mitään ohjaajan kanssa sovittuja muutoksia, ne löytyvät kappaleen 3 alta) Toteuta laboratorion vesiprosessiin ohjaajan määrittelyn mukaiset sekvenssiohjelmat ja -näytöt. * Ohjelmointiympäristö on Multiprog ja ohjelmointikielenä graafinen SFC-kieli (IEC 1131) * Sekvenssit muodostavat hierarkian, jossa pääsekvenssin alle toteutetaan alisekvensseinä esim. opetusprosessin käyttöön, laitteiston puhdistukseen ja mittausten kalibrointiin tarkoitettuja sekvenssiohjelmia. * Sekvenssit testataan kahdella tavalla: simulaattoria vastaan sekä oikealla laboratorioprosessilla. Simulaattorina käytetään VTT:n ja Fortumin Apros simulaattoria, johon on jo toteutettu vesiprosessin malli. * Valmiin simulaattorin liittäminen ohjauslogiikkaan OPC tekniikalla on erillinen ja itsenäinen osa tätä työtä, joka voidaan tarvittaessa erotella omaksi työkseen. 3
3 Yleistä projektista Projekti koostui kahdesta eri osiosta: projektin pääasiallisena tarkoituksena oli luoda valmis sekvenssiohjelma IEC 61131-3 kieltä käyttäen säätötekniikan laboratorion vesiprosessia varten. Tämä uusi sekvenssiohjelma rakennettiin sekä käyttämään aiemmin tehtyä, laboratoriotyössä käytettyä sekvenssiä joka muutettiin työssä alisekvenssiksi, että uusia osia, jotka olivat ns. pääsekvenssi jolla voidaan valita mitä alisekvenssiä laitteistolla halutaan ajaa että uudet alisekvenssit prosessin diagnostiikkaa ja puhdistusta varten. Alkuperäisen suunnitelman mukaan oli tarkoitus myös tehdä alisekvenssi laitteiston antureiden kalibrointia varten, mutta tämä ominaisuus korvattiin ohjaajan suostumuksella tekemällä lokitus sekvensseistä. Toisena osana projektista oli tutkia mahdollisuutta kytkeä PLC-simulaattori lopulliseen sovellukseen X- Connector -ohjelmalla. 3.1 Suunniteltu työn rakenne Suunnitteluvaiheessa jaoimme työn kolmeen vaiheeseen, määrittely-, toteutus- ja integraatiovaiheeseen. Nämä vaiheet jaettiin vielä erikseen pienempiin työpaketteihin. Työpakettien tarkempi sisältö kuvataan kohdassa 2.3 Ajankäyttö, mutta lyhyesti vaiheiden korkean tason sisältö oli seuraavanlainen: 3.1.1 Määrittelyvaihe Määrittelyvaiheessa tutustuttiin ohjelmistoihin ja valmiina annettuihin sekvensseihin sekä niiden alemman tason toiminnallisuuteen. Myös kaikki mahdolliset virtausreitit prosessissa taulukoitiin ja niiden riippuvuudet toimilaitteiden oikeasta toiminnasta selvitettiin. 3.1.2 Toteutusvaihe Toteutusvaiheessa ohjelmoitiin venttiilireittien testauksen sekvenssiohjaukset sekä moottoriohjaukset. Näitä reittejä käytettiin puhdistus- ja dignostiikkasekvensseissä. Myös käyttöliittymän valvomonäytöt pääsekvenssille ja alisekvensseille kuului tähän vaiheeseen, samoin kuin yksikkötestaus. 3.1.3 Integraatiovaihe Integraatiovaiheessa yhdistettiin valmiit sekvenssit toisiinsa ja käyttöliittymiinsä. Järjestelmään valmiiksi ohjelmoitu harjoitustyössä käytettävä sekvenssi yhdistettiin uuteen pääsekvenssiin. Viimeisenä osuutena integraatiovaiheessa tehtiin integraatiotestaus. 4
4 Projektin toteutus 4.1 Uudet ominaisuudet Pääosa uusista ominaisuuksista on kolmessa Sequential Function Chartissa (MASTER, DIAG, CLEAN). Kaikkia näitä ajetaan 100ms syklillä. 4.1.1 Master-sekvenssi Tässä SFC:ssä on hallintalogiikka eri sekvenssien valitsemiseen. MasterInit-askelessa alustetaan tarvittavat hallintamuuttujat. Master_X_Run ja X_Finished -tyyppiset muuttujat hallinnoivat eri sekvenssien ajoa. Tämän SFC:n tarkoitus on pitää alisekvenssit erillään, niin ettei kahta niistä voida ajaa samanaikaisesti. Kuva 1. Master-sekvenssin SFC. Run- ja Finished-muuttujat pitävät huolta, ettei kahta tai kolmea sekvenssiä voida ajaa samanaikaisesti. 5
4.1.2 Diagnostiikkasekvenssi Diagnostiikkasekvenssissä varmistetaan laitteiden toiminta. Ensin pyydetään käyttäjää tarkastamaan, että vedenpinnan korkeuden mittarit säiliöissä 100, 200 ja 400 ovat oikein. Tätä tietoa käytetään muiden antureiden ja toimilaitteiden toimivuuden tarkastamiseen. Sitten käyttäjää pyydetään kuuntelemaan, että pumpuista kuuluu ääntä kun niitä käytetään. Seuraavaksi, jos vettä ei ole tarpeeksi tai sitä on liikaa sekvenssin suorittamiseen, käyttäjää pyydetään lisäämään tai vähentämään ongelmallisten säiliöiden vesimäärää. Nämä vaiheet ovat riippuvaisia käyttöjärjestelmästä. Tämän jälkeen sekvenssi kulkee loppuun asti automaattisesti, pysähtyen joko pumppausreittien tarkastuksen jälkeen, jos viallisia venttiilejä havaittiin, tai kaikkien testien jälkeen, jos venttiilit toimivat. Pumppausreittien tarkastuksessa käydään läpi pienin määrä reittejä, joilla kaikkien venttiilien läpi tulee pumpattua vettä. Reitin kaikkien venttiilien todetaan toimivan, jos vedenpinta kohdesäiliössä muuttuu. Venttiilien oletettu hajoamistapa on kiinni jumittuminen, sillä laitteiston ollessa pitkään käyttämättä venttiilit ovat kiinni-asennossa. Auki jumittumista ei testata. Jos jokin reitti ei muuta kohdesäiliön vedenpinnan korkeutta annetussa ajassa, ajetaan mahdollisesti normaalien diagnostiikkareittien jälkeen ylimääräisiä reittejä ongelman tarkemmaksi paikantamiseksi. Jos yksikin reitti epäonnistui, annetaan käyttäjälle loppuraportti siitä mitkä venttiilit ovat mahdollisesti rikki. Jos kaikki reitit onnistuivat, seuraavaksi testataan säiliön 300 paineanturi ja pinnankorkeuden rajakytkimet, virtausanturi, lämmitin ja lämpömittarit. Tämän jälkeen annetaan loppuraportti kaikista laitteista. Sekvenssistä poistutaan master-sekvenssiin kun se keskeytetään tai raportti kuitataan käyttöjärjestelmästä. Tätä ennen muita alisekvenssejä ei voida ajaa. 6
Kuva 2. Diag-sekvenssin SFC. Ylhäällä init-vaihe ja vedenpinnan tasaus. Ensimmäinen monen actionin pino ja sen alapuolinen haarauma ovat normaalit pumppausreitit. Iso oikeanpuoleinen haara on ylimääräiset diagnostiikkareitit. Suoraan alas jatkuva osuus on muiden toimilaitteiden ja anturien testaus. 7
4.1.3 Puhdistussekvenssi Tämä sekvenssi puhdistaa kertynyttä ruostetta venttiileistä. Ensin se varmistaa että järjestelmässä on tarpeeksi vettä sekvenssin ajoon, ja pyytää käyttöjärjestelmän välityksellä apua käyttäjältä, jos näin ei ole. Vesi tasapainotetaan säiliöihin niin, että sitä on tarpeeksi sekvenssin suorittamiseen. Ensimmäinen puhdistustoimenpide on naksuttaa kaikkia on/off venttiilejä auki ja kiinni muutaman kerran. Sitten vettä pumpataan avoimia reittejä pitkin, ja yhtä venttiiliä kerrallaan suljetaan ja avataan, jotta mahdollinen irtoava ruoste ja lika saadaan liikkeelle putkista. Lopuksi palataan master-sekvenssiin. Kuva 3. Clean-sekvenssin SFC. Ylhäällä veden pinnan tasaus. Kahden actionin step on kaikkien venttiilien naksuttelu. Oikeassa haarassa pumppaaminen reiteille ja venttiilien sulkeminen yksi kerrallaan. 4.1.4 Lokitus Järjestelmään lisättiin lokitiedostojen kirjoittaminen ja tallennus. Yhteen lokitiedostoon tallennetaan, mitä sekvenssejä on ajettu milloinkin. Diagnostiikkasekvenssin ajosta tallennetaan lisäksi raportti, joka kertoo diagnostiikan tulokset. Lokitiedostojen kirjoitus tapahtuu visualisaatio-työtilan Local scripts - 8
toiminnolla, sillä VB-skriptaus tarjoaa valmiit työkalut tekstitiedostojen käsittelyyn. Lokitiedostot tallennetaan My Documents-kansioon. 4.1.5 Nopeat pinnankorkeuden mittaukset Projektiin lisättiin myös 100ms välein ajettaviin taskeihin FASTMEAS-ohjelma. Tämä toimii muuten kuten LIC100 ja LIC200 -ohjelmien pinnankorkeutta mittaavat lohkot, mutta ajetaan nopeammalla syklillä, joka lyhentää Clean- ja Diagnostic-sekvenssien ajoa huomattavasti. Ohjelma tuottaa pinnankorkeussuureet muuttujiin L100_FastMeasVal ja L200_FastMeasVal. Alkuperäiset muuttujat L100_MeasVal ja L200_MeasVal jätttiin koskemattomiksi. 4.2 Muutokset aiempaan ohjelmakoodiin Sovelluksen aiempi sekvenssiohjelma on muutettu yhteensopivaksi uuteen Master-sekvenssiin lisäämällä siihen Masterin tarvitsema pysähtymäblokki. Kuva 4. Muutokset tehty HMI_return toimintoon ja lisätty MAIN_start blokki 9
4.3 Ajankäyttö Projektiin suunniteltiin käytettäväksi 252 tuntia ja siihen meni yhteensä 258 tuntia. Projektisuunnitelmassa jaoimme projektin 15 työpakettiin ja arvioimme jokaisen työpakettiin kuluvaa aikaa. Työpaketin nimi Erotus Tunnit S Tunnit T 1. Project plan -2 18 20 2. X-connector feasibility 0 6 6 3. Tutustuminen ohjelmistoihin ja nykyisiin ohjelmiin. -10 18 28 4. Pääsekvenssin suunnittelu ja toteutus, huom. Rinnakkaisajo 0 9 9 5. käyttöliittymien suunnittelu ja toteutus -7 15 22 6. Kaikkien mahdollisten virtausreittien taulukointi ja laitteiden toimivuusriippuvuuksien selvittäminen 0 12 12 7. Venttiilienreittien ohjelmointi. 13 reittiä yhteensä. 12 39 27 8. Moottoriohjaukset venttiiliireitteihin 3 6 3 9. Itsediagnostiikkarutiinien detailisuunnittelu ja toteutus -9 12 21 10. Puhdistussekvenssin detailisuunnittelu toteutus -9 9 18 11. Labratyön sekvenssini tarvitsemien muutosten toteutus 3 6 3 12. Lokitus 7 27 20 13. Integraatiotestaus -2 12 14 14. Dokumentointi 12 45 33 15. Raportointi -1 18 19 Kuva 5. Työpaketit ja niihin suunniteltu ja käytetty aika Kuten aina, tässäkään tapauksessa työpaketteihin käytetyt ja suunnitellut tunnit eivät täysin vastanneet toisiaan, mutta loppujen lopuksi, projekti valmistui ajallaan ja kokonaisuudessa tunteja käytettiin vain 2% enemmän aikaa kuin oli alunperin suunniteltu. Ylitykset johtuivat pääasiallisesti siitä, että emme allokoineet riittävästi aikaa ennalta arvaamattomien ongelmien selvittämiseen (kts. kohta 4.4) ja siitä, että sekä diagnostiikka- että puhdistussekvenssin toteutus vaati monimutkaisempaa logiikkaa ja enemmän testausta kuin olimme arvioineet alkuun. Lisäksi aikataulutimme jokaisen työpaketin sen mukaan, missä projektin vaiheessa ko. työpaketti pitäisi olla valmis. Jaoimme nämä välitavoitteet kuudeksi sprintiksi vaikka tosiasiallisesti projekti toteutettiin käytännössä iteratiivisen vesiputousmallin mukaan. 1. Sprint: Projektisuunnitelma 2. Sprint: Yksittäisten reittien sekvenssien toteutus 3. Sprint: Toimiva diagnostiikka-sekvenssi käyttöliittymineen. 4. Sprint: Toimiva puhdistus-sekvenssi käyttöliittymineen ja laboratoriotyön päivitys yhteensopivaksi pääsekvenssin kanssa. 5. Sprint: Lokitus ja integraatiotestaus 6. Sprint: Loppudokumentaatio 10
Kuva 6. Suunniteltujen ja tehtyjen työtuntien jakautuminen viikottain Aikataulutimme projektin työmäärän hyvin etupainoisesti, jos projekti veisi suunniteltua enemmän aikaa, verrattain pieni työmäärän lisäys loppuvaiheessa riittäisi saamaan projektin valmiiksi DL:n mennessä. Tämä oli erittäin hyvä ratkaisu sillä pysyimme alkuperäisessä aikataulussa varsin hyvin, poikkeuksena välitavoitteiden siirtyminen viikolla eteenpäin pääsiäisloman takia. Loppudokumentaatio siirrettiin tarkoituksella myöhemmäksi. 4.4 Kantapään kautta opitut asiat ja huomiot jatkokehitykseen SFC-ohjelmoinnissa törmättiin muutamaan standardin tuottamaan ongelmaan ja erikoisuuteen. Näistä tärkeimpiä ovat ohjelman kulkuun vaikuttavat erikoisuudet. Actionit ajetaan aina actionin ollessa aktiivinen, ja silloin kun se lakkaa olemasta aktiivinen. Koska pulse tyyppinen action (P) on aktiivinen yhden ohjelmasyklin ajan, se ajetaan kahdesti. Actionia ei voi ajaa vain kerran, vaan sen sisään on ohjelmoitava flip-kytkin joka estää koodin suorittamisen kahdesti. Samanaikaisesti aktiiviset actionit suoritetaan aakkosjärjestyksessä. Kun tarkastetaan, voidaanko stepistä siirtyä seuraavaan, tarkastukset tehdään vasemmalta oikealle. Tästä syystä stop-stepit ovat kaaviossa aina vasemmalla. Screenien vaihto visualisaatiossa yritettiin toteuttaa flowcharteilla, mutta niitä ei saatu toimimaan. Sen sijaan kaikki screenin vaihdot toteutettiin conversion scripteillä, jotka tietystä muuttjuan arvosta suorittivat yksikkmuunnoksen sijaan sivunvaihdon. OpenScreen -funktion havaittiin, manuaalista poiketen, ottavan parametrina seuraavan screenin nimen, eikä screen-objektia. Jos jossain vaiheessa pinnan tason mittausten aikaväliä muutetaan 1000ms syklistä, kannattaa tarkastaa kaikkien uusien SFC-kaavioiden init-lohkot. Niissä on käytetty erikseen haettuja nopeita mittauksia, sillä mittauksen suodatuksen takia sen on annettava tasautua suodatusajan verran (10 sykliä) jotta käytettävä pinnankorkeuden arvo on oikea. Käytettävä väylä ei pysty toteuttamaan mitä tahansa määrää ohjausmuuttujien muutoksia yhdessä syklissä. Kaikkien on/off -venttiilien avaaminen kerralla onnistuu, mutta jos samalla yrittää asettaa arvot propoventtiileille, ohjelma kaatuu ja menee epävakaaseen tilaan, jossa laitteisto saattaa käyttäytyä odottamattomasti. 11
5 Käyttöohje 5.1 Master-näkymä Master-ruutu on tarkoitettu ohjelman käynnistämistä varten, eikä sekvenssejä voida ajaa ellei niitä ole käynnistetty Master-ruudun kautta. Master-ruudussa valitaan ajettava ohjelma kolmesta vaihtoehdosta: alkuperäisestä sekvenssiohjauksesta, diagnostiikasta tai puhdistusohjelmasta. Alkuperäiseen sekvenssiohjaukseen päästään valitsemalla To Process, diagnostiikkaan valitsemalla To Diagnostics ja puhdistusohjelmaan valitsemalla To Cleanup. Sekvenssiin siirtyminen kirjaa ohjelman lokitiedostoon merkinnän kyseisen sekvenssin käynnistämisestä. Diagnostiikasta ja puhdistuksesta näytetään myös siirtymänappien yläpuolella asianomainen viesti edellisen ajokerran tapahtumasta. Vaihtoehdot ovat joko onnistuneesti suoritettu ajo tai keskeytetty ajo, ja diagnostiikassa lisäksi viesti virheiden löytymisestä. Kuva 7. Master-näkymä 5.2 Diagnostiikkanäkymä Diagnostiikkasekvenssin alussa täytyy tehdä audiovisuaalisia havaintoja laitteistosta, jotta automaattiset ajot voidaan suorittaa. Ensimmäinen askel on tarkistaa laitteistosta löytyvien vesisensorien toimivuus 12
tarkistamalla vastaavatko vasemmalla esitetyt vedenkorkeusarvot säiliöiden oikeisiin pinnankorkeuksiin. Mikäli vesitasot eivät täsmää, kyseisessä anturissa on vikaa. Tämän jälkeen järjestelmä pyrkii automaattisesti tasapainottamaan vesisäiliöt diagnostiikka-ajon keskeytymätöntä suorittamista varten. Lisäksi tarkistetaan, onko järjestelmässä ylipäänsä tarpeeksi vettä. Mikäli jompi kumpi ei onnistu, täytyy nämä toimenpiteet suorittaa manuaalisesti diagnostiikan jatkamiseksi. Kuva 8. Diagnostiikan manuaalinen osuus Tämän jälkeen suoritetaan moottoritarkastus kuuntelemalla kolmea hyrähdystä. Mikäli äänimerkkejä kuuluu vähemmän, on jommassa kummassa moottorissa vikaa. Moottoreiden ollessa kunnossa, siirtyy diagnostiikka automaattitilaan, jossa se ajaa useita eri reittejä, ja tarkastelee reitin loppusijoitussäiliön pinnankorkeuden muutosta, joka kertoo reitin varrella olevien venttiileiden toimivuudesta. Mikäli jotakin kymmenestä reitistä ei kyetä ajamaan, ajetaan tarpeelliset lisäreitit viidestä vaihtoehdosta 13
perustuen viallisiin reitteihin. Diagnostiikka antaa koko ajan reaaliaikaista informaatiota sen etenemisestä alla olevan kuvan esittämällä tavalla. Kuva 9. Diagnostiikkasekvenssin automaattiosuus Reittiajojen jälkeen suoritetaan lisälaitteiden tarkastus. Nämä tarkastukset suoritetaan ainoastaan, mikäli kaikki reitit kyettiin suorittamaan onnistuneesti. Tämä siksi, että jotkin näistä tarkastuksista vievät enemmän aikaa kuin muut, eikä niiden suoritus ole oleellista, mikäli jokin reitti on hajalla. 5.3 Puhdistusnäkymä Puhdistussekvenssi on täysin automaattinen ajo. Se ei tarvitse käynnistämisen jälkeen lisätoimenpiteitä, mutta sen toimintaa on suotava valvoa, sillä siinä ei ole vikatilanteiden havaintia. Mikäli havaitset epäilyttävää toimintaa, suosittelemme ajamaan diagnostiikkasekvenssin. Sekvenssin lopuksi Done - napin painallus kirjaa lokiin onnistuneesti suoritetut puhdistussekvenssin. 14
Kuva 12. Puhdistussekvenssin ajo 5.4 Muutos sekvenssissä Sekvenssinäkymään on tehty muutos, joka mahdollistaa sekvenssistä siirtymisen takaisin uuteen päänäkymään. Napin painaminen myös kirjaa yleislokiin merkinnän sekvenssin käytön lopetuksesta. 15
Kuva 13. Sekvenssin käyttöliittymämuutos 5.5 Vikatilanteet Fyysisistä laiterajoituksista johtuen järjestelmämme ei pysty eristämään aivan kaikkien venttiilien vikoja toisistaan. Järjestelmässä on siis kolme venttiiliä jotka sijainnistaan johtuen myös estävät tiettyjen muiden venttiilien toiminnan selville saamisen, minkä takia järjestelmä merkitsee ne viallisiksi. Vikaantunut venttiili Mahdollisesti virheellisesti diagnosoidut venttiilit V102 V203 V304 V403 V301 V104 V204 V304 V401 V303 V103 V104 V404 Kuva 13. Taulukko mahdollisista virhediagnooseista 6 X-connector Projektisuunnitelmaan kuului tarkastella mahdollisuutta X-connector -ohjelman käyttöön. X- connectorilla voitaisiin liittää vesiprosessin ohjausohjelmisto simuloituun prosessiin, jotta ohjausjärjestelmään tehtäviä muutoksia voisi testata simulointijärjestelmässä. Ajankäytön salliessa olisi testattu simulaation ohjaamista X-connectorin avulla. Todettiin X-connectorin toimivan kahden OPC-palvelimen littämiseen testipalvelimilla (Matrikon OPC analyzer). Muuttujien liittäminen palvelinten välillä onnistui. Koska alkuperäinen aikataulu täyttyi nopeasti, valinnaista simulaattoriyhteyden konfigurointia ja testausta ei toteutettu. 16