timohei.net / Opintojaksot
/ Opintojaksot
/ Soveltava ohjelmointi
/ Python-ohjelmointi
/
Harjoitustyö (Python)
Harjoitustyönä ohjelmoidaan Ohjaustekniikan projekti -kurssilla tutuksi tulleen höyrynuohoimen ohjaus Pythonilla. Olen tehnyt valmiiksi sovelluspohjan, jonka sisään sovellus tehdään ja jonka avulla sovellus myös testataan.
Harjoitustyön palautus
Lähetä tiedosto oma_sovellus.py minulle sähköpostilla. Pelkkä tiedoston palautus ei riitä kurssin läpäisyyn, vaan sovelluksen rakenteista ja toiminnasta pitää olla ymmärrys, minkä osoitat esittelemällä sovelluksen minulle erikseen sovittuna aikana Teams-palaverissa.
Ohjelmoitava osio
Nuohoimesta ohjelmoidaan perusautomatiikka ja kääntöviive.
Perusautomatiikka
- Nuohoimen ajo nuohottavaan tilaan (ulos) käynnistetään NUOHOUS-painikkeen painalluksesta. Logiikkasovelluksessa NUOHOUS-painike luetaan tulosta 1, mutta tekemässäni sovelluspohjassa vastaava tieto saadaan luettua Python-muuttujasta nuohousnappi. Sovelluspohja on ohjelmoitu niin, että painamalla näppäintä 1 muuttuja nuohousnappi menee tilaan True ja pysyy siinä tilassa napin painamisen ajan. Muuttuja menee tilaan False, kun näppäin päästetään ylös. Sovelluspohja tottelee vain Q-kirjaimen lähellä olevaa numeronäppäintä; erillisen numeronäppäimistön ykkösen painelu ei tee mitään. Nappia ei paineta koko ajoaikaa, joten tässä on käytettävä pitopiiriä.
- Sovellus pitää ohjauslähtöä SK_ULOS (lähtö 6, Python-muuttuja ulosohjaus) päällä niin kauan, että ulkorajakytkin (tulo 6, Python-muuttuja ulkoraja) aktivoituu, minkä jälkeen sovellus kytkee ko. lähdön pois päältä.
- Painalletaan SISÄÄN-painiketta (tulo 2, Python-muuttuja sisaannappi, näppäin 2), jolloin nuohoimen ajo takaisin lepotilaan käynnistyy. Tässäkin käytetään pitopiiriä.
- Sovellus pitää ohjauslähtöä SK_SISAAN (lähtö 5, (sisaanohjaus) päällä niin kauan, että sisärajakytkin (tulo 5, sisaraja) aktivoituu, minkä jälkeen sovellus kytkee ko. lähdön pois päältä.
Kääntöviive
Kun nuohoin tulee ulkorajalle (ulkoraja = True), käynnistetään 5 sekunnin viive (Pythonin Timer), jonka kuluttua sisäänajo käynnistetään.
Ohjelmointiympäristö
Itse olen käyttänyt ohjelman kirjoittamiseen Notepad++ -editoria.
IDLE ei sovellu tämän harjoituksen tekemiseen, koska sovelluspohjani käyttää näytölle tulostamiseen erikoiskoodeja, joita IDLE ei tunnista. Sovellus pitää ajaa Windowsin komentoikkunassa, jonka saa auki näppäämällä +R ja kirjoittamalla cmd<enter>.
Oma ohjelmointi- ja testausympäristöni näytti tältä (klikkaa isommaksi):
Olen asetellut ohjelmat niin, että Notepad++ varaa näytön vasemman puolikkaan ja Windowsin komentoikkuna oikean puolikkaan. Komentoikkunassa on annettu komento python nuohoinsimulaattori.py ja nuohoin on alkutilassa eli sisärajalla.
Sovelluspohja
Lataa harjoituksessa käytettävät tiedostot klikkaamalla tiedostojen nimiä:
- nuohoinsimulaattori.py
- Tiedosto, jonka käynnistät aina sovellustasi testatessa Windowsin cmd-komentoikkunassa komennolla python nuohoinsimulaattori.py. Ohjelma pysähtyy <ESC>-näppäimellä.
- Älä tee tähän tiedostoon mitään muutoksia!
- plc_simulaatio.py
- Tiedosto, joka toteuttaa logiikkasimulaation ja tarjoaa käyttöliittymäfunktiot ja jota nuohoinsimulaattori.py kutsuu.
- Älä tee tähänkään tiedostoon mitään muutoksia!
- oma_sovellus.py
- Tähän tiedostoon täydennät funktioon oma_sovellus() tarvittavat toiminnallisuudet. Tiedostossa on valmiiksi
- funktion alku def oma_sovellus(muuttuja1, muuttuja2, ...)
- tarvittavat import-käskyt sekä
- lopussa muutama rivi muuttujien arvojen käsittelyyn.
- Olen kirjoittanut tiedostoon kommentteja, joiden mukaan ohjelman saa tehtyä.
- Älä muuta pohjassa valmiiksi olevia ohjelmarivejä!
Oma sovellus
Kun nuohoinsimulaattori.py käynnistetään, se
- tyhjentää Windowsin komentoikkunan,
- käynnistää näppäimistön kuuntelijan ja
- kutsuu plc_simulaatio.py:ssä määriteltyjä funktioita
plc_simulaatio.py:n funktio paivita_simulaattori kutsuu oma_sovellus()-funktiota 0,2 sekunnin välein niin kauan kuin nuohoinsimulaattori.py on käynnissä. Tämä täytyy muistaa - tekemääsi sovellusta kutsutaan siis aina uudelleen ja uudelleen ja kaikki sen käskyt (ehto- ja luuppirakenteet tietenkin huomioiden) suoritetaan joka suorituskerralla.
Alla on kuvakaappaus oma_sovellus.py-tiedostosta, jossa on kommenttien lisäksi vinkkiä käytettävistä ohjelmarakenteista. Sovelluksen voi tehdä hyvin monella eri tavalla, joten jos haluat tehdä ohjelman jotenkin muuten, aina vain parempi (varsinkin jos tiedät, mitä teet). Ladattavasta tiedostosta olen poistanut mallirakenteet ja jättänyt paikoilleen vain valmiit ohjelmaosat neljällä ylimmällä rivillä ja kolmella viimeisellä käskyjä sisältävällä rivillä.
Kuvan voi klikata suuremmaksi.
Python-ohjeita
Pythonin alkeet on kuvattu kurssin muilla sivuilla ja käyty läpi tunneilla. Tässä esitetyt ohjeet menevät hieman syvemmälle.
Kaikki kuvat voi klikata suuremmaksi.
Muuttujan alustus sovelluksen ensimmäisellä suorituskierroksella
Muuttujan saaminen näkyville funktion sisällä
Pythonin ajastinfunktio Timer
Päivitetty 28.8.2022
© Timo Heikkinen | timo piste heikkinen at oamk piste fi