• No results found

Operatörpanel för ett flexibelt monteringssystem

N/A
N/A
Protected

Academic year: 2021

Share "Operatörpanel för ett flexibelt monteringssystem"

Copied!
106
0
0

Loading.... (view fulltext now)

Full text

(1)

Institutionen för datavetenskap

Department of Computer and Information Science

Examensarbete

Operatörpanel för ett flexibelt

monteringssystem

av

Daniel Karlsson

LIU-IDA/LITH-EX-A--09/048--SE

2009-11-10

(2)

Linköpings universitet

Institutionen för datavetenskap

Examensarbete

Operatörpanel för ett flexibelt

monteringssystem

av

Daniel Karlsson

LIU-IDA/LITH-EX-A--09/048--SE

2009-11-10

Handledare: Henrik Kihlman

Examinator: Jonas Wallgren

(3)

Sammanfattning

Fixturer är vanliga i tillverkningsindustrin för att hålla detaljer på plats under tiden de monteras

samman. Det vanliga är att fixturerna konstrueras för varje specifik uppsättning av detaljer som ska

fixeras. Ibland uppstår behovet att kunna justera fixturer så att de kan återanvändas. Den typ av

flexibel fixtur som används i detta arbete har fått namnet flexapod.

Arbetets resultat är ett grafiskt användargränssnitt, en operatörspanel, som hjälper operatören med

justeringen av flexapoderna. Målet för operatören är att justera längden på flexapodens sex ben så

att flexapoden hamnar i önskat läge. Operatörspanelen vägleder operatören med två vyer, en

flexapodvy och en översiktsvy, och ett diagram som förmedlar felet mellan benens egentliga och

önskade längder. En lasermätare ger data om flexapodens egentliga inställning till operatörspanelen.

Applikationen har utvecklats i Visual Basic 6. Ett antal komponenter från tredje part används också.

Rapporten behandlar även paketeringen av mjukvaran och tillhörande komponenter med Nullsoft

Script Install System.

(4)

Innehållsförteckning

Sammanfattning...1

1 Inledning...4

1.1 Bakgrund...4

1.2 Syfte...5

1.3 Avgränsningar...5

1.4 Metod...5

1.5 Källor...5

1.6 Struktur...6

2 Koordinatsystem...7

2.1 Position och riktning...7

2.2 Transformation av ramar...7

2.3 Rotationer...8

3 Flexapod - flexibel fixtur...10

3.1 Översikt...10

3.2 Matematisk modell...12

3.3 Beräkning av benlängdsfel...13

3.4 Känslighetsanalys...14

4 Grafiskt användargränssnitt...15

4.1 Krav...15

4.2 Det ursprungliga användargränssnittet...16

4.2.1 Operatörspanel...16

4.2.2 Emulator...17

4.3 Benlängdsfel...18

4.4 Flexapodvy...20

4.5 Översiktsvy...21

4.6 Operatörspanelens utseende efter avslutat arbete...22

5 Frame-klassen...25

6 Kommunikation med mätutrustning...26

7 Paketering...28

8 Analys av resultat...31

Referenser...32

Bilaga A – Arkitekturbild av mjukvaran...33

Bilaga B - Källkod...34

OPERATÖRSPANELEN (PROJEKTET).vbp...34

Flexapod Control Panel.frm...36

Constants.bas...73

emScon.bas...75

Graphics3D.bas...77

OpenFileDialog.bas...84

Public_Objects.bas...86

V5lib.bas...87

cMathlib.cls...89

FlexapodManager.cls...99

Frame.cls...100

PickupManager.cls...103

(5)

Illustrationsförteckning

Illustration 1: En komplett uppställning: BoxJoint, flexapoder, mätsystem, operatör och

operatörspanel...4

Illustration 2: Opertörpanelens utseende i prototypen...16

Illustration 3: Emulatorns utseende i prototypen...17

Illustration 4: Stapeldiagrammet när det fortfarande ritades med egen kod...18

Illustration 5: Stapeldiagrammets utseende med komponenten MSChart...19

Illustration 6: Flexapodvyns utseende i prototypen...20

Illustration 7: Den förbättrade flexapodvyn...21

Illustration 8: Översiktsvyn implementerad med Cortona VRML Viewer...22

Illustration 9: Användargränssnitt - Koordinatsystem i vanliga textrutor...23

Illustration 10: Användargränssnitt - Viktiga parametrar i stort format...24

Illustration 11: Mätutrustningen - en Leicatracker...26

Tabellförteckning

Tabell 1: Namn på och beskrivning av matriser som ingår i flexapodens matematiska modell...12

Tabell 2: Gränser för skalning av benlängdsfel...20

(6)

1 Inledning

Syftet med detta kapitel är att ge en introduktion till arbetet och att beskriva rapportens

uppbyggnad.

Arbetet beställdes och handleddes av Henrik Kihlman, forskarassistent på IEI / Avdelningen för

monteringsteknik. Examinator för arbetet var Jonas Wallgren, IDA / Avdelningen för programvara

och system (SaS). Arbetet utfördes inledningsvis på IEI / Avdelningen för monteringsteknik och i

slutskedet på SAAB i Linköping.

1.1 Bakgrund

SAAB Aerostructures i Linköping utvecklar ett förarlöst flygplan som bär namnet Neuron, ungefär

så stort som deras nuvarande JAS 39 Gripen. Endast ett plan ska tillverkas och detta ställer stora

krav på produktionen för att hålla kostnaderna nere. Ett flygplan består av många detaljer som

måste fogas samman med svetsning och andra tekniker. Delarnas tyngd och de toleranskrav som

ställs på fogarna gör det nödvändigt att använda fixturer som håller delarna på sin rätta plats under

sammanfogningen. Tillsammans med SAAB Aerostructures har Linköpings Universitet under

många år forskat kring hur montering kan effektiviseras. Resultatet är framtagandet av ett nytt

koncept för utformningen av fixturer. Det speciella med dessa fixturer är att de är omställbara med

hjälp av justerbara ben. Justeringen av benens längder utförs manuellt av en operatör, som till sin

hjälp har en dator med programvara (kallad operatörspanel) som vägleder operatören att ställa in

fixturen så att den erhåller en önskad konfiguration. Operatörspanelen kommunicerar med ett

mätsystem för att erhålla den flexibla fixturens egentliga konfiguration. De flexibla fixturerna

monteras på ett BoxJoint-system, ett mekaniskt ramverk.

Fördelen med detta fixturkoncept är möjligheten att använda en fixtur till flera monteringssteg,

Illustration 1: En komplett uppställning: BoxJoint, flexapoder, mätsystem, operatör och

(7)

eftersom varje fixtur är flexibel och inte är tillverkad för ett enskilt monteringssteg. Tillverkningen

av unika fixturer för varje monteringssteg är då inte längre nödvändig och det är både

kostnadseffektivt och tidsbesparande i ett projekt likt Neuron. Den extra tid som krävs för att justera

de flexibla fixturerna påverkar inte projektets tidsåtgång nämnvärt eftersom endast ett flygplan ska

byggas. Uppskattningsvis kan det behövas omkring 40 stycken flexibla fixturer i tillverkningen av

Neuron.

1.2 Syfte

Kraven på noggrannhet är mycket höga när fixturen ska justeras. Utan noggrann mätning och

vägledning är det inte möjligt för operatören att kunna genomföra en inställning av en fixtur. Det

ställs alltså krav på att mätningen är tillräckligt noggrann och att operatörspanelen tydligt kan

presentera den information som operatören behöver. I examensarbetet ingår det att ta fram en sådan

operatörspanel. Vid arbetets början fanns det redan en prototyp framtagen som hade en del

grundläggande funktionalitet och som det var möjligt att utgå ifrån i den fortsatta utvecklingen, men

det var också många funktioner som saknades i prototypen.

Det ska även göras en enkel känslighetsanalys, vars syfte är att erhålla en grov uppskattning av hur

stora fel som får finnas i den flexibla fixturens ingående delar.

En viktig följdfråga är den som rör inställningens konvergens, att operatören med hjälp av

operatörspanelens information alltid kommer närmre och närmre den önskade konfigurationen med

ett tillräckligt litet fel.

1.3 Avgränsningar

Ett sådant här projekt kan växa sig mycket stort men tiden är begränsad och det måste göras vissa

avgränsningar. Två viktiga sådana avgränsningar är dels valet att behålla så mycket av den

ursprungliga koden som möjligt och dels att inte göra en känslighetsanalys av hemmalägesfel. Båda

dessa val sparar givetvis en del tid som kan läggas på annat. Svårigheten att bestämma det

sistnämnda beskrivs i avsnittet Känslighetsanalys.

1.4 Metod

Examensarbetet inleddes med en litteraturstudie. Därefter undersöktes den mjukvaruprototyp som

fanns tillgänglig. Dels undersöktes hur prototypen användes, dels studerades källkodens

uppbyggnad. Efter det kunde programmeringen påbörjas. Många beslut om operatörspanelens

funktion och utseende togs under arbetets gång. Detta arbetssätt brukar benämnas lättrörlig

(engelska agile) utveckling.

1.5 Källor

Här presenteras några av de källor som har använts i detta arbete, den fullständiga förteckningen är

tillgänglig under rubriken Referenser. Teorin om ramar och transformationer erhölls från en lärobok

i ämnet, Introduction to robotics av John J. Craig. I denna bok var det några inledande kapitel om

koordinatsystem som var av intresse för arbetet. Information om programmering i Visual Basic 6

har hämtats från Microsofts webbportal MSDN Library, företagets officiella källa på Internet för

produktdokumentation. Information har också hämtats från många andra källor på Internet. Det rör

framför allt information om komponenter och kod som har utvärderats och eventuellt använts i

operatörspanelen.

(8)

1.6 Struktur

Rapporten har följande disposition. Först kommer en genomgång av några viktiga koncept som har

varit viktiga i arbetet. Dessa är koordinatsystem och ramar och manipuleringen av dem. I avsnittet

Flexapod - Flexibel fixtur beskrivs vad en flexapod är och hur den beskrivs matematiskt följt av en

känslighetsanalys. Därefter sker en genomgång av viktiga delar av operatörspanelens

användargränssnitt i kapitlet Grafiskt användargränssnitt. Målet med detta kapitel är att ge en bild

av vad som har hänt med de olika delarna i användargränssnittet under arbetets gång. I kapitlet

Frame-klassen beskrivs en viktig klass som har skapats för hantering av ramar. Kommunikation

med mätutrustningen beskrivs i kapitlet Kommunikation med mätutrustning. Rapporten avslutas

med en analys av arbetets resultat.

I bilaga A återfinns en bild av mjukvarans arkitektur i syfte att synliggöra dess struktur.

I bilaga B listas all källkod som tillhör operatörspanelen.

(9)

2 Koordinatsystem

Detta kapitel introducerar läsaren till den matematiska teorin som ligger till grund för kommande

kapitel. Kapitlet inleds med ett avsnitt om hur position och riktning respresenteras och på det följer

ett avsnitt om transformation av ramar. Därefter avslutas kapitlet med ett avsnitt som behandlar

rotation av ramar.

2.1 Position och riktning

Terminologi och faktauppgifter i detta stycke är tagna från Thompson & Martinsson (1991). Ett

koordinatsystem används för att kunna representera punkter med koordinatvärden. Fortsättningsvis

antas alla koordinatsystem vara ortonormerade. Det som bestämmer ett ortonormerat

koordinatsystem är ett origo och tre vektorer som är inbördes ortogonala och normerade (har

längden ett). En punkt beskrivs med en ortsvektor som kan tolkas som en linjärkombination av

koordinatsystemets vektorer som spänner upp rummet. Dessa tre vektorer utgör tillsammans en bas

för ett vektorrum. Om en riktning ska representeras i rummet kan det ske med en riktningsvektor

som består av tre riktningstal - ett för varje basvektor.

Position och riktning är tillräckligt för att beskriva en fast kropps placering i rymden, t.ex. en led på

en robot, relativt en godtycklig punkt. Denna punkt är origo i ett koordinatsystem A. Position och

riktning för ett objekt kan då beskrivas som en förflyttning respektive en rotation av A. Det ger

upphov till ett nytt koordinatsystem B i koordinatsystem A. Detta sätt att beskriva ett

koordinatsystem uttryckt i ett annat koordinatsystem kommer från och med nu att kallas för en ram.

Ramarna implementeras som matriser i programvaran.

2.2 Transformation av ramar

Informationen i detta avsnitt är baserad på uppgifter ur Craig (1986).

En viktig funktion i operatörspanelen är möjligheten att beskriva en ram uttryckt i en annan ram.

Det problemet kan hanteras med koordinattransformationer.

Låt säga att det finns två ramar, A och B, och en punkt Q. Koordinaterna för Q är angivna i ramen

B, som i sin tur befinner sig i det rum som definieras av ramen A.

Hur bestäms

A

P

? Med en rotationsmatris R

B A

(mer om den i nästa avsnitt) kan ekvationen

P

A

=

B

R

A

P

B

P

BORG A

ställas upp.

P

BORG A

är ortsvektorn i ram A för origo i ramen B. Med

matrisalgebraiska manipulationer kan P

A

lösas ut ur nyss nämnda ekvation. Genom att behandla

rotationen och ortsvektorn som en matris kan ekvationen förenklas till

A

P

=

BA

T

B

P

, där T är en

A

B

Q

A

P

BORG B

P

A

P

(10)

homogen transform. Ekvationen har i matrisform följande utseende

2.3 Rotationer

För att hantera rotationer med den homogena transformen behövs rotationsmatrisen R

BA

. Ett

problem med rotationsmatriser är att de är en abstrakt konstruktion. Vad som behövs är en mer

intuitiv representation av rotationer så att det blir enklare att specificera dem. Det finns många

sådana representationer. I det här avsnittet kommer två representationer att nämnas, de två som

används i detta projekt.

Den ena representationen är eulervinklar och beskriver en godtycklig rotation med tre stycken

vinklar. Den variant av eulervinklar som har använts i projektet är den som först roterar kring

z-axeln och sedan kring det roterade koordinatsystemets y-axel och slutligen kring det roterade

koordinatsystemets x-axel. Med denna rotationsordning är rotationsmatrisen lika med den matris

som följer.

Det är minst lika viktigt att kunna beräkna vinklarna från en given rotationsmatris. Här är formler

för detta.

Atan2(y, x) är en variant av funktionen arcustangens. Den har till skillnad från arcustangens två

argument. Atan2 beräknar vinkeln i radianer motsols mellan x-axeln och punkten (x,y). Resultatet

ligger i intervallet ]-pi,pi]. Metoden atan2 kan implementeras som så att den beräknar vinkeln

arctan ∣y / x∣ och att den sedan manipuleras med hänsyn till den kvadrant punkten (x,y) tillhör.

Ett problem med eulervinklar är att en del rotationer inte har en unik uppsättning eulervinklar

(Craig 1986), men det skapar inga problem i detta arbete.

[

A

P

1

]

=

[

R

B A

A

P

BORG

⋯ ⋯ ⋯ ⋯

0

0

0

1

]

[

P

B

1

]

Rot  y=arctan2−R

31

,

R

112

R

212

Rot  x=arctan2 R

32

/

cos Rot  y , R

33

/

cos Rot  y

Rot  y=arctan2 R

21

/

cos Rot y  , R

11

/

cos Rot  y 

atan2 y , x=arctan 

y

x

[

cos K cos

−sin K cos

sin 

sin K cos cos K sin  sin  cos K cos−sin K sin  sin  −cos sin 

(11)

Den andra representationen som används är kvaternioner och består av fyra tal, q

0

till q

3

, som

entydigt bestämmer en rotation i rummet. Från dessa fyra parametrar erhålls nedanstående

rotationsmatris.

[

q

02

q

12

−q

22

−q

32

2 q

1

q

2

−q

0

q

3

2 q

1

q

3

q

0

q

2

2 q

1

q

2

q

0

q

3

q

0 2

q

1 2

q

2 2

−q

3 2

2 q

2

q

3

q

0

q

1

2 q

1

q

3

q

0

q

2

2 q

3

q

2

q

0

q

1

q

0 2

−q

1 2

−q

2 2

q

3 2

]

(12)

3 Flexapod - flexibel fixtur

I detta kapitel beskrivs ges en översiktlig beskrivning av den flexibla fixturens konstruktion, hur

den behandlas matematiskt i operatörspanelen och hur benlängdsfelen beräknas. Kapitlet avslutas

med en analys av det inställningsfel av flexapoden som uppkommer på grund av en inkorrekt

bestämning av hemmaläget.

3.1 Översikt

Konceptet med flexibla fixturer har fått namnet flexapod. Teckning 1 visar hur en Flexapod ser ut

och namnet på ingående komponenter.

En flexapod består i grova drag av en bottenplatta, en topplatta och sex stycken ben. Bottenplattan

monteras på ett ramverk som kallas för BoxJoint. Benens längder kan justeras så att topplattan kan

röra sig i förhållande till bottenplattan. Detta är möjligt tack vare leder i infästningspunkterna i

benens ändar. Det som ska hållas av flexapoden monteras inte direkt på verktygshållaren utan på en

led (pickup). Under tiden inställningen pågår sitter en mätprob monterad på flexapoden, på

verktygshållaren eller på pickupen.

Inställningen av en flexapod går till så här:

1. Topplattan trycks ned så långt det är möjligt. Flexapoden ska vara så noggrant konstruerad

att detta läge är väl definierat. Flexapoden befinner sig nu i det s.k. hemmaläget.

2. Nu utförs en grovinställning av flexapodens topplatta genom att dra i denna.

Grovinställningen pågår tills inställningsfelet är mindre än 1 cm.

3. Verktyg för finjustering monteras på alla sex ben. Klämmor på verktyget fäster verktyget

upptill och nertill på benen.

4. Finjusteringen utförs med dessa specialverktyg. På verktygen finns det en skruv som gör det

möjligt att justera benlängden mycket exakt.

(13)

Bottenplatta

Ben

Hydraullås

Topplatta

Pickup

Mätprob

Verktygshållare

(14)

3.2 Matematisk modell

För att göra en korrekt inställning av flexapoden måste det finnas en mjukvara som instruerar

operatören hur den ska manipulera topplattan och benen så att flexapodens verktygshållare hamnar i

rätt position och riktning. För detta krävs det en modell av flexapoden som kan ge sambandet

mellan verktygshållarens ram och längden på benen.

De variabler som behövs för den matematiska modellen är uppställda i tabell 1.

Teckning 2 visar hur ramarna (Origo, Botten, Verktyg, Mät och Prob) och transformationerna är

definierade på flexapoden. Ramarna visas som cirklar och transformationer som pilar. Pilens

riktning har betydelse. Om pilen är riktad från ram A till ram B så betyder det att transformationen

beskriver ram B relativt (i koordinatsystemet för) ramen A.

Namn

Beskrivning

P

Botten

Origo

Botten i koordinatsystemet för Origo.

P

Mål

VerktygBotten

Verktyg uttryckt i koordinatsystemet för Botten (det önskade värdet).

P

Nu Verktyg

Botten

Verktyg uttryckt i koordinatsystemet för Botten (det nuvarande värdet).

P

Hemma

VerktygBotten

Verktyg uttryckt i koordinatsystemet för Botten i flexapodens hemmaläge.

P

Mät

Verktyg

Mät uttryckt i koordinatsystemet för Verktyg.

P

ProbMät

Prob uttryckt i koordinatsystemet för Mät.

B

Botten

Sex ortsvektorer med benens fästpunkter på bottenplattan uttryck i Botten.

B

Topp

Sex ortsvektorer med benens fästpunkter på topplattan uttryck i Verktyg.

B

Längd , nu

Benens längder i den nuvarande konfigurationen.

B

Längd , mål

Benens längder i den önskade konfigurationen.

(15)

3.3 Beräkning av benlängdsfel

En viktig information som operatören behöver få veta är hur benen ska justeras så att den önskade

konfigurationen uppnås. I operatörspanelen visas därför benlängdsfelet,

B

Längd , nu

B

Längd , mål

, för

alla sex ben. Notera att det inte är fråga om ett absolutbelopp eftersom operatören måste få veta om

benet är för långt eller för kort. Ett positivt värde anger att benet är för långt och ett negativt värde

att benet är kort.

Beräkningen av benlängdsfel kan delas upp i sex delar.

1. Bestäm hemmaläget:

BottenOrigo

P

2. Beräkna topplattans nuvarande ram uttryckt i bottenplattans ram:

VerktygBotten

P

Nu

3. Beräkna nuvarande benlängder: B

Längd , nu

4. Flexapodens önskade inställning, som är lika med topplattans önskade ram uttryckt i

bottenplattans ram

Verktyg

P

Mål

Botten

, är given på förhand.

Teckning 2: Ramarnas placeringar i den matematiska modellen

för en flexapod.

Origo

Botten

Verktyg

Mät

Prob

(16)

5. Beräkna önskade benlängder: B

Längd , mål

6. Beräkna benlängdsfelen:

B

Längd , nu

B

Längd , mål

Här följer en mer noggrann beskrivning av hur benlängdsfelen beräknas.

Ekvation 1 uttrycker sambanden mellan flexapodens ramar.

P

Prob Origo

=

BottenOrigo

P

VerktygBotten

P

VerktygMät

P

ProbMät

P

(1)

Löses

Botten

P

Origo

ut ur ekvation 1 erhålls, om flexapoden befinner sig i hemmaläget, ekvation 2 som ger

hemmalägets ram uttryckt i mätutrustningens origo.

P

BottenOrigo

=

OrigoProb

P

ProbMät

P

−1

VerktygMät

P

−1

VerktygBotten

P

−1Hemma

(2)

P

Hemma Verktyg

Botten

i ekvation 2 uttrycker verktygshållarens position relativt bottenplattans

koordinatsystem när flexapoden är ställd i hemmaläget.

Därefter beräknas de nuvarande benlängderna. Först måste

VerktygBotten

P

Nu

bestämmas vilket är möjligt

med ekvation 1.Då erhålls ekvation 3.

P

Nu

VerktygBotten

=

BottenOrigo

P

−1

OrigoProb

P

ProbMät

P

−1

VerktygMät

P

−1

(3)

De nuvarande benlängderna beräknas med ekvation 4.

B

Längd , nu

=

VerktygBotten

P

Nu

⋅B

Topp

B

Botten

(4)

De önskade benlängderna beräknas med ekvation 5.

B

Längd , mål

=

VerktygBotten

P

Mål

B

Topp

B

Botten

(5)

Slutligen beräknas benlängdsfelet med uttryck 6.

B

Längd , nu

−B

Längd , mål

(6)

3.4 Känslighetsanalys

En önskan av handledaren var att göra en analys av det fel i den slutgiltiga inställningen av

flexapoden som uppkommer av ett fel i bestämmandet av hemmalägets position och riktning.

Om det finns ett fel i hemmalägets bestämning så innebär det att benlängdsfelen inte alla kan bli

noll samtidigt. Justeras ett ben så kommer det att påverka de andra benlängderna i

flexapodmodellen, de som förmedlas av operatörspanelen. Resultatet blir att inställningen av

flexapoden inte konvergerar.

Benlängdsfelen som uppkommer av fel i bestämmandet av hemmaläget kan beräknas med formel

(7), där ΔP beskriver hemmalägets positions- och orienteringsfel.

B

Längd

=

P

−1

OrigoProb

P

ProbMät

P

−1

VerktygMät

P

−1

B

Topp

(7)

Av högerledet i (7) kan uttydas att benlängdsfelet som uppkommer beror av flexapodens

konfiguration och pickup.

(17)

4 Grafiskt användargränssnitt

I detta kapitel beskrivs operatörspanelens grafiska gränssnitt. Kapitlet inleds med de krav som

ställdes på operatörspanelen. Därefter behandlas den prototyp som låg till grund för detta arbete.

Resten av kapitlet beskriver de förbättringar som har genomförts i operatörspanelens olika grafiska

komponenter. Ett avsnitt ägnas till varsin komponent. Kapitlet avslutas med ett avsnitt som visar

operatörspanelens utseende i arbetets slutskede.

4.1 Krav

Kihlman ställde dessa krav på operatörspanelen.

Operatörspanelen ska ha ett användarvänligt användargränssnitt.

Operatörspanelen ska kommunicera med mätutrustning för bl.a. konfigurering och

inhämtning av mätvärden.

Operatörspanelen ska visa relevanta koordinatsystem.

Operatören ska ha möjlighet att välja vilken, bland flera flexapoder, som ska justeras för

tillfället..

Operatören ska kunna välja vilken pickup som är monterad på flexapodens verktygshållare.

En översiktsvy i användargränssnittet ska visa alla flexapoder i en uppställning och upplysa

operatören vilken flexapod som är vald för tillfället.

En flexapodvy i användargränssnittet ska tredimensionellt visa topplattans nuvarande och

önskade position för den valda flexapoden.

Operatörspanelen ska förmedla benlängdsfelen på ett sätt som tydligt visar operatören hur

flexapodens ben ska justeras.

Operatörspanelen måste kunna beräkna hemmaläget för en flexapod.

Operatörspanelen ska kunna hämta önskade positioner och annan relevant information från

fil.

Ett av de ursprungliga kraven var att göra användargränssnittet mer användarvänligt och att lägga

till de funktioner som saknades i prototypen.. Prototypen behövde bli mer tilltalande för operatören.

Någon styrning av mätutrustning fanns inte. Prototypen använde sig av emulator som simulerade

mätningar på en flexapod. Användaren angav hur benlängderna skulle justeras i ett emulatorfönster.

Dessa justeringar skickades till CATIA, ett CAD-system, som hade en enkel modell av en flexapod

inladdad. Benlängderna och modellens geometri uppdaterades och den nya positionen för topplattan

kunde hämtas av emulatorn som sedan skickade detta vidare till operatörspanelen. På detta sätt

kunde prototypens korrekthet verifieras.

Kravet på att visa koordinatsystem var till viss del redan implementerat. Position och riktning

visades med sex värden för några ramar. Med den fortsatta utvecklingen skulle det bli aktuellt att

visa fler ramar. Dessutom fanns önskemål om att visa ramarna grafiskt i flexapodvyn, något som

inte blev implementerat under arbetets gång.

Att kunna hantera pickuper på flexapoderna kräver att en transformation kan läsas in från fil.

Transformationen anger hur pickupen, som är en led, är beskaffad.

En översiktsvy fanns redan i prototypen men den kunde göras betydligt mer tilltalande och det

saknades möjligheter att manipulera vyns utsiktspunkt med knappar. Det ansågs också behövas en

(18)

översiktsvy som visar alla flexapoder i en uppställning och vilken flexapod som är vald för tillfället.

Benlängdsfelen visades med staplar i prototypen men det fanns en önskan om att den skulle utökas

med olika färger beroende på felets storlek. En skala som anpassar sig efter staplarnas längder

visade sig också vara nödvändigt.

Inställningen av hemmaläge och läsning av data från fil, t.ex. transformationer för pickuper och

önskade inställningar för varje flexapod, behövde implementeras.

4.2 Det ursprungliga användargränssnittet

Prototypen bestod av två delar - en operatörspanel och en emulator. Här följer två avsnitt som visar

hur dessa såg ut och hur de fungerade.

4.2.1 Operatörspanel

Illustration 2 visar hur operatörspanelen såg ut i prototypen.

Längst upp till vänster kunde användaren välja vilken flexapod som skulle justeras och vilken

pickup som var monterad på flexapoden, men funktionaliteten för dessa var ännu inte

implementerad. Under detta är två knappar placerade. Den ena med texten 'Rough' var tänkt att

användas för grovjusteringen och knappen med texten 'Fine' när användaren påbörjade

finjusteringen. Det var tänkt att operatörspanelen skulle ha två lägen för respektive typ av justering

men det övergavs senare. Den enda skillnaden mellan grov- och finjustering är att operatören

använder sig av olika data och dessa kan presenteras samtidigt i operatörspanelen. Den tredje

knappen med texten 'Home Position Preset' memorerade flexapodens hemmaläge förutsatt att

Illustration 2: Opertörpanelens utseende i prototypen

(19)

flexapoden befann sig i hemmaläget. Nere i vänstra hörnet visades benlängdsfelen med staplar.

Själva staplarna syns inte i illustration 2. Uppe till höger syns flexapodvyn med tillhörande

rullningslister för att kunna rotera vyn. Under denna vy kunde användaren se position och riktning

för några utvalda ramar.

4.2.2 Emulator

Illustration 3 visar hur emulatorfönstret såg ut i prototypen.

I prototypen var emulatorfönstret applikationens huvudfönster och för att visa operatörspanelen

tryckte användaren på knappen 'Control Panel' nere till höger. De viktigaste elementen i fönstret var

knapparna + och - för respektive ben. Mellan dessa knappar visades benens längder. Uppe till

(20)

vänster fanns en ruta i vilken användaren kunde ange hur mycket han eller hon ville förändra

benlängden med ett tryck på + eller - knapparna. Upp till höger syns ramen för verktygshållaren.

Ville användaren återgå till hemmaläget tryckte han eller hon på knappen 'Go to Home Position'.

4.3 Benlängdsfel

Redan i prototypen användes ett stapeldiagram för att visa benlängdsfel. Detta sätt att förmedla

benlängdsfel har fungerat bra i tester så det bibehölls under arbetets gång. Den ursprungliga

lösningen hade dock vissa problem. Ett av problemen var att hela fönstret ritades om efter varje

uppdatering, vilket skedde tio gånger i sekunden. Resultatet blev att allt i fönstret flimrade på ett

irriterande sätt. Upphovet till detta flimrande fanns i denna programkod som är tagen från

prototypen.

FillColor = vbRed

FillStyle = vbSolid

Refresh

ShapeHeight = CInt(B1diff * k)

originY = 7440

Line (originX, originY) - (originX + ShapeWidth, originY -

ShapeHeight), vbRed, B

Programkoden visar hur uppdateringen sker av stapeln för ben ett. De andra staplarna uppdateras på

exakt samma sätt. De första två raderna tilldelar värden till två variabler som styr utseendet på

kommande ritningar. I detta fall ska det som ritas fyllas med en solid röd färg. Därefter anropas

Refresh som uppdaterar hela fönstret, det anges nämligen i fönstrets kontext. Detta är anledningen

till att fönstret flimrar. Efterkommande kod ritar stapeln för ben ett. Syntaxen för metoden Line är

ovanlig. Det första argumentet ska bestå av två koordinater separerade med ett minustecken. Trots

att metoden har namnet Line så kan den användas för att rita rektanglar. Ett B som tredje argument

anger att en rektangel ska ritas.

För att bli av med flimret krävdes en lösning som inte behövde rita om hela fönstret. Visual Basic

Illustration 4: Stapeldiagrammet när

det fortfarande ritades med egen

kod.

(21)

har ett antal grafiska element som kan placeras ut i ett formulär, ett annat ord för fönster. Ett av

dessa element är 'Shape' och det ritar ut en geometrisk form där elementet har placerats ut i

formuläret. Vad för typ av form som ska ritas bestäms med elementets egenskaper. Lösningen blev

att använda en rektangulär 'Shape' och att placera ut sex stycken sådana i formuläret. Deras höjd

sattes till noll och placerades på nollstrecket. För varje ny omgång benlängder så manipulerades

rektanglarnas utsträckning dynamiskt under körning. Denna implementation löste problemet med

flimret eftersom endast det nödvändiga ritades om, dvs. rektanglarna själv och eventuell bakgrund

som behövde ritas om med nytt innehåll.

Det visade sig emellertid att implementationen hade flera brister. Bland annat så förändrades inte

staplarnas färger beroende på benlängdsfelens storlek, men det var en enkel sak att rätta till. Ett

allvarligare problem var att skalan i stapeldiagrammet inte anpassade sig efter benlängdsfelens

storlek. Med en fix skala blev staplarna för små vid den slutliga finjusteringen, eller för stora vid de

första grovjusteringarna. Att implementera en skala skulle ha tagit mycket värdefull tid av arbetet.

Istället undersöktes ifall det fanns någon färdig komponent som hade den funktionalitet som

krävdes. Valet föll på komponenten MSChart därför att den medföljer Visual Basic och har just den

funktionalitet som krävdes. MSChart är en komponent som ritar olika former av diagram. Den kan

liknas vid diagramfunktionen i ett kalkylprogram. Tyvärr fanns det ingen officiell dokumentation av

MSChart att tillgå, men det visade sig att komponentens programmeringsgränssnitt, bestående av

både variabler och funktioner, hade intuitiva namn som erhölls via Intellisense i Visual Basic. De

grundläggande uppgifterna om programmeringen av MSChart erhölls från Krishnaswamy (2006).

Med MSChart fick stapeldiagrammet nu en skala som anpassade sig efter benlängdsfelen och

staplarna fick nu också olika färg beroende på felens storlek.

Anpassningen av skalan var i början gjord så att det största och minsta värdet bland alla sex staplars

värden bestämda övre och undre gräns på skalan. Det skulle få den konsekvensen att operatören,

trots att benlängdsfelen minskar, inte får en tillräckligt tydlig signal om att benlängdsfelen faktiskt

har blivit mindre. Lösningen blev att låta stapeldiagrammets skala förändras i fasta steg när alla

benlängdsfel har passerat en undre gräns. Skalningen implementerades som en tillståndsmaskin där

skalorna utgör tillstånden. Två tabeller anger när skalningen ska ändras. Den ena anger den undre

gräns som måste passeras av alla benlängdsfel för att en mindre skala ska visas. Den andra anger

Illustration 5: Stapeldiagrammets utseende med komponenten

MSChart.

(22)

den övre gräns som måste passeras av alla benlängdsfel för att en större skala ska visas. De övre och

undre gränserna sattes på så sätt att det finns en hysteres i omslagen annars skulle mätbruset ge

upphov till snabba byten av skalor om ett benlängdsfel fluktuerar kring ett av gränsvärdena. Tabell

2 är en uppställning av de gränser som gäller i operatörspanelen.

Tillstånd

Skalans intervall

Undre gräns (mm)

Övre gräns (mm)

0

Varierar

1

-1

0,5

1,25

2

0,25

0,625

3

0,1

0,3125

4

0,05

0,125

5

0,025

0,0625

6

-

0,03125

Tabell 2: Gränser för skalning av benlängdsfel.

4.4 Flexapodvy

Redan i prototypen fanns en flexapodvy i användargränssnittet. Vyn hanterades då av en

komponenten KernelCAD från DInsight. Den har fungerat tillfredsställande under hela arbetet och

det har inte funnits någon anledning av ersätta den med något annat. Den funktionalitet som

flexapodvyn har blivit utökad med under arbetets gång är möjligheten att rotera vyn med rullister

och att zooma. Det fanns också önskemål om att ramarna som hanteras i operatörspanelen skulle

kunna visas i flexapodvyn på begäran men det blev aldrig implementerat.

KernelCAD används på följande sätt. Först designas en modell av en topplatta i CATIA och sedan

exporteras den till en VRML-fil. Sedan infogas två kopior av denna modell i en GLM-fil med

programmet Model Studio som ingår i KernelCAD. GLM-filen kan sedan laddas in med

komponenten i operatörspanelen. De två modellerna som finns i GLM-filen kan manipuleras

individuellt.

(23)

I den förbättrade versionen är den ena modellen orangefärgad och visar den önskade positionen.

Den är alltid placerad i mitten av vyn och rör sig aldrig. Den andra modellen är gråfärgad och visar

flexapodens nuvarande position för topplattan. Runt omkring vyn finns en vertikal och en

horisontell rullningslist. Dessa används för att navigera i vyn, närmare bestämt för att rotera kring

vyns origo där den grå modellen är placerad. Dessutom finns två knappar för att kunna zooma in

och ut i vyn.

Under grovinställningen så ska operatören titta på flexapodvyn. Målet för grovinställningen är att få

den orange och den gråa topplattan att överlappa varandra så mycket som möjligt. För att hjälpa

operatören ytterligare finns det även tillgång till siffror som anger hur stort felet är i X, Y och Z

utöver positionsfelet.

4.5 Översiktsvy

Syftet med översiktsvyn är att få en överblick över alla flexapoder som är uppställda och att se

vilken av dem operatören har valt att justera. Den valda flexapoden ska utmärka sig med en speciell

färg och eller något liknande kännetecken. När operatören har valt en flexapod att justera i

operatörspanelen ska översiktsvyn uppdateras så att den valda flexapoden utmärker sig. Möjligheten

att kunna navigera i vyn ska också finnas. Översiktsvyn fanns inte med i prototypen utan var något

som Kihlman, examensarbetets handledare, tyckte behövdes läggas till.

Kihlman föreslog att översiktsvyn skulle implementeras med 3DXML Player från Dassault

Systemes, samma företag som producerar CAD-systemet CATIA. 3D XML Player är ett program

för att visa modeller i filformatet 3DXML. 3DXML är ett XML-format för representation av

tredimensionella objekt. Filformatet är skapat av Dassault Systemes. Fördelen med att välja 3D

XML Player var att CATIA kan exportera sina CAD-ritningar till 3DXML. I 3D XML Player

medföljer en komponent som försökte placeras i operatörspanelens formulär men den var inte

kompatibel med Visual Basic så detta spår fick överges.

Istället provades KernelCAD. Den komponenten användes redan för flexpodvyn och var mycket

enkel att implementera. För att erhålla en fil som KernelCAD kunde läsa så exporterades modellen i

CATIA till en VRML-fil. Den laddades in i Modeling Studio som ingår i KernelCAD och sparade

modellen som en GLM-fil. Denna fil användes sedan av översiktsvyn i operatörspanelen.

(24)

Problemen var dock flera. Den modell som skulle visas i översiktsvyn var stor och komplex. Den

innehöll väldigt mycket geometri. GLM-formatet var inte lämpligt för så stora modeller med tanke

på att filen blev omkring 140 MiB stor. Det ska jämföras med VRML-filens 3 MiB. Dessutom var

prestandan mycket låg. Det tog 8 sekunder för översiktsvyn att uppdatera sin grafik efter en ändring

av utsiktspunkten. En annan lösning med högre prestanda behövdes.

Eftersom VRML-filer exporterades från CATIA undersöktes möjligheten att använda detta format

direkt i operatörspanelen. Det som efterfrågades var en komponenter som fungerar i Visual Basic 6

och som var fri från licenskostnader. Den enda komponent som kunde uppbringas var Cortona

VRML Client. Prestandan med Cortona var låg men betydligt bättre än KernelCAD. Uppdateringar

skedde på omkring sekunden. Eftersom inget bättre alternativ uppkom så behölls Cortona fram till

arbetets slutskede, då en ny lösning upptäcktes. Det var Kihlman som kläckte idén att placera 3D

XML Player på en webbsida som lades in i operatörspanelens användargränssnitt med en

internetkomponent. Med den lösningen höjdes prestandan betydligt jämfört med Cortona. Ett

kvarvarande problem med den här lösningen var att komponenten inte alltid startade som den

skulle. Orsaken till detta problem var inte känt vid arbetets avslutande.

4.6 Operatörspanelens utseende efter avslutat arbete

Koordinatsystem kan visas på två sätt i operatörspanelen. Det ena sättet är detsamma som i

prototypen. Då visas koordinatsystemens parametrar i vanliga textrutor. Varje textruta upptar en

liten plats i panelen och det innebär att fler värden kan visas samtidigt. Om operatören befinner sig

på ett större avstånd från, vilket ofta är fallet när operatören justerar flexapoden, så blir siffrorna för

små för att synas. Operatören kan därför låta panelen visa de viktigaste parametrarna i ett större

format.

Illustration 8: Översiktsvyn implementerad

med Cortona VRML Viewer.

(25)

Illustration 9 visar operatörspanelens utsseende när värden visas i vanliga textrutor.

(26)

Illustration 10 visar operatörspanelens utseende när värden visas i stort format.

(27)

5 Frame-klassen

Hanteringen av ramar är en mycket stor del av programvaran. Det är många ramar och

transformationer som hanteras. Koordinatsystemet måste också presenteras på olika format till

användaren. I prototypen utfördes transformationer med en funktion för matrismultiplikation från

ett kodbibliotek för matriser. Varje gång en ram skulle representeras numeriskt för användaren så

skrevs samma kod om och om igen.

För att abstrahera bort ramarnas matrishantering och förenkla hanteringen av ramar skapades

Frame-klassen. Det görs ingen skillnad på transformationer och ramar i koden, båda hanteras

likvärdigt av Frame-klassen. Namnet Frame (översätts till ram) är möjligen lite otydligt eftersom

klassen även hanterar transformationer.

En ram hanteras som en 4x4 matris internt, d.v.s. en homogen transform. Klassens metoder och dess

funktion förklaras kortfattat i tabell 3.

Namn

Beskrivning

copy

Returnerar en djup kopia av objektet.

getMatrix

Returnerar en djup kopia av objektets interna matris.

setMatrix

Tilldelar objektets matris samma värden som den medskickade matrisen.

getX

Returnerar transformationens förflyttning längs x-axeln.

getY

Returnerar transformationens förflyttning längs y-axeln.

getZ

Returnerar transformationens förflyttning längs z-axeln.

setOrientation

Bestämmer transformationens rotation med hjälp av eulervinklar.

getRotationX/Y/Z

Bestämmer transformationens eulervinklar.

setIdentity

Ger transformationen en obefintlig rotation och ingen förflyttning.

setTranslation

Bestäm transformationens förflyttning längs de tre axlarna.

inverse

Returnera inversen av transformationen.

transform

Transformera denna och en annan transformation med varandra

(matrismultiplikation).

multiply

Multiplicera transformationens matris med en 4x1 vektor.

(28)

6 Kommunikation med mätutrustning

I det här kapitlet beskrivs mätutrustningens funktion och kommunikationen

med den.

Flexapodens position mäts kontinuerligt under inställningsförfarandet.

Mätningen sker mot den mätprob som monterats på flexapoden, men det är en

typ av lasermätare som utför mätningen. Mätutrustningen går under namnet

Leicatracker.

Mätsystemet är laserbaserat. Mätpunktens relativa position mäts med

interferens. Denna mätprincip ger en mycket låg onoggrannhet men det

behövs en referenspunkt att utgå från. Leicatrackern har en funktion som gör

denna referenspunkt överflödig. Den har ett system som möjliggör absolut

mätning av avståndet till mätpunkten.

Punktens position beräknas tack vare mätinstrumentets riktningsbara

laserstråle. Den kan roteras både horisontellt och vertikalt. Mätinstrumentet

ser hela tiden till att laserstrålen följer prismat i mätproben och genom att

mätinstrumentet mäter laserstrålens riktning kan den med hjälp av avståndet

beräkna prismats position. Om riktningen behöver bestämmas, vilket behövs

med flexapoderna, så mäts den med en kamera på mätinstrumentet. Kameran

fotograferar ett antal IR-dioder på mätproben och kan med hjälp av dessa

bestämma mätprobens riktning.

Att programmera mätutrustningen är relativt enkelt tack vare ett

COM-gränssnitt som är mycket lämpligt att använda i Visual Basic. Följande steg

krävs för att använda mätinstrumentet.

1. Anslut till mätutrustningens datorsystem med IP-adress och portnummer.

ObjConnect.ConnectEmbeddedSystem("192.168.0.1", 700)

2. Meddelanden från mätdatorn ska komma som händelser.

ObjConnect.SelectNotificationMethod(LTC_NM_Event, 0, 0)

3. Hämta en referens till det synkrona gränssnittet.

Set ObjSync = ObjConnect.ILTCommandSync

4. Bestäm vilka enheter som ska rapporteras från mätutrustningen.

ObjSync.SetUnits(ES_LU_Millimeter, ES_AU_Radian,

ES_TU_Celsius, ES_PU_KPascal, ES_HU_RH)

5. Välj att mäta kontinuerligt i sex frihetsgrader.

ObjSync.SetMeasurementMode(ES_MM_6DContinuousTime)

6. Ange att mätvärden ska komma kontinuerligt var tionde millisekund tills mätningarna

avbryts.

ObjSync.SetContinuousTimeModeParams(10, 0, False, ES_RT_Box)

7. Starta mätningen.

ObjSync.StartContinuousProbeMeasurement

8. Mätvärdena inkommer asynkront till programmet och när sådana finns tillgängliga

signaleras en händelse - ObjSync_ContinuousProbeMeasDataReady. I den

funktionen kan de mottagna mätvärdena erhållas. Detta åstadkoms med tre funktioner

ObjConnect.GetData

Illustration 11:

Mätutrustningen -

en Leicatracker.

(29)

ObjConnect.ContinuousProbeDataGetHeaderInfo

ObjConnect.ContinuousProbeDataGetAt

9. Diverse andra händelser och fel som kan uppkomma asynkront hanteras med andra

återanropsfunktioner.

10. När mätningarna ska upphöra, avbryts mätningarna och anslutningen till mätutrustningen

kan brytas.

Flexapod_Control_Panel.ObjSync.StopContinuousMeasurement

Set Flexapod_Control_Panel.ObjSync = Nothing

Flexapod_Control_Panel.ObjConnect.DisconnectEmbeddedSystem

Set Flexapod_Control_Panel.ObjConnect = Nothing

(30)

7 Paketering

Mot slutet av arbetet ville Kihlman ha operatörspanelen paketerad som en körbar fil så att han

kunde installera programmet på en godtycklig dator. Med installationen av Visual Basic 6 medföljer

programmet 'Package and Deployment Wizard' (här förkortat PDW) som är framtaget för att

automatisera paketering av program skrivna i Visual Basic. Rätt snabbt så visar det sig att

programmet är föråldrat och omständligt att arbeta med. Den främsta anledningen till att inte

använda PDW är att paketeringen inte fungerar med KernelCAD. Komponentens DLL-filer

inkluderas inte i installationspaketet. För att lösa det problemet krävs speciella filer som inte

tillhandahålls av KernelCADs utvecklare. PDW är upplagt som en grafisk flerstegsguide med

grundläggande konfigurationsalternativ men utöver dessa krävs redigering av den genererade

skriptfilen.

Ett modernare och mer lättanvänt paketeringssystem behövdes. Helst skulle det vara kostnadsfritt.

'Nullsoft Scriptable Install System' (NSIS) uppfyller dessa krav. Källkoden är öppen och NSIS är

fritt tillgängligt och gratis. Dessutom har det använts i många mjukvaruprojekt (Users - NSIS,

2008). Tillvägagångssättet för att paketera något i NSIS är att skriva ett installationsskript med

kommandon som beskriver hur paketeringen ska gå till. Sedan kompileras skriptfilen. Under

kompileringen samlar NSIS ihop alla filer och genererar en körbar fil. Denna fil innehåller allt som

behövs för installationen.

För att ge en inblick i hur ett paketeringssystem fungerar och hur det har använts i detta arbete följer

här en kortfattad beskrivning av det väsentligaste i skriptfilen för operatörspanelen.

Till att börja med måste namnet på den genererade filen anges.

OutFile install.exe

Installationen får ett namn och den förinställda installationssökvägen anges.

Name "Flexapod Control Panel"

InstallDir "$PROGRAMFILES\Flexapod Control Panel"

Vad som ska visas under installation och avinstallation avgörs härnäst. Användaren ska kunna välja

installationssökväg och bevittna vad som installeras. Under avinstallationen ska användaren ha

möjlighet att bekräfta avinstallationen. Om avinstallationen godkänns ska användaren kunna se vad

som sker när avinstallationen pågår.

Page directory

Page instfiles

UninstPage uninstConfirm

UninstPage instfiles

Sedan kan själva installationen beskrivas. Det sker i en sektion. Filer kopieras med kommandot File

och den destination som ska gälla för kopieringen bestäms med kommandot SetOutPath. Med

växeln /r kan filer kopieras rekursivt.

Section

SetOutPath $INSTDIR

File "OPERATÖRSPANELEN (PROJEKTET).exe"

File "Flexapod Default.txt"

File "Pickups.txt"

SetOutPath $INSTDIR\models

File "models\Overview.3dxml"

File "models\test.glm"

(31)

SetOutPath $INSTDIR\redist

File /r redist\*.*

Ett speciellt kommando finns för att installera ett avinstallationsprogram.

WriteUninstaller $INSTDIR\uninstaller.exe

Några av de filer som installeras är komponenter som måste registreras i systemet. Detta har

hanterats på lite olika sätt för komponenterna. Först ut är MSChart. Filen som tillhör komponenten

kopieras till systemkatalogen (vanligen C:\Windows\System32\) eftersom MSChart kanske används

eller kommer att användas av något annat program.

!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED

redist\mschrt20.ocx $SYSDIR\mschrt20.ocx $SYSDIR /* MSChart */

De två andra komponenterna som behöver registreras är knutna till just den här applikationen och

därför installeras de i applikationskatalogen. Nu används kommandot RegDLL.

SetOutPath $INSTDIR\redist

RegDLL KerCADe.ocx /* KernelCAD */

RegDLL LTControl.dll /* Lecia interface */

Det sista som sker under installationen är att skapa genvägar i startmenyn. Sedan kan

installationssektionen avslutas.

SetOutPath $INSTDIR

CreateDirectory "$SMPROGRAMS\Flexapod Control Panel"

CreateShortCut "$SMPROGRAMS\Flexapod Control Panel\Flexapod

Control Panel.lnk" "$INSTDIR\OPERATÖRSPANELEN (PROJEKTET).exe"

CreateShortCut "$SMPROGRAMS\Flexapod Control Panel\Uninstall.lnk"

"$INSTDIR\uninstaller.exe"

SectionEnd

Avinstallationen behandlas på samma sätt. En sektion med namnet Uninstall blir automatiskt en

avinstallationssektion. Några vanliga kommandon i en avinstallationssektion är Delete som raderar

filer och RMDir som tar bort tomma kataloger (eller raderar dess rekursivt med växeln /r).

Operatörspanelens avinstallationssektion är skriven så här.

Section "Uninstall"

UnRegDLL $INSTDIR\redist\KerCADe.ocx

UnRegDLL $INSTDIR\redist\LTControl.dll

RMDir /r "$SMPROGRAMS\Flexapod Control Panel"

Delete "$INSTDIR\OPERATÖRSPANELEN (PROJEKTET).exe"

Delete "$INSTDIR\Flexapod Default.txt"

Delete "$INSTDIR\Pickups.txt"

Delete $INSTDIR\uninstaller.exe

RMDir /r $INSTDIR\redist

RMDir /r $INSTDIR\models

RMDir $INSTDIR

SectionEnd

Applikationer programmerade i Visual Basic 6 behöver ett antal exekveringsfiler för att

applikationen ska kunna exekveras. Dessa exekveringsfiler måste installeras på värddatorn av

installationsprogrammet om de inte redan är installerade. Som tur är behöver användaren av NSIS

(32)

inte bry sig särskilt mycket om detta eftersom det finns ett färdigt skript som hanterar installation

och avinstallation av exekveringsfilerna för Visual Basic 6. Allt som behövs i skriptfilen för detta är

ett par rader kod tagna direkt från manualen. Funktionen är implementerad av två stycken makron -

VB6RunTimeInstall och VB6RunTimeUnInstall.

(33)

8 Analys av resultat

Med tanke på de förutsättningar som har gällt under arbetets gång har det fallit väl ut. Det har t.ex.

inte funnits någon utomstående användare tillgänglig för att ge synpunkter på användargränssnittet.

Istället har arbetet fått gå på en magkänsla för hur användargränssnittet bör utformas. En del krav

uppkom under arbetets gång och var inte noggrant angivna i arbetets startskede. Paketeringen och

översiktsvyn kan nämnas som två exempel på detta.

Användargränssnittet har utvecklats och blivit informativt och fyller sin funktion. En möjlig

förbättring av användargränssnittet skulle vara att göra det mer konfigurerbart. Speciellt vad och när

uppgifter ska visas i operatörspanelen. Det nuvarande stapeldiagrammet som visar benlängdsfelen

fungerar mycket bra vid finjusteringen med sin skalningsfunktion. Även flexapodvyn har visats sig

fungera bra vid grovjustering när riktiga tester har utförts. Översiktsvyn, nu implementerad av 3D

XML Player i en internetkomponent, fungerar fortfarande inte klockrent och behöver mer

utveckling.

Kihlman uppskattade speciellt Frameklassen som hanterar transformationer. Den har gjort koden

mer lättläst och har bidragit till att centralisera hanteringen av ramar.

När detta skrivs är det inte beslutat om och i vilken utsträckning flexapoderna ska användas i

Neuronprojektet.

(34)

Referenser

Craig, John J. (1986). Introduction to robotics. Addison-Wesley Publishing Company

Krishnaswamy, Jayaram (2006). The Basics of Charting with the MS Chart Control [www]

<http://www.aspfree.com/c/a/Code-Examples/The-Basics-of-Charting-with-the-MS-Chart-Control/> Hämtat 2008-01-11

Thompson, Jan & Martinsson, Thomas (1991). Wahlström & Widstrands Matematiklexikon.

Wahlström & Widstrand

(35)

Bilaga A – Arkitekturbild av mjukvaran

A

n

n

d

ar

g

n

ss

n

itt

F

le

xa

p

o

d

C

o

nt

ro

l P

a

ne

l.f

rm

M

ät

u

tr

u

st

n

in

g

e

m

S

co

n.

b

a

s

Tr

an

sf

or

m

at

io

n

s-h

an

te

rin

g

F

ra

m

e

.c

ls

M

at

ris

-m

an

ip

u

la

tio

n

cM

a

th

L

ib

.c

ls

D

ia

lo

g

ru

ta

”Ö

p

p

n

a

fil

O

p

e

nF

ile

D

ia

lo

g

.b

a

s

F

le

xa

p

od

vy

G

ra

p

hi

cs

3

D

.b

a

s

F

le

xa

p

od

h

an

te

rin

g

F

le

xa

p

o

d

M

a

na

g

e

r.c

ls

P

ic

ku

p

h

an

te

rin

g

P

ic

ku

p

M

a

na

g

e

r.c

ls

D

ef

in

iti

on

a

v

ko

n

st

an

te

r

C

o

ns

ta

nt

s.

b

a

s

(36)

Bilaga B - Källkod

OPERATÖRSPANELEN (PROJEKTET).vbp

Type=Exe

Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\WINDOWS\system32\STDOLE2.TLB#OLE Automation

Reference=*\G{58DB560B-0186-11D5-BBB6-00508B35B332}#2.4#0#Leica\LTControl.dll#LTControl Type Library

Reference=*\G{420B2830-E718-11CF-893D-00A0C9054228}#1.0#0#..\..\WINDOWS\system32\scrrun.dll#Microsoft Scripting Runtime Reference=*\G{73130905-462A-11D1-A26A-0000F87546A1}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\DraftingTypeLib.tlb#CATIA V5 DraftingInterfaces Object Library

Reference=*\G{87EE735C-DF70-11D1-8556-0060941979CE}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\CATGitTypeLib.tlb#CATIA V5 GSMInterfaces Object Library Reference=*\G{14F197B2-0771-11D1-A5B1-00A0C9575177}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\InfTypeLib.tlb#CATIA V5 InfInterfaces Object Library Reference=*\G{0770412C-722E-11D2-8378-0060941974FF}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\KweTypeLib.tlb#CATIA V5 KnowledgeInterfaces Object Library Reference=*\G{0D90A5C9-3B08-11D1-A26C-0000F87546FD}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\MecModTypeLib.tlb#CATIA V5 MecModInterfaces Object Library Reference=*\G{E6BCB304-3260-11D4-9465-006094EB3826}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\NavigatorTypeLib.tlb#CATIA V5 NavigatorInterfaces Object Library

Reference=*\G{D8431606-E4B5-11D1-A5D3-00A0C95752ED}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\PartTypeLib.tlb#CATIA V5 PartInterfaces Object Library Reference=*\G{5065F8B6-61BB-11D1-9D85-0000F8759F82}#0.0#0#..\..\Program Files\Dassault

Systemes\B17\intel_a\code\bin\PSTypeLib.tlb#CATIA V5 ProductStructureInterfaces Object Library

Object={7D868ACD-1A5D-4A47-A247-F39741353012}#1.0#0; INKOBJ.DLL

Reference=*\G{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}#1.1#0#..\..\WINDOWS\system32\ieframe.dll#Microsoft Internet Controls Object={11B9E887-5331-431E-9348-BA3F6C1CB487}#1.3#0; KerCADe.ocx

Object={65E121D4-0C60-11D2-A9FC-0000F8754DA1}#2.0#0; MSCHRT20.OCX Object={EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}#1.1#0; ieframe.dll Form=MainWindow.frm

Form=Flexapod Control Panel.frm

Module=Public_Objects; Public_Objects.bas Class=cMathLib; cMathLib.cls Module=Graphics3D; Graphics3D.bas Module=ComProtocol; ComProtocol.bas Module=V5lib; V5lib.bas Class=PickupManager; PickupManager.cls Class=Frame; Frame.cls Class=cInifile; CINIFILE.CLS Class=FlexapodManager; FlexapodManager.cls Module=emScon; emScon.bas Module=Constants; Constants.bas Module=OpenFileDialog; OpenFileDialog.bas IconForm="MainWindow" Startup="Flexapod_Control_Panel" HelpFile="" Title="OPERATÖRSPANELEN (PROJEKTET)" ExeName32="OPERATÖRSPANELEN (PROJEKTET).exe" Command32="" Name="Emulatorn" HelpContextID="0" CompatibleMode="0" MajorVer=1 MinorVer=0 RevisionVer=0 AutoIncrementVer=0 ServerSupportFiles=0 VersionCompanyName="DELFOi" CompilationType=0 OptimizationType=0 FavorPentiumPro(tm)=0 CodeViewDebugInfo=0 NoAliasing=0 BoundsCheck=0 OverflowCheck=0 FlPointCheck=0 FDIVCheck=0

(37)

UnroundedFP=0 StartMode=0 Unattended=0 Retained=0 ThreadPerObject=0 MaxNumberOfThreads=1 DebugStartupOption=0 [MS Transaction Server] AutoRefresh=1

(38)

Flexapod Control Panel.frm

VERSION 5.00

Object = "{11B9E887-5331-431E-9348-BA3F6C1CB487}#1.3#0"; "KerCADe.ocx" Object = "{65E121D4-0C60-11D2-A9FC-0000F8754DA1}#2.0#0"; "mschrt20.ocx" Object = "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}#1.1#0"; "ieframe.dll" Begin VB.Form Flexapod_Control_Panel

Caption = "Flexapod Control Panel" ClientHeight = 11010 ClientLeft = 165 ClientTop = 450 ClientWidth = 15240 LinkTopic = "Form2" ScaleHeight = 11010 ScaleWidth = 15240

Begin VB.Frame FrameCartesianError BackColor = &H80000001& Caption = "Leg Error" ForeColor = &H0000FF00& Height = 105 Left = 150 TabIndex = 63 Top = 5670 Width = 7815 Visible = 0 'False Begin VB.Label DeltaLeg6

Alignment = 1 'Right Justify BackColor = &H00000000& Caption = "-0000.0000" BeginProperty Font Name = "Arial" Size = 36 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 735 Left = 3780 TabIndex = 132 Top = 3780 Width = 3735 End

Begin VB.Label Label45

BackColor = &H00000000& Caption = "Leg 6 (+/-)" BeginProperty Font Name = "Arial" Size = 36 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 735 Left = 150 TabIndex = 131 Top = 3780 Width = 3495 End

Begin VB.Label DeltaLeg1

Alignment = 1 'Right Justify BackColor = &H00000000& Caption = "-0000.0000" BeginProperty Font Name = "Arial" Size = 36 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False

(39)

Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 735 Left = 3750 TabIndex = 130 Top = 180 Width = 3735 End

Begin VB.Label DeltaLeg2

Alignment = 1 'Right Justify BackColor = &H00000000& Caption = "-0000.0000" BeginProperty Font Name = "Arial" Size = 36 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 735 Left = 3750 TabIndex = 129 Top = 900 Width = 3735 End

Begin VB.Label DeltaLeg3

Alignment = 1 'Right Justify BackColor = &H00000000& Caption = "-0000.0000" BeginProperty Font Name = "Arial" Size = 36 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 735 Left = 3750 TabIndex = 128 Top = 1620 Width = 3735 End

Begin VB.Label DeltaLeg4

Alignment = 1 'Right Justify BackColor = &H00000000& Caption = "-0000.0000" BeginProperty Font Name = "Arial" Size = 36 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 735 Left = 3750 TabIndex = 127 Top = 2340 Width = 3735 End

Begin VB.Label DeltaLeg5

Alignment = 1 'Right Justify BackColor = &H00000000& Caption = "-0000.0000" BeginProperty Font Name = "Arial" Size = 36 Charset = 0

References

Related documents

De pekar på Östergötland och menar att de lyckades korta köerna när man införde vårdval 2013, men att hörselvården blivit betydligt sämre!. Bland annat pekar man på att

Fram till 2030 förväntas den totala kostnaden för detta uppgå till 5 200 miljarder yen (434 miljarder svenska kronor) för elnät vilket kan jämföras med 2 700–3 400 miljarder

Det hade inte alls varit meningen att hon skulle anlända så sent men när hon väl stått där med resväskan i Helenas hall, så redo att säga adjö som hon kunde bli, hade det

Ekologisk mjölkproduktion med lång erfarenhet av att bevattna vall, oljeväxter och spannmål med vatten från Vänern. Bevattningen har sitt ursprung från 1976-77 då

– I vissa provinser får flickor inte ens gå i skolan eller till moskén för att be, och där skulle en flicka aldrig få träna boxning, säger Sharifi.. tre gånger i veckan

Han har också band till republikanernas internationella institut, IRI, som får stora anslag av USAID inte bara för att bidra till att återfå kontrollen över Kuba utan

Läroplanen betonar dessutom att elever ska fostras till tolerans samt förmedla medmänsklighet och solidaritet (Lgr11:7; Lgy11: 5) Föreliggande studie utgår från skolans

Några chefer på högre nivå beskrev att det kan vara svårt att stå fast vid dessa ambitioner (ibid.). Något som blir viktigt för att underlätta i ett arbete som chef är att