Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0
Wiki Markup
# Suunnittele luokkamalli koneelle. Luokka Kone koostuu luokista Toimilaite ja  Prosessi. Toimilaite koostaa luokan Liikeanturi ja VoimaAnturi. Nämä  luokat taas perivät luokan Anturi. Tee luokista ensin UML-

...

malli  Dia:lla  ja sitten Qt:llä.

...


# Muokkaa mallia siten, että teet luokan dialogi ja laitat sen jäseneksi luokan Kone. Periytä Kone luokasta QThread.

...

 
# Korjaa Dialla tekemä malli edellisen tehtävän mukaiseksi.
# Lisää anturille jäsenet double vahvistus, double offset, double tulo, double tuloSiYksikkona, double taarattuTuloSiYksikkona, double KeskiarvoistusVektori\[10\], i , int paikkaVektorissa,  double Summa

...


# Tee käyttöliittymään nappi

...

ui

...

Dialog

...

 

...

Anturi

...

MittaaTulo->

...

->Mittaa

...

 

...

 

...

MittaaTulonArvo->

...

 

...

->PaivitaTulo

...

 

...

ArvonNaytto<-

...

 

...

<- LahetaMitattuArvo(double)

...

 MittaaTulo ja&nbsp; sille Dialog luokkaan slot Mittaa. Laita myös LineEdit tai lcd, josta voit lukea mitatun arvon.
# Tee Dialog luokkaan signaali MittaaTulonArvo.
# Tee luokkaan Anturi slot void PaivitaTulo();
# Yhdistä signaali MittaaTulonArvo slotiin PaivitaTulo.
# Emitoi (lähetä) signaali MittaaTulonArvo käyttöliittymän slotissa Mittaa.
# Tee luokkaan Anturi signaali LahetaMitattuArvo(double) ja ota se vastaan käyttöliittymässä.
|| ui || Dialog || || Anturi ||
| MittaaTulo-> \\ | \->Mittaa | | \\ |
| | MittaaTulonArvo-> | | \->PaivitaTulo |
| | ArvonNaytto<\- \\ | | <\- LahetaMitattuArvo(double) |
# Laita jokin arvo emitoimaasi signaaliin LahetaMitattuArvo(double) ja testaa, että arvo tulee näytölle.
# Tee käyttöliittymään Horizontal Slider ja välitä se signaali - slot mekanismilla&nbsp; Anturi\- luokan muuttujaan tulo.
# Tee Anturi-luokkaan funktio Paivita. Kutsu tätä edellisessä tehtävässä tekemästäsi slotista.
# Laita Paivita - funktion sisällöksi tuloSiYksikkona=tulo*vahvistu+offset;

...


# Testaa, että vahvistettu tulo tulee näytölle.

...


# Tee&nbsp; Umbrello \-ohjelmalla UML-malli tähän asti tekemästäsi softasta.

...


# Tässä tehtävässä toteutamme asynkronisen säikeen, joka lukee anturia ja lähettää signaalilla tiedon käyttöliittymälle. Tee Kone luokkaan run-funktio

...

 ja&nbsp; siihen forever toistorakenne. Katso mallia [säikeistetystä ohjelmasta

...

.|http://wiki.metropolia.fi/pages/viewpage.action?pageId=14687120]
{code}
//tämä luokan esittelyyn
QTime displayUpdateTimer;
{code}

...

{code

...

}
forever
  {
        //Tähän anturin tiedon laskenta
          if (NayttoAjastin.elapsed() > Paivitysaika)
          {
              Nayttoajastin.restart();
              emit LahetaAnturinTiedot(Arvo);
          }
}

...

{code}
# Tee esimerkki [Qwt plot|https://wiki.metropolia.fi/display/koneautomaatio/QwtPlot+-+esimerkki] esimerkki.
# Hyödynnä esimerkkiä ja tulosta anturin arvo qwtplotissa.
# Päivitä edellisiä tehtäviä kuvaava Umbrello malli.
# Tee kone esimerkki siten, että teet kaikista luokista dialogeja. Laita luokkiin toimilaite ja anturi liukupalkit, joilla voit säätää niiden antamia arvoja. Älä käytä enää QThread luokkaa kone luokan perinnässä.
# Tee dialog perustainen ohjelma ja koosta se kahdesta alidialogista. Kokeile dialogien avausta show ja exec funktioilla, mitä huomaat? Ohjeita: sisällytä "include" alidialogit päädialogin otsikkotiedostoon, tee dialogeille muuttujat päädialogiin, tee päädialogiin nappi, jolla avaat alidialogit funktioilla exec tai show. &nbsp; &nbsp;
# Lisää edellisen tehtävän dilogeihin viestinvälitystä. Lähetä viesti päädialogista molempiin alidialogeihin. Esimerkiksi niin, että teet dialogiin napin, joka lähettää editline viestin molemmille alidialogeille.
# Lisää alidialogeihin viestinvälitys toiseen alidialogiin edellisessä tehtävässä kuvatulla tavalla.
# Lisää vielä alidialogeihin vistinvälitys päädialogiin.
# Tutustu Kvaserin simplewrite.c ohjelmaan ja liitä se Qt\- dialogiin siten, että voit syöttää ohjelman tiedot dialogista. &nbsp;
# Tutustu Kvaserin canmonitor.c ohjelmaan ja liitä se Qt\- dialogiin siten, että voit syöttää ohjelman tiedot dialogista.
# Tee ohjaus manipulaattorille, joka nostaa laatikon pöydältä ja laittaa sen toiselle pöydälle. Käytä QStateMachine luokkaa ja sen aliluokkia.
# Tee edellinen tehtävä käyttäen switch-case rakennetta ja QTimer ajastinta. Kts. Qt:n wiki.
# Tee edellinen tehtävä käyttäen tilakoneessa omaa Säiettä QThread.
# &nbsp;