TEKNILLINEN KORKEAKOULU Sähkö-ja tietoliikennetekniikan osasto
Tuomo Kaikkonen
VARMISTETUN TEHONSYÖTTÖLAITTEEN KÄYTTÖLIITTYMÄ- OHJELMISTON SUUNNITTELU JA TOTEUTUS
Diplomityö, joka on jätetty opinnäytteenä tarkastettavaksi diplomi-insinöörin tutkintoa varten Espoossa 16.03.2004
Työn valvoja Professori Jorma Skyttä
Työn ohjaaja Diplomi-insinööri Risto Karola
TEKNILLINEN KORKEAKOULU Diplomityön tiivistelmä Tekijä: Tuomo Kaikkonen
Työn nimi: Varmistetun tehonsyöttölaitteen käyttöliittymäohjelmiston suunnitteluja toteutus
Päivämäärä: 16. Maaliskuuta, 2004 Sivumäärä: 61 + viii Osasto: Sähkö- ja tietoliikennetekniikan osasto
Profesuuri: Signaalinkäsittelytekniikka Työn valvoja: Professori Jorma Skyttä Työn ohjaaja: DI Risto Karola
Varmistetut tehonsyöttölaitteet, eli UPS-laitteet, ovat sähkönjakelun katkeamattomuuden ja häiriöttömyyden varmistamiseen käytettyjä laitteita. Niiden ensisijaisena tarkoituksena on suojata herkkien sähköllä toimivista laitteista koostuvien järjestelmien toimintaa häi
riötilanteissa.
Työn kohteena ollut UPS-laite koostui sähkötehoa käsittelevistä osioista, sekä laitet
ta ohjaavasta prosessorikortista. Laitteeseen kuului myös CAN-väylän (Controller Area Network) kautta prosessorikorttiin yhteydessä oleva etupaneeli, joka sisältää graafisen nestekidenäytön, summerin, merkkivaloja sekä painikkeita.
Tässä diplomityössä suunniteltiin ja toteutettiin UPS-laitteen etupaneelin käyttöliittymää ohjaava ohjelmisto. Työssä paneuduttiin käyttöliittymäohjelmistoa suunniteltaessa koh
dattaviin ongelmiin ja muihin huomioon otettaviin tekijöihin. Ohjelmisto toteutettiin C- ohjelmointikielellä.
Ohjelmisto suunniteltiin siten että sen avulla saataisiin toteutettua sama käyttöliittymä joustavasti myös useilla eri kielillä. Tämän toteuttamiseksi työssä kehitettiin tapa ohjel
mallisesti ilmaista käyttöliittymän tekstien ja elementtien sijoittelu sekä sisältö vapaasti eri kielten tarpeiden mukaisesti.
Lopuksi toteutettiin itse käyttöliittymä, joka käyttää hyväkseen käyttöliittymäohjelmis
toon toteutettuja ominaisuuksia. Käyttöliittymästä toteutettiin erikielisiä versioita, mu
kaan luettuna kiinankielinen versio. Toteutuksessa pyrittiin kiinnittämään huomiota myös laitteen käytettävyyteen.
Avainsanat: Varmistettu tehonsyöttölaite, UPS-laite, signaaliprosessori, CAN-väylä, etupaneeli, käyttöliittymä, C-kieli
HELSINKI UNIVERSITY OF TECHNOLOGY Abstract of the Master’s Thesis Author: Tuomo Kaikkonen
Title of thesis: Design and implementation of the user interface software of an uninterruptible power supply
Date: 16th March, 2004 Pages: 61 + viii
Department: Department of Electrical and Communications Engineering Profesorship: Signal processing technology
Supervisor: Professor Jorma Skyttä Instructor: MSc Risto Karola
Uninterruptible power supplies, or UPS devices in short, are devices designed for secur
ing the distribution of electricity against breaks and other kinds of disturbances. Their primary purpose is to protect the operation of vulnerable systems consisting of electrical devices.
The UPS described in this thesis consists of a few major components. Most important parts for the device as a UPS are the parts for handling electrical power and a dedicated processor board. The processor board contains a digital signal processor (DSP) that is responsible for all the control. There is also a separate front panel, which is connected to the processor board using a controller area network (CAN) bus. The front panel con
tains a graphical liquid crystal display (LCD), buttons, light emitting diodes (LEDs) and a buzzer that together make up the front panel user interface of the unit.
This thesis focuses on the design and implementation of a user interface software of a UPS device. The user interface software in this case means a software that controls the user interface in the DSP processor, and uses the front panel for user interaction. The the
sis discusses the various problems and issues that need to be taken care of. The software was implemented using C programming language.
During the design of the software, attention was paid to keep it flexible and understand
able. The software was designed also keeping in mind the fact that it will need to adapt to the needs of the different languages. This was taken care of by designing a way to define free positioning of user the interface texts and elements in different language versions.
In the final phase, a user interface was built in different languages, including Chinese. It makes use of the features implemented in the user interface software. Attention was paid also to usability issues.
Keywords: Uninterruptible power supply, UPS, signal processor,
CAN bus, front panel, user interface, C programming language
Alkulause
Tämä diplomityö on tehty Powerware Oy:n palveluksessa, jossa kirjoittaja on toi
minut tuotekehittäjänä laiteohjelmistojen parissa. Työn aikana Powerware Oy on tarjonnut monipuolisen ja itsenäisen ympäristön tämän diplomityön tekoon.
Kiitän saamastani kannustuksesta ja tuesta työni ohjaajaa DI Risto Karolaa Powerware Oy:stä. Suuret kiitokset myös työn aikana kannustusta antaneille ja us
koa kirjoitustyön etenemiseen valaneille kollegoille. Kiitokset myös kiinnostunutta otetta UPS-laitteita kohtaan esittäneelle työni valvojalle Jorma Skytälle TKK:sta.
Kiitokset tuesta myös Dinalle, sekä muille perheenjäsenille ja ystäville.
Espoo, 16 Maaliskuuta, 2004
Tuomo Kaikkonen
Sisältö
Tiivistelmä... ii
Abstract... iii
Alkulause... iy Sisältö... v
Symboli- ja lyhenneluettelo...viü 1 Johdanto 1 2 UPS-laitteiden tekniikka 3 2.1 UPS-laite... 3
2.1.1 On-line UPS... 3
2.1.2 Rinnankytkentä... 5
2.2 CAN-väylä... 5
2.2.1 ominaisuudet... 6
2.2.2 Tiedonsiirron Perusteet... 6
2.2.3 CAN-paketin rakenne ... 7
2.2.4 CANalyzer... 8
2.3 Työn kohteena olleen UPS-laitteen rakenne... 9
2.4 Kontrollikortti... 10
2.4.1 Signaaliprosessori TMS320F2812... 10
2.4.2 eCAN -moduuli... 10
2.4.3 D S P/B IOS... 10
2.5 Näyttökortti... 13
2.5.1 LCD-näytön ohjaaminen... 14
2.5.2 Muiden toimintojen ohjaaminen... 15
2.5.3 Nappuloiden toiminta 15
SISALTO vi
2.5.4 Ohjelman perustoiminta ja päivitysohjelmointi... 15
2.5.5 Aikavalvonta... 16
3 Taustatietoja toteutukselle 17 3.1 Laiteohjelmistot UPS-laitteissa... 17
3.1.1 C-ohjelmointikieli... 17
3.2 Kielet ja käyttöliittymä... 18
3.2.1 Unicode... 19
4 UPS-laitteen käyttöliittymäohjelmiston suunnittelu 20 4.1 Käyttöliittymäohjelmiston vaatimukset... 20
4.2 Menurakenteen esittäminen... 21
4.3 Menujen kielen ja ulkonäön esitysmuoto... 23
4.4 Kontrollikoodien sisällyttäminen merkkijonoihin... 25
4.5 Kielen mukaan muuttuvat osat... 28
4.6 Lisätoiminnallisuus ja tapahtumiin reagointi... 29
4.6.1 Toimintofunktiot... 29
4.6.2 Tapahtumat... 29
4.7 Käyttöliittymäohjelmaan toteutettuja toimintoja... 30
4.8 Käyttöliittymäohjelman perustoiminta... 32
4.8.1 Näytön piirtäminen... 33
4.8.2 Näytön päivitys... 34
4.8.3 Usearivisten tekstien käsittely... 35
4.8.4 Näytön ohjaaminen... 36
4.9 Graafisia ominaisuuksia... 37
4.9.1 Painikkeiden kuvakkeet ... 37
4.9.2 Mimic-näyttö... 37
4.10 UPS:n parametrien hallinta... 38
4.11 Kieliversioiden testaaminen... 40
5 Käyttöliittymän toteutus käytännössä 41 5.1 Käyttöliittymän integrointi DSP/BIOS-ympäristöön...41
5.1.1 Säietyypin valinta... 41
SISÄLTÖ vii
5.1.2 CAN-väylän käyttö näytön kanssa kommunikointiin .... 42
5.1.3 Toteutettu ratkaisu... 42
5.2 Merkkijonojen pakkaaminen... 44
5.2.1 Merkkijonojen pakkaamisen vaihtoehdot... 45
5.2.2 Merkkijonojen pakkaamisen toteutus ... 45
5.3 Erikielisten käännöstiedostojen luominen... 46
5.4 Käyttöliittymän toteutus ... 47
5.4.1 Lähtökohdat toteutukselle... 47
5.4.2 Käännökset eri kielille... 48
5.4.3 Mittausarvot ja mittausarvojen lukitseminen näytölle .... 50
5.4.4 Neljän painikkeen ongelmat ja toteutettuja ratkaisuja .... 50
5.4.5 Näytön kielen vaihtaminen... 51
5.4.6 Painikkeiden kuvakkeet ... 53
5.5 Toteutuksen eteneminen ... 54
6 Johtopäätökset 55
Kirjallisuutta 57
A Esimerkkejä kontrolli- ja muuttujakoodien määrittelystä C-kielellä 59
В Toteutettu menurakenne 61
SISÄLTÖ viii
Symboli- ja lyhenneluettelo
A/D ANSI
Analogi-Digitaali (Analog-Digital)
Standardien kehitystä tukeva organisaatio USA:ssa (American National Standards Institute)
ANSI-C ASCII
ANSI:n julkaisema C-ohjelmointikielen kielen standardi Seitsemän bittinen merkkijärjestelmästandardi (American Standard Code for Information Interchange)
ATK CAN CRC
Automaattinen Tietojenkäsittely
Sarjamuotoinen tiedonsiirtoväylä (Controller Area Network) Syklinen varmistus (Cyclic Redundancy Check)
CSMA/CD Väylän vuoronvarausmenettely törmäyksentunnistuksella (Carrier Sense Multiple Access with Collision Detection) DSP
DSP/BIOS
Digitaalinen signaaliprosessori (Digital Signal Processor) Texas-Instruments:in reaaliaikainen käyttöjärjestelmä signaaliprosessoreille (BIOS = Basic Input Output System) EEPROM Sähköisesti tyhjennettävä uudelleenkirjoitettava haihtumaton
lukumuisti (Electrically Erasable Programmable Read Only Memory)
HWI Laitteistokeskeytys (Hardware Interrupt)
IDE Taustasäie (Idle Loop)
ISR LCD LED
Keskeytyksen palvelurutiini (Interrupt Service Routine) Nestekidenäyttö (Liquid Crystal Display)
Valodiodi (Light Emitting Diode) RAM
ROM SWI Unicode UPS
Käyttömuisti (Random Access Memory)
Haihtumaton ohjelmamuisti (Read Only Memory) Ohjelmallinen keskeytys (Software Interrupt) Kansainvälinen merkkijärjestelmästandardi
Varmistettu tehonsyöttölaite (Uninterruptible Power Supply)
Luku 1 Johdanto
Maailman sähköistyessä yhä enemmän ja enemmän kasvavat myös varmistettu
jen tehonsyöttölaitteiden, eli UPS-laitteiden (UPS, Uninterruptible Power Supply) markkinat. Jotta alati kasvavilla markkinoilla pysyisi kilpailukykyisenä on UPS- laitteita valmistavan yrityksen pystyttävä tuomaan markkinoille uudistuvia laitteita.
Asiakkaat arvostavat [1] laitteissa ennen kaikkea edullista hintaa, laitteen merk
kiä sekä luotettavuutta. Markkinoilla edukseen erottumiseksi on enenevissä määrin kiinnitettävä huomiota myös pieniin yksityiskohtiin. Näihin kuuluu myös laitteen etupaneelin käyttöliittymä.
UPS-laitteen etupaneelin käyttöliittymä on perinteisesti edustanut hyvin pientä osaa laitteesta. Se on tyypillisesti koostunut muutamasta laitteen toimitilaa ilmaisevasta LED-valosta (LED, Light Emitting Diode), sekä virtakytkimestä. Myöhemmin mu
kaan ovat tulleet alfanumeeriset näyttöpaneelit ja tuoneet mukanaan yksinkertaisten tekstipohjaisten käyttöliittymien muodossa mahdollisuuden valvoa sekä ohjata lait
teen toimintaa yhä laajemmalla skaalalla. Etupaneelin käyttöliittymä on kuitenkin perinteisesti ollut se viimeinen paha joka laitteeseen on toteutettu kiireisesti juuri ennen laitteen julkaisua eikä siihen ole kiinnitetty järin suurta huomiota.
Etupaneelin kautta voidaan seurata laitteen toimitilaa ja selata erilaisia mittausar
voja, joita ovat esimerkiksi laitteen syöttämän sähköverkon ottama tehoja laitteen akustosta riittävä varakäyntiaika sähkökatkon aikana. Etupaneelin kautta voidaan nähdä myös mahdollisten virhetilanteiden aiheuttamat hälytykset ja selailla etenkin huoltomiehiä hyödyttää tapahtumalokia. Myös monet laitteen toimintaan vaikutta
vat asetukset ja parametrit ovat aseteltavissa etupaneelin käyttöliittymän kautta.
2 Yksi tärkeä käyttötarkoitus etupaneelille johtaa juurensa kuitenkin laitteen mark
kinoinnista. Kun UPS-laitteita esitellään yleisölle vaikkapa messuilla, on laitteesta ulospäin näkyvä osa yleensä juuri etupaneeli. Varsinkin jos laitetta voidaan etupa
neelin kautta ohjata ostajan omalla kielellä, on sillä positiivinen vaikutus juuri sen laitteen ostopäätökseen.
Tässä työssä käsitellyn UPS-laitteen ohjaus on toteutettu nykyaikaisella signaa
liprosessorilla. Laitteen käyttöliittymän esittämistä varten laitteessa on erillinen CAN-väylän (Controller Area Network) kautta ohjattava graafinen käyttöliittymä- paneeli, jonka ominaisuuksiin kuului perustason näytönkäsittelyominaisuudet.
Tämän diplomityön tarkoituksena oli toteuttaa signaaliprosessoriin muun ohjaus- ohjelmiston oheen laitteen etupaneelin käyttöliittymää ohjaava ohjelmisto. Työn ta
voitteena oli kiinnittää erityisesti huomiota ohjelmiston selkeään rakenteeseen ja ymmärrettävyyteen jotta käyttöliittymän muokattavuus ja laajennettavuus jälkikä
teen säilyisi mahdollisimman hyvänä ja yksinkertaisena. Suunnittelussa oli otettava huomioon myös prosessorin rajallisen muistin asettamat rajoitukset. Työ oli tarkoi
tus tehdä C-ohjelmointikieltä käyttäen.
Tärkeä tavoite oli suunnitella käyttöliittymäohjelmisto siten että se mukautuisi tar
peeksi joustavasti myös eri kielten asettamiin tarpeisiin eritoten näytölle ladottavan tekstin ja tietojen osalta. Viimeisessä vaiheessa tavoitteena oli vielä toteuttaa itse laitteen käyttöliittymä työn aikana rakennetun ohjelmiston päälle.
Luku 2
UPS-laitteiden tekniikka
2.1 UPS-laite
Nykyisin on suuntauksena että erilaisten sähköllä toimivien laitteiden määrä ko
deissa ja yrityksissä kasvaa. Varsinkin monenlaisia tehtäviä hoitavia automaattisia tietojenkäsittely- eli ATK-järjestelmiä on yrityksissä yhä enemmän ja enemmän.
Häiriöt näiden laitteistojen toiminnassa aiheuttavat suuria ongelmia ja kuluja yri
tysten toiminnassa, moitteeton toiminta on tullut tärkeäksi asiaksi.
Huomiota on näin ollen kiinnitetty entistä enemmän järjestelmän ulkopuolelta tu
leviin häiriöihin. Ulkopuolisista häiriöistä yleisimmät ovat sähkönsyötöstä johtuvat [2] häiriöt. Erilaisia sähkönsyötön häiriöitä ovat muun muassa jännitepulssit, kat
kokset, transientit sekä yli-ja alijännitteet. Sähkönsyötön häiriöitä on havainnollis
tettuna kuvissa 2.1 ja 2.2.
Sähkönsyötön häiriöttömyys on ehdoton edellytys, jotta ATK-järjestelmät voisivat toimia luotettavasti. Tätä tehtävää varmistamaan käytetään varmistettua tehonsyöt- tölaitetta, lyhemmin ilmaistuna UPS-laitetta. Suojattavaa kuormaa puolestaan nimi
tetään usein kriittiseksi kuormaksi.
2.1.1 On-line UPS
On-line UPS -laitteen, eli kahden muunnoksen UPS-laitteen rakenne koostuu nel
jästä perusosasta: tasasuuntaajasta, akustosta, vaihtosuuntaajasta sekä staattisesta
2.1 UPS-laite 4
1yhytäikäiset
katkokset transientit
lyhytaikaiset ylij ännitteet jännitepulssit
Kuva 2.1 : Verkkojännitteen häiriöitä
jännite- ylijännite
alijännite
Kuva 2.2: Verkkoj ännitteen häiriöitä
kytkimestä. Kaaviokuva on-line UPS -laitteesta on nähtävissä kuvasta 2.3.
Ohitusverkko
Staattinen kytkin
Tasasuuntaaj a Vaihtosuuntaaja
Akusto
Kuva 2.3: On-line UPS -laitteen perusrakenne
Tällaisessa laitteessa normaalitoiminnassa sähkö syötetään kriittiselle kuormalle tasasuuntauksen ja vaihtosuuntauksen kautta. Kahden muunnoksen toimintaperi
2.2 CAN-väylä 5 aate takaa lähtöjännitteen riippumattomuuden UPS-laitetta syöttävän sähköverkon häiriöistä [3] ja katkoksista. Suuretkaan jännite- tai taajuuspoikkeamat eivät siirrä UPS-laitetta akkusyötölle, vaan tasasuuntaaja kykenee syöttämään tarvittavan vir
ran vaihtosuuntaajalle.
Normaalitoiminnan aikana myös akuston latausta pidetään yllä tuloverkosta saata
valla virralla. Tuloverkon pettäessä kuormaa syötetään akustoa purkaen.
Staattisen kytkimen avulla voidaan UPS-laitteen ulostulo valita vaihtosuuntaajan ja niin sanotun ohitusverkon väliltä. Staattinen kytkin on läsnä kahden tärkeän syyn
[4] takia:
1. Ylikuormitustilanteessa voidaan riittävä tehonsyöttö tarjota ohitusverkon kautta. Ylikuormituksen voi aiheuttaa esimerkiksi kuormana olevien laittei
den ottamat suuret käynnistymisvirrat.
2. Ohituskytkin varmistaa tehonsyötön kriittiselle kuormalle jos itse UPS-laite jostain syystä vikaantuu.
2.1.2 Rinnankytkentä
Sähkönsyöttöä voidaan usein edelleen varmentaa käyttämällä useampaa eri UPS- laitetta rinnakkain, tällöin ne kytketään yhdessä syöttämään kriittistä kuormaa.
Laitteiston kokonaisteho mitoitetaan riittäväksi siten, että esimerkiksi yhden UPS- laitteen vioittuminen ei vielä vaaranna kuorman suojausta sähkökatkon yllättäessä.
2.2 CAN-väylä
CAN-väylä (Controller Area Network) [6] on järeä sarjamuotoinen tiedonsiirto
väylä, joka kykenee IMbps siirtonopeuteen. Sen loi alunperin saksalainen auto
alan järjestelmien toimittaja Roher Bosch [5] 1980-luvun puolivälissä. Tavoitteena oli tehdä autoista luotettavampia, turvallisempia ja taloudellisempia vähentämäl
lä kaapeloinnin aiheuttamaa painoa ja kompleksisuutta. Julkaisunsa jälkeen CAN- protokolla on saavuttanut laajaa suosiota erityisesti teollisuusautomaatiossa sekä autoalan sovelluksissa. CAN-protokollan määrittely on standardoitu ISO:n (Inter
national Organization of Standardization) toimesta numerolla ISO-11898 [7].
2.2 CAN-väylä 6
2.2.1 ominaisuudet
CSMA/CD
CAN-protokolla on CSMA/CD (Carrier Sense Multiple Access with Collision De
tection) protokolla. CSMA tarkoittaa sitä että jokaisen verkkoa käyttävän laitteen on seurattava väylää, laite voi aloittaa lähetyksen vasta kun väylä on ollut tietyn aikaa joutilaana. CD (Collision Detection) puolestaan tarkoittaa yhteentörmäysten tunnistusta. Jos kaksi laitetta aloittaa lähetyksen samanaikaisesti, ne huomaavat yh
teentörmäyksen ja toimivat asiaankuuluvan menettelyn mukaisesti.
CAN-protokollassa käytetään säilyttävää bittikohtaista sovittelumetodia (Non
destructive Bitwise Arbitration). Tämä tarkoittaa että viestit säilyvät vahingoittu
mattomina vaikka törmäyksiä havaittaisiinkin. Sovittelutapahtumat väylällä tapah
tuvat korruptoimatta tai viivästämättä korkeamman prioriteetin omaavan viestin vä
litystä.
2.2.2 Tiedonsiirron Perusteet
CAN perustuu niin kutsuttuun hajalähetysmekanismiin, jossa jokainen laite näkee jokaisen viestin, mutta reagoi vaan sille itselle tärkeisiin viesteihin. Protokolla ei määrittele asemia ja niiden osoitteita, se määrittelee vain viestin sekä viestin tun
nisteen. Viestin tunniste on uniikki koko verkossapa se määrittelee viestin sisällön lisäksi viestin prioriteetin. Tämä on tärkeää usean lähettäjän kiistellessä pääsystä väylälle.
Viestin prioriteetin määrittelee viestin aloittava tunnistekoodi, tärkeämmän viestin tunnistus perustuu tunnistekoodien vertailemiseen. Prioriteetit määritellään järjes
telmän suunnitteluvaiheessa, eikä niitä voida muuttaa dynaamisesti. Matalimman tunnistekoodin omaavalla viestillä on korkein prioriteetti.
Säilyttävä bittikohtainen sovittelu on toteutettu siten, että jokainen lähettävä laite seuraa väylälle lähettämänsä bitin tilaa. Konfliktitilanteessa, dominoiva nolla-bitti näkyy väylälläpä mahdollista ykkösbittiä lähettävä laite joutuu väistymään ja siitä tulee automaattisesti kuuntelija kunnes väylä seuraavan kerran vapautuu. Sovittelu tapahtuu siis viestin aloittavaa tunnistekoodia lähetettäessä, jolloin ainoastaan kor
keamman prioriteetin omaavan viestin lähettäjä jatkaa muiden väistyessä. Kuvassa
2.2 CAN-väylä 7
• S
0
F 1C 9 8 7 6 5 4 3 2 1 0 R T R
Kontrolli
& Data
Laite 1 Vain kuuntelu
Laite 2
Laite 3 Vain kuuntelu
Väylä
Kuva 2.4: Säilyttävä bittikohtainen sovittelu toiminnassa
2.4 on esitettynä esimerkkitapaus, jossa laitteet yksi ja kolme väistyvät laitteen kak
si saadessa oikeuden jatkaa lähetystä.
2.2.3 CAN-paketin rakenne
CAN-protokolla tukee kahta viestien kehysrakennetta, joiden ainoana oleellisena erona on tunnistekoodin pituus. Niin kutsuttu standardikehys tukee 11-bittistä tun
nistetta, laajennettu kehys tukee 29-bittistä tunnistekoodia.
Tunniste-
koodi Data
Kuva 2.5: CAN-standardikehyksen rakenne
CAN-standardikehys on esitettynä kuvassa 2.5. Kehyksen alussa on siis 11-bittinen tunnistekoodi, joka määrää paketin prioriteetin sekä kertoo vastaanottajille sen tyy
pin. Kehys voi sisältää nollasta kahdeksaan tavua hyötydataa. Datan määrä kerro
taan DLC-kentässä jota seuraa kyseisen kentän kertoman määrän verran tavuja hyö-
2.2 CAN-väylä 8 tydataa. Kehyksen eheyden takaa CRC-kenttä (CRC, Cyclic Redundancy Check), joka sisältää syklisen varmistussumman, vastaanottajat tarkistavat että CRC-summa pitää paikkansa. Viestin lopussa esiintyvän ACK-bitin asettavat viestin oikein vas
taanottavat laitteet, jolloin tiedetään että ainakin yksi laite on vastaanottanut viestin oikein.
Laajennettu kehys erotetaan standardikehyksestä IDE-bitin avulla, jos se on päällä on kyseessä laajennettu kehys jolloin IDE-bitin jälkeen seuraa tunnistekentän 18- bittinen laajennusosa. Jotta laajennettua kehystä voidaan käyttää on kaikkien väylän laitteiden tuettava sitä, muutoin väylällä syntyy väärinkäsityksiä.
2.2.4 CANalyzer
CANalyzer on työssä apuna käytetty työkalu CAN-väylään perustuvien järjestel
mien kehitystyöhön. Se koostuu kannettavaan tietokoneeseen liitettävästä lisäkor
tista jonka kautta voidaan liittyä CAN-väylälle, sekä tietokoneessa ajettavasta oh
jelmasta jonka kautta sitä käytetään.
CAN-väylä
Laite 2 Laite 1
CANalyzer
Kuva 2.6: CANalyzer -työkalu
Tämän työn kannalta CANalyzer-työkalun tärkeimpänä ominaisuutena oli mahdol
lisuus seurata CAN-väylällä liikkuvia paketteja. CANalyzer kuuntelee ylimääräise
nä laitteena CAN-väylää ja rekisteröi paketit viestilokiin, josta niiden lähetysaikoja ja sisältöä voidaan tarkastella. CANalyzer voidaan myös asettaa lähettämään väy
lälle paketteja, joko jonkin näppäimen painalluksen seurauksena tai vasteena jonkin tietyn paketin vastaanottoon.
2.3 Työn kohteena olleen UPS-laitteen rakenne 9
2.3 Työn kohteena olleen UPS-laitteen rakenne
Tämän työn kohteena olleen UPS-laitteen kaaviokuva on esitettynä kuvassa 2.7.
Fyysisesti suurin osa laitteesta koostuu sähkötehon ohjaamiseen käytettävistä osioista. Nämä osat käsittävät tasa- ja vaihtosuuntaajan, akkulaturin, sekä ohitus- verkon ohjaamiseen käytetyn staattisen kytkimen.
Kontrollikortti
Näyttökortti
sovitus A/D- muunnoksi11e
EEPROM
Ohitusverkko
Vaihto
suuntaaja Tasa
suuntaaja
Voimasähkö ja I/O
Kuva 2.7: Työn kohteena olleen UPS-laitteen rakenne pääpiirteissään
Laitteen ohjauksesta vastaa yleiskäyttöiseksi suunniteltu kontrollikortti. Kontrolli- kortin ytimenä toimii signaaliprosessori, joka huolehtii pääosin koko UPS-laitteen ohjauksesta. Signaaliprosessorin seurana kontrollikortilta löytyy haihtumatonta EEPROM-muistia (Electrically Erasable Programmable Read Only Memory) tär
keiden asetusten tallettamista varten. Suuri osa kortin pinta-alasta on täytetty analogiasignaalien sovituksesta sekä multipleksauksesta huolehtivalla logiikalla.
Analogi-digitaali, eli A/D-muunnosten kautta kortti saa mittaustiedot laitteen teho- sähköosioilta. Signaaliprosessori on yhteydessä CAN-väylän kautta näyttöpanee- liin, sekä PLD-piireille ohjelmoidun logiikan kautta muihin laitteen osioihin.
2.4 Kontrollikortti 10
2.4 Kontrollikortti
2.4.1 Signaaliprosessori TMS320F2812
Signaaliprosessori TMS320F2812 Texas Instrumentsiin TMS320-perheeseen kuu
luva kiinteän pilkun prosessori [8]. Prosessorin suorituskyvystä vastaa 150MHz kel
lotaajuudella käyvä ydin.
Prosessorin ominaisuuksiin kuuluu muun muassa 128 kilosanan uudelleenohjelmoi
tava flash ROM-muisti (ROM, Read Only Memory), sekä 18 kilosanaa käyttö- eli RAM-muistia (RAM, Random Access Memory). Muistin koko ilmoitetaan nime
nomaan sanoina, sillä käytetty prosessori käsittelee muistia 16 bitin erotuksella.
Prosessorista löytyy myös muun muassa 16-kanavainen 12-bittinen A/D-muunnin, sekä CAN-väyläyhteysmoduli.
Prosessori tarjoaa myös raudalle toteutetun edistyneen ajonaikaisen emulaatiotoi- minnon virheiden havaitsemista ja korjaamista helpottamaan. Tämä mahdollistaa esimerkiksi ohjelman ajamisen käsky kerrallaan prosessorin sisällä.
2.4.2 eCAN -moduuli
Signaaliprosessori sisältää CAN 2.0B standardin mukaisen CAN-väylän ohjainmo- duulin [11]. Ohjain sisältää 32 yksikön kokoisen postilaatikkorakenteen, joista jo
kainen yksittäinen postilaatikko voidaan asettaa joko lähettämään tai vastaanotta
maan CAN-paketteja. Postilaatikot ovat toisistaan riippumattomia, joten jokaisen postilaatikon käyttämät viestien tunnistekoodit voidaan asettaa vapaasti. Pakettien vastaanotossa voidaan käyttää postilaatikkokohtaista suodatusta vastaanotettavien viestien tunnistekoodien mukaan.
2.4.3 DSP/BIOS
DSP/BIOS [9] on Texas-Instrumentsiin signaaliprosessorejaan varten suunnittele
ma reaaliaikainen käyttöjärjestelmä. Se on suunniteltu sovellutuksille, jotka vaati
vat muun muassa reaaliaikaista ajoitusta ja synkronointia sekä ajonaikaista ohjel
man suorituksen valvontaa.
2.4 Kontrollikortti 11 Säikeiden hallinta
Yleensä reaaliaikaiset DSP-sovellukset (DSP, Digital Signal Processor) suorittavat useita erillisiä näennäisesti riippumattomia toimintoja samanaikaisesti. Toimintoja suoritetaan esimerkiksi kontrollisignaaleista riippuen tai tietyn datan saatavuuden seurauksena. Sekä toiminnot että niiden suoritushetket ovat tärkeitä. Tällaisia toi
mintoja kutsutaan säikeiksi (thread). Säikeiden määrittely on usein löyhää, mutta DSP/BIOS -ympäristössä kaikki itsenäiset komentojen suoritusvirrat lasketaan säi
keiksi.
DSP/BIOS mahdollistaa suoritettavan sovelluksen kasaamisen säikeistä joista jokai
nen suorittaa omaa toimintoansa. Useita säikeitä käyttävää ohjelmaa ajetaan yhden prosessorin sisällä siten, että korkeamman prioriteetin omaavien säikeiden sallitaan suorittaa tehtävänsä keskeyttäen toimiensa ajaksi alemman prioriteetin omaavien säikeiden suorituksen.
DSP/BIOS tarjoaa tuen useille erityyppisille säikeille joilla on eriarvoiset prioritee
tit. Jokaisella säietyypillä on erilaiset ominaisuudet sekä suorituksen, että alemman prioriteetin omaavien säikeiden keskeytyksen suhteen. Säikeiden tyypit korkeim
masta matalimpaan prioriteettiin ovat:
• laitteistokeskeytykset (HWI, Hardware Interrupt)
• ohjelmalliset keskeytykset (SWI, Software Interrupt)
• tehtävät (Tasks)
• taustasäie (IDL, Idle Loop)
Laitteistokeskeytykset
Laitteistokeskeytykset (HWI, Hardware Interrupt) ovat keskeytyksiä jotka tyypil
lisessä DSP-ympäristössä suoritetaan vasteena sisäisten oheislaitteiden tai ulkois
ten laitteiden palvelupyyntöihin. HWI-keskeytyksen palvelurutiini (ISR, Interrupt Service Routine) suoritetaan periaatteessa välittömästi HWI-keskeytyksen liipaisun seurauksena, jos HWI-keskeytyksiä ei ole väliaikaisesti estetty tai toinen ylemmän prioriteetin omaava HWI ei ole suorittamassa tehtäväänsä. Laitteistokeskeytykset
2.4 Kontrollikortti 12 ovat korkeimman prioriteetin omaavia keskeytyksiä ja ne suorittavat tyypillises
ti tiukan aikarajan (clOOus) omaavaa tehtävää. Ohjelmistokoodin määrässä HWI- keskeytyksessä pyritään tyypillisesti vähimpään mahdolliseen, jotta muiden aika
kriittisten säikeiden suoritus ei häiriintyisi.
Ohjelmalliset keskeytykset
Ohjelmalliset keskeytykset (SWI, Software Interrupt) sijaitsevat prioriteettihierar- kiassa HWI-keskeytysten alapuolella. Ne laukaistaan kutsumalla SWI-funktiota oh
jelman sisältä käsin. Niiden aikarajat vaativat tiukempaa kontrollia kuin tehtävien (tasks) kohdalla, mutta ne eivät ole yhtä tiukkoja kuin HWI-keskeytysten ollessa ky
seessä. SWI-keskeytykset sallivat HWI-keskeytyksessä jättää vähemmän aikakriit
tinen prosessointi alemman prioriteetin SWI-säikeeseen, lyhentääkseen palveluru- tiinin vaatimaa aikaa. SWI-keskeytykset suoritetaan HWI-keskeytysten tavoin aina kerralla loppuun asti.
Tehtävät
Tehtvät (tasks) omaavat korkeamman prioriteetin kuin taustasäie, ja alemman prio
riteetin kuin SWI-keskeytykset. Tehtävien suurin ero verrattuna SWI-keskeytyksiin on, että ne voivat keskeyttää suorituksensa esimerkiksi kunnes tietyt resurssit ovat saatavilla. Toisin kuin muiden säietyyppien kohdalla jotka kaikki käyttävät yhteistä systeemipinoa, jokaisella tehtävällä on käytössään oma ajonaikainen muistipinonsa.
DSP/BIOS tarjoaa useita tietorakenteita jotka mahdollistavat tehtävien välisen kom
munikaation ja synkronisoinnin. Näitä ovat jonot (queues), postilaatikot (mail
boxes) sekä opastinsignaalit (semaphores). Näiden avulla saadaan tietoa siirretysti synkronoidusti säikeiden välillä ja tehtävä voidaan jättää odottamaan jonkin tietyn resurssin saatavuutta.
Taustasäie
Taustasäiettä (IDL) ajetaan DSP/BIOS -sovelluksessa alimmalla prioriteettitasolla joutoajalla joka prosessorilta jää korkeamman prioriteetin omaavien säikeiden suo
ritukselta. Taustasäie on loputon jatkuva silmukka joka ajaa yksi toisensa perään
2.5 Näyttökortti 13 IDL-objektien funktiot lävitse, sitä suoritetaan aina kunnes korkeamman tason säi
keet sen keskeyttävät.
2.5 Näyttökortti
Käyttöliittymäkortti on erillinen piirikortti jolla käyttöliittymän eri elementit sijait
sevat. Käyttöliittymä esitetään 100x33 pikselin kokoista graafista nestekide-, eli LCD-näyttöä (Liquid Crystal Display) käyttäen. LCD-näytön lisäksi kortilla on nel
jä LED-valoa sekä summeri ilmaisemaan UPS-laitteen tilaa. Näiden lisäksi kortil
ta löytyy vielä käyttöliittymän ohjaamista ja toimintojen suorittamista varten neljä painiketta. Näyttökortin eri elementit ovat esitettynä kuvassa 2.8.
LCD näyttö
O O O painikkeet valot
Summeri
PIC mikro
kontrolleri
Kuva 2.8: Käyttöliittymäkortti
Käyttöliittymäkortti on yhteydessä muuhun UPS-laitteistoon CAN-väylän välityk
sellä. Väylän kautta kortti saa kaiken tarvittavan ohjausinformaation, se ei itsenäi
sesti tee mitään lukuun ottamatta tilannetta jolloin CAN-väylä ei jostain syystä ole kunnossa. Kortin ohjaamiseen käytetään mikrokontrolleria, joka suorittaa haluttuja toimintoja CAN-väylältä saamansa informaation perusteella.
Käyttöliittymäkortti toimii siis täysin oijalaitteena, se ottaa vastaan yksinkertaisia
2.5 Näyttökortti 14 komentoja, jotka suoritettuaan se lähettää kuittauksen tiedoksi operaation onnistu
misesta. Näytön ymmärtämät komennot ovat yksinkertaisia perustoimintoja, se ei suorita itsenäistä päättelyä vaan toimii pelkästään komentojen mukaisesti. Komen
not muodostavat hyvin pohjatason rajapinnan näytön käsittelyyn, joka kuitenkin on riittävä jottei ohjattavan LCD-näytön rautakohtainen ohjaus näy lävitse. Tällöin esimerkiksi LCD-näyttö voitaisiin tarpeen milen vaihtaa toisen valmistajan malliin itse käyttöliittymäohjelmaa muuttamatta, ainoa muutettava asia olisi CAN-väylän komentoja tulkitsevan mikrokontrollerin ohjelmakoodi.
2.5.1 LCD-näytön ohjaaminen
Kortin tarjoamia komentoja LCD-näytön ohjaamiseen ovat muun muassa näytön tyhjentäminen ja kursorin siirto haluttuun paikkaan. Oleellisia perustoimintoja ovat tekstin kirjoittaminen kursorin osoittamaan paikkaan, sekä yksittäisten pikseleiden tilan asettaminen. Kortti tarjoaa myös mahdollisuuden kirjoitettavan tekstin koon sekä merkistön asettamiseen, tekstin koko voidaan tuplata joko vaaka- tai pysty
suunnassa, tai molemmissa. Tällä voidaan lisätä jonkin tärkeän asian huomioarvoa tai parantaa näkyvyyttä.
Jokaisen toiminnon suoritettuaan näyttö lähettää kuittauksen CAN-väylän välityk
sellä. Kuittauksilla on muutama eri merkitys käyttöliittymää ohjaavan tehtävän kan
nalta. Toisaalta se saa kuittausten avulla tiedon siitä että haluttu toiminto on suori
tettu ja että CAN-kommunikaatio on kunnossa. Kuittaus voi myös sisältää muuta informaatiota, jollaista on esimerkiksi kursorin uusi sijainti ruudulla tekstin kirjoit
tamisen jälkeen.
Käytössä oleva merkistöt on talletettuna mikrokontrollerin muistiin. Oletuksena on tavallinen ASCII-merkistö (ASCII, American Standard Code for Information In
terchange) jota käytetään oletuskielen englannin ja muiden samaa merkistöä käyt
tävien kielten esittämiseen. Lisäksi näytön muistiin voi olla talletettuna mitä ta
hansa muita merkistöjä. Rajoittavana tekijänä kuitenkin on, että yksi merkistö on maksimissaan 256 merkin kokoinen. Jokaista merkkiä merkistössä siis vastaa yksi kahdeksan bittinen lukuarvo. Tämä saattaa olla ongelma lähinnä suurien merkistö
jen kohdalla, joista hyvänä esimerkkinä kiinan kieli. Kooltaan näytön merkistöjen merkit voivat olla aina 16x31 pikselikokoon asti.
2.5 Näyttökortti 15
2.5.2 Muiden toimintojen ohjaaminen
Käyttöliittymäkortilla sijaitsevat LED-valot voidaan asettaa haluttuun tilaan yksin
kertaisella komennolla, mahdollisia tiloja ovat sammuksissa, päällä, tai vilkkuva.
Jatkuvasti päällä olevaa valoa käytetään jatkuvat tilan ilmaisemiseen, vilkkuvan va
lon tarkoitus on kiinnittää UPS-laitteen operaattorin huomio uuteen hälytykseen tai muuhun huomiota vaativan seikkaan. Vastaavasti voidaan asettaa myös LCD-näytön taustavalo, mahdollisina tiloina päällä tai poissa.
Summerin tila voidaan valita joko hiljaiseksi, jatkuvan äänen, tai muutamaan eri
laajuisen piipityksen väliltä. Erityyppisten äänten on tarkoitus esittää erityyppistä tapahtumaa, joko varoittaa tai ilmaista hälytystilaa ja kiinnittää operaattorin huo
mio.
2.5.3 Nappuloiden toiminta
Käyttöliittymäkortin nappuloiden toiminta on määritelty siten, että se lähettää tie
don väylän välityksellä nappuloiden tilan muuttumisesta automaattisesti. Myös jos nappulaa pidetään pohjassa, alkaa kortti lähettää tilaa tietyin väliajoin. Näiden tie
tojen avulla käyttöliittymäprosessi voi reagoida suoraan nappuloiden tilan muutok
seen, eikä CAN-väylää tarvitse kuormittaa jatkuvilla kyselyillä nappuloiden tilasta.
2.5.4 Ohjelman perustoiminta ja päivitysohjelmointi
Näytön ohjelma koostuu kahdesta osasta. Ensimmäinen osa on niin sanottu käyn- nistyslataaja (boot loader) joka on kiinteänä pysyvä osa ohjelmakoodia. Tämän tar
koitus on tarkistaa itse pääohjelman kunto käynnistyksessä tarkistussumman avulla, sekä hoitaa kortin uudelleenohjelmointi. Toinen osa koodia on itse pääohjelma, joka hoitaa näytön ohjaamisen normaalitilanteessa.
Näytön ohjelmiston perustoiminta on esitettynä kuvassa 2.9. Kun näyttö käynnis
tyy, ja ohjelman kunto on tarkastettu, alkaa se lähettää ilmoitusta hengissä olostaan CAN-väylän kautta. Näyttö ilmoittaa olevansa joko pääohjelmassa, tai käynnistys- lataajassa tilanteesta riippuen ja käyttöliittymäohjelmisto voi toimia tilanteen mu
kaisesti.
2.5 Näyttökortti 16
valmis
onko näytön ohjelmisto
kunnossa
kyllä
ohjelmiston päivityspyyntö käynnistys
/ alustus
suorita pääohjelma
käynn i s t y s 1 a t aa j a suorita
Kuva 2.9: Näytön ohjelman perustoiminta
Kun näyttö on käynnistyslataajatilassa, se voidaan uudelleen ohjelmoida CAN- väylän kautta. Uusi ohjelma lähetetään paketteina väylän ylitse, ja ohjelmoinnin ollessa valmis kortti käynnistetään uudestaan.
2.5.5 Aikavalvonta
Käyttöliittymäkortti valvoo normaalitoiminnassa CAN-väylän toimintaa. Jos väy
lältä ei tule komentoja muutaman sekunnin kuluessa, aikavalvonta asettaa kortin katkotilaan josta se tietyn ajan kuluttua ilmoittaa kirjoittamalla ruudulle viestin.
Katkotilassa ollessaan kortti myös yrittää lähettää CAN-väylälle tiettyä viestiä, jo
hon vastaamalla kortti saadaan herätettyä takaisin normaalitoimintaan.
Luku 3
Taustatietoja toteutukselle
3.1 Laiteohjelmistot UPS-laitteissa
UPS-laitteita ohjaavien mikroprosessoreiden laiteohjelmistot (firmware) on aiem
min yleisesti kirjoitettu symbolista konekieltä (assembly) käyttäen. Symbolista ko
nekieltä tarvitaan edelleen varsinkin aikakriittisten ohjelman osien tekemiseen, mut
ta prosessoritehojen, muistin määrän ja laitteiden ohjelmien monimutkaisuuden kasvaessa tästä työläästä tavasta ohjelmoida ollaan siirtymässä yhä enemmän kor
keamman tason ohjelmointikieliin.
3.1.1 C-ohjelmointikieli
Parhaiten jalansijaa laiteohjelmistojen kirjoittamiseen on pikkuhiljaa saavuttanut ohjelmointikielistä C-kieli. C-kieli on riittävän matalan tason kieli tason kieli laitteistoajureiden- ja ohjelmistojen kirjoittamiseen. Samalla se on myös riittävän korkean tason kieli vielä esimerkiksi käyttöliittymäkirjastojen kirjoittamiseen. C- kieli ei ole kovinkaan laaja kieli eikä ole erikoistunut millekään tietylle alueelle, sen yleispätevyys ja turhien rajoitusten puute tekeekin siitä hyvin yleiskäyttöisen moniin tehtäviin.
C-ohjelmointikielen esittelivät alunperin vuonna 1978 herrat Kernighan ja Ritc
hie kirjassaan C Programming Language [12]. Joitain vuosia myöhemmin ANSI (American National Standards Institute) otti toimekseen kehittää kieltä laitteistosta riippumattomampaan ja vähemmän monitulkintaiseen suuntaanpa lopputuloksena
3.2 Kielet ja käyttöliittymä 18 C-ohjelmointikieli on standardoitiin vuonna 1990 (ANSI/ISO 9899-1990). Tämän standardin mukaisesta C-kielestä käytetään nimitystä ANSI-C.
C-kielisen ohjelman kääntäminen ajettavaan muotoon koostuu kolmesta päävai
heesta. Ensimmäisessä vaiheessa lähdekooditiedostot esikäännetään. Esikääntäjä mahdollistaa muun muassa erilaisten makrojen ja vakioiden korvaamisen varsinai
sella ohjelmakoodilla. Toisessa vaiheessa esikäännetty C-kielinen ohjelma käänne
tään tiedosto tiedostolta varsinaisella C-ohjelmakääntäjällä, jolloin tuloksena saa
daan joukko objektitiedostoja. Nämä sisältävät ohjelman konekielisessä, mutta va
paasti muistiin sijoiteltavassa muodossa. Viimeisessä vaiheessa objektit kootaan varsinaiseksi ohjelmaksi. Tämä vaiheen suorittaa niin kutsuttu linkitysohjelma, joka nimensä mukaisesti linkittää viittaukset objektien välillä yhteen ja kokoaa ohjelman lopulliseen suoritettavaan muotoonsa.
3.2 Kielet ja käyttöliittymä
Käyttöliittymässä esiintyvien tekstin kääntäminen on yksi osa käyttöliittymän kään
tämistä vieraalle kielelle. Kokonaisuudessaan tehtävä ei kuitenkaan rajoitu siihen, vaan on kuitenkin myös monia huomioonotettavia seikkoja joista useat on otettava huomioon jo käyttöliittymää suunniteltaessa.
Yksi asia mikä helposti saattaa aiheuttaa ongelmia kielten esittämisessä oikein, on erilainen sanajärjestys. Esimerkiksi lause, joka toisessa kielessä esitetään muodos
sa “suorita toiminto %A laitteelle %B” voi toisessa kielessä olla luontevin esittää muodossa “laitteelle %B suorita toiminto %A”. Sanajärjestyksen lisäksi myös se, että toisissa kielissä sanat taipuvat ja toisissa eivät juuri ollenkaan voi vaikuttaa jon
kin asian suunnittelussa.
Kaikki kielet eivät myöskään käytä yleisesti esimerkiksi välejä sanoja erottamas
sa, näin on ainakin kiinan kielen [14] tapauksessa. Sanat muodostuvat yhdestä tai useammasta kirjoitusmerkistä, ja niiden vääränlainen ryhmitteleminen aiheut
taa yleensä lauseen merkityksen muuttumisen. Esimerkiksi lause ABCDEFG, jossa jokainen kirjain vastaa yhtä kiinalaista kirjoitusmerkkiä, voi tarkoittaa jotain jos se ryhmitellään AB C DE FG, mutta väärä ryhmittely kuten AB CD E FG voi johtaa lauseen merkityksen muuttumiseen tai tehdä lauseesta merkityksettömän.
Myös sanojen pituus on hyvin erilainen eri kielissä, toisella kielellä esitettynä tietty
3.2 Kielet ja käyttöliittymä 19 asia voi viedä huomattavastikin enemmän tilaa. Yleisenä ohjeena onkin jättää n. 30 prosenttia [13] väljää erikielisten käännösten varalle.
Yksi huomioonotettava asia on käytettyjen fonttien näytöltä vaatima tila. Esimer
kiksi ASCII-merkistöä käytettäessä merkit saadaan helposti mahtumaan jopa vii
den pikselin korkuiseen tilaan luettavuuden vielä kärsimättä. Samaan tilaan on kui
tenkin hyvin vaikeaa mahduttaa jo useissa Eurooppalaisissa kielissä käytettäviä eri
koismerkkejä, puhumattakaan kiinalaisista kirjoitusmerkeistä jotka vaativat vähin
tään noin 10-12 pikselin tilan korkeussuunnassa.
Eri kielissä on myös eroja esimerkiksi lukuarvojen ja kellonaikojen esittämisessä.
Lukuarvojen desimaalipilkku voi kielestä riippuen olla ainakin piste tai pilkku. Kel
lonaikojen ja varsinkin päivämäärän esittämisessä puolestaan on vieläkin enemmän erilaisia merkintätapoja eri kielten välillä. Kellonajat voivat olla 12 tai 24 tunnin muodossa, päivämäärissä puolestaan vaihtuvat usein vähintäänkin lukujen järjestys sekä välimerkit. Nämä voivat olla pieniltä vaikuttavia yksityiskohtia, mutta todelli
suudessa voivat kuitenkin aiheuttaa ainakin sekaannusta laitetta käytettäessä.
3.2.1 Unicode
Käyttöliittymän tekstien käännökset eri kielille saadaan kääntäjiltä kätevimmin Unicode-merkistöstandardia noudattavassa muodossa. Unicode [15] on kansainväli
nen merkkijärjestelmästandardi, joka varaa uniikin numeroarvon jokaiselle merkil
le. Järjestelmä esittää merkit 16-bittisinä, joten sillä voidaan esittää 65535 erilaista eri kielissä käytettyä merkkiä. Järjestelmä helpottaa huomattavasti erikielisten do
kumentaatioiden kanssa työskentelyä, kun maailmalla käytettyjen satojen erilaisten merkistöjen koodaustapojen sijaan voidaan käyttää yhtä standardia.
Luku 4
UPS-laitteen
käyttöliittymäohjelmiston suunnittelu
4.1 Käyttöliittymäohjelmiston vaatimukset
Kohteena olevan UPS-laitteen oli tavoitteena korvata uudempana mallina jo markki
noilla oleva vanhempi UPS-laite. Käyttöliittymän suunnittelussa haluttiin ottaa huo
mioon mahdollisesti edellisiä malleja käyttäneet käyttäjät, joten etupaneelin käyttö
liittymän haluttiin peruspiirteissään ja toiminnassaan noudattavan edellisen antamaa mallia.
Käyttöliittymä koostuu menurakenteesta, joka sisältää tarvittavan määrän menuruu- tuja. Käyttöliittymän menuruutujen välillä liikkuminen tapahtuu käyttäjän painel
lessa etupaneelin painikkeita. Käyttöliittymällä oli tarkoitus voida tehdä seuraavan
laisia asioita:
e Suorittaa toimintoja, kuten käynnistää ja sammuttaa UPS-laite, tai asettaa se ohitusverkolle
• Tarkistaa/seurata UPS-laitteen toimitilaa, onko laite normaalitoiminnassa, ohitusverkolla, akuilla tms.
• Tarkistaa aktiiviset hälytykset ja huomautukset
• Selata menneitä hälytyksiä ja tapahtumia eli tapahtumalokia
• Lukea mittausarvoja, eli jännitteitä, virtoja, taajuuksia tms.
4.2 Menurakenteen esittäminen 21
• Selata ja asettaa UPS-laitteen parametrejä, eli konfiguroida laitteen toimintaa
• Tarkistaa laitteen ohjelmistoversiot tms.
• Vaihtaa käyttöliittymän kieli, jonka on oltava valittavissa ainakin kahden vaihtoehdon väliltä.
Käyttöliittymän täytyi pystyä myös reagoimaan UPS-laitteen sisäisiin tapahtumiin, kuten toimintatilan muutoksiin sekä uusien hälytysten ja huomautusten aktivoitu
miseen. Lisäksi sen tuli toteuttaa aikavalvontakatkaisu (timeout), jonka tehtävä on palauttaa menu tietyn ajan kuluttua perustilaan kun nappuloita ei paineta.
Käyttöliittymän toteutuksessa haluttiin mahdollisimman pitkälle seurata myös mal
lia, jossa käyttöliittymän toteutus on erillään itse käyttöliittymäohjelmasta. Tätä on kuvattu kuvassa 4.1. Rakenne haluttiin mahdollisimman pitkälle sellaiseksi, että itse käyttöliittymän toteutuksen määritteleminen olisi yksinkertaista ja selkeää. Selkeä rakenne helpottaa koodin muokkaamista ja ymmärtämistä myös jälkikäteen, kun käyttöliittymää tarvitsee ylläpitää.
Käyttöliittymän toteutus
Erikieliset ulkonäkökuvaukset
UPS-laite Käyttöliittymäohjelma
Kuva 4.1 : Käyttöliittymän perusosat
4.2 Menurakenteen esittäminen
Yksi tehtävä ratkaisu käyttöliittymän määrittelemisessä on se miten käyttöliittymän menurakenne esitetään ohjelmakoodissa.
4.2 Menurakenteen esittäminen 22 Yksi tapa lähestyä tätä asiaa on rakennelähtöinen, jossa menurakenne ajatellaan puuna. Jokaisesta solmukohdasta on X kappaletta haaroja, joiden väliltä voidaan tehdä valinta. Jokainen haara taas voi johtaa uuteen valintaan, tai tiettyä asiaa esit
tävään lehtisolmuun.
Tällaisen rakenteen esittäminen vaatii tiedon jokaisen haarakohdan taakse liittyvistä vaihtoehdoista. C-kielellä toteutettuna tämä tarkoittaisi erillistä taulukkoa jokaista haarakohtaa kohden, joihin on listattuna seuraavat haarat tai lehtisolmut.
Valittu ratkaisu
Toinen, ja myös toteutettavaksi valittu esitysmuoto on enemmän menuruutulähtöi- nen. Ajattelu alkaa ennemmin yksittäisestä menuruudusta, kuin menujen muodos
tamasta rakenteesta. Siinä Jokainen menuruutu on itsenäinen kokonaisuus, jossa painikkeen painaminen voi aiheuttaa siirtymän toiseen menuruutuun. Tätä lähesty
mistapaa on esitetty kuvassa 4.2.
• menuruutu Y •
painike2
• — — _ — — — — - — — * painikel
• menuruutu X i menuruutu 4/ ;
J
menuruutu W
painike3
menuruutu Z
Kuva 4.2: Menuruudun rakenne
Kuvattu rakenne voidaan esittää taulukkona, jokaista menuruutua vastaa yksi al
kio taulukossa. Jokaiseen menuruutualkioon liittyy tieto neljästä muusta ruudusta, joihin eri nappuloiden painaminen oletusarvoisesti johtaa. Tällainen ratkaisu on ra
kenteeltaan yksinkertaisen selkeä. Kun kaikki tieto käyttöliittymän rakenteesta ja menuruutujen järjestyksestä on koottuna samaan taulukkoon, on se helposti ym
märrettävissä ja siten myös ylläpidettävissä.
Tällaisessa ratkaisussa ei myöskään sitouduta menujen tietyntyyppiseen hierarkki
seen järjestykseen, vaan tarpeen mukaan painikkeen painaminen voi aiheuttaa siir
4.3 Menujen kielen ja ulkonäön esitysmuoto 23 tymän mihin tahansa ruutuun. Edellä mainittu puutyyppinen rakenne voidaan to
teuttaa, mutta sitä voidaan myös tarpeen mukaan monipuolistaa.
Käyttöliittymän määrittelemistä ja ylläpitämistä helpottaa myös se, jos menuruutu- jen järjestyksellä taulukossa ei ole merkitystä. Yksinkertaisin ratkaisu, joka ei tätä vaatimusta toteuta, on sellainen jossa menuruudun indeksi taulukossa on samalla myös sen ohjelmallinen tunnistekoodi. Tällöin siis tietty menuruutu voidaan löy
tää taulukosta osoittamalla suoraan taulukon alkiota tietyllä indeksillä. Toteutus on prosessorin näkökulmasta nopea, sillä ruutuja ei tarvitse taulukosta etsiä. Käyttöliit
tymän ylläpitäjän näkökulmasta tämä aiheuttaa kuitenkin ylimääräistä vaivannäköä kun indeksit on pidettävä sotilaallisessa järjestyksessä.
Toinen vaihtoehto on liittää taulukkoon jokaista menuruutua kohti myös ruudun oma tunnistekoodi. Tällöin aina kun uusi menuruutu halutaan ohjelmassa kaivaa esiin, täytyy se ensin etsiä taulukosta tunnistekoodin perusteella. Tämän aiheutta
ma viive on kuitenkin nopealla prosessorilla merkityksetön, kun etuna kuitenkin saavutetaan helpommin ylläpidettävä ohjelma.
4.3 Menujen kielen ja ulkonäön esitysmuoto
Taustaa
Yksi aiemmissa UPS-malleissa käytetty tapa on, että erikieliset tekstit esitetään tau
lukoituna menuittain. Jokaiselle kielelle on yksi taulukkoja taulukossa jokaista me
nuruutua kohden yksi merkkijono. Menuruuduissa, joissa on muuttuvaa tietoa, on sille jätetty merkkijonossa tyhjää tilaa. Tämän tyhjän tilan paikalle muuttuva tieto päivitetään.
Ongelmana eri kielien välillä on se, että muuttuvalle tiedolle varatun tilan sijainti ja koko on kiinteä jokaisella kielellä. Tästä aiheutuu ongelmia käännösten tekemises
sä, kun sanoja on sijoiteltava ja lyhenneltävä niille varattuihin tiloihin.
Yksi mahdollisuus toteuttaa tekstin esitys on sanakirjamalli. Siinä yhtä sanaa vastaa numerokoodi, joita peräkkäin asettelemalla saadaan aikaan lauseita. Tämän tyyppi
nen ratkaisu säästää muistia sillä jokainen sana on muistissa vain kerran. Malli toi
mii suhteellisen hyvin englanninkielisen tekstin esittämiseen, jossa sanoilla esiinty
vät usein perusmuodossaan. Mallin istuu kuitenkin huonosti sellaisiin kieliin joissa
4.3 Menujen kielen ja ulkonäön esitysmuoto 24 sanat taipuvat. Myöskään samoja lausepohjia ei tässäkään voitaisi käyttää eri kielil
lä koska sanajärjestys on kielten välillä erilainen.
Tässä UPS-laitteessa Käyttöliittymän menujen haluttiin olevan mahdollisimman va
paasti määriteltävissä, jotta ne soveltuisivat erikielisten versioiden esitykseen mah
dollisimman hyvin. Erikielisten esitysten välillä on eroja sanojan pituuksissa ja sa- najäijestyksessä, tämän takia staattisen ja muuttuvan tekstin sijaintien haluttiin ole
van vapaasti määriteltävissä.
Ratkaisu
Ratkaisuksi lähdettiin miettimään tapaa yhdistää menuruudun staattisen tekstin ja muuttuvan datan sijainti ja sisältö yhteen kuvaukseen. Kuvauksen vaatimuksiin si
sältyy seuraavanlaisia asioita:
• esittää näytöllä staattista tekstiä
• esittää näytöllä muuttuvaa dynaamista tekstiä (mittaustuloksia, parametrien nimiä ja arvoja, jne.)
• määrittää elementtien sijainnit, eli käytännössä siirtää kursoria näytöllä
• muuttaa tekstin ulkonäköä, kuten kokoa tai tyyliä (käänteinen/normaali)
• vaihtaa tekstin kirjoituksessa käytettyä fonttia
Nämä vaatimukset saadaan tarkemmin tarkasteltuna tiivistymään kolmeen ryh
mään. Näitä ryhmiä ovat teksti, muuttujat sekä kontrollointi.
Staattisena pysyvä teksti on selkeä ryhmä, se on tarkoitus kirjoittaa ruudulle kerran ja pysyä paikallaan. Sen esittäminen on luonnollisinta selväkielisenä merkkijonona.
Muuttujat puolestaan muodostavat ryhmän, joka pitää sisällään päivittyvää tietoa.
Ne piirretään näytölle ruutua luotaessa, mutta niitä on palattava aika-ajoin päivit
tämään jotta tieto pysyisi ajan tasalla. Nämä voidaan esittää esimerkiksi järjestyk
sessä numeroituina koodeina, joista koodin perusteella käyttöliittymäohjelma tietää minkä muuttujan sen pitää tulostaa näytölle.
Kontrollointi-informaatio puolestaan tiivistyy ryhmäksi, joka on jonkinlaista eri
koistoimintaa vaativaa tietoa. Siinä missä teksti ja muuttujat luovat ruudulle sisäl
töä, kontrolli-informaatio määrittää miten, missä ja minkä näköisenä sisältö näkyy
4.4 Kontrollikoodien sisällyttäminen merkkijonoihin 25 näytöllä. Myös kontrolli-informaatio voidaan muuttujien tavoin määritellä nume
rokoodeiksi, joista tietyn koodin perusteella käyttöliittymäohjelma osaa suorittaa tietyn operaation.
Tällaiset kontrolli-ja muuttujakoodit voitaisiin esimerkiksi taulukoida muistiin me
nujen tekstikuvausten yhteyteen monellakin eri tavalla. Yksi ratkaisu voisi olla tau
lukoida koodit erikseen merkkijonoista. Tällaisessa ratkaisussa tekstikuvauksen vä
lissä merkittäisiin koodien paikat tietyin erityismerkein, esimerkiksi “Input volta
ge % %V %V %V”. Tämän lisäksi olisi taulukko, jossa varsinaiset koodien arvot sijaitsisivat. Ratkaisun ongelmana olisi ainakin se, että taulukko jossa koodit ovat hukkaisi huomattavasti muistia. C-kielessä taulukon jokaisen rivin leveys on vakio, joten muodostuvan taulukon koko olisi määriteltävä eniten erikoiskoodeja sisältä
vän menuruudun mukaan.
Toinen tapa ratkaista asia on koodata kaikki tieto saman merkkijonon sisään. Täl
lainen tapa ei kuluta samalla tavalla hukkatilaa muistista, sillä C-kielessä merkkijo
nojen taulukko talletetaan osoittimina jolloin jokaisen merkkijonon pituus voi olla yksilöllinen. Jos kaikki tieto on sisällytettynä samoihin merkkijonoihin, ei tilaa kulu erillisiin taulukoihin.
4.4 Kontrollikoodien sisällyttäminen merkkij onoihin
Merkkijonot päätettiin koodata siten, että merkistön alusta varataan muutama ar
vo (0x01-0x03) erikoistarkoitukseen. Näiden erikoismerkkien avulla saadaan luotua erinäisiä koodisarjoja, joihin erikoisinformaatio sisällytetään. Merkkijonoa tulkites
sa erikoismerkki voidaan tunnistaa, jolloin sitä seuraavan tai seuraavien merkkien perusteella suoritetaan koodin määräämiä toimintoja.
Käytetyt yhdistelmät koodien luomisessa on eriteltynä taulukossa 4.1. Merkit 0x01 sekä 0x02 varattiin kontrollikoodien sekä muuttujakoodien alun tunnistamiseen ja erottamiseen toisistaan. Muuttuja- tai kontrollikoodiksi tulkitaan näitä erotinmerk
kejä seuraava merkki. Tämä mahdollistaa 255 erilaista koodia kumpaankin tarkoi
tukseen, jonka todettiin riittävän hyvin. Näiden lisäksi käytetyn erikoismerkin 0x03 merkitys on erotella kontrollikoodien mahdolliset parametrit toisistaan.
Menukuvausmerkkijonoon toteutettiin myös mahdollisuus sisällyttää muuttuvaa si
sältöä dynaamisten merkkijonomuuttujien muodossa. Tällä tarkoitetaan käytännös-
4.4 Kontrollikoodien sisällyttäminen merkkijonoihin 26 sä merkkijonoja, joista yksi kerrallaan voidaan esittää tietyn muuttujakoodin pai
kalla. Tällaista tarvitaan esimerkiksi menuruuduissa joissa asetetaan laitteen para
metrejä. Eri vaihtoehtoja kuvaavat merkkijonot kuten “välittömästi"/1’viiveellä’T’ei ikinä” voidaan sisällyttää ruudun kuvaukseen. Näiden erottamiseen itse menuruu- dun kuvauksesta valittiin erikoismerkki 0x04.
koodi merkitys
0x01 OxYY Kontrollikoodi YY
0x01 OxYY <par> 0x03 Kontrollikoodi YY + yksi parametri (<par> on ASCII-koodattu lukuarvo) 0x01 OxYY <par> 0x03 <par2> 0x03 Kontrollikoodi YY + kaksi parametria
(<par> ja <par2> ASCII-koodattuja lukuarvoja)
0x02 OxZZ muuttujakoodi ZZ
0x04 <str> merkkijonomuuttuj a
(<str> on merkkijono)
Taulukko 4.1: Merkkijonoon koodattavat erikoiskoodisarjat
Kuvassa 4.3 on havainnollistettuna menukuvausmerkkijonon rakennetta. Kuvasta käy ilmi miten muuttuja- sekä kontrollikoodit sijoittuvat merkkijonon keskelle. Ku
van merkkijonoon on sisällytetty myös dynaamisia merkkijonomuuttujia, jotka nä
kyvät kuvauksen loppupäässä.
kontrollikoodi dynaamisia merkkijonomuuttujia
Z \ I I I \
--- 1—I--- n---:--- n---П—П—
e....m TF.KS- trits- . 1 • 1 i 1 i
™r
TIÅ TEKSTIÄ TEKSTIÄ тхГi
;tn
\o
—-_________ \
VT 1 /
muuttujaksi dynaamisen merkkijonon
erotin 0x04
Kuva 4.3: Menukuvausmerkkijonon rakenne
UPS-laitteen muistissa koodit siis kuvataan taulukon 4.1 kuvaamalla tavalla, mutta tämä esitys ei ole käytännöllinen menukuvauksia kirjoitettaessa koska pelkät nu
merot eivät ilman erillisen listan avulla tulkitsemista kerro tarkoitustaan. Tähän ongelmaan kuitenkin C-kielen esikääntäjä tarjoaa ratkaisun. Esikääntäjän #define -määrettä käyttäen voidaan koodeille kirjoittaa selväkieliset vastineet, joiden käyt
täminen on ihmiselle vaivattomampaa.
Taulukossa 4.2 on esitettynä muutamia esimerkkejä määritellyistä kontrolli- ja
4.4 Kontrollikoodien sisällyttäminen merkkijonoihin 27 muuttujakoodeista. Näiden esimerkkien C-kielinen toteutus on nähtävissä liitteestä A.
koodi selväkielellä toiminto
_CTR_FONT_DOUBLEH Kaksinkertainen merkkien korkeus _CTR_FONT_N ORM AL Normaalikokoiset merkit
_CTR_GOTOY (y) Kursorin siirto haluttuun y-koordinaattiin _CTR_GOTOX(y) Kursorin siirto haluttuun x-koordinaattiin _CTR_GOTOXY(x, y) Kursorin siirto haluttuun (x, y) -koordinaattiin _CTR_GOTOXY_REL(x, y) Kursorin siirto haluttuun (x, y) -koordinaattiin
suhteessa tämänhetkiseen sijaintiin CTR NEWLINE Siirtää kursorin uuden rivin alkuun _VAR_IN_VOLT_X Sisääntulojännite, vaihe X (1-3) _VAR_IN_CURR_X Sisääntulovirta, vaihe X (1-3) _VAR_OUT_VOLT_X Lähtöjännite, vaihe X (1-3) _VAR_OUT_CURR_X Lähtövirta, vaihe X (1-3)
Taulukko 4.2: Esimerkkejä määritellyistä kontrolli- ja muuttujakoodeista selväkie
lellä
Kuvassa 4.4 vielä esimerkkinä menukuvaus, joka tulostaa yläriville tekstin “Input Voltage” ja seuraavalle riville tuplakorkuisella fontilla kolmen vaiheen sisääntulo- jännitteet. Lopuksi esimerkki tulostaa vielä “V” -kirjaimet ilmaisemaan jännitettä jokaisen muuttujan perään oikealle korkeudelle normaalikokoisella fontilla. Tulos näytöllä on esitettynä kuvassa 4.5.
"Input voltage" _CTR_NEWLINE
_CTR_FONT_DOUBLEH _VAR_IN_VOLT_l "
_VAR_IN_VOLT_2 "
_VAR_IN_VOLT_3
_CTR_FONT_NORMAL _CTR_GOTOXY_REL(-4,7) "V"
_CTR_GOTOX(18) "V"
_CTR_GOTOX(48) "V"
Kuva 4.4: menukuvausesimerkki
4.5 Kielen mukaan muuttuvat osat 28
Input voltage-
230U 22% 230U
Kuva 4.5: esimerkin menukuvauksen tulos näytöllä
4.5 Kielen mukaan muuttuvat osat
Jotta käyttöliittymäohjelma osaisi esittää käytössä olevan kielen mukaisesti muuttu
vat asiat oikein, täytyy sen tietää mistä aina kulloinkin käytössä olevaan kieleen liit
tyvät olennaiset tiedot löytyvät. Tätä tarkoitusta palvelee varmasti parhaiten tauluk- kotyyppinen ratkaisu, jossa kootaan yhteen kunkin kielen mukaan muuttuvat asiat.
Seuraavassa listassa on kuvailtuna toteutukseen sisällytetyt kielen mukaan muuttu
vat osat.
Kielen nimi alkuperäiskielellä, joka voidaan esittää menuruudussa jossa kieltä va
litaan.
Menukuvaukset jotka kertovat edellä kuvaillun mukaisesti menuruudun ulkonäön, elementtien sijoittelun sekä sisällön eri kielillä.
Hälytystekstit muuttuvat myös kielen mukaan, nämä sisältävät itse hälytyksiä ku
vaavien merkkijonojen lisäksi eri hälytystasoja kuvaavat merkkijonot.
Merkistö kertoo mitä LCD-näytön sisältämää merkistöä käytetään kielen esittämi
seen oletusarvoisesti. Tämä sisältää myös tiedon merkkien peruskoosta pikse- leinä, joka vaikuttaa siihen kuinka paljon näytöltä on varattava eri elementeil
le tilaa. Merkistöä voidaan tarpeen mukaan kuitenkin vaihtaa kontrollikoodin avulla, jos jokin menun sisältämä asia sitä vaatii.
Muotoilutiedot sisältävät tiedot lukuarvojen esittämisestä. Tähän sisällytettiin tie
dot välimerkeistä, joita käytetään kun kyseisellä kielellä tulostetaan desimaa
lilukuja, kellonaikoja tai päivämääriä. Päivämääristä mukaan otettiin myös järjestys, jossa vuosi, päivämäärä sekä kuukausi esitetään.
4.6 Lisätoiminnallisuus ja tapahtumiin reagointi 29
4.6 Lisätoiminnallisuus ja tapahtumiin reagointi
Edellä luvuissa 4.2 ja 4.3 kuvatulla tavalla saadaan aikaan käyttöliittymän rakenne ja luotua menuruuduille ulkonäköjä sisältö. Menuruudut, jotka sisältävät vain esi
merkiksi alimenun nimen tai mittausdataa eivät muuta tarvitsekaan esittämiseensä.
Tarvitaan kuitenkin menuruutuja jotka sisältävät myös muunlaista toiminnallisuut
ta, tarpeen on siis keino tällaisen lisätoiminnallisuuden esittämiseen ja luomiseen.
4.6.1 Toimintofunktiot
Tällainen vaatimus saadaan toteutettua menuruutukohtaisia funktioita käyttäen. Li- sätoiminnallisuutta varten kirjoitetaan funktio, jossa toiminnallisuus toteutetaan. C- kieleltä käytettäessä voidaan tässä hyödyntää funktio-osoittimia. Ne ovat nimen
sä mukaisesti osoittimia funktioihin, jotka tässä tapauksessa päätettiin taulukoida samaan taulukkoon menun rakenteen (luku 4.2) kuvauksen kanssa. Kun menuihin liittyvä informaatio koottua samaan paikkaan, on siihen helpompi päästä käsiksi käyttöliittymää muokattaessa.
Funktio-osoittimet mahdollistavan myös sen, että jos useassa menuissa tarvittava lisätoiminnallisuus on samanlaista, voidaan samaa Toimintofunktiota käyttää niis
sä kaikissa monistamalla pelkkä funktio-osoitin eikä koko funktiota. Niiden menu- ruutujen kohdalle, jotka eivät lisätoimintoja tarvitse, voidaan tämä funktio-osoitin jättää tyhjäksi.
4.6.2 Tapahtumat
Jotta Toimintofunktiot olisivat käyttökelpoisia, on käyttöliittymäohjelmasta käsin kutsuttava oikean menuruudun funktiota tarpeeksi usein. Tämä voidaan toteuttaa yksinkertaisimmillaan siten että funktiota kutsutaan vain tasaisin väliajoin. Tämä tarkoittaisi käytännössä sitä että olisi toimintofunktion vastuulla selvittää onko jokin tärkeä tapahtuma tapahtunut lähi aikoina (kuten nappulan painallus) ja että onko siihen jotenkin reagoitava.
Tietyt toiminnot halutaan kuitenkin yleensä suorittaa vasteena tiettyyn tapahtu
maan. Tämä johtaa toteutusmalliin, jossa käyttöliittymäohjelmasta kutsutaan me- nuruutun tapahtumafunktiota vain tiettyjen määriteltyjen tapahtumien aktivoitues-
4.7 Käyttöliittymäohjelmaan toteutettuja toimintoja 30 sa. Tapahtumafunktiolle voidaan antaa parametrinä tieto kyseisen tapahtuman laa
dusta, jolloin tapahtumafunktion tarvitsee vain sen perusteella valita oikea toimin
to tai toimintosarja. C-kielen keinoin tämä voidaan tehdä "switch-case-rakenteella joka on myös jälkikäteen selkeälukuinen kun vasteet tapahtumiin saadaan omien
otsikkojensa alle. Tapahtuman kulkua on havainnollistettu kuvassa 4.6.
(2)
(1) tapahtuma:
« <PAINIKE_2_ALAS
У.
toimintofunktio() käyttöliittymä-
moottori
A
Vaihda_Kieli()
switch(tapahtuma) {
case PAINIKE_2_ALAS:
Vaihda_Kieli();
Kuva 4.6: Toimintofunktion ja käyttöliittymämoottorin interaktio
4.7 Käyttöliittymäohjelmaan toteutettuja toimintoja
Käyttöliittymän korkeimman tason toteutuksesta haluttiin sellainen että se olisi mahdollisimman selkeä kuvaus käyttöliittymän ulkonäöstä sekä toiminnasta. Täl
löin myös toimintofunktioista haluttiin mahdollisimman selkeitä kuvauksia, jotka olisi helppo toteuttaa sekä ymmärtää jälkikäteen.
Esimerkiksi UPS-laitteen toimitilan esittämistä varten täytyy käyttöliittymän saa
da kyseinen tieto jostain. Käytännössä toimitilan päättelemiseksi täytyy vertailla monen osakokonaisuuden toimitilaa, joista riippuen laite on esimerkiksi normaa
litoiminnassa tai akustosyötöllä. Itse käyttöliittymän selkeämpää toteutusta varten tähän tarkoitukseen ohjelmoitiin erillinen funktio, joka selvittää laitteen toimitilan ja kertoo sen yksiselitteisesti. Vastaavasti toteutettiin muita funktioita toimimaan
rajapintana muuhun laiteohjelmistoon.
Erilaisten asioiden esittämisen helpottamiseksi luotiin joukko epäsuoria osoittimi- na toimivia muuttujia. Nämä ovat muuttujia, jotka viittaavat tiettyihin listamaisiin tietoihin laitteen sisällä, ja mahdollistavat näiden tietojen esittämisen ja selaamisen näytöllä. Osoitinten ominaisuuksiin kuuluu että niiden arvo voidaan asettaa nollaan ja tapauskohtaisen maksimin välille. Osoittimen osoittama tieto puolestaan tuloste
taan siihen liittyvän muuttujakoodin (luku 4.3) paikalle näytöllä.
4.7 Käyttöliittymäohjelmaan toteutettuja toimintoja 31 Kuvatunlaista osoitinta käytettiin ratkaisuna esimerkiksi tapahtumaloki:n sekä ak
tiivisten hälytysten esittämisessä. Osoittimen toimintaa on havainnollistettu kuvassa 4.7. Esimerkissä indeksi osoittaa arvonsa mukaisesti hälytystä aktiivisten hälytysten joukosta. Nappulan painalluksen seurauksena indeksi siirtyy osoittamaan seuraavaa aktiivista hälytystä, jolloin osoittimen osoittama hälytys tulostuu käyttöliittymäoh
jelman toimesta ruudulle muuttujakoodin paikalle.
aktiiviset mahdolliset hälytykset
Kuva 4.7: esimerkki, indeksien käyttö osoittimina
Kuvatunlaiset osoittimet auttavat yksinkertaistamaan käyttöliittymän toteutusta kun lähes kaikki käsittely on toteutettuna jo käyttöliittymäohjelman puolesta. Toiminto- funktion tarvitsee lähinnä muuttaa tarpeen tullen osoittimen arvoa, ja sen osoittama tieto näytöllä päivittyy automaattisesti.
Käyttöliittymän toteutuksessa havaittiin monin paikoin tarpeelliseksi toiminto, jo
ka kahta keskimmäistä painiketta käyttäen selataan asioita näytöllä. Koska myös rajapinta käyttöliittymän toteutuksen ja käyttöliittymäohjelman välille toteutettiin perustumaan yksinkertaisin lukuarvoin, näkyy tämä käytännön ohjelmassa jonkin muuttujan arvon kasvattamisena tai vähentämisenä yhdellä arvolla kerrallaan.
Tällainen toiminnallisuus toteutettiin käyttöliittymäohjelmaan c-kielen tarjoaman muuttujaosoitinta apuna käyttäen. Muuttujaosoittimen avulla voidaan toimintofunk- tiosta käsin osoittaa jotain haluttua muuttujaa ja asettaa sille minimi- sekä maksi