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 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 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 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 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.
# 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.
# 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.
# |