Grafiska gränssnitt till embeddedsystem
Tuukka Turunen, Director of R&D, Digia, Qt, tittar på kraven på användargränssnitt i inbäddade system och kommer med förslag till alla som utvecklar avancerade grafiska användargränssnitt (GUI). Nyckeln till framgång är kopplingen mellan konstruktörer och programmerare.
Alltifrån industriautomation till medicinska enheter och från hemapparater till fordonsunderhållning är inbäddade system viktiga för prestanda och funktion i allt fler moderna produkter. I en värld där förväntningarna förändras dramatiskt och nästan varje företag planerar för ett tjusigt och ”coolt” användargränssnitt (user interface, UI) har en designer av dessa enheter tryck på sig att inte bara uppfylla användarkraven utan även tillhandahålla en fantastisk användarupplevelse. Kodning är förvisso en kritisk del i att bygga ett gränssnitt i en inbäddad enhet men det är inte tillräckligt. Att förstå användaren och att välja rätt utvecklingsverktyg är också båda viktiga framgångsfaktorer.
Fig. 1. Demonstration av fordons-HMI
Användargränssnitt för inbäddade system
Tidigare hade många inbäddade system liten eller ingen direkt länk till slutanvändaren och uppfyllde därför bara grundläggande UI-krav (om ens några). När inbäddade enheter får fler funktioner och är grunden för nästan alla elektroniska system behöver dessas funktioner vara mer tillgängliga för användaren.
Paradoxalt nog kan detta resultera i att de blir mer svåranvända, vilket medför att mer arbete måste göras för att fjärma användaren från abstrakt komplexitet. Med fler funktioner, som pekskärmsstyrning, dynamiskt innehåll och Internettillgång är det uppenbart att design av ett användargränssnitt (vanligen via ett GUI) nu är en kritisk del av utveckling av inbäddade system.
Eftersom vi nu alla har vant oss vid lättanvända mobiltelefoner och datorer förväntar vi oss att även de mest grundläggande icke-kommersiella enheterna har ett GUI som är intuitivt, entydigt, informativt, responsivt och tillförlitligt. Detta sätter tryck på projektens utvecklingsgrupper, inte minst eftersom GUI-utveckling kan göra kodningen mer komplex.
Lämpliga byggblock finns inte lätt tillgängliga för många inbäddade system. Då attraktiv grafik kan visas med vilket system som helst med en bra display och tillräcklig processorkraft kan det bli rätt krävande att skapa ett interaktivt och dynamiskt GUI utan de rätta verktygen. Det finns emellertid en faktor som är mindre väl känd, nämligen att förutom de rätta verktygen för att utveckla bra GUI:er behövs det även ytterligare designkunskap, som inte alltid är tillgänglig i en programutvecklingsgrupp.
Funktionalitet är naturligtvis viktigt, men vad som skiljer en bra GUI-konstruktion från en bara tillräcklig är användbarhet. Programmerare kommer alltid att kunna implementera ett användargränssnitt som uppfyller funktionsspecifikationerna. Men den bästa användarupplevelsen får man bara med en högre nivå av förståelse för hur ett användargränssnitt kan hjälpa en användare att bli produktiv eller att få uppgifter utförda på enklast, snabbast eller mest intuitiva sätt.
Därav distinktionen mellan kodning och design av ett användargränssnitt. I en värld där användare inte längre håller tillgodo med enheter och system som är knepiga eller svåra att använda är det därför mycket arbete att utföra innan man börjar kodning.
Överväganden innan kodning
Det första steget för ett bra användargränssnitt är att definiera användarkraven och analysera hur användaren utför uppgifter. Med detta i minne finns det ingen ersättning för förståelse för vad användaren behöver göra, och i vilken prioriteringsordning han kommer att göra det.
Detta gäller naturligtvis all design. Men det blir speciellt viktigt för uppdrags- och säkerhetskritiska tillämpningar som medicinska enheter eller rymdsystem, där ett bra användargränssnitt bokstavligen kan vara skillnaden mellan liv och död. Med detta i minne kan det vara värdefullt att observera eller registrera användaren när han utför liknande uppgifter. Det är också viktigt att överväga vilka problem och missräkningar användaren kan uppleva med befintliga system.
När man väl förstår vilken funktionalitet användaren behöver kan utvecklaren gå vidare med utseendet och känslan för användargränssnittet och underliggande arbetsflöde. ”Storyboard” och visuella prototyper skall skapas och diskuteras med användaren, och nya iterationer skapas beroende på dennes återkoppling.
Moderna verktyg kan hjälpa till med att inte bara underlätta snabb framtagning av prototyper, utan även göra att detta arbete kan återanvändas i den slutgiltiga produkten i stället för att behöva börja om från början. Under hela förloppet bör konstruktören försöka skapa ett gränssnitt som är intuitivt, koncistent i form och funktion samt propert.
Fig 2. VIBXPERT II är en dubbelkanalig FFT-datainsamlingsenhet och signalanalysator med grafiskt användargranssnitt och effektiv användning av färger.
Förutom användarkrav och funktionsanalys kommer andra faktorer att påverka designen av användargränssnittet, som arbetsmiljö, nivå på omgivningsljus som i många medicinska och industriella tillämpningar, användning av arbetshandskar som kan påverka storlek, färg och position på ikoner samt krav på portabilitet till andra hård- och mjukvaruplattformar. Krav på global användning som nödvändiggör flera språkversioner, eller behov av att integrera Internetfunktionalitet, är andra faktorer att betänka på detta stadium.
Designmiljö och verktyg
När väl designern har fått fram de övergripande kraven för det inbäddade användargränssnittet är det dags för programmeraren att göra användargränssnittet verkligt. Här kan valet av konstruktionsmiljö och tillhörande verktyg göra en dramatisk skillnad inte bara för den slutliga produkten utan även för utvecklingsprojektets kostnad och tidsåtgång.
För GUI-utveckling är miljön av nödvändighet delad; grafisk design å ena sidan och källkod å andra. Att föra samman de båda kan lyckosamt överbrygga design- och utvecklingsaspekterna på GUI-utvecklingen, som börjar med förstudien som skissats ovan. En GUI-designmiljö som stöder en grafisk ansats för det estetiska och kodningen är speciellt fördelaktigt för detta. I en miljö där användarkontrollerna representeras grafiskt kommer de också att automatiskt innehålla all kod som behövs för att starta dem på målplattformen. På ingenjörsspråk är detta ett objektorienterat tillvägagångssätt.
När man väljer ett element kommer alla dess funktioner med, och genom detta ”arv” kommer allting som byggs med dessa element att få tillgång till elementens funktioner och funktionalitet. Ett sådant tillvägagångssätt är inte begränsat till visuella element, utan vilken komponent som helst som är utvecklad med en objektorienterad metodik ärver automatiskt komponentdelarnas funktioner och gör dessa tillgängliga för andra komponenter i en hierarkisk struktur.
Strukturen i objektorienterade programspråk som C++ stöder detta och är begreppsmässigt utökat till grafiska konstruktionsmiljöer som stöder objektorienterad programmering. Speciellt är objektorienterade program i sig portabla, eftersom komponenterna innehåller (genom arv) alla funktioner som behövs för dess funktionalitet. Detta gör objektorienterad kod mindre hårdvaruberoende. I de flesta fall innebär portering av objektorienterade program helt enkelt bara att man omkompilerar för en annan arkitektur, i varje fall så länge inte en hårdvaru- eller operativsystemspecifik funktionalitet används.
I moderna ramverk som Qt, som erbjuder sant korsplattformsstöd, är denna procedur ytterligare förenklad. Portabilitet kan minimera utvecklingsarbetet för nya konstruktioner och göra det lättare att migrera befintliga konstruktioner. De kan också utgöra en väg för utvecklare av inbäddade program att använda annan hårdvara. Exempelvis kan Qt användas för att skapa ett gränssnitt för en portabel medicinsk enhet byggd på en prisbillig lågeffektsprocessor. Samma kod kan också överföras till en betydligt större maskin som en CAT- eller MRI-skanner med en betydligt kraftfullare processor.
Ett av de ledande objektorienterade programmeringsspråken som används idag är C++. Detta bygger på det allmänt utbredda språket C. C++ är en naturlig utveckling för många ingenjörer som söker efter en objektorienterad metodik. Genom att använda en objektorienterad metod är det möjligt att skapa ett utvecklingsramverk med modulbibliotek som innehåller komponenter (egentligen klasser) för GUI-delar, såväl för knappar, skjutreglage, fönster eller rattar som för andra funktionella element som behövs i en inbäddad enhet, som nätverk, stöd för multimedia (codec) och internationalisering (språk). Dessa fördelar, jämfört med tolkande språk som Java, kan vara skillnaden mellan en storartad och medioker användarupplevelse.
Ramverksfunktionalitet
En speciell fördel för både designern och ingenjören är om den valda miljön erbjuder ett brett sortiment halvfärdiga och anpassningsbara komponenter för användargränssnitt, tillsammans med klasser och moduler som använder vanlig funktionalitet i operativsystem. Idealiskt vore om dessa kunde erbjuda mer funktionalitet än just bara ett GUI. Exempelvis kan de också tillhandahålla klasser för XML, nätverk, IPS (inter-process communication), 2D- och 3D-grafik med hårdvaruacceleration, trådning, SQL, internationalisering och multimedia. Detta skulle ge ingenjören tillgång till ett ramverk som kunde hjälpa honom att snabba upp implementeringen av nyckelfunktionalitet så att han kan fokusera på kärnkompetens som ger konkurrensfördelar i den slutliga produkten.
Tillämpningen och UI-ramverket Qt, som är väletablerat för bordsdatormiljöer, har anpassats för att ge samma fördelar till inbäddade system. Detta ramverk består av både utvecklingsverktyg och klassbibliotek, och de gör att designer och programmerare kan samarbeta för att ta fram ett GUI med komponenter som är lätta att anpassa från färgpaletten, vars användning beror på vilka händelser som körs.
Fig 3. Demonstration av medicinskt UI
Designmiljön Qt möjliggör snabbt skapande av grafiska element tack vare verktyg som t.ex. möjliggör att skapa UI med ”drag-och-släpp” utöver att skriva kod. Högpresterande textrendering liksom förrenderade fonter hjälper samtidigt till att minska kravet på processorkraft. Speciella Internetverktyg uppfyller kommunikationskraven genom att låta designern bygga avancerade användargränssnitt med Internettjänster och Internetinnehåll i realtid. För global användning har ingenjören tillgång till ett speciellt språkverktyg för att översätta och justera tillämpningar till olika världsspråk, även asiatiska och högerskriva språk.
Portabilitet
En av de mest betydande fördelarna med Qt är det speciella sätt på vilket plattformen har byggts för att tillhandahålla ett korsplattformshögnivå-API (application programming interface) som möjliggör driftsättning av GUI-design och tillämpningar i många programmiljöer med minimalt extra arbete. Till exempel kan källkod från ett målobjekt som en bords-PC driftsättas på ett inbäddat operativsystem, utan att behöva skrivas om. Detta inte bara möjliggör flera driftsättningar från ett utvecklingsprojekt, utan felsäkrar koden mot framtida förändringar på själva plattformen. Detta är en påtaglig fördel i en värld där operativsystem själva utsätts för kontinuerliga revisioner, och där produktens livstid ibland kan mätas i månader i stället för år.
Tuukka Turunen, Director of R&D, Digia, Qt
Filed under: Embedded