System/produkt designdokument for Danish Rox



Relaterede dokumenter
Projekt: I4PRJ4 Dato: 18/ Titel: Kravspecifikation for Danish Rox

Database for udviklere. Jan Lund Madsen PBS10107

IAI Quick Start Guide

PID2000 Archive Service

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Arduino Programmering

Danish Rox. Hovedrapport. vejleder: Steen Fredborg Jacob Arnvel Viet Vu Anders Damkjær Mikael Syska 06122

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Microcontroller, Arduino

Arkitekturdokument for Cruise Control

Ruko SmartAir. Updater installation

UPLOAD. Af Database og Website til Skolens Server

Wahlberg Surtitle Display

Opsætning af MobilePBX med Kalenderdatabase

Systemair Connect. Opsætning

Vejledning til Teknisk opsætning

Advanced Word Template Brugermanual

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Brugervejledning for Microstation til OpenSceneGraph konverter

1. Programmet downloades.

Kom godt igang med Inventar registrering

Introduktion til OPC Access

Svendeprøve Projekt Tyveri alarm

Indholdsfortegnelse for kapitel 3

QUICK MANUAL BRUGERNAVN: ADMIN PASSWORD: APP: SMARTEYES PRO PORT: SecVision - Quick Manual v1.0

EasyIQ Opdatering > 5.4.0

03/ PW xxxxxdk BETJENINGSVEJLEDNING. SKIOLD FlexMix PC software Version 2.34

Software Dokumentation

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Udlæsning af stregkodefil til scanneren 1. Opret mappen pdt på C-drevet (c:\pdt).

Indholdsfortegnelse. Side 2 af 20

Gem dine dokumenter i BON s Content Management System (CMS)

Installation af Point Yomani terminal

Delfi Connect. Bruger vejledning 1. TILSLUTNING INSTALLATION MENUSTRUKTUR...4

Installation og Drift. Aplanner for Windows Systemer Version

ITWIN1. Afsluttende projekt. PhotoDays. Benjamin Sørensen (02284) Tomas Stæhr Berg (03539)

Delphi og Databaser for begyndere

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet.

Start af nyt schematic projekt i Quartus II

OPC Access 3.0 opdatering via Stored Procedure

Oktober 2013 HLG/XIGA. Opstartsvejledning ATS Engros 1/12

Programmeringseksempel til CX/IPC

NVR Client system. Bruger Manual. SuperVision Alarmteknik ApS Cedervej 2, 8462 Harlev J

DMX styring med USB-interface

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

Efter installation af GEM Drive Studio software fra Delta s CD-rom, skal hoved skærmbilledet se således ud: (koden til administrator adgang er: admin)

Installation af Oracle 10g Release 2 database

smart-house Web-Server Manual smart-house Web-Server Manual 1 of 15

Indhold. 1 Indledning Kompatible browsere Log ind i Umbraco Content-delen Indholdstræet... 4

Kravspecifikation For. Gruppen

I denne manual kan du finde en hurtig introduktion til hvordan du:

Microcontroller, Arduino

IFC Egenskaber. Mohammad Hussain Parsianfar s BYG DTU

OrCAD Capture TCL IDE med Eclipse

MODERNISERINGSSTYRELSEN ØSLDV WINDOWS SERVICE DOKUMENTATION, INSTALLATION OG KONFIGURERING AF ØSLDV/RAY WINDOWSSERVICE

Kom godt igang med Inventar registrering

Indholdsfortegnelse for kapitel 2

Vejledning i brug af dli dokumenthåndteringssystemet til virksomheder

RefWorks en vejledning fra UCL Biblioteket. Indholdsfortegnelse

FORCE Inspect Online Manual v FORCE Inspect Online Manual. 1 af 18

LW313 Sweex Wireless 300N Adapter USB

LiveConnect CDS Installationsvejledning

SIMS Active Directory Service 2.5 Quick Guide

Netværk & elektronik

Indholdsfortegnelse. EasyIQ IDM 5.4 Brugermanual

Generelt gælder det at SQL serveren skal understøtte SQL Authentication (Mixed mode) da SIMS Serveren kommunikerer gennem en SQL bruger.

Installationsguide til SAP Business One 2005 SP1 (SBO 2005)

Indledning. MIO er optimeret til Internet Explorer. Læs endvidere under Ofte stillede spørgsmål.

Guide til Umbraco CMS

EasyRun En løbers bedste ven

HELLO INSTALLATIONS GUIDE - DANSK RACKPEOPLE

Digital skriftlig aflevering med Lectio Censormodul Stedprøver installationsvejledning

Programmeringseksempel tl BCxxxx (Seriel)

IDAP manual Emission

Manual til at arbejde med POI på Garmin GPS.

Object-Relational Mapping

Datatransport installationsvejledning

Indledning. På de følgende sider vises, primært i tegneserieform, lidt om mulighederne i PC-AXIS for Windows.

NT PDC Udarbejdet af Kenneth Dalbjerg

Microsoft Dynamics CRM 2013

Umbraco installationsvejledning

Dokumentation. Udbyder : sms1919.dk Service : sms-grupper Static FBML Facebook. : Facebook Integration med sms-grupper.

Alle dip 1 7 sættes til On for at opnå stand-alone operation fra PC.

Databaseadgang fra Java

Updater KINO. Opsætning og installation

DATABASE - MIN MUSIKSAMLING

Opstartsvejledning ATS aktørudgave

MyArchive.kb.dk Selvarkivering af s

Automatisk Vandingssystem

UniLock System 10. Manual til Integration med Salto adgangskontrol (RW Pro) Projekt PCS Version 1.0 Revision

PentaCon C5 External Storage Manager

Opsætning af brugere og temaer i GIS4Mobile

ViKoSys. Virksomheds Kontakt System

2x50 ETHERNET MODUL. RS485 slave med Ethernet-IP. Gælder for: Program nr.: AUXSLAVE v1 Dokument nr.: 0422md2x50-2v1 Dato:

Citrix CSP og Certificate Store Provider

Billion. Hotfix for BIPAC 5200G Serien & Windows XP Service Pack 3. Revision 1.0DK. Dato: 22 maj, Side 1 af 1. Revision: V1.

Bruger Manual PC Valtronics Udendørs Kamera - Windows system

Westermo GDW-11 GSM Modem forbindelse til CXxxxx

GeoGIS2020. Installation. Udkast. Revision: 1 Udarbejdet af: BrS Dato: Kontrolleret af: Status: Løbende Reference: Godkendt af:

DRFLive - dynamisk visning af resultater fra DRF Stævnesystem

Transkript:

System/produkt designdokument for Danish Rox Dansk Beton

Revisions historie Dato Version Beskrivelse Forfatter 2009-12-18 1.0 Her blev vores rapport helt færdig. Gruppe 2 0

Indholdsfortegnelse 1. INTRODUKTION... 3 1.1 Formål og omfang... 3 1.2 Referencer... 3 1.3 Definitioner og forkortelser... 3 1.4 Dokumentstruktur og læsevejledning... 4 1.5 Dokumentets rolle i en iterativ udviklingsproces... 5 2. SYSTEM OVERSIGT... 6 2.1 System kontekst... 6 2.2 System introduktion... 8 3. SYSTEMETS GRÆNSEFLADER... 9 3.1 Grænseflader til person aktører... 9 3.2 Grænseflader til eksterne system aktører... 11 3.3 Grænseflader til hardware aktører... 12 3.4 Grænseflader til eksterne software aktører... 12 3.4.1 Fra usbc.dll til C# kode... 12 3.4.2 Vægt... 15 4. LOGICAL VIEW... 16 4.1 Doxygen Implementering... 16 4.2 Doxygen klasse dokumentations eksempel... 18 4.3 For at se dokumentationen om klassen: Model.User.... 19 4.4 Doxygen er dejlig... 21 5. Developmentview... 22 5.1 Oversigt over systemkonfigureringer... 23 5.2 Oversigt over systemkonfigurationer... 24 5.3 Systemkonfigureringer... 24 6. PROCESS VIEW... 25 6.1 Trådkommunikation... 25 6.2 Oversigt over processer... 26 7. PhysicalView... 27 7.1 Komponentbeskrivelser... 29 7.1.1 Database... 29 7.1.2 Vægt... 33 7.1.3 Robot... 35 7.1.4 GUI... 36 8. SCENARIOS VIEW... 38 8.1 Data model... 39 8.2 Implementering af persistens... 39 9. GENERELLE DESIGNBESLUTNINGER... 40 9.1 Arkitektur mål og begrænsninger... 40 9.2 Arkitektur mønstre... 40 1

9.2.1 StrategyPatterns... 40 9.2.2 Patterns anvendt i robot dll.... 41 9.2.3 ObservableCollections... 42 9.2.4 IChanged interface... 42 9.2.5 IDetailsName interface... 42 9.2.6 PluralNameAttribute... 42 9.3 Generelle brugergrænsefladeregler... 43 9.4 Exception og fejlhåndtering... 43 9.5 Implementeringssprog og værktøjer... 43 9.6 Implementeringsbiblioteker... 44 10. STØRRELSE OG YDELSE... 44 11. Oversættelse... 45 11.1 Oversættelse og linkning... 45 11.1.1 Kompilering af TheClawInterface.... 45 11.2 Kompilering og programmering af ATMega16... 45 11.3 Installation... 45 11.3.1 Prerequirements... 45 11.3.2 Installation af Database... 45 11.3.3 Installation af TheClawInterface... 45 12. KØRSEL... 46 12.1 Kørsels-hardware... 46 12.2 Kørsels-software... 46 12.3 Start, genstart og stop... 47 12.4 Fejludskrifter... 47 12.4.1 Fejludskrifter til robot dll.... 47 13. HENVISNINGER... 48 2

1. INTRODUKTION 1.1 Formål og omfang Dette er designdokumentet for projektet Danish Rox. Designet har taget udgangspunkt i opstillingen for Scorbot ER-4u med tilhørende Controllerbox, transport bånd, sensor og vægt. Dette dokument tjener formålet at give læseren et dybdegående indblik i de beregninger og metoder, der er blevet brugt til at udvikle dette projekt. Der vil i dette dokument blive redegjort for de designvalg vi har truffet i løbet af projektudviklingen. De valg vi har truffet vil blive uddybet. Der vil i stort omfang blive henvist til dette dokument fra hovedrapporten. Ligeledes vil der i dette dokument blive henvist til kravspecifikationen. Dette dokument skal derfor vurderes sammen med andre dele af projektdokumentationen. Dokumentet vil tydeligt fremstå meget teknisk, derfor forudsætter forståelse af indholdet, et indgående kendskab til teori og praktisk erfaring med projekter at denne type. Vi opfatter projektet som et produkt udviklet til Scorbot ER-4u. 1.2 Referencer - Kravspecifikation for DanishRox fra firmaet Dansk Beton 1.3 Definitioner og forkortelser Brugte forkortelser: I4PRJ4: Ingeniørhøjskolen Århus Projekt 4 Grp. 2: Styringsgruppen for Software Udvikling til projektet HW: Hardware SW: Software UML: Unified Modeling Language GUI: GraphicalUser Interface KISS: Keep It Simple and Stupid 3

1.4 Dokumentstruktur og læsevejledning Til at beskrive arkitekturen for vores projekt har vi valgt at benytte 4+1 ArchitectualView Model. Modellen bruges til at beskrive arkitekturen for SW systemer. De forskellige views bruges til at beskrive systemet fra flere vinkler. De 4 views er Logical view, Development view, Process view og Physical view. Det sidste view i modellen, +1 view, bruges til at beskrive systemet eller funktioner heri ved hjælp af use cases. Figure1 - Logicalview omhandler systemets funktionalitet for slutbrugeren. Ofte beskrevet ved hjælp af UML diagrammer som f.eks. klassediagrammer. - Developmentviewviser systemet fra programmørens synsvinkel. Det bruger UML komponent diagrammer til at beskrive systemets komponenter. Der bruges samtidig UML pakke diagrammer i dette view. - Processview omhandler det dynamiske aspekt af systemet. Heri forklares hvorledes systemets processer kommunikere med fokus på runtime som f.eks. skalerbarhed og ydeevne. Til at beskrive dette view benyttes aktivitets diagrammer. - Physicalview beskriver systemet fra ingeniørens synspunkt. Dette view er bedre kendt som Deploymentview og beskriver systemets opstilling, når det er færdigt udviklet og opstillet ude hos slutbrugeren. Der bruges UML deployment diagrammer 4

til at beskrive dette view. - Scenarios beskriver arkitekturen ved hjælp af use cases, eller scenarier, som bliver det femte view. Scenarierne beskriver sekvenser mellem objekter samt processer. Her bruges UML use case diagrammer til at beskrive dette view. 1.5 Dokumentets rolle i en iterativ udviklingsproces Der bliver løbende i dette projektforløb taget noter til de valg og de diskussioner vi har haft angående udviklingen af systemet. De enkelte designmæssige valg vil blive uddybet og vurderet i dette dokument. De enkelte afsnit i dette dokument vil løbende blive udfyldt i udviklingsprocessen. 5

2. SYSTEM OVERSIGT Her henvises til kravspecifikationen punkt 2.1 systembeskrivelse og punkt 2.1.1 systemoversigt 2.1 System kontekst Nedenstående figur viser aktørerne Bruger/Administrator, GUI, Vægt, Robot/Controllerbox, Transportbånd/Sensor, Keyboard/Mouse og VoiceDetector i et aktør kontekst diagram. Hvorledes de enkelte aktører interagere er uddybet i nedenstående MMI figur. class UC proj... User/Admin System GUI VoiceDetector Weight Keyboard/Mouse Robot/Controllerbox Conv eyerbelt/sensor Figure2 Nedenstående figur viser MMI (Man Machine Interface) til de aktører der anvender systemet. 6

Figure3 Brugeren er hoved aktøren i vores udviklede system. Brugeren logger på systemet og manipulerer med GUI vha. input devices som Keyboard, Mouse samt VoiceDetector. Når der bliver logget på systemet, brugt input devices eller der bliver ændret i værdierne i database, vil disse ændringer/handlinger blive logget i database. Samtidig vil der blive logget data på et BatchJob, når brugeren vælger at starte et. I gennemkørselen af et BatchJob anvendes først Conveyorbelt og Sensor. Herefter måler robotten siderne på elementet og flytter dette til Weight. Herefter logges oplysningerne om de enkelte elementer ligeledes i database. 7

2.2 System introduktion Systemets formål er at automatisere en manuel proces. Dette sker ved implementeringen af Scorbot ER-4u robotten samt programmel, der afvikles på en PC. Denne gør det muligt for en burger at styre samt at programmere robotten, til at udføre specifikke operationer, inden for robottens rækkevidde. De komponenter, som vores system består af, er beskrevet i punkt 2.1. Hovedfunktionaliteten består i at indsamle informationer og dimensioner om de elementer der placeres på transportbåndet, og efterfølgende på vægten, samt at placere disse i de korrekte opbevaringsrum. Informationerne og dimensionerne på disse elementer skal samtidig registreres, i den dertil udviklede database, i specifikke logs. Der vil på PC en være udviklet en GUImed henblik på brugervenlighed og på at minimere antallet af klik for at nå til målet. Ved hjælp af GUI en kan brugeren se logs hvis der skulle være sket nogen fejl i systemet. Brugeren kan desuden redigere users, robots, batch jobs og batch job task positions. Desuden vil det, vha.voicedetectoren, være muligt via stemmestyring at starte og stoppe et BatchJob. 8

3. SYSTEMETS GRÆNSEFLADER I dette afsnit beskrives grænsefladerne for brugere af systemet GUI. 3.1 Grænseflader til person aktører Bruger tager initiativ til at logge på PC en, åbne og browse i de forskellige logs, oprette Batch Jobs samt at aktivere og manipulere med robotten Scorbot ER-4u. Figure4 - Screenshot af GUI main Systemet har en grafisk brugergrænseflade som afvikles på PC. Den grafiske brugergrænseflade vil indeholde følgende informationer: 1. Log in window Figure5 - loginwindow 2. Hoved window The Claw Interface indeholder menu bar med: a. File Figure6 b. Robot 9

Figure7 c. User Figure8 d. BatchJob Figure9 e. Log 10

Figure10 1. Log Level Figure11 2. Types Figure12 f. Help Figure13 3.2 Grænseflader til eksterne system aktører I nedenstående tekst stykke beskrives den kommunikationsprotokol der bruges for at kommunikere med vores database. Til at kommunikere med SQL serveren, har vi brugt LINQ (LanguageIntegrated Query) lag. LINQ laver forarbejde for os, og fungerer som et klasse-agtigt interface til vores database. Det gør det nemmere at opdatere databasen, f.eks. ved INSERT, UPDATE, DELETE. Udover er det nemmere at detektere fejl når man ændre i sine tabeller i databasen. Det man gør er at slette de gamle tabeller, indsætter de nye og compilere koden. Gør man dette får man en compilerings fejl. Dermed er det mere sikker kode, fordi compileren kan fortælle os 11

om vores fejl og derfor skal vi ikke køre så mange tests og sørge for alle mulige undtagelses/exception håndtering. 3.3 Grænseflader til hardware aktører Beskrivelse af kommunikationen mellem de enkelte HW enheder og hvordan systemet er koblet sammen. - Scorbot ER-4u robotten er forbundet til Controller USB indgang 9 (Robot 62-pin D- type highdensityconnector) - USB indgang på PC er forbundet til Controller USB indgang 8 (Robot 62-pin D-type highdensityconnector) - Controller USB powerkabel er forbundet til indgang 8 (Power Line 110/220VAC socket) - Sensoren er forbundet til controller USB via indgang 10 (Digital Input / Output terminals terminal 1, samt opencollecter + og -). - Conveyorbelt (transportbåndet) er forbundet til Controller USB via AXIS 8 (Axes 7 and 8 driver D9 connectors (separate for eachdevice)) indgangen. - Vejecellen er forbundet til operationsforstærker AD620 som er forbundet til STK500 KIT som er forbundet til RS232 som er forbundet til PC en. - LCD Display AVR181 er forbundet til STK500 KIT - Der er brugt seriel com port til at kommunikere mellem PC og vejecellen, og data sendes via et RS-232 kabel 3.4 Grænseflader til eksterne software aktører Beskrivelse af kommunikationen i SW enheder. 3.4.1 Fra usbc.dll til C# kode Til robot armen Scorbot-ER 4U er der leveret en dll, usbc.dll, som man kan kode op imod for at lave sin egen software til styring af robotten. Denne dll komponent er skrevet i c++. Udfordringen med at bruge den, har været at få C#, som er managed kode til at snakke sammen med en c++, som er unmanaged kode. Udfordringen her ligger i at når vi eksempelvis opretter en pointer i C# og den peger på noget 12

data som bliver leveret af c++, kan garbagecollectoren ikke se at pointeren peger på noget. Dette betyder at, hvis der ikke bliver gjort noget, vil pointeren blive garbagecollectet. Dette har vi løst ved at bruge Pinvoke (Platform Invoke). Pinvoke er den del af CLR en - CommonLanguageRuntime. Disse metoder kan sørge for at få denunmanaged kode til at snakke sammen med den managed del vi laver i C#.net. Der findes en del funktioner under Pinvoke som vi har brugt f.eks. DllImport. DllImport er den metode vi anvender til at importere funktioner fra usbc.dll en. For at kunne bruge denne funktion skal man kende de entrypoints der er til dll en. Disse kan findes ved at åbne sin VisualStudiocommandopromt naviger hen til dll en. Når du står i biblioteket hvor dll en ligger skriv: dumpbin /exports usbc.dll > entrypoints.txt. Så vil alle entrypoints blive eksporteret til.txt filen. CallingConvension er den måde usbc.dll en vil blive kaldt på. Når disse funktioner er kaldt, kan man kalde sin funktion i dll en. Ud fra dokumentationen kan vi se at vores initialisering tager 4 parametre og herved kan vi bygge alle de funktioner op vi skal bruge. Alle metoder bliver oprettet som statiske eksterne funktioner. [DllImport(C:\\USBC\\USBC.dll, EntryPoint = "?Initialization@@YAHFFP6AXPAX@Z1@Z", CallingConvention = CallingConvention.Cdecl)] publicstaticexternbool InitializationDll(short smode, short ssystemtype, CallBackInitPtr fninitend, CallBackErrorPtr fnerrmessage); Efterfølgende lavede vi en wrapperklasse efter adapterpattern ideen, til at pakke kaldenetil robotten ind i. publicvoid InitializeRobot() { DllKald.InitializationDll(1, 0, initptr, errorptr); } Alle disse metoder bliver i sidste ende publiceret i et interface så det er nemt for den der skal snakke sammen med robotten at se hvilke metoder der er tilgængelige. Eksempelvis når vi skal lave vores simulator kan vi bare implementere det interface vi har lavet og så bør alle klasserne være implementeret. Så alt i lagene ovenover fungere, når interfacet er implementeret. voidinitializerobot(); Dette løser problemet med at få funktionerne ind i vores program, det andet problem der skal løses er den managed/unmanaged udfordring. Dette løses med Marshal keywordet. Med 13

marshal.allocglobal laver man en portionunmanagedramplads som kan anvendes uden at garbagecollectoren kommer og tager det. Ieksemplet neden for er det en stump på størrelse med et ConfigDataobject. Her efter laver vi så en pointer til configdata som vi kan bruge til at sende over til robotten. Efterfølgende vil robotten kunne returnere data til den lille stump unmanagedramplads, hvor vi så kan hente dataene fra. publicintptr InitConfigData(ConfigData configdata) { IntPtr configdataptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ConfigData))); Marshal.StructureToPtr(configData, configdataptr, false); returnconfigdataptr; } Til sidst når vi er færdig med at bruge vores unmanagedramplads er det vigtigt at vi deallokerer den igen så vi ikke fårmemoryleaks i vores program. Dette gøres ved at kalde Marshal.FreeHGlobal, herved bliver hukommelsen deallokeret igen. publicvoid ReleaseStructs() { Marshal.FreeHGlobal(configDataPtr); } I USBC.dll en er der mange metoder man kan importere. Vi har valgt dem vi syntes var mest interessante for vores system. De metoder vi har valgt at implementere er som følger. WatchMotion() GetCurrentPosition() CloseWatchDigitalInp() WatchDigitalInp() DefineVector() Teach() MoveLinear() CloseUSBC() Stop() Initialization() Home() Control() 14

CloseGripper() OpenGripper() GetJaw() CloseManual() MoveManual() EnterManual() IsOnlineOk() Den totale liste af eksporterbare metoder kan ses i den udleverede dokumentation, der ligger i BILAG - USBC-documentation.pdf og man kan se de mountpoints vi har eksporteret i bilags filens funktions Liste fra usbc.dll.txt. 3.4.2 Vægt Nedenstående tekst omhandler de beslutninger der er fortaget i forbindelse med implementeringen af interfacet til vejecellen i vores system. I projektet skulle vi finde densiteten for nogle elementer. Til dette skulle vi implementere en vægt, da vægten ikke er en del af robotsystemet, for at veje elementerne. Til dette formål har vi brugt CodeVision, STK50-kit, LCD-display af typen AVR181, vægtcelle af typen MP40, en operations forstærker af typen AD620 og MS Excel til rådighed. Vi startede med at programmere ATMega 16 chippen på STK500 kit ved hjælp af CodeVision. Formålet var at få outputtet fra vægtcellen ud på displayet og sendt dataene over COMPORT via serielkabel(rs232). 15

4. LOGICAL VIEW I LogicalView vises systemets funktionalitet for slutbrugeren. Dette sker fortrinsvist gennem klasse diagrammer og des lige. Vi har dog valgt at dokumentere vores klasser vha. programmet Doxygen v1.6.1 Nedenstående tekst er en beskrivelse af værktøjet Doxygen, samt implementeringen af dette. 4.1 Doxygen Implementering Doxygen er et opensource værktøj, som kan scanne og analysere ens kildefiler og derefter skabe brugbar dokumentation. Denne dokumentation kan være i form af html-filer, latex-dokumenter eller andre formater. Filosofien bag programmet er, hvis man skal skrive kommentarer i ens kildekode, så kan de ligeså godt bruges til noget fornuftigt. Måden det virker på, er at man bruger nogle tags i ens normale kommentarer, som doxygen kan genkende. Hermed skabes sigende beskrivelser af ens klasser, metoder, variabler osv. Kigger man den genererede dokumentation igennem, vil man blive mindet om at kommentere alle ens funktioner. Dette giver nogle kildefiler, man nemmere kan tage frem på et senere tidspunkt og have let ved at forstå. Programmet kan hentes på http://www.doxygen.org/ og ligger som bilag på vedlagte cd-rom. Manualen til programmet med beskrivelse af tags og eksempler er også vedlagt. For at bruge programmet bruges Doxygen GUI frontend. Der skal vælges en konfiguration, gemmes en konfiguration, vælges et workingdirectory og til sidst trykkes på Start. Ved at trykke på knappen Wizard får man 4 faneblade frem til at konfigurere med. I Project indtastes projektets navn, version, hvor kildefilerne ligger og hvor dokumentationen skal placeres. 16

Figure14 - Doxygen GUI Figure15 - Doxywizardproject I Mode vælges All entities og Optimize for C# output. Fig. 4.5.1: Doxygen GUI Fig. 4.5.2: doxywizard Project I Output sættesfluebeni HTML og with frames and a navigation tree vælges. I Diagrams vælges Use built-in class diagram generator. Figure16 - Doxywizard Mode Figure17 - Doxywizard Output doxywizard Mode doxywizard Output Figure18 - Doxywizard Diagrams Efter dokumentationen doxywizard Diagrams er skabt, kan man åbne index.html i folderen html inde i den valgte dokumentfolder. For at hjælpe med at danne de rigtige tags, og skabe kommentarer en smule hurtigere, benyttede vi doxycomment. Dette er en addon til Visual Studio, som implementerer 3 knapper i VS2008 (fig. 4.5.6). 17

Figure19 Trykker man på AddCodeComment bliver der tilføjet doxygen kommentarer og tags til den klasse/funktion/variabel man står i. 4.2 Doxygen klasse dokumentations eksempel Alt vores.net kode er dokumenteret inline i vores source filer. Vi har via Doxygen trukket det hele ud, for at få en html dokumentation over alle namespaces, classes, methods, properties og enums. Man kan også se arve hierarkiet og en masse andre nyttige informationer om vores struktur. 18

4.3 For at se dokumentationen om klassen: Model.User. 1. Åbnes dokumentationen på CD en. Klasse Dokumentation\html\ Figure20 2. Der klikkes så på Classes 3. Her kan den indbyggede søge funktion i Internet Explorer eventuelt bruges eller der kan scrolles ned i listen for at finde Model.User. Klik på Model.User Figure21 19

4. Øverst på siden kan der ses hvad klasser/interfaces den arver fra. Figure22 5. Længere nede på siden kan public properties og methods på klassen ses. Figure23 20

4.4 Doxygen er dejlig Det er utroligt nemt at bruge og giver et godt overblik for en ny udvikler som skal sætte sig ind i systemet. Figure24 21

5. Developmentview I Developmentviewvises systemet fra programmørens synsvinkel. Vi har valgt at opdele systemet i en 3-tier-model, som vises nedenfor. Denne model giver et overordnet overblik over hele systemet, samtidig med at de enkelte tiers er defineret. Hermed fremgår det tydeligt hvorledes systemet er koblet sammen og hvordan de enkelte lag kommunikerer med hinanden. 22

5.1 Oversigt over systemkonfigureringer Nedenstående figur 25 viser 3-tier-model for vores system. Figure25 23

For at se omfattende dokumentation om de enkelte klasser, henviser vi til punkt 4.3 i system design dokumentet. Nedenfor er de enkelte 3-tier-model lag beskrevet. Presentationlayer: I presentationlayer ligger vores RobotGUI. GUI en (graphicaluser interface) vil gøre det muligt for brugeren at interagere med robotten. Business layer: Her ligger alt vores funktionalitet. Funktionaliteten i robotsystemet er indkapslet i pakke diagrammer efter namespaces. Hvert namespace har en eller flere funktionaliteter Data accesslayer: Det sidste lag i robot systemet er data accesslayer. Dette lag giver adgang til databasen. F.eks. når vi skal inserte, update eller delete databasen. Dette gøres vha. LINQ to SQL. 5.2 Oversigt over systemkonfigurationer 5.3 Systemkonfigureringer Hvis man skal sætte robotten i simulations/ real mode kan man se på nedenstående billede, hvordan dette konfigureres Figure26 - screenshotbeskriv de forskellige mulige konfigureringer eller en prototypisk konfigurering. 24

6. PROCESS VIEW I ProcessView vises det hvorledes enkelte processer i systemet kommunikere. Da vi har få tråde er det let at overskue hvordan de kommunikerer. Derfor er der ligeledes ingen bekymringer hvad angår skalerbarhed, runtime samt systemets ydeevne. 6.1 Trådkommunikation Da USBC.dll en er opbygget asynkron, har vi i vores implementereting gjort den synkron, så vi bedre kan styre den fra vores BusinessLogic.RobotController klasse. På nedenstående diagram vises det hvorledes de to tråde synkroniseres. Figure27 25

6.2 Oversigt over processer Da der kører flere tråde i vores program, er det ikke altid tilladt at tilgå visse af disse kontroller fra en tråd, som ikke har oprettet dem. Derfor skal man altid sørge for, at man har adgang til at tilgå den pågældende kontrol. På nedenstående aktivitets diagram har vi prøvet på at demonstrere det. Hvis tråden ikke har adgang til den kontrol, den vil tilgå, fortæller den kontrollens ejer, at den skal udføre en metode på den kontrol. Den bliver så smidt i en kø, der vil afvikle den, så snart der er tid. Figure28 26

7. PhysicalView PhysicalView beskriver systemet, set fra en software udviklers synspunkt, som en samlet software pakke. Denne software pakke er implementeret i den fysiske hardware. Den fysiske hardware er vores egentlige deployment. På nedenstående diagram vises et deploymentview over vores system som HW/SW enheder. Deployment diagram Figure29 På diagrammet ses hvorledes de enkelte HW enheder er forbundet og hvorpå SW ligger. 27

Figure30 Her ses den fysiske opstilling Figure31 USB Controller 28

7.1 Komponentbeskrivelser I de nedenstående punkter er de enkelte HW/SW komponenter for vores system beskrevet. 7.1.1 Database Databasen ligger på IHA s netværk (webhotel10.iha.dk) Database server komponenten har ansvaret for at lagre data i databasen, så f. eks data fra en proces kan opbevares og manipuleres. Derudover skal man være forbundet til IHA-VPN forbindelse for at kunne anvende E09I4PRJGr2 databasen. Første brugbare version af database bestod i at logge en Bruger og Robot. Senere hen implementerede vi også et BatchJob. Derefter testede vi, at vi kunne indsætte, updatere, delete og ændre noget i vores database. Nedenstående diagram er ER diagrammet over vores database 29

Figure32 På ovenstående diagrammet kan man se en oversigt over de enkelte entiteter i vores database og data flowet i vores system. Derudover kan man se på de forskellige fremmede nøgler hvordan relationerne mellem tabellerne hænger sammen. Endvidere kan man se attributterne for hver tabel der er i databasen. Det røde U angiver, at attributten er unik. 30

Vi har i dette projekt valgt at implementere 3 forskellige Stored Procedures i vores database. Stored Procedures: Figure33 Stores procedures Vi har besluttet os for at oprette nogle Views fordi vi gerne vil beskytte noget af vores data. Samtidig må visse brugere kun se dele af dataene. Et View består af nogle rækker og koloner ligesom i en rigtig tabel, men et viewer aggregeret af data fra andre tabeller. Vi har i dette projekt valgt at oprette 3 forskellige Views i vores database. Figure34 - Screenshot af valllogs 31

Figure35 - Screenshot af vuserlogs Figure36 - Screenshot af vrobotlogs 32

7.1.2 Vægt Til robot systemet er der skrevet i C# med udviklingsværktøjet Visual Studio 2008. Til at programmere ATMega 16 chippen har vi skrevet i C med CodeVision AVR Studio. Der er brugt SQL Server Management Studio 2008 til at udvikle databasen. For mere uddybende forklaring til værktøjerne, refereres der til Hovedrapporten under punktet Udviklingsværktøjer. Opstillingen af vægten består af en vægtcelle MP40 er koblet sammen med en AD620 operationsforstærker. Det analoge signal bliver forstærket. Dette forstærkede signal bliver sendt over til en ADC på STK500 kit som behandler signalet og konverterer det til et digitalt signal som sendes via et seriel kable RS-232 til PC en. Figure37 Vejecellens output giver et analog signal fra 0-10 V. Dette signal sendes gennem AD620, bliver delt op, og forstærket 2 gange. Derefter bliver det ene signal inverteret og adderet for at undertrykkecommon mode støj med 120 db. Figure38 Dette signal sendes til ATmega16 s indbyggede A/D konverter. ADC initieres til port A ben 0 som defineres til input. Vi enabler ADC hvor prescaleren bliver sat til 57600 Hz, da 33

ADC en skal køre mellem 50-200 KHz for at undgå aliasering. Signalet konverteres vha. successive approximation som ses ved nedenstående figur. Figure39 Et analog signal kommer ind og bliver holdt i hold registret indtil konverteringen er færdig. D/A omsætteren gætter på værdien af det analog signal indtil det rammer det rigtige. Efter konvertering sendes signalet videre af kontrolregistret. Det digitale signal bliver nu lagret i en variable af typen long int. For at kunne sende over serielt kabelvha. seriel kommunikation, blev vi nødt til at konvertere signalet til char * (string). Når vi modtager signalet på PC siden, konverterer vi det til int. Denne værdi bruges af andre klasser til beregning af densiteten. For at programmere ATMega16 chippen, som ligger på STK 500 kit, kan det gøres vha. Code Vision AVR Studio. Dette bliver implementeret i C-kode. Når vi skal modtage signalet, har vi implementeret det i C#. Det digitale signal bliver behandlet i ATMega16 chippen. Det konverterede signal er af typen double, hvilket vi konverterer til enchar, for at sende over serielt kabel RS-232. Vi har desuden tilkoblet et LCD display af typen AVR 181, for at bekræfte at værdien er indenfor et passende interval. 34

Til at modtage signalet på PC siden, har vi lavet et interface, implementeret i C#, som læser fracomporten (IO enhed). Det modtagne signal, som er en streng, konverteres til en int32. 7.1.3 Robot Da vi skal ned og kommunikere med robotten skal vi først finde ud af hvordan funktionaliteten i USBC`en er defineret. Dette kan ses i pkt 3.2 i designdokumentet. Vi kan nu vha. Visual Studio 2008 importer de funktioner der ligger i USBC`en. Disse funktioner importerer vi i klassen RobotInterface.DllCall, som vi kan bruge i Robot-klassen til at definere vores egne funktioner. Figure40klasse diagram for RobotInterface klassen Den ovenstående figur viser det overordnede klassediagram for robotinterfacet. Vores Adapter-patterns er RobotInterface.Robot-klassen sammenkoblet med DllCall-klassen. De andre klasser er beskrevet nedenfor. For omfattende information omhandlende de enkelte klasser se da venligst //klasse dokumentation/html/index.htmpå CD en ConfigData-klassen: den holder på de configurationsdata vi får fra robotten. ErrorInfo-klassen: Hvis der opstår en error, er det via denne klasse robotten giver os 35

fejlmeddelelsen. CallBack-klassen: Den bliver brugt til de callbacks robotten giver os. DataPoint-klassen: den holder dataene i hukommelsen, så garbagecollectoren ikke kommer og tager dem. RobotPoint-klassen: den holder de koordinater som robotten skal bruge. PositionVector-klassen: den har en liste af RobotPoint, som den kan lagre i robotten. Robot-klassen: det er her vi implementerer de funktioner, som RobotInterface skal have. 7.1.4 GUI Efter tilføjelser er commited til databasen, kan de ikke slettes igen. Grunden til de ikke kan slettes er for at opretholde dataintegriteten. De fleste data kan dog stadig ændres, for at give en vis fleksibilitet. User Oplysninger om en bruger i systemet. Tilføje nye brugere til systemet. Felterne Username/Password/Name kan ændres som man vil. Dette kan være meget praktisk hvis man har en gæste bruger Guest, men gerne vil have hans navn ind i systemet. Hvis en bruger forlader firmaet kan man disable ham, ved at uncheck boksen. Bruger kan få yderligere rettigheder ved at få checked boksen ud for admin. Robot En robot i systemet som kan sættes til at udføre et BatchJob. Tilføje nye robotter. Ændrer robottens location hvis den bliver flyttet internt i firmaet. Hvis en robot ikke længere er aktiv eller er gået i stykker, kan Active sættes som unchecked. BatchJob Består af Name og KeepRunning, og en liste af BatchJobTaskPositions som den skal udføre når jobbet startes. Name kan blive brugt til at give et logisk navn, 36

udover det ID den får autogenereret. Så den er nemmere at finde igen. KeepRunning er unchecked hvis den kun skal køre en gang. Tilføje nye BatchJobs. Tilføje BatchJobTaskPositions til listen af ting der skal udføres. Rækkefølgen kan ændres via Drag n Drop. Fjerne BatchJobTaskPositions som ikke længere skal udføres. BatchJobTaskPosision indeholder information om hvad robotten skal udføre. Efter et BatchJobTaskPosition oprettet og gemt i databasen, kan det ikke slettes. Dette gøres for at undgå et BatchJob mister tasks. Ændre X, Y, Z, Pitch og Roll som bruges til nogen af opgave typerne. Ændre opgave type, f. eksmovelinear, OpenGripper, CloseGripper, etc. Yderligere kan der slås forskellige loggers til: GuiLogger Logger løbende til GUI en mens programmet kører. LogLevel kan ændres alt efter om man kun vil have fejl logget. 37

8. SCENARIOS VIEW I dette afsnit omtales vores use cases. De enkelte use case scenarier er uddybende beskrevet i kravspecifikationen punkt 3 og frem. På nedenstående UC diagram vises en oversigt over de scenarier vi har udarbejdet use cases for. Figure41 Figur 41 viser de scenarier der spiller en central rolle for vores system. De repræsenterer dermed alle vigtig funktionalitet for vores system og kan ikke undlades. 38

8.1 Data model De arkitekturer signifikante dele af datamodellen, hvad angår f.eks. stored procedures, views osv., er beskrevet i punkt 7.7.1 Database. 8.2 Implementering af persistens I dette tekst afsnit beskriver vi hvordan vi persistere vores data i systemet. Til at persistere vores data anvender vi LINQ2SQLframeworket. Dette framework gør det lettere at lave forspørgelser til databasen. Samtidig sørger detteframework for at de data der bliver anvendt i systemet bliver gemt hvis de er blevet ændret siden sidste save. Her er der flere funktioner der hjælper udvikleren bl.a. SubmitChanges, Delete osv. Brugen af dette frameworkafkobler afhængigheden fraden specifikke database vi laver forspørgelser til. Frameworket er med til at minimere den mængde af SQL queries som ellers skulle laves. 39

9. GENERELLE DESIGNBESLUTNINGER I neden stående afsnit skriver vi om de design mønstre og værktøjer, som er blevet anvendt i projektet 9.1 Arkitektur mål og begrænsninger Målet for vores arkitektur var at lave en komponent baseret struktur så det er nemmere at opdele projektet i sub-systemer. Både for at øge muligheden for genbrug men også for at kunne udvikle komponenterne parallelt. 9.2 Arkitektur mønstre 9.2.1 StrategyPatterns Figure42 - Klasse diagram af AllLog Vi har brugt Strategy design mønstret, da vi har nogle metoder der minder meget om hinanden, men de er implementeret til at udfører noget forskelligt. Vi har valg, at bruge dette design mønstre, da indkapslingen af hver metode gør at de nemmere kan skiftes ud og der kan tilføjes andre metoder. Mere info kan ses i bogen - Craig Larman - Applying UML and patterns 3. ed. s. 447 Singleton 40