7. Koneenohjausjärjestelmien suunnittelumallit OhAr 5.10. 2010 Veli-Pekka Eloranta
Sulautettujen järjestelmien mallikieli Sulake-projekti, 2008-2009 Arkkitehtuuriarviointeja (ATAM) teollisuuskumppanien kanssa Sivutuotteena n. 50 suunnittelumallin kieli Julkaistaan mahdollisesti kirjana (2011?)
Suunnittelumallit Jokainen malli löydetty useampaan otteeseen, vähintään kaksi instanssia Malleja eri tasoilla Suuria suunnitteluratkaisuja koko järjestelmään Yksittäisen ohjaimen toimintaan vaikuttavia Ooh-bivious, itsestään selviä
Suunnittelumallin kuvaus Canonical Form (a.k.a Coplien form) Konteksti (Context) Ongelma (Problem) Voimat (Forces) Laatuattribuutteja (Muokattavuus, tehokkuus, saatavuus) Ratkaisu (Solution) Perustelut/seuraukset (Rationale/Consequences) Sukulaismallit (Related patterns) Tuloskonteksti (Resulting context)
Esimerkkimalleja Isolate Functionalities Heartbeat Watchdog Bus Abstraction Message Queue Separate Real Time Permission Request Variable Manager
Isolate Functionalities Kuinka ohjata tehokkaasti suurta työkonetta käyttämättä yhtä isoa ohjelmistokomponenttia ja suurta määrää kaapelointia toimilaitteiden välillä? Voimat Skaalautuvuus: Järjestelmässä voi olla monia toimilaitteita Vasteaika: Järjestelmän tulee tarjota riittävä vasteaika, jotta koneen turvallinen ohjaaminen on mahdollista. Muokattavuus: Järjestelmän laitekonfiguraatio voi vaihdella, jopa ajon aikana. Hinta: Kaapelointi on kallista. Vikasietoisuus: Kaapelointi saattaa vioittua käytön aikana. Ymmärrettävyys: Pienet osakokonaisuudet helpompi hahmottaa.
Ratkaisu Node 1 Node 2 Node 3 Node 4 Node 5 Node 6
Perusteluja Helpompi ymmärtää Laajennettavuus lisäämällä uusia yksiköitä Riippuvuus ainoastaan viestien välityksellä Väylä vikasietoisempi kuin nippu erillisiä kaapeleita. Viestien määrä voi olla liikaa väylälle Kuinka paljon pitää hajauttaa?
Bus Abstraction Kuinka vaihtaa käytetty väyläratkaisua tai -topologiaa siten ettei sovelluksiin jouduta tekemään suuria muutoksia? Voimat Joustavuus: Väylätopologian pitäisi olla näkymätön kehittäjille. Joustavuus: Kehittäjien ei välttämättä tarvitse tietää missä joku palvelu sijaitsee Muokattavuus: Järjestelmän solmujen konfiguraatio voi vaihtua elinkaaren aikana. Uudelleenkäytettävyys: Samaa abstraktiota voidaan käyttää useammalla solmulla. Siirrettävyys: Järjestelmän elinkaaren aikana saattaa olla tarpeellista vaihtaa käytettyä väyläratkaisua
Ratkaisu Node 1 Node 3 Send( node3, data, repeat=no) Callback( node1, data) Bus abstraction Send in bus-specific way Bus abstraction Receive in bus-specific way Bus
Perusteluja Solmut eivät riipu suoraan toisistaan, vaan käyttävät nimiä viitaamaan toisiinsa. Näin järjestelmää on helppo laajentaa ja muokata, jopa ajon aikana Lisää ymmärrettävyyttä, kun liikennöinti ei ole väyläratkaisu riippuvaista Saattaa lisätä latenssia Voi olla vaikea päätellä onko jokin palvelu paikallinen vai ei.
Heartbeat Kuinka havaita väylän tai jonkin solmun hajoaminen? Voimat Vikasietoisuus: Solmu (toimilaite) saattaa vikaantua ja muiden solmujen tulisi huomata tilanne mahdollisimman nopeasti lisäongelmien välttämiseksi. Vikasietoisuus: Kommunikointiyhteys (esim. Väylä) saattaa katketa ja solmujen tulisi huomata tämä mahdollisimman nopeasti. Saatavuus: Mikäli solmu tai väylä vikaantuu, pitäisi tämä huomata mahdollisimman nopeasti, jotta saatavuus voidaan taata.
Ratkaisu Supervisor Node Tietyin aikavälein Alive? OK Vastaus tietyn aikavälin sisällä Alive? OK
Perusteluja Nopea kaatumisen havainnointi lisää vikasietoisuutta. Voi olla vaikeaa tietää onko vika yksikössä vai väylässä. Lisää viestiliikennettä.
Watchdog Miten havaita (osa)järjestelmän kaatuminen, jotta korjaaviin toimenpiteisiin voidaan alkaa mahdollisimman nopeasti? Voimat Vikasietoisuus: Toimilaitteen ohjelmisto voi kaatua/jumiutua/yms. Toimilaite pitäisi käynnistää uudelleen mahdollisimman nopeasti. Saatavuus: Korjaavat toimenpiteet tulisi aloittaa mahdollisimman pian, jottei järjestelmän saatavuus kärsisi. Hinta: Redundantit laitteet voivat olla liian kalliita. Suorituskyky: Ylimääräisiä viestejä (HEARTBEAT) ei voida lähettää väylälle.
Ratkaisu Node A Watchdog Node B
Perusteluja Lisää vikasietoisuutta Voidaan toteuttaa raudalla tai softalla. Voi mahdollisesti käynnistää vikaantuneen prosessin uudestaan. Voi olla vaikeaa säätää odotusaika oikein. Vahtikoiran on oltava muusta järjestelmästä riippumaton.
Message Queue Kuinka mahdollistaa asynkroninen viestien käsittely kommunikaatioväylän molemmissa päissä? Voimat Vikasietoisuus: Kaikki viestit tulisi käsitellä, yhtäkään viestiä ei saisi jättää huomiotta. Ennustettavuus: Lähetettävien (tai vastaanotettavien) viestien määrää ei voida ennakoida. Ennustettavuus: Viestit tulisi käsitellä siinä järjestyksessä kuin ne vastaanotetaan. Resurssien käyttö: Kaikki viestit tulisi käsitellä mahdollisimman nopeasti.
Ratkaisu Node 1 Node 2 Send queue Send queue Receive queue Receive queue
Perusteluja Molemmilla kanavan päillä on aikaa käsitellä viestit kiireettä. Väylän käyttöastetta voidaan kasvattaa. Viestijärjestys säilyy. Voi lisätä latenssia. Puskurin kokoa voi olla vaikea päättää.
Separate Real Time Kuinka tarjota korkeantasonpalveluja käyttäjälle vaarantamatta reaaliaikatoimintojen turvallisuutta? Voimat Turvallisuus: Korkeantasonpalvelut eivät saa häiritä reaaliaikatoimintoja, koska se voisi johtaa järjestelmän virheelliseen toimintaan. Esim. Laskennan deadlineja ei saavuteta. Testattavuus: Reaaliaikatoimintojen testaaminen erillään korkeantasonpalveluista pitäisi olla mahdollista. Ymmärrettävyys: Korkeantason ohjelmistojen kehittäminen on helpompaa kun ei tarvitse välittää reaaliaikavaatimuksista. Vasteaika: Reaaliaikatoimintojen tulee toimia tietyissä rajoissa, esim. Jarrujen ja muiden ohjausten vasteaika tulee olla riittävä.
Ratkaisu Communicates only over bus
Perusteluja Helpompi hallittavuus. Reaaliaikavaatimusten testaaminen helpottuu. Korkean tason kieliä ja kirjastoja voidaan hyödyntää helpommin.
Permit Request Kuinka voidaan varmistua, että yksittäisen toimilaitteen itsenäinen toiminta ei ole ristiriidassa koko järjestelmän tavoitteiden kanssa ja siten aiheuta vaaratilannetta? Voimat Hajautus: Järjestelmä on hajautettu Suorituskyky: Solmu saattaa tarvita tietoa useammalta muulta solmulta tehdäkseen päätöksen. Tämä saattaa aiheuttaa paljon väyläliikennettä. Turvallisuus: Koneenohjauksella tulisi olla lyhyt vasteaika, turvallisen toiminnan takaamiseksi.
Ratkaisu
Perusteluja On helpompaa säilöä tieto koko järjestelmästä yhdelle yksikölle. Yksittäisten yksiköiden ei tarvitse välittää koko järjestelmän tilasta. Tilatiedoissa voi olla latenssia. Lisää viestien määrää väylällä, muttei merkittävästi.
Variable Manager Kuinka voidaan tehokkaasti jakaa järjestelmän tila hajautetussa järjestelmässä? Voimat Tarkkuus: Järjestelmän tilatiedot ovat alati muuttuvia. Tehokkuus: Viestiliikenne tulisi minimoida. Skaalautuvuus: Järjestelmän tulisi olla skaalautuva solmujen tasolla. Laajennettavuus: Uuden toimilaitteen pitäisi päästä helposti käsiksi tilatietoon Mukautuvuus: Tilatieto ei saisi olla riippuvainen, tilatiedon tuottavan laitteen sijainnista. Käytettävyys: Haluttu tilatieto pitäisi olla helposti löydettävissä.
Ratkaisu Node 1 Node 2 Node 3 Variable Manager
Perusteluja Riippuen tilatietojen päivitysnopeudesta, jokaisella yksiköllä on riittävän hyvä kokonaiskuva. Tiedonvälitys on paikkariippumatonta. Tilamuuttujia voi olla niin paljon, että niiden käsittely on hankalaa.
Eikä siinä vielä kaikki Kysymyksiä? Lisää koneenohjausjärjestelmien suunnittelumalleja: http://practise.cs.tut.fi/files/publications/sulake/