Tilakoneet
State machines
Olli Savolainen
http://savolai.net/
Taustaa: Ohjelmistokehitys ja koneiden ohjaaminen
Ohjelmistokehityksessä tulee usein vastaan tilanteita, joissa
- Ohjelman tai laitteen käyttöä ohjaa jokin prosessi
- Ohjelman täytyy pitää kirjaa siitä, missä kohtaa prosessia milläkin ajanhetkellä ollaan
- Ohjelma käyttäytyy eri tavoilla riippuen siitä, missä tilassa, eli missä kohtaa prosessia ollaan
Tilakoneet toiminnan hallinnassa
Tilakone on ohjelmallinen kuvaus:
- Prosessin vaiheista (tilat; esim toasting, baking)
- Prosessin toimintaympäristön käyttäytymisestä (tapahtumat; esim DOOR_CLOSE)
- Ohjelman tai laitteen käyttäytymisestä kyseisessä toimintaympäristössä; tilojen toiminnot, esim. set_temperature(0);
(Wikipedia)
Tilakoneiden perusteet
- Tilakone alkaa umpinaisesta pallosta, josta on nuoli siihen tilaan, josta tilakoneen suoritus alkaa
- Varsinaiset tilat ovat UML:ssä laatikoita
- Ympäristön käyttäytyminen eli tapahtumat merkitään nuolin
- Tilakoneen loppuminen voidaan merkitä umpinaisella pallolla, joka on ympyröity
Tilakone: Tilat
-
Tilat merkitään laatikoina
- Tiloilla on nimi (laatikon yläosa)
- Tilojen aiheuttama sovelluksen käyttäytyminen:
- Tiloilla voi olla saapumis- ja poistumistoimintoja (laatikon alaosa, entered/entry: ja exit:)
- Tiloilla on nimi (laatikon yläosa)
Huom! Kaikki sovelluksen käyttäytyminen tulee olla ilmaistuna tilakoneessa: Jos sitä ei ole tilan entered/exit/tms. tapahtumana, sitä ei tapahdu!
Esimerkki: https://wiki.metropolia.fi/display/koneautomaatio/Yksinkertainen+Caps+Lock+-tilakonemalli
Tilakone: tapahtumat
- Tilakoneessa siirtyminen tilasta toiseen onnistuu tapahtumien seurauksena
- Tapahtuman nimi merkitään tilasta toiseen vedetyn nuolen yhteyteen
-
Jos nuolen yhteyteen ei ole merkitty tapahtumaa, kyseisestä tilasta toiseen ei voida koskaan siirtyä kyseistä nuolta pitkin
- (poikkeuksena aloitustilapallo, josta siirrytään ensimmäiseen tilaan automaattisesti koneen käynnistyessä)
Tilakone: tapahtumat 2
Samasta tilasta ei voi lähteä montaa nuolta, jotka seuraavat samasta tapahtumasta
- Toisin sanoen: tilakone ei voi siirtyä kahteen eri tilaan yhtäaikaa
-
(→ Jos järjestelmässä on N tapahtumaa ja M tilaa, nuolien [siirtymien] korkein mahdollinen määrä tilakoneessa on M×N)
Tilakoneiden käyttäytymisen ohjaus
Tilakoneen käyttäytyminen (tilasta toiseen siirtyminen) voi vaihdella kahdella eri tavalla:
- Tilasta on useampi siirtymänuoli, jotka reagoivat eri tapahtumiin ja johtavat eri tiloihin siirtymiseen
- Tilakoneessa käytetään haarautumista (merkitään salmiakkikuviolla) joka johtaa eri tilaan riippuen totuusarvon vertailun tuloksesta
Tilakoneen käyttäytymisen ohjaus
Sisäiset muuttujat ja haarautuminen
- Tilakoneen sisäiset muuttujat määritellään yleensä nuolen tilakoneen alkutilasta (umpinainen pallo) ensimmäiseen tilaan, esim KERROS=1, TAVOITEKERROS=1
- Sisäisiä muuttujia voidaan käyttää haarautumisen (salmiakkikuvio) yhteydessä
- Huomaa, että salmiakkikuvioon osoittavassa nuolessa oltava myös nimetty tapahtuma!
Tilakoneen käyttäytymisen ohjaus
Sisäiset muuttujat ja haarautuminen
Tavallisia ohjelmointikielen vertailuoperaattoreita (< > <= >= !) käytetään haarautumisen/salmiakkikuvion totuusarvovertailussa
(Salmiakkikuviosta pois johtava nuoli)
- Esim. hissiesimerkki:
- Salmiakkikuviosta lähtevä yksi nuoli, jossa lukee KERROS<TAVOITEKERROS, toinen jossa lukee KERROS>TAVOITEKERROS ja kolmas, jossa lukee KERROS==TAVOITEKERROS
- Ks. myös Tuubissa:
tivolikone-tiedote,
pullonpalautuskone-
tehtävä
Sisäkkäiset tilakoneet
- Joskus on tarpeen tehtä monimutkaisempia tilakoneita, joissa jotkin tilat sisältävät kokonaisia erillisiä tilakoneita
- → Ns. sisäkkäiset tai alitilakoneet
(hierarkkiset tilakoneet)
- Näin voidaan hahmottaa isompi kokonaisohjelma yhtenä tilakoneena (Esim. pullonpalautus),
- ja yksittäinen alitehtävä sisäkkäisenä tilakoneena (esim. yksittäisen pullonpalautukseen syötetyn kappaleen/pullon tunnistaminen)
- → Ns. sisäkkäiset tai alitilakoneet
Yhtäaikaiset, paralleeliset tilakoneet
- Joskus sisäkkäiset tilakoneet voivat olla paralleelisia eli yhtäaikaisia (ks. seuraava kalvo)
Ks. esim. http://www.dossier-andreas.net/software_architecture/fsm.html
Paralleelinen sisäkkäinen tilakone
Palautusnappulan käsittely käynnissä kappaleenkäsittelyn kanssa yhtäaikaisesti!