Myös korttimaksu toimii

Keskustelua ohjelmistosuunnittelun pohjaksi

Aloittaja Kremmen, 06.01.10 - klo:13:45

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

Kremmen

Tässä versio 0.1 vaihdelaatikon ohjelmiston lohkoista (kts liite).

Olen värikoodannut eri lohkot aikatasojen mukaan, eli kuvan alareunasta näkyy millä syklillä noita lohkoja olisi tarkoitus ajaa.
Kaikkein aikakriittisimmät toiminnot tapahtuvat suoraan raudassa ja täysin reaaliaikaisesti, vain niiden toimintaparametrit asetellaan softasta.

Seuraavassa lyhyesti miten toiminta on ajateltu:

Käyttäjä vuorovaikuttaa komentotulkin kanssa käyttäen apunaan syöttöön tarkoitettuja valitsimia ja kytkimiä, sekä näyttöä ja merkkivaloja. Komentotulkki huolehtii kokonaisuudessaan käyttäjäkokemuksesta mutta ei varsinaisesti puutu ohjattavan koneen toimintoihin.

Ajotilan ohjaus vastaanottaa komentotulkilta ohjeet työnkulkuun, sekä toimintokäskyt. Turvavalvonta huolehtii siitä, ettei konetta ohjata kiellettyihin ajotiloihin sekä tarvittaessa pysäyttää ajon. Ajotilan ohjaus suorittaa tarvittavat ohjauslähtöjen asetukset koneen siirtyessä aktiiviseen toimintatilaan ja päinvastoin.

Liikekoordinaattori laskee työkierron liikkeiden koordinaatit ja liikeradat, valitsee liikkeiden ohjausalgoritmit ja välittää ne akselisäätäjille. Liikekoordinaattori huolehtii myös liikkeiden synkronoinnin valmistelun ja välittää ne säätäjille. Turvavalvonta katkaisee liikkeiden ohjauksen koneen joutuessa kiellettyyn ajotilaan tai mikäli hätäseis aktivoidaan.

Akselisäätäjät ohjaavat steppereiden pulssigeneraattoreita koordinaattorilta saatujen liikekäskyjen mukaan. Karaenkooderi toimii liikkkeiden ohjearvokertoimen apumuuttujana ja synkronoinnin lähteenä jolloin liikkeet voidaan tahdistaa ja vaihelukita karan pyörimiseen.

Karaenkooderin luku ja dekoodaus sekä steppereiden PWM-signaalien generointi  tapahtuu prosessorin hardware-tasolla ohjelmiston toiminnasta riipumattomasti. Ohjelmisto ainoastaan asettelee raudassa tapahtuvan laskennan parametrit minkä jälkeen itse toiminnot ovat automaattisia.

Tämä selostus on hyvin ylimalkainen, joten monet yksityiskohdat jäävät vielä tämän perusteella lukijalle hämäriksi. Ennakkovastauksena yhteen peruskysymykseen, ohjelmisto on ajateltu toteuttaa käyttäen ajoympäristönä FreeRTOS 6.0.1 -reaaliaikakäyttöjärjestelmää (tai uudempia versioita sitä mukaa kuin niitä julkaistaan). FreeRTOS lienee maailman yleisimmin käytetty kontrollerikäyttis ja sisältää kaikki tässä tarvittavat piirteet, mukaanluettuna kellokeskeytykseen perustuva ns. pre-emptive skedulointi. Tämä piirre takaa aikakriittisille toiminnoille täsmällisen ajastuksen tarvitsematta huomioida sitä koodissa millään tavalla. Toisaalta käyttiksen koodista voidaan jättää kääntämättä kaikki tarpeettomat toiminnot jolloin sen resurssien kulutus minimoituu. Xmega128 on ehdottomasti riittävän iso ympäristö jotta tätä käyttistä voidaan siinä ajaa ilman mitään ongelmia.

Puuttuvia lohkoja jotka täydennetään myöhemmin: Kestomuistin käsittely konevakioiden ja muiden vakioasetusten talletukseen. Tämä toteutetaan käyttäen prosessorin EEPROM-muistia ja sille toteutetaan oma ohjainlohkonsa. Ulkoinen kommunikaatio sarjaportin avulla. Muitakin ehkä tunnistetaan kommenttien perustella ja ajan kanssa.

Tästä voitaisi siis aloittaa keskustelu niin saadaan hommaa eteenpäin.
Nothing sings like a kilovolt
Dr W. Bishop

ram

En kyllä musmuttamista löydä... eikä tuohon osastoon varmaan tule juuri muutoksia edes softaa tehdessä. Periaatteet vaikuttaa ihan järkeen käyviltä.

Kremmen

Tässä ensimmäinen luonnos ohjaimen ajotilakaavioksi.
Olen noudattanut enemmän tai vähemmän tarkasti perinteistä SDL-notaatiota jolla on minusta kiva hahmotella tilakaavioita.
Tässä joitakin lukuohjeita niille joita asia kiinnostaa, mutta SDL ei ole jokapäiväistä leipää:

  • Kaaviossa esitetään ohjelman tai modulin tilat ja tilasiirtymät; ei siis toiminnot. Ohjelma on jokaisella ajanhetkellä jossain kaavion tilassa tai siirtymässä tilasta toiseen.
  • Tilasta toiseen pääsee vain kaaviossa esitettyjen ehtojen toteutuessa. Muussa tapauksessa tila ei muutu. On mahdollista päätyä siirtymäehdon toteutuessa lopuksi samaan tilaan josta lähdettiin, mutta tässä kaaviossa niin ei (vielä) taphdu.
  • Tila on esitetty päistään pyöreällä laatikolla. Jokainen samanniminen tilalaatikko on sama tila ja siihen pätee kaikki tilaa koskevat ehdot. Piirtoteknisistä syistä on kätevää hajottaa tila joskus useampaan kohtaan kaaviossa, ninkuin tässäkin on tehty.
  • Tila jonka nimi on * vastaa mitä tahansa tilaa. Tämä on pikakirjoitusta kun halutaan esittää tilasiirtymä joka toteutuu missä tahansa tilassa. Näin vältetään samana toistuvan siirtymäpolun esittämistä jatkuvasti
  • Laatikko jossa on lommo sisäänpäin on saapuva viesti. Pystyviiva toisessa laidassa tarkoittaa, että viesti tulee ohjelmallisesti, muutoin käyttäjän aloitteesta
  • Laatikko jossa on kärki ulospäin on lähtevä viesti. Taas viiva tarkoittaa että viesti on signaali ohjelmalle, muutoin käyttäjälle.

Kun mietitte toimiiko/riittääkö, niin älkää tässä vaiheessa keskittykö toimintoihin, ne täydennetään myöhemmin tilasiirtymien yhteyteen, luultavasti toisilla esitystavoilla. Miettikää sen sijaan millaisiin tiloihin kone päätyy käyttäjän antamien viestien ja koneessa havaittujen tapahtumien perusteella. Verratkaa kaavion tiloja ja tapahtumia omaan järkeilyynne, ja jos havaitsette, ettei kaavio toimi niin kommentoikaa.
Nothing sings like a kilovolt
Dr W. Bishop

Powered by EzPortal
SMF spam blocked by CleanTalk