• Ei tuloksia

5.3 Ohjelmien rakentaminen

5.3.3 Turvaportin ohjelma

Turvaportin ohjelma oli myös hyvin yksiselitteinen: kun portti on kiinni ja painetaan luki-tuspainiketta, portin lukitus aktivoituu. Lukitus avautuu, kun se avataan avauspainik-keella, hätä-seis -toiminto aktivoituu tai jos portti avataan väkisin lukitustilassa. Hätä-pysäytyksen aktivoitumisella turvaportin lukitus aukeaa, koska jos prosessissa tapahtuu jokin häiriö, joka johtaa hätäpysäytykseen, portin saa auki häiriön poistoa varten. Jos portti avataan väkisin lukitustilassa, turvaportin lukitus aukeaa, ja samalla tapahtuu häly-tys, josta kerrotaan tarkemmin luvussa 5.4.7. Ohjelman toiminto tehtiin set-reset -lohkolla (kuva 31). Kun lohkon tuloportti (S) käy aktiivisena, se pitää portin lukitusta (%Q5.0) päällä niin kauan, kunnes resetointiportti (R1) käy aktiivisena.

KUVA 31. Turvaportin ohjelma 5.3.4 Moottorinohjauksen ohjelma

Moottorinohjaus aloitettiin tekemällä ohjelma, josta moottori saa asetusarvonsa (set-point). Moottori saa asetusarvonsa kahdesta paikasta: liukusäätimeltä tai I/O-kentältä, johon asetellaan haluttu asetusarvo manuaalisesti. Molemmat eivät voi olla aktiivisia yhtä

36

aikaa. Koska myöhemmin käytettävässä nopeudensäätölohkossa tarvittavan asetusar-von täytyi olla Real-tyyppinen muuttuja, tehtiin liukusäätimen asetusarvo samantapaisella toteutuksella kuin ultraäänianturit. Liukusäädin lähettää Int-tyyppistä dataa, joka muun-netaan Real-tyyppiseksi ja skaalataan moottorin minimi- ja maksimipyörimisnopeuden mukaan, jotka olivat 0 rpm ja 1500 rpm (kuva 32). Koska moottorin pyörimisnopeutta säädetään liukusäätimestä, säätimen minimi- ja maksimiarvoksi asetettiin kyseiset arvot.

Näin liukusäätimen asteikko saatiin vastaamaan moottorin pyörimisnopeutta.

Manuaalinen asetusarvo tehtiin pelkällä skaalauslohkolla. Lohkoon tuodaan suoraan käyttöliittymän I/O-kentästä Real-tyyppinen arvo, joka viedään taajuusmuuttajalle. Tämä olisi ollut mahdollista tehdä ilman lohkoakin viemällä arvo suoraan taajuusmuuttajalle, mutta tällä tavalla tuli ongelmia asetusarvon nollaamisessa, kun moottori sammutettiin tai vaihdettiin liukusäätimestä manuaalikäytölle.

KUVA 32. Asetusarvon luominen

Moottorin käynnistäminen ja sammuttaminen on yksinkertainen SR-lohkolla toteutettu oh-jelma. Moottori käynnistetään painikkeella, ja käynnistymiseen vaaditaan, että turvaportti on lukittuna. Moottori sammuu napista painamalla, hätä-seis -toiminnon aktivoitumisella, taajuusmuuttajan lukituksella ja turvaportin lukituksen aukeamisella (kuva 33).

37 KUVA 33. Moottorin päälle-pois -ohjaus

Moottorin nopeudensäätö tehtiin SinaSpeed-lohkolla (kuva 34). Lohkon EnableAxis-port-tiin tuodaan taajuusmuuttajan käynnistämiseen käytettävä tieto. AxisEnabled-portti akti-voituu, kun taajuusmuuttaja ja lohko ovat aktiivisia. SpeedSp-porttiin tuodaan aiemmin mainittu Real-tyyppinen nopeuden asetusarvo. ActVelocity antaa Real-tyyppisen todelli-sen moottorin pyörimisnopeuden. ConfigAxis-porttin tuodaan sanatyyppinen tieto Con-figSpeedlohkolta. AckError-porttia käytetään taajuusmuuttajan häiriöiden kuittaamiseen.

LockOut-portti aktivoituu, kun taajuusmuuttaja on lukitustilassa, esim. häiriön seurauk-sena, ja Error-portti aktivoituu, kun taajuusmuuttajalla on aktiivinen häiriö. HWIDSTW ja HWIDZSW -porteilla määritellään, mitä taajuusmuuttajaa ohjataan ja miltä taajuusmuut-tajalta tiedot saadaan.

38 KUVA 34. Moottorin nopeudensäädön lohkot

Moottorin käynnistymiseen vaaditaan, että ohjaus-sanan bitti 256.2 sekä bitit 257.1 – 257.7 ovat aktiivisia. ConfigSpeed-lohkossa voidaan asettaa näiden bittien tila, jotka ovat vakiona aktiivisia. Moottorin pyörimissuuntaa voidaan vaihtaa saman lohkon DirectionOf-Rotation-portissa. Kun portti aktivoituu, se invertoi moottorin nopeuden asetusarvon, ja näin moottori pyörii ”negatiiviseen suuntaan”. Tämä aiheuttaa sen, että myös todellinen moottorin pyörimisnopeus on negatiivinen. Moottorin pyörimisnopeus indikoidaan aina positiivisena lukuna pyörimissuunasta riippumatta. Tämä onnistui invertoimalla moottorin pyörimisnopeus, kun se meni negatiiviselle puolelle (kuva 35).

39 KUVA 35. Moottorin pyörimisnopeuden invertointi

Asetusarvo piti nollata aina, kun moottori sammuu tai vaihdetaan liukusäätimeltä manu-aaliohjaukseen ja toisinpäin. Moottorin sammumisella resetointi onnistui helposti MOVE-lohkolla (kuva 36). Jälkimmäisessä tavassa nollaaminen tapahtui käyttöliittymän painikkeeseen määritetyllä toiminnolla.

KUVA 36. Moottorin asetusarvon nollaus

40 5.4 Käyttöliittymän luominen

Kun siirretään dataa käyttöliittymästä turvaohjelmaan, täytyy ottaa huomioon muutamia asioita. Datan kirjoittaminen käyttöliittymästä suoraan turvaohjelmaan ei ole mahdollista seuraavista syistä:

- Käyttöliittymästä tulevat signaalit eivät ole turvallisuuteen liittyviä, joten niitä ei re-kisteröidä turvaohjelmassa. Virheet voivat johtaa ei-toivottuihin muutoksiin turva-ohjelman arvoihin, mikä lisää turvallisuusriskiä.

- Logiikan ja käyttöliittymän välinen kommunikointi on epäsyklistä. Seurauksena on, että käyttöliittymän kirjoitusoikeudet voivat tapahtua turvaohjelman käsittelyn ai-kana. Tämä voi johtaa datan korruptioon ja logiikan pysähtymiseen. (20, s. 31.) Ongelman voi ratkaista käyttämällä erillisistä datalohkoista rakennettua ”datapuskuria”

(kuva 37). Datapuskuriin tuodaan dataa turvaohjelmasta ja normaalista käyttäjäohjel-masta. Turvaohjelma ja normaali ohjelma eivät voi kirjoittaa dataa samaan datalohkoon, vaan niille pitää olla omat erilliset lohkot. Näin turvaohjelma voi hyödyntää dataa normaa-lista käyttäjäohjelmasta ja käyttöliittymästä, ja päinvastoin. (20, s. 31.)

KUVA 37. Datansiirto käyttöliittymän ja turvaohjelman välillä (20, s. 31)

41 5.4.1 Template

Templatet eli pohjakuvat ovat ikään kuin kehyksiä, joihin muut näyttökuvat sijoitetaan.

Pohjakuvaan on hyvä sisällyttää toimintoja, joita hyödynnetään useassa näytössä ja ne ovat aina saatavilla. Projektin pohjakuvaan sisällytettiin hätäpysäytyksen indikointi, taa-juusmuuttajan häiriön indikointi, pieni aktiivisten hälytysten indikointi, painikkeet eri si-vuille siirtymiseen, hälytysten ja häiriöiden kuittauspainikkeet sekä aika ja päivämäärä (kuva 38).

KUVA 38. Pohjakuva 5.4.2 I/O-kenttä

I/O-kentissä voidaan indikoida jokin prosessin arvoista tai sillä voidaan kirjoittaa arvoja logiikalle. Jos halutaan indikoida arvoja, kentälle määritellään prosessin tagi, jota halu-taan tarkastella, ja tyypiksi valihalu-taan output. Tämä estää kenttään kirjoittamisen ja se on tarkoitettu vain indikoimiseen. Kuvassa 39 on esitetty ultraäänianturin arvon indikointi I/O-kentässä. Kun taas halutaan kirjoittaa arvoja logiikalle, muutetaan tyyppi outputista inpu-tiksi. Tässä tapauksessa haluttiin asettaa pyörimisnopeuden asetusarvo moottorille.

42 KUVA 39. Ultraäänianturien arvojen indikointi 5.4.3 Painikkeet ja liukusäädin

Käyttöliittymän painikkeet ovat monipuolisia työkaluja. Niille voidaan määritellä hyvin pal-jon toimintoja aina tagien ja bittien arvojen asettamisesta käyttöliittymän Runtimen sulke-miseen. Käyttöliittymän painikkeilla voidaan korvata fyysisiä painikkeita. Tämä säästää aikaa ja vaivaa, kun painikkeita ei tarvitse erikseen asentaa ja johdottaa. Painikkeiden toiminta voidaan määritellä niiden events-sivulla. Projektissa painikkeita käytettiin pää-asiassa bittien ja tagien arvojen asettamiseen ja skriptien käynnistämiseen (kuva 40).

KUVA 40. Painikkeen toimintasivu

Liukusäädintä voidaan käyttää simuloimaan analogista viestiä (kuva 41). Tässä tapauk-sessa virtuaalinen liukusäädin korvasi fyysisen potentiometrin, jolla säädetään moottorin pyörimisnopeutta. Liukusäätimelle määriteltiin tagi ja annettiin minimi- ja maksimiarvot, jotka olivat aiemmin luvussa 5.3.4 mainitut 0 rpm ja 1500 rpm.

43 KUVA 41. Liukusäädin

5.4.4 Grafiikkalista

Grafiikkalistalla voidaan visualisoida objektia eri muodoissa, riippuen sille määritetyn ta-gin arvosta. Ensin grafiikkalistaan lisättiin kuva, jonka jälkeen sille määriteltiin arvo, milloin se on näkyvissä (kuva 42). Tässä tapauksessa haluttiin indikoida moottorin käymistä. Kun moottori on sammuksissa, moottori näyttäytyy harmaana. Kun moottori on käynnissä, se on vihreä. Koska moottorin käyminen on binäärinen tieto, harmaalle moottorille annettiin arvo 0 ja vihreälle 1.

KUVA 42. Grafiikkalista

On myös mahdollista asettaa arvoksi jokin alue, esim. kun moottorin pyörimisnopeus on välillä 1-400 rpm, moottori näyttäytyy vihreänä, ja alueella 401-800 rpm keltaisena, häi-riötilassa punaisena jne. Tässä tapauksessa pelkkä päällä-pois -tieto oli riittävä. Itse gra-fiikan lisääminen käyttöliittymään tehtiin graphic I/O -kentällä. Kentälle määriteltiin vain tagi ja grafiikkalista.

44 5.4.5 Objektien näkyvyys ja vilkkuminen

Joskus halutaan, että objekti on näkyvissä vasta haluttujen ehtojen toteutuessa. Tämä on käytännöllistä, kun halutaan säästää tilaa näytöltä tai piilottaa objektit, jotka eivät ole sillä hetkellä käytössä. Tässä tapauksessa haluttiin piilottaa liukusäädin, kun käsikäyttö on aktiivisena, ja piilottaa käsikäytön I/O-kenttä, kun liukusäädin on aktiivisena. Objektien piilottaminen onnistui objektin animations-välilehdellä olevalla visibility-asetuksella (kuva 43). Kun valittu tagi on aktiivinen tai tagin arvo on rajojen sisällä, objekti on joko näkyvissä tai piilossa, riippuen siitä kumpi asetus on valittuna.

KUVA 43. Objektien piilottaminen

Haluttiin, että hätä-seis -laatikko vilkkuu, kun hätä-seis on kuittaamatta. Objektien vilkku-minen tehtiin samalla animations-välilehdellä olevalla appearance-asetuksella. Tagiksi valittiin datalohkosta ”HS_kuitattava”, asetettiin arvoksi 1 ja määriteltiin se vilkkuvaksi (kuva 44).

KUVA 44. Objektien vilkkuminen

45 5.4.6 Pop-up -näytöt ja VBscript

Pop-up -näytöt ovat pieniä ikkunoita, joita voidaan avata vaihtamatta aktiivisena olevaa näyttökuvaa. Projektissa käytettiin pop-up -näyttöjä erilaisten ilmoitusten ja varoitusten indikoimiseen. Esimerkiksi yksi ilmoituksista tapahtui, jos yritti lukita turvaporttia ja portti ei ollut kiinni (kuva 45). Pop-up -näytöillä on monipuolinen käyttötarkoitus. Usein niissä indikoidaan arvoja, jotka eivät ole kovin tärkeitä prosessin kannalta, ja niitä ei haluta lisätä päänäyttöön tilan säästämisen vuoksi.

KUVA 45. Pop-up -näyttö, joka indikoi portin aukiolon

WinCC:ssä hyödynnetään VBscript skriptikieltä, joka on Windowsin ohjelmointikieli. Pro-jektissa käytettiin VBscriptejä avaamaan pop-up -näyttöjä. Pop-up -näyttöjä avataan ShowPopupScreen komennolla (kuva 46).

KUVA 46. VBscript pop-up -näyttöjen avaamiseen 5.4.7 Hälytysten luominen ja hälytyshistoria

Hälytysten luomiseen on olemassa useampi tapa, mutta tässä tapauksessa käytettiin Program_Alarm-toimintalohkoja, jotka sijoitettiin funktiolohkoon ”Hälytykset” (kuva 47).

46

Funktiolohkolle on oma datalohko. Ensin täytyi määritellä, miten hälytys syntyy. Luvussa 5.3.3 kerrottiin, että halutaan hälytys, kun turvaportin avaa lukitustilassa.

KUVA 47. ”Hälytykset” funktiolohko ja Program_Alarm toimintalohko

Turvaportin avaaminen lukitustilassa aktivoi datalohkossa olevan Hälytys_1-bitin, ja näin saadaan aikaan hälytys. Program_Alarm-lohkon SD_1-porttiin tuodaan teksti, joka indi-koidaan hälytyslistassa (kuva 48). Jokaiselle hälytykselle voidaan lohkon asetuksista va-lita, vaaditaanko hälytykselle kuittausta.

KUVA 48. Aktiivisten hälytysten näyttöikkuna

Jos halutaan hälytyshistoria, jotta hälytyksiä voidaan myöhemmin tarkastella, tarvitaan hälytysloki. Hälytysloki luodaan Historical data -sivulla ja sille määritellään

tallennus-47

paikka, esim. käyttöliittymän USB-portissa oleva muistitikku. HMI alarms -sivulla määri-tellään tallennettavat hälytysluokat sekä hälytysloki, johon ne tallennetaan. Hälytyshisto-rian indikoinnissa käytetään samanlaista Alarm view -paneelia kuin aktiivisten hälytysten indikoinnissa, mutta paneelin asetuksista valitaan Alarm log aktiiviseksi ja määritellään loki, jota tarkastellaan (kuva 49).

KUVA 49. Hälytyslokin määrittely

48