03.09.2013 Views

Grafisk programmering av primitiver - Mälardalens högskola

Grafisk programmering av primitiver - Mälardalens högskola

Grafisk programmering av primitiver - Mälardalens högskola

SHOW MORE
SHOW LESS

Transform your PDFs into Flipbooks and boost your revenue!

Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.

<strong>Grafisk</strong> <strong>programmering</strong> <strong>av</strong> <strong>primitiver</strong><br />

genom att använda C# och WPF.<br />

Examensarbete i Datorteknik<br />

Utfört vid Asea Brown Boveri<br />

Utfört <strong>av</strong>:<br />

Patricia Öhlund, MDH<br />

ABB, Asea Brown Boveri<br />

Programmering <strong>av</strong> <strong>primitiver</strong> till 800xA produkten<br />

Handledare: Björn Lindberg<br />

MDH, <strong>Mälardalens</strong> Högskola<br />

Examensarbete i Datateknik 15hp.<br />

Handledare och Examiantor: Thomas Larsson


<strong>Grafisk</strong> <strong>programmering</strong> <strong>av</strong> <strong>primitiver</strong> genom att använda C# och<br />

WPF.<br />

Sammanfattning:<br />

Uppgiften för detta examensarbete är att använda konstruktionen från den nya<br />

grafiska motorn i 800xA systemet från ABB, genom att implementera byggstenar för<br />

att få igång bildvisningar. Dessa byggstenar kallas grafiska <strong>primitiver</strong>.<br />

<strong>Grafisk</strong>a <strong>primitiver</strong> används i många program, bl.a. Office Excel.<br />

Det system som arbetet kommer att utföras i är 800xA systemet, vilket är utvecklat <strong>av</strong><br />

ABB.<br />

I detta system byggs produkter till kunder för försäljning, de beställer och ABB<br />

tillverkar, men för att kunna bygga programmen som kunderna efterfrågar så måste<br />

det finnas grafiska <strong>primitiver</strong> att använda.<br />

ABB har fått en ny grafikmotor och de implementerar nu <strong>primitiver</strong> med C# istället för<br />

Visual Basic som var det gamla systemets konstruktion.<br />

Exempel på några <strong>primitiver</strong> är olika diagram: stapel och cirkel diagram, dessa<br />

diagram kan kopplas samman med kommandon så att värden matas in automatiskt<br />

och <strong>primitiver</strong>na kommer till rörelser med hjälp <strong>av</strong> dessa värden.<br />

För varje nytt värde som blir inmatat ska diagrammet uppdateras automatiskt och rita<br />

ut de nya diagrammen med de nya värdena.<br />

Eftersom man kommer att använda sig <strong>av</strong> både C# och WPF så ska vi också gå<br />

igenom vad dessa två språk är och hur de fungerar.<br />

Graphical programming of primitives by using C# and WPF<br />

Abstract:<br />

The assigment of this thesis work is to use the construction from the new graphical<br />

engine in 800xA base, by implementing building blocks to utilize the visualization.<br />

These building blocks are named graphic primitives.<br />

Graphical primitives are being used in a lot of products, an example is Office Excel.<br />

The system where most of the work will be held is called 800xA and it is developed<br />

by ABB. In this system, programs will be built for customers to ABB, but to be able to<br />

create the program that the customers are asking for, the programmer needs to h<strong>av</strong>e<br />

graphics primitives to use.<br />

ABB recently received a new graphical engine and they now implement primitives<br />

with C# instead of Visual Basic which was the old systems construction.<br />

Examples on some primitives are different kinds of diagrams: staple and circle<br />

diagram, these diagrams can be connected with each other by using commands, so<br />

that the value will be fed in automatically.<br />

For each new value entered, the diagram needs to update the values and draw the<br />

new diagram.<br />

The language that will be used is C# and WPF and because of this we will also go<br />

deeper into the two languages and explain how they work.<br />

ii


iii


Förord<br />

Denna rapport skapades i samarbete med examensarbete på 15hp vid <strong>Mälardalens</strong><br />

Högskola (MDH), examensarbetet blev utfört vid Asea Brown Boveri (ABB).<br />

Jag skulle vilja tacka min handledare vid ABB Björn Lindberg som hjälpte mig igenom<br />

den praktiska delen <strong>av</strong> examensarbetet.<br />

Jag skulle också vilja tacka min handledare och examinator vid MDH Thomas<br />

Larsson som hjälpte mig med att skriva denna rapport.<br />

iv


Innehållsförteckning<br />

1 Inledning ............................................................................................................................ 1<br />

1.1 Hur <strong>primitiver</strong> hjälper användare ....................................................................................... 1<br />

1.2 Mål .......................................................................................................................................... 1<br />

2 Bakgrund ............................................................................................................................ 2<br />

2.1 ABB ......................................................................................................................................... 2<br />

2.2 C# ............................................................................................................................................ 3<br />

2.2.1 Historia .............................................................................................................................................. 3<br />

2.3 WPF ........................................................................................................................................ 4<br />

2.3.1 Visuals ............................................................................................................................................... 4<br />

2.3.2 Verktyg .............................................................................................................................................. 5<br />

2.3.2.1 DrawingVisual klassen: ............................................................................................................ 5<br />

2.3.2.2 Viewport3DVisual klassen: ...................................................................................................... 5<br />

2.3.2.3 ContainerVisual klassen: .......................................................................................................... 5<br />

2.3.2.4 Drawing Content i Visual objekt. ............................................................................................. 6<br />

2.3.2.5 DrawingContext klassen ........................................................................................................... 6<br />

2.3.2.6 StreamGeometryContext class: ................................................................................................ 6<br />

2.4 Program plattformar ............................................................................................................ 7<br />

2.4.1 Visual Studio 2005 ............................................................................................................................ 7<br />

2.4.2 Team Foundation Server ................................................................................................................... 7<br />

2.4.3 800xA ................................................................................................................................................ 7<br />

3 Primitiver .......................................................................................................................... 10<br />

3.1 Primitiv tabell ...................................................................................................................... 10<br />

3.2 Primitiv behov ...................................................................................................................... 12<br />

3.2.1 Procentuell visning .......................................................................................................................... 12<br />

3.2.2 Långa textsträngar ........................................................................................................................... 13<br />

4 Applikationerna ................................................................................................................ 15<br />

4.1 Pajdiagram primitiv ............................................................................................................ 15<br />

4.1.1 Egenskaper ...................................................................................................................................... 15<br />

4.1.2 Funktion .......................................................................................................................................... 16<br />

4.1.3 Problem som uppstod under arbetets gång ...................................................................................... 17<br />

4.2 Textrullning primitiv .......................................................................................................... 18<br />

4.2.1 Egenskaper ...................................................................................................................................... 18<br />

4.2.2 Funktion .......................................................................................................................................... 19<br />

4.2.3 Problem som uppstod ...................................................................................................................... 20<br />

4.3 Capability diagram primitiv ............................................................................................... 20<br />

4.3.1 Egenskaper ...................................................................................................................................... 20<br />

4.3.2 Tillverkning ..................................................................................................................................... 22<br />

4.3.3 Exempel Bilder ................................................................................................................................ 23<br />

4.3.4 Problem som uppstod ...................................................................................................................... 23<br />

5 Ändringar och planerade ändringar <strong>av</strong> gjorda <strong>primitiver</strong> ............................................. 24<br />

5.1 FlexiblePipe: ......................................................................................................................... 24<br />

5.2 Paj Diagram: ........................................................................................................................ 25<br />

5.3 Scrolling text: ....................................................................................................................... 26<br />

6 Rapport skrivning till Företaget ...................................................................................... 27<br />

7 Slutsatser .......................................................................................................................... 28<br />

vi


Figurförteckning<br />

Figur 2-1: 800xA system koppling. ........................................................................................... 8<br />

Figur 2-2: 800xA systemet ....................................................................................................... 9<br />

Figur 3-1: Blandande behållare. ............................................................................................. 12<br />

Figur 4-1: Paj diagram ............................................................................................................ 16<br />

Figur 4-2: ScrollingText. ......................................................................................................... 20<br />

Figur 5-1: Flexible Pipe: före ändringen ................................................................................. 24<br />

Figur 5-2: FlexiblePipe: Efter ändringen ................................................................................. 24<br />

Figur 5-3: Flexible Pipe: ihopsatt ............................................................................................ 25<br />

Figur 5-4: Pajdiagrammet före ändringen ............................................................................... 25<br />

Figur 5-5: Pajdiagrammet med en mindre skuggning ............................................................ 25<br />

Figur 5-6: Pajdiagrammet, full skuggning (badboll). ............................................................... 25<br />

Figur 5-7: Pajdiagrammet efter ändringen <strong>av</strong> skuggningen ................................................... 26<br />

vii


1 Inledning<br />

Den här rapporten kommer att handla om ett grafiskt examensarbete som finns<br />

tillgängligt för alla som har produktlicensen till 800xA som ABB har tillverkat.<br />

Primitiver till produkten är något som är nödvändigt och dessa <strong>primitiver</strong> får inte<br />

konsumera för mycket resurser.<br />

<strong>Grafisk</strong> <strong>programmering</strong> kan göras i både 2D, 2.5D och 3D.<br />

2D kan uppfattas som ”platt och tråkig” men den är väldigt nyttig och tar oftast minst<br />

resurser när den blir programmerad. 2D används bäst till att visa text och värden [1].<br />

2.5D är en blandning <strong>av</strong> 2D och 3D, även kallad pseudo-3D, det används först och<br />

främst för spel och blev en revolution 1976 när det första pseudo-3D spelet skapades<br />

<strong>av</strong> Atari.<br />

3D kan ses från alla håll, allting ändras med kamer<strong>av</strong>inkelns ändring.<br />

3D används bäst i första persons perspektiv, eller om man ska presentera någon<br />

form <strong>av</strong> vetenskap, exempelvis en kropps olika delar, hjärtat, hjärnan.<br />

Något man måste tänka på är dock att 3D innehåller mycket mer information och<br />

kommer att ta mer resurser för att exekvera.<br />

Eftersom företagets kunder har maskiner som redan pressas till max så vill man att<br />

programvaran tar så lite resurser som möjligt. På grund <strong>av</strong> detta ska man tillverka<br />

<strong>primitiver</strong> så enkelt som möjligt, men det innebär inte att man helt ska utesluta 3D.<br />

Alla <strong>primitiver</strong> som tillverkas för 800xA systemet här i ABB är bildade ur C# och WPF<br />

med hjälp <strong>av</strong> plattformen Visual Studio och alla tillverkade <strong>primitiver</strong> finns tillgängliga<br />

till alla anställda inom ABB genom Team Foundation servrar.<br />

1.1 Hur <strong>primitiver</strong> hjälper användare<br />

Primitiver behövs för att hjälpa en programmerare att tillverka själva produkten som<br />

en kund har beställt. Desto mer <strong>primitiver</strong> det finns desto snabbare kan en<br />

programmerare arbeta för att få upp den information som kunden vill ha. I vissa fall<br />

kommer en programmerare att specifikt beställa delar till den beställda produkten<br />

från en annan <strong>av</strong>delning inom ABB, så programmeraren själv kan koncentrera sig på<br />

sitt arbete.<br />

1.2 Mål<br />

ABB behöver fler <strong>primitiver</strong> till sitt 800xA system. De behöver bland annat en primitiv<br />

som kan visa användaren procentuellt vilka <strong>av</strong> de inkommande värdena som är de<br />

högsta, en primitiv som kan visa långa textsträngar och en primitiv som var beställd<br />

<strong>av</strong> en kund.<br />

Diskussioner uppstod om hur dessa <strong>primitiver</strong> skulle byggas upp och fungera.<br />

Med den procentuella visningen undrade man om en tabell i enkel form, stolpdiagram<br />

eller ett pajdiagram skulle vara det bästa sättet att visualisera procenten<br />

För den långa textsträngen blev det frågor angående sättet att visa texten så att den<br />

endast ska synas inom ett mindre område.<br />

Det primära målet var att lära sig mer om C# och WPF <strong>programmering</strong> med Visuals,<br />

att lära sig och förstå hur det fungerar, dessutom att förstå hur visualisering <strong>av</strong><br />

<strong>primitiver</strong> uppfattas <strong>av</strong> människor och tillverka dessa på bästa möjliga sätt [13].<br />

1


2 Bakgrund<br />

Bakgrund och historia om de verktyg och plattformar som användes för att få<br />

examensarbetet färdigställt.<br />

2.1 ABB<br />

ABB står för Asea Brown Boveri [2], och har bildats från två olika företag Asea och<br />

Brown Boveri. Aseas historia sträcker sig till 1883 och Brown Boveris börjar vid 1891.<br />

Huvudkontoret hamnade efter sammanslagningen i Zürich, Schweiz och företaget<br />

ägdes till hälften <strong>av</strong> Asea och hälften <strong>av</strong> Brown Boveri. Den nya storkoncernen, som<br />

började verksamheten den 5’e januari 1988, fick hela 100 miljarder kronor i<br />

omsättning och 160 000 anställda över hela världen.<br />

Sen dess har ABB växt, nu finns ABB i över 100 länder över hela världen, endast i<br />

Sverige finns ABB i över 20 orter.<br />

ABB är indelade i fem områden:<br />

• Power Products<br />

• Power Systems<br />

• Automation Products<br />

• Process Automation<br />

• Robotics<br />

De tillverkar kraftnät med transformatorer, ställverk, övervakningssystem,<br />

processtyrning och industrirobotar.<br />

I över hundra år har ABB (och dåvarande Asea) genom långsiktig forskning och<br />

utveckling tagit fram teknik, produkter och tjänster som underlättar för alla i<br />

samhället.<br />

2


2.2 C#<br />

C# (uttalas C Sharp) [4] språket sägs kombinera de bästa egenskaperna från både<br />

C++, C och J<strong>av</strong>a. Det utvecklades <strong>av</strong> Microsoft till deras .NET plattform och det är<br />

specifikt tillverkat för Microsofts egna operativsystem.<br />

C# versionen 3.0 blev utsläppt november 2007, som en del <strong>av</strong> .NET Framework 3.5<br />

Att kunna koppla ihop WPF med C# blev möjligt i .NET 3.0. [5]<br />

Här kommer lite kod exempel hur C# kodning kan se ut:<br />

public class HelloWorld<br />

{<br />

public static void Main(string[] args)<br />

{<br />

Console.WriteLine("Hello, World!");<br />

Console.WriteLine("You entered the following {0} command line arguments:",<br />

args.Length );<br />

for (int i=0; i < args.Length; i++)<br />

{<br />

Console.WriteLine("{0}", args[i]);<br />

}<br />

}<br />

}<br />

2.2.1 Historia<br />

I januari 1999 bildade Anders Hejlsberg en grupp för att bygga ett nytt<br />

<strong>programmering</strong>sspråk, som vid tillfället blev kallat för ”Cool”. När .NET blev publicerat<br />

för allmänheten i juli 2000 så blev programspråkets namn ändrat till just C#.<br />

Anders Hejilsberg har även arbetat med utveckling <strong>av</strong>:<br />

• Visual J++<br />

• Borland Delphi<br />

• Turbo Pascal<br />

Han har sagt i intervjuer att de flesta stora <strong>programmering</strong>sspråken (C++, j<strong>av</strong>a,<br />

Delphi och smalltalk) utgjorde grundprincipen <strong>av</strong> CLR (Common Language Runtime),<br />

vilket i sin tur utgjorde designen <strong>av</strong> C# <strong>programmering</strong>sspråket. Många påstår att C#<br />

har sina rötter från andra <strong>programmering</strong>sspråk.<br />

3


2.3 WPF<br />

WPF, Windows Presentation Foundation, ingår i .NET 3.0 och den kommer<br />

förinstallerad i Windows Vista Operativsystemet. Den finns också för Windows XP<br />

SP2 och Windows Server 2003 för nedladdning. [6, 7, 8]<br />

Den är direkt kopplad till XAML (Extensible Application Markup Language, uttalas<br />

Zammel), XAML fungerar på ett liknande sätt som CSS till HTML <strong>programmering</strong>.<br />

WPF består <strong>av</strong> en sammanhängande <strong>programmering</strong>smodell som håller isär<br />

användargränssnitt och affärslogik.<br />

Ett WPF program kan köras både fristående eller i en webbläsare. WPF integrerar<br />

UI, 2D och 3D ritningar, dokument, <strong>av</strong>ancerad typografi, vektorgrafik, rastergrafik,<br />

animation, datakommunikation, ljud och video.<br />

WPF är tänkt att bli nästa generations grafik API för Windows applikationer på<br />

skrivbordet. Följande är några <strong>av</strong> Microsofts egna produkter eller tredje part<br />

applikationer som är skrivna i WPF:<br />

• Microsoft Expression Design<br />

• Microsoft Expression Blend<br />

• Yahoo! Messenger<br />

Ett antal nyhetstidningar genom skrivbordet:<br />

• New York Times reader<br />

• Forbes.com reader<br />

• Seattle Post-Intelligencer reader<br />

• Daily Mail eReader<br />

• Denounce RSS reader och Podcast Lyssnare<br />

• Jyllands Posten JP2<br />

2.3.1 Visuals<br />

I Visuals finns den abstrakta klassen UIElement, som är basklassen till<br />

FrameworkElement. UIElement har en lågnivåstruktur för att rita någonting på<br />

skärmen.<br />

Visual objektet är ett WPF objekt, vars primära uppgift är att ge renderingshjälp och<br />

UI kontroller, så som knappar och text boxar, Visual klassen hjälper till med följande<br />

delar:<br />

• Output visning: Rendering <strong>av</strong> kvarstående och seriell ritning <strong>av</strong> innehållet i<br />

en Visual.<br />

• Transformationer: Genomför transformationer i en Visual.<br />

• Klippning: Ger tillgång till klippning <strong>av</strong> en Visual<br />

• Hit Test: Bestämmer om en geometri finns inom en gräns för en Visual<br />

• Bounding box beräkningar: Bestämmer den bundna rektangeln <strong>av</strong> en<br />

Visual.<br />

DrawingComplex tillåter dig att populera en Visual med visuellt innehåll. När du<br />

använder dig <strong>av</strong> en DrawingContext ritnings objekt, kommer du att lagra en serie <strong>av</strong><br />

renderingsdata som blir använt <strong>av</strong> ett grafiksystem, man ritar alltså inte på skärmen i<br />

real tid.<br />

4


Vi tänker oss ett äldre spel i formatet ”Mario Brothers”, där sidrullning förekommer. I<br />

situationer som detta, om spelet är implementerat med WPF, kan det finnas upp till<br />

tusen ritningar samtidigt på skärmen. Det är på grund <strong>av</strong> detta problem som det finns<br />

en speciell Visualklass, en subklass som lättar upp renderingen <strong>av</strong> rörelserna. Den<br />

kallas för DrawingVisuals och istället för DrawingComplex blir DrawingVisuals<br />

snabbare med större applikationer.<br />

2.3.2 Verktyg<br />

Visual är använt som en publikabstraktklass som måste uppstå från dess<br />

underklasser. Följande illustration visar hierarkin <strong>av</strong> en Visual objekt som är<br />

exponerad i WPF: [9]<br />

2.3.2.1 DrawingVisual klassen:<br />

[8] DrawingVisual är en lättviktig ritningsklass som används för att rendera former,<br />

bilder, eller text. Denna klass anses lättviktig på grund <strong>av</strong> att den inte ger någon<br />

layout eller någon form <strong>av</strong> händelseaktivering, vilket förbättrar dess prestanda. Av<br />

denna anledning blir bakgrundsritningar och clipartbilder perfekta<br />

användningsområden för DrawingVisuals.<br />

Några egenskaper DrawingVisual har:<br />

• Drawing: Får in en ritning <strong>av</strong> ett DrawingVisual objekt<br />

• Opacity: sätter genomskinlighetsgraden på ContainerVisual, 0 = genomskinlig.<br />

• VisualClip: får eller sätter en klippregion <strong>av</strong> Visual som ett Geometrivärde.<br />

• VisualTransform: får eller sätter ett Transformationsvärde för en Visual<br />

2.3.2.2 Viewport3DVisual klassen:<br />

viewport3DVisual ger en bro mellan 2D Visual och Visual3D objekt. Visual3D<br />

klassen är basklassen för all form <strong>av</strong> 3D visualisering. Viewport3DVisual måste få<br />

in ett kamer<strong>av</strong>ärde och ett Viewportvärde. Kameran tillåter dig att se området i<br />

2D.<br />

2.3.2.3 ContainerVisual klassen:<br />

ContainerVisual används som en container för att samla ihop Visual objekt.<br />

DrawVisual klassen kommer från ContainerVisual klassen och tillåter den att<br />

samla ihop en grupp <strong>av</strong> Visual objekt.<br />

5


2.3.2.4 Drawing Content i Visual objekt.<br />

Ett Visual objekt lagrar dess renderingsdata som en vektor, med en grafisk<br />

instruktionslista. Varje del <strong>av</strong> instruktionens lista representerar en viss grafisk<br />

datagrupp och associerade resurser i ett numrerat format.<br />

2.3.2.5 DrawingContext klassen<br />

En DrawingContext klass [10] används på liknande sätt som DrawingVisual,<br />

för varje figur man skapar kommer renderingsinformationen att lagras för<br />

utritning.<br />

Några medlemmar som finns i DrawingContext klassen är:<br />

• DrawDrawing: Ritar ut det specifikt lagrade ritningsobjektet.<br />

• DrawGeometry: Ritar ut den specifika Geometrylagringen genom att använda en<br />

Pensel eller penna.<br />

• DrawGlyphRun: Ritar ut en specifikt lagrad text.<br />

• DrawImage: Ritar ut en bild inom en region som är specificerad <strong>av</strong> en Rect<br />

(rektangel)<br />

• DrawLine: Ritar ut en rak linje mellan två punkter med en penna.<br />

• DrawRectangle: Ritar ut en rektangel.<br />

• DrawRoundedRectangle: Ritar ut en rundad rectangle i hörnen.<br />

• DrawText: Ritar ut en formatterad text på en specifik plats.<br />

• DrawVideo: Ritar ut en video inom en spefik region.<br />

• Pop: Poppar den sista masken, klippet, effekten eller transformationen som har<br />

blivit pushad till drawingContext.<br />

• PushClip: Pushar den sista specifika klipp regionen in i drawingContext<br />

• pushEffect, PushGuidelineSet, PushOpacity, PushOpacityMask och<br />

PushTransform används på alla sätt och kan alla bli poppade <strong>av</strong> Pop.<br />

2.3.2.6 StreamGeometryContext class:<br />

En StreamGeometry är ett enklare alternativ till PathGeometry för att tillverka<br />

geometriska figurer. Man ska använda en streamGeometry när man behöver<br />

beskriva en complexgeometri men inte vill att den ska kunna ta hand om en speciell<br />

databindning, animationer eller ändringar. På grund <strong>av</strong> dess effektivitet, är<br />

streamGeometry klassen ett bra val för att beskriva figurer.<br />

Några medlemmar från StreamGeometryContext:<br />

• ArcTo: Ritar ut en ark till en specifik punkt.<br />

• BeginFigure: Specifiserar startpunkten för en ny figur.<br />

• LineTo: Ritar ut en rak linje till en specifik punkt.<br />

• PolyBezierTo: Ritar ut en eller fler kopplade Beizerkurvor.<br />

• PolyLineTo: Ritar ut en eller fler kopplade raka linjer<br />

6


2.4 Program plattformar<br />

Följande program användes för att framställa 800xA <strong>primitiver</strong>na.<br />

2.4.1 Visual Studio 2005<br />

Visual Studio är tillverkad <strong>av</strong> Microsoft [11], det är den huvudsakliga IDE’n (Integrated<br />

Development Environment) från Microsoft. Den kan användas till att tillverka konsol och<br />

GUI (Graphical User Inerface) applikationer, tillsammans med Windows-forms<br />

applikationer, webbsidor, webbapplikationer och webbservice.<br />

Visual Studio har bland annat en egen debugger, man kan designa sina egna GUI<br />

applikationer, webbdesignare, klassdesignare och databasschemadesigner.<br />

Visual Studio förstår följande <strong>programmering</strong>s språk:<br />

• C/C++ via Visual C++<br />

• VB.NET via Visual Basic.NET<br />

• C# via Visual C#<br />

• F#<br />

• Python<br />

• Ruby<br />

• XML/XSLT<br />

• HTML/XHTML<br />

• J<strong>av</strong>aScript<br />

• CSS<br />

För tillfället finns Visual Studio 2008 och 2005 Professional Editions, tillsammans<br />

med språkversionerna (Visual Basic, C++, C#, J#) <strong>av</strong> Visual Studio 2005 för gratis<br />

nedladdning via Microsofts DreamSpark program för studenter.<br />

2.4.2 Team Foundation Server<br />

En snabb genomgång <strong>av</strong> vad Team Foundation Server (även förkortat TFS)[12] är<br />

och hur den fungerar.<br />

TFS är tillverkad <strong>av</strong> Microsoft, för att samla data, lagra, rapportera och hitta projekt.<br />

Den är till för att tillverka flertalet projekt och det finns flera versioner <strong>av</strong> den, bland<br />

annat som en ensamstående mjukvara eller med en serverplattform för Visual Studio<br />

Team System (VSTS). TFS hanterar med andra ord projekt som klienter sparar<br />

undan, dessa projekt blir tillgängliga för de som har tillgång till nätverket.<br />

2.4.3 800xA<br />

800xA systemet är en produkt som ABB säljer till kunder där varje kund får köpa en<br />

eller flera licenser beroende på hur stort deras företag är.<br />

Systemet fungerar på följande sätt inom ABB:<br />

Ett 800xA systeminstallation består <strong>av</strong> datorer och utrustning som kommunicerar<br />

med varandra över olika typer <strong>av</strong> kommunikation och nätverk, som illustreras bra i<br />

följande figur.<br />

7


Figur 2-1: 800xA system koppling.<br />

Klientens nätverk används för att kommunicera mellan servrar och arbetsstationer.<br />

Servrarna kör en mjukvara som ger systemet tillgång till funktionaliteter.<br />

Arbetsstationerna kör en mjukvara som ger olika former <strong>av</strong> användarinteraktioner.<br />

För mindre system, servrar och arbetsstationer, kan mjukvaran komma att bli<br />

installerade och körda på en och samma maskin.<br />

Kontrollnätverket är ett lokalt nätverk (LAN) som har en hög prestanda och pålitlig<br />

kommunikation med förutbestämda responstider i realtid. Den används till att koppla<br />

upp kontrollerna mot serverarna. Kontrollerna är som noder som kör en kontrollerad<br />

mjukvara.<br />

Fältbussar används för att koppla samman utrustning, så som I/O moduler, smarta<br />

sensorer och aktiveringsdelar. När den kopplar ihop alla dessa I/O moduler till<br />

systemet kommer det att gå via några kontroller så som indikeras i Figur 2-1, eller<br />

kopplas direkt till en server.<br />

Klientens/Serverns nätverk kan bli kopplad till en ”Plant Network” så som ett kontor<br />

eller ett samlat nätverk, via någon form <strong>av</strong> nätverkets utrustning.<br />

Ett tusental I/O-enheter sitter och mäter värden från de sensorer och delar den har<br />

tillgång till, dessa värden kommer att passera upp till kontrollerna.<br />

Kontrollerna kommer att styra I/O-enheterna efter begäran, exempelvis om elden<br />

börjar slockna så gasar programmet på lite till för att hålla igång den.<br />

Dessa kontroller går sedan till operatörer, där skärmar visar alla värden som bildas<br />

och en person vid en operatorskärm kan själv styra kontrollerna för sänkning eller<br />

ökning <strong>av</strong> värdena i I/O-enheterna.<br />

Huvudpersonerna har även de tillgångar till all statistik, som exempel:<br />

8


Hur mycket tillverkades?<br />

Hur har det fungerat?<br />

Hur har det sett ut?<br />

Om det finns flera byggnader i eller utanför landet kan alltihop kopplas ihop med ett<br />

större nätverk och information kan enkelt skickas mellan de olika parterna.<br />

Det område som tillverkar <strong>primitiver</strong> är även det område som gör programmen till<br />

operatörerna, så att operatörerna ser alla nödvändiga värden som bildas i I/O som<br />

kontrollerna plockar upp.<br />

Det är dessa <strong>primitiver</strong> som kommer att visa hur saker och ting fungerar och de kan<br />

kopplas ihop med varningssignaler och alarm om något värde börjar glida åt fel håll<br />

och de åtgärder den har blivit programmerad att göra inte hjälper.<br />

Simulatorprogrammet kommer att testas noggrant innan det anländer till kunden.<br />

Många <strong>av</strong> dessa program är stora och mycket komplicerade och allt måste fungera<br />

bra i simulatorn innan de skickas till kunden, det är det som testarna arbetar med.<br />

Figur 2-2: 800xA systemet<br />

9


3 Primitiver<br />

En grafikprimitiv kan vara en stor variation <strong>av</strong> grafiska delar. En liten text är en<br />

primitiv för sig. Rektangel, cirkel, trianglar är också de <strong>primitiver</strong>.<br />

Primitiver kan vara väldigt komplicerade och det är dessa som tar tid att tillverka.<br />

Med komplicerade <strong>primitiver</strong> menas sådana <strong>primitiver</strong> som har många funktioner och<br />

metoder. Det är också dessa som behöver en stor dokumentation om hur de fungerar<br />

för att andra ska kunna förstå vad som behöver göras för att använda den på rätt<br />

sätt.<br />

3.1 Primitiv tabell<br />

De <strong>primitiver</strong> som används just nu i 800xA systemet kommer nedanför, denna lista<br />

kommer att öka allt eftersom de tillverkar fler och eftersom 800xA uppdateras<br />

dagligen så kommer det absolut att ändras, lista: 2008-04-19:<br />

Arc Ritar ut en del <strong>av</strong> en cirkel, kan<br />

ändra <strong>av</strong>ståndet mellan start och<br />

stop.<br />

Bar Visar värderna som placeras,<br />

horisontellt.<br />

CapabilityDiagram (min) Capability diagram, kommer att<br />

finnas inne i systemet senare.<br />

Chord Ritar ut en del <strong>av</strong> en cirkel som är<br />

ifylld eller transparent.<br />

Cone Ritar ut en kon<br />

Curve Klicka och den ritar ut kurvor, som<br />

kan ha olika böjningar<br />

Ellipse Ritar ut en ellips<br />

ErrorIndicator Man kan välja vilken grad <strong>av</strong> fel det<br />

har blivit – om något.<br />

FilledPath Ritar en fylld stig<br />

FlexiblePipe (ändrade i) Flexibelt rör, den följer med där man<br />

klickar, ritar automatiskt ut hörnen.<br />

10


GroupBox Grupperar arbetena.<br />

HScale En skala horisontellt.<br />

Image Kan placera en bild inuti, denna är<br />

tom.<br />

Pie Ritar ut en paj form, kan bestämma<br />

start och stopp<br />

PieChart Ritar ut ett paj diagram<br />

Pipe Ritar ut en del <strong>av</strong> ett rör.<br />

Polygon Ritar ut en polygon där man klickar<br />

PolyLine Ritar ut raka linjer där man klickar<br />

RadarChart Ritar ut ett radardiagram, följer ett<br />

antal värden när de ändras i detta<br />

diagram<br />

RangeBar Ritar ut en bar, farlig nivå, ok nivå,<br />

välj färger.<br />

ScrollingText ( min) Ritar ut en rullande text, välj håll och<br />

typ <strong>av</strong> rullning.<br />

Text Ritar ut en text.<br />

Trend Ritar ut en trend, många olika<br />

värden som kan följa trenden.<br />

Denna är tom.<br />

Triangle / Rektangel Ritar ut en triangel eller en rektangel<br />

11


VScale<br />

12<br />

Ritar ut en vertikal skala, man kan<br />

ändra dess värden och antal pinnar<br />

som man har mellan skalorna bland<br />

annat.<br />

XYGraph/ XYPlot Ritar ut en XY graf eller XY<br />

punktgraf. Dessa är tomma<br />

XYZGraph Ritar ut en 3D graf.<br />

Följande bild är ett exempel på hur man kan placera ut olika delar tillsammans och<br />

skapa en produkt:<br />

Figur 3-1: Blandande behållare.<br />

3.2 Primitiv behov<br />

ABB behöver fler <strong>primitiver</strong> till sitt 800xA system, de behöver bland annat en primitiv<br />

som kan visa användaren procentuellt vilka <strong>av</strong> de inkommande värden som var de<br />

högsta, en primitiv som kan visa långa textsträngar på ett mindre område och en<br />

primitiv som skulle användas till ett olja och gasföretag som är kund hos ABB, för<br />

utveckling <strong>av</strong> kundens produkt.<br />

3.2.1 Procentuell visning<br />

För procentuell visning kan en enkel tabell fungera alldeles utmärkt för syftet. Om<br />

man dessutom tar och kalkylerar ut det högsta procentuella värdet kan man få<br />

tabellen att måla ut det högsta värdet i en definierad färg. På detta sätt kan man lätt<br />

med hjälp <strong>av</strong> en färg följa det högsta värdet, något som ABB var ute efter. Däremot


ville inte ABB se endast det högsta värdet tydligt, utan alla värden skulle kunna ses<br />

enkelt.<br />

Resultatet blir antagligen en väldigt multifärgad tabell eller en utan färg och då blir<br />

det genast svårare att uppfatta de rätta procentvärdena, dessutom är det inte visuellt<br />

bra att rita upp en tabell som kommer att få många och olika värden inmatade.<br />

Ett pajdiagram bygger på just procentvärden, den ritar ut värdena beroende på hur<br />

stor procent <strong>av</strong> cirkeln de använder. Men hur är det med ett stolpdiagram, kan man<br />

använda sig <strong>av</strong> ett stolpdiagram för att visa procentuella värden?<br />

Ett stolpdiagram fungerar på liknande sätt som ett pajdiagram. Vilket <strong>av</strong> dem som<br />

lämpar sig bäst att användas beror helt på vilken information man vill visa. Ett<br />

stolpdiagram är mycket bättre på att visa skillnader och jämföra olika värden,<br />

exempelvis hur många bilar som har sålts detta år jämfört med de senaste 10 åren.<br />

Något man ska tänka på är att inte använda sig <strong>av</strong> pseudo-3D diagram, eftersom det<br />

blir mycket svårare att läsa <strong>av</strong> innehållet, ett 2D diagram är mycket mer lättläst. Om<br />

en kund efterfrågar ett specifikt detaljerat diagram med pseudo-3D och kommentarer,<br />

visa dem då varför det inte fungerar bra. Förklara vad som blir effektivast, ge kunden<br />

valmöjligheter, tillverka båda delarna, en med pseudo-3D och en 2D, be kunden att<br />

ge värdet i pseudo-3D, ta sen fram din 2D och ge ett exaktare värde. [14]<br />

I detta fall ville ABB visa procentvärdena på ett effektivt sätt. Då återstår<br />

pajdiagrammet som på ett effektivt sätt kan visa de procentuella värden som uppstår.<br />

Något som gör det hela ännu lättare att visualisera är om man färgar varje värde med<br />

olika färger och låter procentsiffrorna ligga innanför själva cirkeln eller ”flyga” smått<br />

ovanför. Att ha värdena staplade på sidan om pajen skulle ta bort fokus på själva<br />

diagrammet.<br />

Det val vi gjorde var ha procentvärdena utanför cirkeln men tillräckligt nära för att inte<br />

tappa fokus från själva pajdiagrammet. Nya värden kommer att matas in snabbare än<br />

varje sekund och då måste man kunna hålla ögonen på informationen på ett smidigt<br />

sätt.<br />

Om vi hade valt att ha procenttexten inuti varje pajdel i pajdiagrammet skulle det ha<br />

blivit problematiskt om ett värde hade varit litet i jämförelse med de andra värdena.<br />

Var skulle texten hamna? All information ska kunna vara tillgänglig när som helst så<br />

det är inte möjligt att ta bort ett värde bara på grund <strong>av</strong> att det är litet.<br />

En annan idé var att sortera pajdiagrammet i storlek, så att det största värdet alltid är<br />

på en speciell placering, men genom forskning kom vi fram till att om man vill sortera<br />

värdena efter storlek ska man satsa på en punktgraf istället.<br />

3.2.2 Långa textsträngar<br />

De stora diskussionerna inom detta område handlade om hur vi skulle visualisera en<br />

lång text inom ett mindre område. Vilket <strong>av</strong> dessa alternativ skulle vara bäst att ha?<br />

13


Ett litet textområde där texten delade sig i flertalet bitar för att passa textområdets<br />

storlek, där textområdet skulle visa första delen <strong>av</strong> själva texten 10-30 sekunder<br />

innan den fortsatte till nästa del och så vidare hela vägen till slutet <strong>av</strong> textsträngen.<br />

Eller skulle det vara bättre att använda en rullande text som rullar igenom textområdet<br />

som man kan kontrollera.<br />

Låt oss ta en titt på texten som delade sig, vi kallar den för klipp-och-klistra texten för<br />

tillfället. En klipp-och-klistra text skulle troligen bli svår att konstruera pga. det faktum<br />

att man inte kommer att veta var någonstans man ska klippa <strong>av</strong> själva texten, om<br />

texten inte innehåller något tecken som kan visa primitiven att vid detta tecken ska<br />

det klippas.<br />

En rullande text blir lättare i detta <strong>av</strong>seende men då måste man animera texten.<br />

Något som skulle vara bra till en rullande text skulle vara att kunna kontrollera<br />

rullningen på ett effektivt sätt, så som val <strong>av</strong> hur rullningen ska gå till, var ska den<br />

börja och var ska den sluta, dess hastighet och dess utseende.<br />

14


4 Applikationerna<br />

Dessa är de färdigställda <strong>primitiver</strong>na som blev tillverkade under examensarbetet i<br />

ABB.<br />

4.1 Pajdiagram primitiv<br />

Ett Pajdiagram är en stängd figur, skapad genom ett antal pajdelar som blir skapade<br />

genom två raka linjer och en del <strong>av</strong> en cirkel mellan dem.<br />

4.1.1 Egenskaper<br />

Följande är en tabell med alla egenskaper som ett pajdiagram har:<br />

NAME TYPE DEFAULT DESCRIPTION<br />

Font LogicalFont<br />

15<br />

“Font( “Ariel”, 14,<br />

Regular,<br />

DemiBold)”<br />

Visible BOOLEAN True<br />

Height FLOAT 300<br />

Width FLOAT 300<br />

Teckensnitt för att<br />

använda i all text i paj<br />

diagrammet.<br />

Bestämmer om den är<br />

synlig i programmet<br />

eller ej.<br />

Höjden på själva<br />

primitiven<br />

Bredden på själva<br />

primitiven<br />

Name STRING “PieChart1” Namnet på primitiven<br />

Pen Pen “N<strong>av</strong>y, 1”<br />

EngineeringUnit STRING “”<br />

ShadeLength INTEGER 0<br />

PresentationMode<br />

Shade<br />

ShowText<br />

ShowLines<br />

Transform<br />

ENUM<br />

UnitType<br />

ENUM<br />

ShowShade<br />

ENUM<br />

ShowText<br />

ENUM<br />

ShowLines<br />

TRANSFORM<br />

Type<br />

XPos, YPos FLOAT<br />

En penna för att rita ut<br />

pajen och linjerna.<br />

EngineeringUnit är till<br />

för att spåra värdena<br />

Möjliggör ändringar <strong>av</strong><br />

storleken på<br />

shadningen<br />

Percentage Sätter presentationen.<br />

Show3D<br />

ShowText<br />

NoLines<br />

Center of the<br />

display area<br />

Aktiverar shadning,<br />

eller slår <strong>av</strong> den<br />

Aktiverar text, eller slår<br />

<strong>av</strong> den<br />

Aktiverar linjerna, eller<br />

slår <strong>av</strong> dem<br />

Möjliggör animationer<br />

så som skalning,<br />

flyttning och rotationer.<br />

Positionen <strong>av</strong><br />

primitivens area,<br />

placering uppe i<br />

vänstra hörnet.


Rotation<br />

ROTATION<br />

Type<br />

PieSpokeXColor BRUSH<br />

16<br />

0<br />

“Red” (the first<br />

10 colors is<br />

default defined)<br />

PieSpokeXCurrentValue DOUBLE 10<br />

PieSpokeXNumberOfDecimals INTEGER 1<br />

Rotations vinkel,<br />

center <strong>av</strong> den<br />

definierade arean är<br />

axis <strong>av</strong> rotationen.<br />

En pensel för att färga<br />

varje pajdel.<br />

Värdet på den<br />

specifika pajdelen.<br />

Antal decimaler på<br />

värdena.<br />

4.1.2 Funktion<br />

Börja med att först välja hur många värden som kommer att bli inmatade i själva<br />

diagrammet. Ge sedan värdena varsitt värde, automatiskt kommer pajen ändra form<br />

för att passa de nya värdena.<br />

Man kan aktivera ”utritning <strong>av</strong> linjer” till siffrorna och siffrorna kan visas som både<br />

procent och det nuvarande inmatade värdet. Man kan också ta bort texten och vara<br />

helt utan siffror.<br />

EngineeringUnit möjliggör en ändring <strong>av</strong> värdena, så att man kan förlänga siffrorna<br />

med valfri sträng: cm, m, km, cl, liter, och så vidare. Detta visas i det nedre vänstra<br />

pajdiagrammet i Figur 4-1.<br />

Om skuggningen <strong>av</strong>aktiveras blir den 2D, annars så ritas en skuggning ut längst ut<br />

på cirkelns kant som ger den en falsk 3D-aktig figur.<br />

Exempel Bilder:<br />

Figur 4-1: Paj diagram<br />

PieChart:<br />

Utritade med:<br />

• Linjer.<br />

• Olika färger.<br />

• Olika värden.<br />

• Visning <strong>av</strong> procent.<br />

• Visning <strong>av</strong> värden.<br />

• Med skuggning.<br />

• Utan skuggning.<br />

• Engineering Unit


4.1.3 Problem som uppstod under arbetets gång<br />

Några problem som uppstod var bland annat på vilket sätt man skulle måla ut pajen. I<br />

den första omgången gjordes en enkel cirkel med linjer som rörde sig efter<br />

inkommande värden. Det upptäcktes dock snabbt att valet att ha olika färger för varje<br />

pajdel inte skulle fungera med denna utritning och att det skulle bli lättare att<br />

visualisera varje pajdel i diagrammet om varje del fick olika färger.<br />

Istället ändrades det till att rita ut två raka linjer och lägga en ark mellan dessa två<br />

linjer.<br />

Koden:<br />

streamContext.BeginFigure(p0, true, true);<br />

streamContext.LineTo(p1, true, true);<br />

streamContext.ArcTo(p2, arcSize, 0, rotateAngle > 180,<br />

SweepDirection.Clockwise, true, true);<br />

streamContext.LineTo(p0, true, true);<br />

Man måste börja med att tala om var startpunkten är och detta gör man med<br />

”BeginFigure”.<br />

”BeginFigure”: denna metod vill få in punkten där figuren ska börja ritas (p0).<br />

Nu är det dags att börja rita, vi ropar på funktionen ”LineTo” från<br />

StreamGeometryComplex klassen.<br />

”LineTo” vill ha punkten dit linjen ska gå, den har början från ”BeginFigure” redan<br />

och nu fortsätter den till punkt 1 (p1)<br />

Arken, ”ArcTo” fungerar på följande sätt:<br />

”ArcTo” ritar ut en del <strong>av</strong> en cirkel. Men det finns många sätt att rita ut en böjd kurva<br />

mellan två linjer och därför begär den många inparametrar innan den vet exakt hur<br />

kurvan kommer se ut.<br />

”ArcTo” vill veta till vilken punkt den ska rital. Den har ju startpunkten från punkt 1, så<br />

då ger vi den punkt 2 (p2).<br />

Nu vill ”ArcTo” veta hur stor radie på cirkeln det ska vara, detta är ”arcSize” i koden.<br />

”ArcTo” vill veta om det finns någon rotationsvinkel, vilket det i detta fall inte finns. Vi<br />

matar in 0. ”ArcTo” vill också veta om den ska rita ut den stora kurvan mellan de två<br />

punkterna eller den lilla kurvan, i detta fall beror det på hur stor själva pajen är. Det är<br />

därför vi jämför med 180 grader, om den går längre än 180 kommer den att<br />

returneras ”True”, vilket innebär att den ritar den stora kurvan, annars ritas den<br />

mindre kurvan mellan punkterna.<br />

Den femte parametern gäller åt vilket den ska rita kurvan, ”clockwise” eller<br />

”counterClockwise”.<br />

Dessa är de viktiga parametrarna som man måste ordna innan det blir dags för själva<br />

utritningen <strong>av</strong> ”ArcTo”. När väl denna har blivit utritad får man inte glömma att peka<br />

tillbaka till startpunkten med ”LineTo” igen (p0)<br />

Nu tar vi en titt på en enda pajdel så att man lättare förstår vad som händer.<br />

LineTo<br />

P1<br />

P0<br />

LineTo<br />

ArcTo<br />

P2<br />

1: BeginFigure skapar startpunkten p0<br />

2: LineTo ritar ut en linje till nästa punkt p1<br />

3: ArcTo ritar ut arken till den sista punkten p2<br />

4: LineTo ritar ut den sista sträckan tillbaka till<br />

startpunkten.<br />

17


När den har blivit utritad på detta sätt kommer pajdelen att rotera hela sin vinkel, dit<br />

den andra linjen finns och sen ritas nästa del ut. På så sätt bildas pajen och det med<br />

hjälp <strong>av</strong> ”push-transform” som ordnar rotationen för den färdiga delen.<br />

4.2 Textrullning primitiv<br />

Rullande textprimitiven används för att visa en rullande text i ett grafikfönster. Den<br />

kan rulla in från grafikfönstret och ut med olika egenskaper.<br />

4.2.1 Egenskaper<br />

Följande är en tabell med alla egenskaper som rullande text har:<br />

NAME TYPE DEFAULT DESCRIPTION<br />

Name STRING “ScrollingText1” Namnet på primitiven<br />

Visible BOOLEAN True<br />

18<br />

Bestämmer om den är<br />

synlig i programmet eller ej.<br />

Height FLOAT 96 Höjden på själva primitiven<br />

Width FLOAT 96<br />

XPos, YPos FLOAT<br />

Transform<br />

TRANSFORM<br />

Type<br />

Center of the display<br />

area<br />

Line Pen Pen(RGB(0,255,0),1)<br />

FillColor BRUSH RGB(64,64,64)<br />

Rotation ROTATION Type 0<br />

Frame3DEffect<br />

ENUM<br />

Frame3DEffect<br />

RAISED<br />

FrameColor COLOR RGB (200,200,200)<br />

FrameColor2 COLOR RGB (127,127,127)<br />

Bredden på själva<br />

primitiven<br />

Positionen <strong>av</strong> primitivens<br />

area, placering uppe i<br />

vänstra hörnet.<br />

Möjliggör animationer så<br />

som skalning, flyttning och<br />

rotationer.<br />

Penna som ritar ut linjerna<br />

runt primitiven<br />

Bakgrunds färg till<br />

primitiven<br />

Rotations vinkel, center <strong>av</strong><br />

den definierade arean är<br />

axis <strong>av</strong> rotationen.<br />

Kontrollerar ramens<br />

placering i djup.<br />

Färg för att använda till den<br />

högra sedan <strong>av</strong> primitiven.<br />

Färg för att använda på<br />

vänster sida <strong>av</strong> primitiven.<br />

FrameWidth INTEGER 3 Bredden på ramen.<br />

Font FONT Tahoma<br />

Text STRING “ScrollingText”<br />

TextColor COLOR RGB(0,255,0)<br />

Teckensnitt för att visa<br />

texten.<br />

Själva texten som ska<br />

visas i arean.<br />

Färg för att ändra textens<br />

färg som visas inne i<br />

primitiven.


ScrollSpeed INTEGER 2<br />

ScrollOption<br />

Direction<br />

FadingShade<br />

ENUM<br />

ScrollOption<br />

ENUM<br />

ScrollDirection<br />

ENUM<br />

FadingShade<br />

19<br />

StartToEnd<br />

Left<br />

Both<br />

Sätter hastigheten på<br />

rullningen.<br />

Den bestämmer på vilket<br />

sätt texten ska rulla.<br />

Bestämmer åt vilket håll<br />

texten ska rulla.<br />

Bestämmer hur<br />

skuggningen ska visas.<br />

4.2.2 Funktion<br />

Den rullande texten blir animerad med hjälp <strong>av</strong> en klocka som är inbyggd i 800xA<br />

systemet, med varje ”tick” flyttar sig bilden ett antal pixlar åt valt håll beroende på<br />

hastigheten.<br />

De extra funktionerna som finns är hur rullningen ska börja och sluta.<br />

• ”StartToEnd” innebär att rullningen startar från första bokst<strong>av</strong>en och rullar till<br />

andra sidan <strong>av</strong> textområdet, den rullar hela vägen till den sista bokst<strong>av</strong>en. När<br />

den sista bokst<strong>av</strong>en når slutkanten <strong>av</strong> textområdet så börjar texten om igen.<br />

• ”StartToStart” innebär att rullningen startar från första bokst<strong>av</strong>en och rullar till<br />

andra sidan <strong>av</strong> textområdet, men när den första bokst<strong>av</strong>en når textkanten <strong>av</strong><br />

textområdet börjar texten om omgående.<br />

• ”AtOnce” innebär att rullningen startar från första bokst<strong>av</strong>en och rullar till andra<br />

sidan <strong>av</strong> textområdet, men på vägen till textkanten <strong>av</strong> textområdet kommer en<br />

ny text att starta upp så fort den sista bokst<strong>av</strong>en har lämnat startkanten. På<br />

detta sätt får man en flytande rullande text med inga stopp i, som inte visar<br />

några tomma områden i textrullningen.<br />

FadingShade bestämmer var skuggningen ska ske, den gör så att texten försvinner<br />

på ett finare sätt längst ut vid slutet och/eller början <strong>av</strong> textområdet.<br />

”Both” menas att båda sidorna har skuggningen aktiverad.<br />

Eftersom 800xA systemet ska finnas tillgängligt i de länder som läser från vänster till<br />

höger också så måste man även kunna välja vilket håll rullningen ska åka mot.


Exempel Bild:<br />

Figur 4-2: ScrollingText.<br />

20<br />

Rullande Text:<br />

• Här ser man alla val, ink. olika<br />

färger.<br />

• Skuggning <strong>av</strong>/på.<br />

• olika inställningar på rullningen<br />

(Pilarna visar vilket håll texten rör sig).<br />

4.2.3 Problem som uppstod<br />

Ett större problem som uppstod, om man körde med längre meningar när man hade<br />

”StartToStart” som val, var att text två började skriva över den första texten som<br />

redan rullade. Det fanns alltså ingen kontroll som kontrollerade att det inte fanns<br />

någon text där redan.<br />

Detta problem fixades genom att ändra ”StartToStart” till att automatiskt ändras till<br />

”AtOnce” när textsträngen är så pass lång att den sträcker sig hela vägen mellan<br />

textområdet. På detta sätt började texten om när den sista biten hade lämnat<br />

startkanten.<br />

4.3 Capability diagram primitiv<br />

Capability Diagrammet är en början <strong>av</strong> ett diagramprogram åt en kund till ABB som<br />

håller på med mätningar <strong>av</strong> gas och olja. Diagrammets uppgift är att visa när en<br />

generator börjar närma sig ett farligt värde. När operatören ser detta måste denna<br />

person göra åtgärder för att hindra att generatorn överstiger den farliga gränsen.<br />

Diagrammet kommer att ha tillgång till en rad olika värden som blir resultatet <strong>av</strong> ett<br />

utritat kryss, det är detta kryss som inte får vara i närheten <strong>av</strong> den farliga zonen <strong>av</strong><br />

grafen (Figur 4-4, mörkblå färg). Om detta inträffar och de åtgärder som programmet<br />

blivit programmerad att vidta i nödlägen inte ändrar riktning, måste operatören genast<br />

ta till egna åtgärder för att förhindra generators nuvarande kurs. Det är på grund <strong>av</strong><br />

detta som man senare kommer att programmera in alarm som gör det lättare för<br />

operatören att upptäcka att ett problem är på gång att uppstå.<br />

4.3.1 Egenskaper<br />

Tabell <strong>av</strong> alla egenskaper för Capability Diagrammet<br />

NAME TYPE DEFAULT DESCRIPTION<br />

Name STRING "CapabilityDiagram1" Namnet för primitiven<br />

Visible BOOLEAN True<br />

Bestämmer om den är<br />

synlig i programmet eller ej.


Height FLOAT 96 Höjden på själva primitiven<br />

Width FLOAT 96<br />

XPos, YPos FLOAT<br />

Transform<br />

TRANSFORM<br />

Type<br />

Center of the display<br />

area<br />

Back Color COLOR “DarkGray”<br />

Ligh tColor COLOR RGB(172,183,253)<br />

Dark Color COLOR RGB(53,0,213)<br />

TransferZone<br />

Color<br />

COLOR RGB(255,128,128)<br />

Line Pen Pen(White, 1.)<br />

21<br />

Bredden på själva<br />

primitiven<br />

Positionen <strong>av</strong> primitivens<br />

area, placering uppe i<br />

vänstra hörnet.<br />

Möjliggör animationer så<br />

som skalning, flyttning och<br />

rotationer.<br />

Färg som används för att<br />

rita ut bakgrundsfärgen.<br />

Färg som används för att<br />

rita ut den ljusazonen<br />

(brazonen)<br />

Färg som används för att<br />

rita ut den mörka zonen (<br />

farligazonen).<br />

Färg som används för att<br />

rita ut själva<br />

Transferzonen.<br />

Penna som ritar ut linjen<br />

runt primitiven och som<br />

också ritar ut kryssen.<br />

Operator Limit FLOAT 0 En operator gräns<br />

PFLagMin DOUBLE 0.2 Lutningen på Lag Sidan<br />

PFLeadMin DOUBLE -0.2 Lutningen på Lead Sidan.<br />

PMAX FLOAT 50 Värdet på PMAX<br />

PMIN FLOAT 2 Värdet på PMIN<br />

PN FLOAT 41 Värdet på PN<br />

PQScaleMax FLOAT 65 Värdet på PQScaleMax<br />

Q0 FLOAT -40 Värdet på Q0<br />

Q1 FLOAT -25 Värdet på Q1<br />

Q2 FLOAT 50 Värdet på Q2<br />

QMAX FLOAT 60 Värdet på QMAX<br />

QMIN FLOAT -28 Värdet på QMIN<br />

QP0 FLOAT -35 Värdet på QP0<br />

QPN FLOAT -20 Värdet på QPN<br />

Scale Lines DashDotPen<br />

DashDotPen(White,<br />

0.5, Dash, Flat,<br />

Miter)<br />

Show Dots ENUM ShowDots ShowDots Sätter utritning <strong>av</strong> kryssen.


Show Lines ENUM ShowLines ShowLines Sätter utritning <strong>av</strong> linjerna.<br />

TransferZone<br />

Enable<br />

BOOLEAN False<br />

TransfZoneLimH FLOAT 10<br />

TransfZoneLimL FLOAT 15<br />

Rotation ROTATION Type 0<br />

22<br />

Sätter på/<strong>av</strong> visningen <strong>av</strong><br />

”Transferzone”<br />

Höga nivån på<br />

”Transferzone”<br />

Låga nivån på<br />

”Transferzone”.<br />

Rotationsvinkel, center <strong>av</strong><br />

den definierade arean är<br />

axis <strong>av</strong> rotationen.<br />

4.3.2 Tillverkning<br />

Capability Diagrammet är tillverkad med tre olika stora cirklar, tre olika trianglar och<br />

en rektangel. Tillsammans bildar de ett mönster som blir ritade i två olika färger i den<br />

farliga zonen och den ofarliga zonen (se Figur 4-4), det finns även en aktivering <strong>av</strong><br />

en markör med färgen rosa/orange som visar var krysset befinner sig horizontellt,<br />

denna del kommer att bli programmerad att röra sig efter själva krysset.<br />

Nedanför följer en figur <strong>av</strong> den första skissen <strong>av</strong> hur diagrammet skulle se ut, på<br />

grund <strong>av</strong> att detta är en produkt till en kund till ABB så har namnen på funktionerna<br />

och beskrivningarna tagits bort från alla metoder <strong>av</strong> hemlighetsstämplingssyfte.<br />

Figur 4-3: Capability Diagrammet<br />

Capability Diagram<br />

Diagram designen<br />

som skulle tillverkas.<br />

Det röda området är<br />

det område som är<br />

den ofarligazonen.<br />

Utanför den röda<br />

linjen är den<br />

farligazonen.


4.3.3 Exempel Bilder<br />

Figur 4-4: Capability Diagrammet exempelFigur<br />

23<br />

Capability Diagram:<br />

• Den farligazonen (mörkblå)<br />

• Den ofarligazonen (ljusblå)<br />

• Den rosa/orange delen är den<br />

del som kommer ritas ut<br />

beroende var krysset befinner<br />

sig.<br />

• Linjerna.<br />

• Kryssen.<br />

4.3.4 Problem som uppstod<br />

Det tillverkade diagrammet är endast en primitiv, det är inte den färdiga produkten.<br />

En programmerare kommer att sitta med detta och lägga till alla säkerhets funktioner<br />

samt krysset som ska följa värdena som blir inmatade till diagrammet. En form <strong>av</strong><br />

gradbeteckning ska också skapas vilket kommer att visa var värdena horisontellt och<br />

vertikalt ligger. Eftersom det redan finns en gradbeteckningsskalnings primitiv i<br />

800xA kommer dessa att användas för att bygga upp det färdiga diagrammet.


5 Ändringar och planerade ändringar <strong>av</strong> gjorda <strong>primitiver</strong><br />

Ändringar som kommer eller har skett under examensperioden.<br />

5.1 FlexiblePipe:<br />

FlexiblePipe är en primitiv vars funktion är att rita ut ett rör, som kan kopplas samman<br />

med varandra och med andra <strong>primitiver</strong>.<br />

Ett problem som skulle ändras var att när två rör skulle kopplas samman så fanns det<br />

inget bra sätt att utföra detta på.<br />

Så här såg det ut förut vid ihopkoppling:<br />

Figur 5-1: Flexible Pipe: före ändringen<br />

Flexible Pipe:<br />

Med denna bild ser man att<br />

ihopkopplingen inte ser så bra ut.<br />

Det händer att man inte ens drar rören<br />

ända fram till målet när man gör<br />

simulatorerna och då blir det ett stort<br />

mellanrum mellan de båda figurerna.<br />

Figur 6-2 visar den nya ändrade delen.<br />

Det ser konstigt ut när långa rör skulle kopplas samman. För att få rör att kopplas<br />

samman finare behövdes en extra metod, den var redan skapad men däremot inte<br />

implementerad. Metoden gick ut på att tillverka en triangel längst ut på röret, med<br />

denna triangel kunde man koppla ihop rör på ett effektivare sätt.<br />

Triangeln kunde man aktivera när man ville.<br />

Figur 5-2: FlexiblePipe: Efter ändringen<br />

FlexiblePipe:<br />

Här ser man hur den nya triangeln blivit<br />

aktiverad.<br />

24


Och i en sammansatt bild ser det ut på följande sätt:<br />

Figur 5-3: Flexible Pipe: ihopsatt<br />

25<br />

FlexiblePipe:<br />

Här ser man hur triangeln ser<br />

mycket bättre ihopkopplat.<br />

En 45 graders vinkling var<br />

inte möjlig att koppla ihop<br />

förut så att den såg bra ut.<br />

Dock fungerar den nya<br />

triangeln utan problem med<br />

detta.<br />

5.2 Paj Diagram:<br />

Pajdiagrammet blev ändrat från vad som såg ut som en badboll till en mer plattare<br />

skuggning.<br />

Så här såg diagrammet ut innan ändringen:<br />

Figur 5-4: Pajdiagrammet före ändringen<br />

Figur 5-5: Pajdiagrammet med en mindre<br />

skuggning<br />

Figur 5-6: Pajdiagrammet, full skuggning (badboll).


Skuggningen <strong>av</strong> pajdiagrammet gjordes på följande sätt:<br />

En transparent färg placerades i mitten som sakta övergår mot en svart färg med ett<br />

mindre genomskinlighetsvärde. Sedan placerades en ljuskälla, för att ge illustrationen<br />

<strong>av</strong> att den är rund. Det finns även en mindre mörkare ”linje” längst ner på höger sida<br />

<strong>av</strong> diagrammet som skapar lite extra känsla <strong>av</strong> rundhet (se Figur 5-6).<br />

När många värden blev inmatade i diagrammet såg det dock ut som en stor badboll<br />

och följande ändringar infördes för att rätta till badbollsproblemet.<br />

• Man tog bort ljuspunkten som fanns för att skapa illustrationen <strong>av</strong> att den var<br />

rund.<br />

• Man ändrade tillfället då den transparanta delen började gå över mot mörk<br />

färg, så att den aktiveras snabbare men under en mindre sträcka. Detta<br />

placerades vid den yttre omkretsen istället för att börja omgående från<br />

centrum <strong>av</strong> diagrammet.<br />

• Den svarta mörkläggningen längst till höger togs bort för att återigen minska<br />

synvillan <strong>av</strong> att den var rund.<br />

På detta sätt ser nu det nya diagrammet mycket mer plattare ut:<br />

Figur 5-7: Pajdiagrammet efter ändringen <strong>av</strong> skuggningen<br />

5.3 Scrolling text:<br />

Den rullande texten har inte blivit ändrad ännu, men det diskuterades att det skulle<br />

vara rolig att införa en metod för att stoppa rullningen <strong>av</strong> texten och att möjligtvis<br />

lägga till pilar (knappar) på vardera sida som kontrollerar åt vilket håll texten rullar<br />

utan att börja om från början. På så sätt kan man backa och läsa något igen om man<br />

råkade missa texten.<br />

En tredje sak som kan vara intressant att göra är att lägga till en vattenskuggning, så<br />

att den text och textområde som visas kommer att skuggas, som en reflektion på<br />

vatten/glas.<br />

Detta är bara förslag och inget har blivit sagt att det ska göras, dessutom kan detta<br />

göras utanför primitiven, med hjälp <strong>av</strong> primitivknapparna som redan finns tillgängliga.<br />

26


6 Rapport skrivning till Företaget<br />

Dokumentation var nödvändigt att göra för varje primitiv man tillverkade. Det skulle<br />

skrivas två rapporter för varje primitiv som blev tillverkad, en CTTD rapport och en<br />

DOF rapport.<br />

CTTD rapporten är den delen som testarna kommer att utföra, de går igenom varje<br />

steg som finns i rapporten och kryssar <strong>av</strong> att den fungerar som den ska. Rapporten<br />

har ofta många bilder och många ändringar och sist i rapporten finns ett<br />

kommentarsfält där testpersonerna kan skriva vad som uppträdde konstigt.<br />

Om ett fel upptäcks <strong>av</strong> ett inskickat testdokument så kommer rapporten skickas<br />

tillbaka med anteckningar och kommentarer om vad som gick fel.<br />

En rapport kan bli lång om primitiven är stor och det finns många metoder att gå<br />

igenom, det kan ta ett tag för testarna att försäkra sig om att primitiven fungerar<br />

perfekt innan den blir aktiverad för global användning till alla som har licensen till<br />

800xA systemet.<br />

DOF rapporten handlar mer om själva primitiven, hur den fungerar, vilka funktioner<br />

och egenskaper primitiven har och hur varje funktion fungerar.<br />

Rapporten har ett fåtal exempelbilder <strong>av</strong> hur primitiven kan se ut med olika funktioner<br />

aktiverade.<br />

27


7 Slutsatser<br />

Den visuella effekten som skapar de illusioner som vi människor behöver för att läsa<br />

diagram på ett positivt och enkelt sätt är det som är det viktigaste när man skapar<br />

<strong>primitiver</strong>. Man vill inte få en tabell med alltför många värden på grund <strong>av</strong> det blir<br />

svårläst och svårt för det mänskliga ögat att uppfatta vad som är vad på en kortare<br />

tid.<br />

En rullande textremsa har en förmåga att plocka upp uppmärksamheten från<br />

användaren, att titta lite närmare på vad det står, men för mycket information eller<br />

blinkningar på texten kan upplevas som besvärande. Därför måste man vara försiktig<br />

med vad som visas i det rullande fältet och dessutom förstå att irritationsfaktorer kan<br />

leda till misstag.<br />

Eftersom en rullande text oftast får uppmärksamhet är det bäst att de inte används<br />

vid vägar, eller inom platser där användaren måste ha full uppmärksamhet på andra<br />

områden. I dessa fall borde det andra systemet passa bättre, där man låter en del <strong>av</strong><br />

texten vara synlig några sekunder innan nästa del <strong>av</strong> texten dyker upp. Den måste<br />

däremot vara förståelig och inte skapa frågor, om man inte skulle hinna läsa båda<br />

delarna.<br />

Det faktum att färgen spelar en sådan står roll i visualiseringen gör att man måste<br />

tänka efter vad som är bra och dålig färgsättning. Ett pajdiagram utan färg blir genast<br />

mycket mer svårtolkat än ett med färg. Det blir då färgen som talar om vilket värde<br />

det är, samtidigt som texten hjälper till att fastställa det korrekta värdet.<br />

Att ha en funktion som kan ta bort texten fixar till problemet med rörighet, samma sak<br />

som gäller i en tabell eller graf, för mycket information gör det rörigt.<br />

Men nu är det användare själva som kan bestämma hur de vill att pajdiagrammet ska<br />

fungera för just dem och välja vilka delar de vill ha aktiverade.<br />

28


Referenser<br />

[1] * 2D: http://en.wikipedia.org/wiki/2D_computer_graphics ;<br />

* 2.5D: http://en.wikipedia.org/wiki/2.5D ;<br />

* 3D: http://en.wikipedia.org/wiki/3D<br />

2008-06-13<br />

[2] ABB hemsida: http://www.abb.se : 2008-06-13<br />

[4] Programming Microsoft Windows with C#, Charles Petzold : ISBN: 0-7356-1370-2<br />

2001-12-18<br />

[5] .NET Framework:<br />

http://en.wikipedia.org/wiki/.NET_Framework_3.0#.NET_Framework_3.0 :<br />

2008-05-27<br />

[6] Windows Presentation Foundation Unleashed,<br />

Adam Nathan, ISBN: 0-672-32891-7 : 2007<br />

[7] Applications = code + Markup, a guide to the Microsoft Windows Presentation<br />

Foundation, Charles Petzold ISBN 10: 0-7356-1957-3<br />

[8] Foundation of WPF, an introduction to Windows Presentation Foundation,<br />

Laurence Moroney – ISBN: 1-59059-782-6 : 2006-11<br />

[9] WPF Graphic rendering overview:<br />

http://msdn2.microsoft.com/en-us/library/ms748373.aspx : 2008-04-24<br />

[10]<br />

http://msdn2.microsoft.com/enus/library/system.windows.media.drawingvisual_members.aspx<br />

: 2008-05-27<br />

[11] Proffersional Visual Studio 2005 Team System.<br />

D<strong>av</strong>id, Tony, Gunvaldson, Bowen, Coad, Jefford, ISBN: 0-7645-8436-7<br />

[12] Team Foundation Server: http://en.wikipedia.org/wiki/Team_Foundation_Server :<br />

2008-04-24<br />

[13] Information Visualization:<br />

Robert Spence - ISBN: 0-201-59626-1 : 2000<br />

[14] Creating more effective graphs<br />

Robbins, Naomi B. – ISBN: 047127402X : 2004-12<br />

29

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!