Classes.py

Ensto/Koodin dokumentaatio/Classes

Tässä tiedostossa määritellään luokat, joita pääohjelmassa käytetään. Luokat ovat load ja mainPhase. Tiedoston alussa tuodaan mittaus.py.

Käsitellään aluksi luokkaa load. Load on siis luokka, jonka oliot edustavat järjestelmään kytkettyjä ohjattavia kuormia.

(Rivit 6-43)Funktiota __init__ kutsutaan Pythonissa aina kun initialisoidaan uusi olio luokasta. Sen aikana voidaan määrittää olion muuttujia ja kutsua funktioita. Load-luokalla luodaan ja asetetaan tässä funktiossa useita muuttujia, joista osa on annettu oliota luodessa parametreina.

Nämä parametrit ovat name, ID, commandbits, relayPin, maximumCurrent, phase, priority. Name on kuorman nimi, ID on uniikki numerokirjainyhdistelmä, commandbits kertoo bitit, jotka vastaavat tämän kuorman kanavaa AD-muuntimella, nämä pitää muuttaa numeroiksi alkuperäisestä stringistä; relayPin on kuorman releen pinni mikrokontrollerissa, maximumCurrent kertoo kuorman sulakkeen maksimivirran, phase kertoo missä vaiheessa kuorma on ja priority kertoo kuorman prioriteetin.

Tällä hetkellä maximumCurrent-muuttujaa ei käytetä mihinkään, sitä voitaisiin käyttää yksittäisten kuormien sulakkeiden laukeamisen estämiseen, mutta kuormien automaattinen palauttaminen on ongelma, koska ohjelma tallentaa viimeisimmän virran ja estää kuorman palauttamisen. Yksi tapa ratkaista ongelma olisi antaa ohjelman “kokeilla” kuorman palauttamista jollakin väliajalla. Lisäksi tällaisesta ongelmatilanteesta voitaisiin ilmoittaa kuluttajalle ja/tai operaattorille.

Lisäksi funktiossa määritellään muuttuja nykyisen tunnin kulutukselle, curHourEne, ja muuttujat autoCont ja manualCont, joiden avulla kuormaa ohjataan. Määritellään myös lastCur-muuttuja, johon tallennetaan viimeisin kuorman virta. Muuttujaan lastTime tallennetaan viimeisimmän mittauksen aika. Muuttujaan last10Sec tallennetaan lista, johon tallennetaan mittausten arvoja 10 sekunnin ajalta ja muuttuja last10SecTime kertoo ajan jolloin edellinen lista on viimeksi nollattu.

Olioon kuuluu myös useita funktioita, joiden avulla muuttujien arvoa pystytään muuttamaan, ja joilla niiden arvot pystytään palauttamaan kysyttäessä. Esimerkkinä funktiot updateLastTime ja getLastTime(Rivit 51-55).

(Rivit 63-67)Funktio isActive palauttaa totuusarvon riippuen siitä, onko kuorma ohjattu pois päältä vai onko se vielä aktiivinen. Palauttaa tosi jos on aktiivinen.

(Rivit 83-85)Funktio addCurHourEne lisää nykyisen tunnin kulutukseen parametrina annetun energian ja samalla lisää vastaavan tehon viimeisen 10 sekunnin tehojen listaan.

(Rivit 111-115)Funktio getCurrent kutsuu adcRead-funktiota mittaus.py:stä, tallentaa virran muuttujaan ja palauttaa virran.

(Rivit 133-135)Funktio getControlState palauttaa ohjausmuuttujien arvot tuplena(muuttumaton lista). Näin niiden arvot saadaan tallennettua yhteen muuttujaan. Ensimmäisenä tuplessa on autoCont, sitten manualCont.

(Rivit 138-146)Funktio info tulostaa konsoliin tietoa kuormasta, lähinnä debuggausta varten.

Tiedoston toinen luokka on mainPhase. Se kuvaa siis järjestelmän päävaiheita. Se on hyvin samankaltainen kuin load-luokka, mutta siitä puuttuu osa load-luokasta ja siihen on myös lisätty omia osiaan.

(Rivit 152-181)Funktiossa __init__ alustetaan jälleen muuttujat uudelle oliolle. Parametreilla ja muuttujilla name, ID, commandbits ja maximumCurrent on sama käyttötarkoitus kuin load-oliossa. Lisäksi määritellään raja-arvomuuttujat threshold ja returnThreshold, jotka prosentteina ilmoittavat kuinka lähelle maksimiarvoja saadaan mennä ennen kuin kuormia katkaistaan ja milloin ollaan tarpeeksi kaukana maksimiarvosta, jotta kuormia voidaan palauttaa. Muuttuja lastPower kertoo vaiheen viimeisimmän tehon.

Jälleen luokassa on funktiot muuttujien arvojen vaihtamiselle ja niiden palauttamiselle.

(Rivit 204-205)Funktio loadPrioritize järjestää kuormat prioriteetin mukaiseen järjestykseen, pienimmästä suurimpaan. Tähän käytetään Pythonin sort-funktiota listoille. Annamme sort-funktiolle key-parametrin arvon käyttämällä lambda-avainsanaa. Kutsumme siis listan jokaista alkiota “load”:iksi ja järjestämme ne niiden getPriority-funktion palauttaman arvon mukaan.

(Rivit 210-211)Funktio returnLoads palauttaa tämän vaiheen kaikki kuormat listana.

(Rivit 219-227)Funktiot getMaxCur ja getMaxReturnCur palauttavat vaiheen maksimivirrat, ensimmäinen maksimin, jonka ylittyessä kuormia rajoitetaan ja toinen maksimin, jonka alittuessa kuormia voidaan palauttaa.

(Rivit 246-249)Funktio updateCurHourEne päivittää vaiheen tunnin aikaisen kulutuksen. Tämä tehdään käymällä läpi vaiheen kuormat ja laskemalla niiden kulutukset yhteen.

(Rivit 252-253)Funktio addLoad lisää vaiheen loads-listaan parametrina annetun kuorman.

(Rivit 256-257)Funktio resetHour nollaa tunnin kulutuksen tunnin vaihtuessa.