Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

*********2. sarja tehtäviä *************

  1. Tutustu Kvaserin simplewrite.c ohjelmaan ja liitä se Qt- dialogiin siten, että voit syöttää ohjelman tiedot dialogsta.  
  2. Tutustu Kvaserin canmonitor.c ohjelmaan ja liitä se Qt- dialogiin siten, että voit syöttää ohjelman tiedot dialogsta.
  3. Tutustu Qwt esimerkkeihin ja tee kolmannen esimerkin pohjalta ohjelma, joka piirtää plot-ikkunaan cosini-käyrää. 
  4. Tee sql esimerkin avulla projektitietokanta, jossa on sarakkeet ProjektinNimi, AloitusPvm, Projektipaallikko, Budjetti.
  5. Ota paluuarvot talteen edellisen tehtävän sql-kyselyistä ja näytä virheet QMessageBoxilla. Käyttäjätunnus root ja salasana huhtikuu.
  6. Asenna tietokooneeseen MySql palvelin ja core.
  7. Asenna MySql Administrator, Query Browser ja Worbench
  8. Tee tehtävän 18. taulu MySql-tietokantaan.
  9. 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ä.
  10. Muokkaa mallia siten, että teet luokan dialogi ja laitat sen jäseneksi luokan Kone. Periytä Kone luokasta QThread. 
  11. Korjaa Dialla tekemä malli edellisen tehtävän mukaiseksi.
  12. Wiki Markup
    Lisää anturille jäsenet double vahvistus, double offset, double  tulo, double tuloSiYksikkona, double taarattuTuloSiYksikkona, double  KeskiarvoistusVektori\[10\], i , int paikkaVektorissa,  double Summa
  13. Tee käyttöliittymään nappi MittaaTulo ja  sille Dialog luokkaan slot Mittaa. Laita myös LineEdit tai lcd, josta voit lukea mitatun arvon.
  14. Tee Dialog luokkaan signaali MittaaTulonArvo.
  15. Tee luokkaan Anturi slot void PaivitaTulo();
  16. Yhdistä signaali MittaaTulonArvo slotiin PaivitaTulo.
  17. Emitoi (lähetä) signaali MittaaTulonArvo käyttöliittymän slotissa Mittaa.
  18. Tee luokkaan Anturi signaali LahetaMitattuArvo(double) ja ota se vastaan käyttöliittymässä.

    ui

    Dialog

     

    Anturi

    MittaaTulo->

    ->Mittaa

     

     

     

    MittaaTulonArvo->

     

    ->PaivitaTulo

     

    ArvonNaytto<-

     

    <- LahetaMitattuArvo(double)

  19. Laita jokin arvo emitoimaasi signaaliin LahetaMitattuArvo(double) ja testaa, että arvo tulee näytölle.
  20. Tee käyttöliittymään Horizontal Slider ja välitä se signaali - slot mekanismilla  Anturi- luokan muuttujaan tulo.
  21. Tee Anturi-luokkaan funktio Paivita. Kutsu tätä edellisessä tehtävässä tekemästäsi slotista.
  22. Laita Paivita - funktion sisällöksi tuloSiYksikkona=tulo*vahvistu+offset;
  23. Testaa, että vahvistettu tulo tulee näytölle.
  24. Tee  Umbrello -ohjelmalla UML-malli tähän asti tekemästäsi softasta.
  25. 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.\
    Code Block
    //tämä luokan esittelyyn
    QTime displayUpdateTimer;
    
    Code Block
    forever
      {
            //Tähän anturin tiedon laskenta
              if (NayttoAjastin.elapsed() > Paivitysaika)
              {
                  Nayttoajastin.restart();
                  emit LahetaAnturinTiedot(Arvo);
              }
    }
    
  26. Hae koneen arvot Sqlite tietokannasta esimerkin mukaisesti.
  27. Tee  Qwt plot esimerkki.
  28. Hyödynnä esimerkkiä ja tulosta anturin arvo qwtplotissa.
  29. Päivitä edellisiä tehtäviä kuvaava Umbrello malli.
  30. 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ä.
  31. 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.    
  32. 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.
  33. Lisää alidialogeihin viestinvälitys toiseen alidialogiin edellisessä tehtävässä kuvatulla tavalla.
  34. Lisää vielä alidialogeihin vistinvälitys päädialogiin.
  35. Tutustu Kvaserin simplewrite.c ohjelmaan ja liitä se Qt- dialogiin siten, että voit syöttää ohjelman tiedot dialogista.  
  36. Tutustu Kvaserin canmonitor.c ohjelmaan ja liitä se Qt- dialogiin siten, että voit syöttää ohjelman tiedot dialogista.
  37. Tee ohjaus manipulaattorille, joka nostaa laatikon pöydältä ja laittaa sen toiselle pöydälle.
  38. Tee edellinen tehtävä käyttäen switch-case rakennetta ja QTimer ajastinta. Kts. Qt:n wiki.
  39. Tee edellinen tehtävä käyttäen tilakoneessa omaa Säiettä QThread.
  40.  Asenna koneeseesi Synapticin avulla Sliteman Sqlite tietokanta editori.
  41. Tee tietokantataulu Sliteman ohjelmalla Sylinteri, jossa on kentät id, nimi, isku, vahvistus ja tulosta taulun asetukset tekstitiedostoon.
  42. Kokeile tehdä samainen taulu seuraavalla sql-komennolla:
    Code Block
    CREATE TABLE sylinteri
    (
        id INTEGER PRIMARY KEY NOT NULL,
        nimi TEXT,
        isku REAL,
        vahvistus REAL
    );
    
  43.  Tee Sqlite tietokanta, joka sisältää taulut sensori  kentillä sensor_id, vahvistus ja offset  sekä kalibrointi kentillä kalibrointi_id, sensor_id, Todellinen, Mitattu ja vielä vierasavain tauluun sensori. Vähän mallia
    Code Block
        FOREIGN KEY(sensor_id) REFERENCES sensor(sensor_id)
    
    Täytä tauluihin kahden anturin tiedot ja testaa tiesotjen hakua sql-komennoilla, esimeriksi
    Code Block
    SELECT * FROM kalibrointi WHERE sensor_id=1;
    
  44. Tee ohjelma, joka lukee sensorien määrän sensoritaulusta ja muodostaa tarvittavan määrän sensoreita.
    Code Block
     //luodaan sensori osoittimena Dilogi luokkaan
    QVector <Sensori> sensori; //luodaan vektori, joka sisältää sensoreja
    
    // esitellään dialog.h tiedostossa esimerkiksi näin
    Sensori *sensori;
    
    
    luetaan Dialogi.cpp :ssa sensorien määrä tietokannasta
    
     ja sitten luodaan new komennolla anturit
    
     sensori=new Sensori[maara];
    
    
  45. Tee sovellus, joka lukee sylinteritietokannasta sylinterien tiedot ja jokaiseen sylinteriin liittyy asema- ja voima-anturi ja niille kalibrointitaulu. Muista tehdä kalibrointitauluun vierasavain anturitauluun ja anturitauluun vierasavain sylinteritauluun. Näin saat yhdistettyä anturin oikealle sylinterille ja kalibrointitaulun oikealle anturille.
  46. Tässä tehtävässä tehdään säätöpiiri. Säätöpiirin tehtävänä on säätää sylinterille menevää ohjetta siten, että haluttu asema saavutetaan mahdollisimman hyvin. Jotta tehtävä olisi mielekäs, täytyy asema-anturin eli sylinterin oloarvon ja sylinterin halutun aseman eli sylinterin asetusarvon välistä suhdetta simuloida. Toteutetaan simulaattori tässä tehtävässä  mahdollisen yksinkertaisesti seuraavan ajatuksen mukaisesti: jos ohje on suurempi kuin todellinen asema, lisätään todellista asemaa kellolla (QTimer timer muuttujan timeoutilla)
    Code Block
    if(ohjesylinterille>olo)olo++;
    if(ohjesylinterille<olo)olo--;
    
    Säätöpiiri voidaan tehdä yksinkertaisesti vähennys-ja kertolaskuilla seuraavasti:
    Code Block
    ohjesylinterille = (asetus-olo)*vahvistus;
    
    Tehdään tehtävä aluksi ainoastaan hyödyntäen Dialog luokkaa. Eli tehdän Dialog luokkaan slider, jolla annetaan ohjearvoja ja lisäksi edistymispalkki johon laitetaan sylinterin todellinen asema. Ohjelmoi lisäksi tarvittava ajastin, jotta saat oloarvon muuttumaan edellä kuvatulla tavalla. Testaa millä vahvistuksen arvolla saat järjestelmän toimimaan (tee ohjelmaan editline ja sille validator, jolla rajataan vahvistuksen arvot välille 0...1000).
  47. Lisää tehtävään Qwt:n graafinen näyttö ja piirrä siihen asetus- oloarvot.
  48. Muuta edellisen tehtävän P-säädin PI-säätimeksi. 
    Code Block
     //lisätään summaan eroarvo, muista nollata summa muodostimessa
     IntegraattorinSumma+=(asetus-oloarvo);
     //ja sitten säädin
     ohjearvosylinterille=(asetus-oloarvo)*P_vahvistus+ IntegraattorinSumma*I_vahvistus;
    
    Viritä säädin Ziegler Nichols'in säännöillä.
  49. Lisää mittaushaaraan liukuva keskiarvo. Kts. Qt-esimerkit.
  50. Lisää säätimeen D-lohko.