Scriptie: Uitwerken van een simulatietool ter optimalisatie van de interne logistieke flow Studiegebied Industriële wetenschappen en technologie Opleiding Master in de industriële wetenschappen: elektrotechniek Afstudeerrichting Automatisering Academiejaar 2008-2009
Tom Moonen
Voorwoord Nadat ik mijn diploma Multimedia & Communicatietechnologie (MCT) behaald had, startte ik het brugprogramma Industrieel Ingenieur Elektromechanica optie Automatisering aan de Hogeschool West-Vlaanderen, campus PIH te Kortrijk. De drie jaren durende opleiding viel zwaarder uit dan eerst verwacht, maar nu als laatstejaarsstudent sta ik klaar om mijn masterjaar in ere en mooi af te sluiten. Het schrijven van de scriptie was geen gemakkelijke opdracht. Toch biedt de thesis een soort van platform om mijn denken en doen neer te schrijven en zo mijn project mede te ondersteunen. In de eerste plaats wil ik Dhr. ing. Johannes Cottyn bedanken voor de begeleiding van deze masterproef. Zijn vele tips, aanwijzingen en commentaar hebben een positieve invloed gehad op dit project. Ik wil Pieterjan Vereecke ook bedanken voor zijn geduld en begrip tijdens de laatste weken van dit project. Hij is namelijk de eerste gebruiker van de simulatietool en ondervond daarbij enkele mankementen, zeg maar bugs, in de simulatietool. Ook de campus PIH van de Hogeschool West-Vlaanderen wil ik bedanken voor de mooie tijd van zes jaren die ik heb mogen beleven als student van de PIH. Tot slot wil ik mijn dank betuigen aan mijn ouders, mijn broer en mijn zus voor hun steun tijdens de afgelopen jaren als student op de PIH. Tom Moonen.
II
Inhoudsopgave Voorwoord ............................................................................................................................... II Inhoudsopgave ....................................................................................................................... III Abstract ................................................................................................................................... VI Gebruikte symbolen en afkortingen ................................................................................... VII Lijst van figuren en tabellen ................................................................................................... X 1 Inleiding .............................................................................................................................. 13 1.1 Situering ....................................................................................................................... 13 1.1.1 Optimalisatie van de interne logistieke flow ......................................................... 13 1.1.2 Het nut van simuleren: dynamisch vs. statisch...................................................... 13 1.2 De doelstelling .............................................................................................................. 14 2 De application layers ......................................................................................................... 15 2.1 De persistence layer ...................................................................................................... 17 2.1.1 Het databasesysteem en de database ..................................................................... 17 2.1.2 Het ER-diagram ..................................................................................................... 17 2.1.3 Het databaseschema .............................................................................................. 19 2.2 De data access layer...................................................................................................... 24 2.2.1 Het Data Access Object design pattern ................................................................. 24 2.2.2 De implementatie met de business entities............................................................ 24 2.3 De business logic layer ................................................................................................. 25 2.3.1 Validatie ................................................................................................................ 25 2.3.2 Import- en exportfuncties ...................................................................................... 25 2.3.3 Persistentie............................................................................................................. 26 2.3.4 Het statisch transportmodel ................................................................................... 27 2.3.5 Rapportering .......................................................................................................... 27 2.4 De presentation layer .................................................................................................... 27 2.4.1 Inleiding................................................................................................................. 27 2.4.2 De basiscomponenten ............................................................................................ 28 2.4.3 Extra componenten ................................................................................................ 29 2.4.4 De database workspace ......................................................................................... 33 2.4.5 De scenario workspace .......................................................................................... 35 3 Het statische transportmodel ............................................................................................ 39 3.1 Inleiding ........................................................................................................................ 39 3.2 Transportsystemen ........................................................................................................ 39 3.2.1 Wat is een AGV? ................................................................................................... 39 3.2.2 Wat is een AGV trein? .......................................................................................... 40 3.2.3 Wat is een conveyor? ............................................................................................ 41 3.2.4 Wat is een EOM? .................................................................................................. 42 3.2.5 Het juiste transportsysteem kiezen ........................................................................ 43 3.3 Waarom is het aantal carriers kennen zo belangrijk? ................................................... 44 3.4 Het kortstepadalgoritme ............................................................................................... 44 3.4.1 Inleiding................................................................................................................. 44
III
3.4.2 De Minimum Spanning Tree ................................................................................. 44 3.4.3 Het kortstepadalgoritme van Dijkstra.................................................................... 45 3.4.4 Floyd–Warshall algoritme ..................................................................................... 47 3.5 De formule voor het aantal carriers .............................................................................. 47 3.5.1 De planning horizon .............................................................................................. 49 3.5.2 De benodigde tijd om de volledige materiaalstroom uit te voeren........................ 50 3.5.3 Het benodigd aantal transporten ............................................................................ 50 3.5.4 De benodigde tijd om alle ladingen op te pikken en af te zetten........................... 51 3.5.5 De extra bijkomende tijd door optredende verkeerscongestie .............................. 52 3.5.6 De benodige verplaatsingstijd voor een carrier zonder een vast traject ................ 53 3.5.7 De benodige verplaatsingstijd voor een carrier met een vast traject ..................... 58 3.6 Voorbeeldberekening ................................................................................................... 60 4 De mogelijkheden met Plant Simulation ......................................................................... 65 4.1 Inleiding ........................................................................................................................ 65 4.2 Dynamische simulatie van een dynamisch transportmodel.......................................... 65 4.2.1 Een eenvoudig transportmodel uit standaardcomponenten ................................... 65 4.2.2 Complexe transportmodellen uit transportcomponenten ...................................... 66 4.2.3 Eigen componenten en SimTalk............................................................................ 68 4.3 De externe interfaces .................................................................................................... 69 4.4 De communicatie interfaces ......................................................................................... 69 5 Datastructuren ................................................................................................................... 71 5.1 Grafen ........................................................................................................................... 71 5.1.1 Definitie ................................................................................................................. 71 5.1.2 Begrippen .............................................................................................................. 72 5.1.3 De connectiematrix................................................................................................ 73 5.1.4 Het objectmodel .................................................................................................... 76 5.2 De binary heap priority queue ...................................................................................... 77 5.2.1 Wat is een priority queue? ..................................................................................... 77 5.2.2 Wat is een binary heap?......................................................................................... 77 5.2.3 Eén-dimensionele array als datastructuur.............................................................. 78 5.2.4 Partieel sorteren ..................................................................................................... 79 5.3 De quadtree ................................................................................................................... 82 6 Handleiding ........................................................................................................................ 84 6.1 Systeemvereisten .......................................................................................................... 84 6.2 Aanmaak van de database in Microsoft SQL 2005 ...................................................... 84 6.2.1 Databaseherstelbestand ......................................................................................... 84 6.2.2 SQL script.............................................................................................................. 91 6.3 Hoe de simulatietool gebruiken? .................................................................................. 96 6.3.1 Bij eerste opstart .................................................................................................... 96 6.3.2 Excel bestanden importeren .................................................................................. 96 6.3.3 De gegevens in de database bekijken .................................................................... 98 6.3.4 De gegevens aanmaken, bewerken of verwijderen ............................................... 98 6.3.5 Werken met lay-outs ........................................................................................... 102 6.3.6 Een scenario uitvoeren ........................................................................................ 112
IV
Besluit .................................................................................................................................... 115 Literatuurlijst ....................................................................................................................... 116 A Database ........................................................................................................................... 118 A.1 Beschrijving van de attributen van de entiteiten ........................................................ 118 B Enkele wiskundige uitwerkingen ................................................................................... 123 B.1 De loodrechte projectie van een punt op een rechte ................................................... 123
V
Abstract Today it is interesting for many companies to increase production and have more efficient processes and greater attention to the needs of consumers. This obviously calls for further optimization of the production processes and organization of the production floor itself. One of the optimizations that can be performed on the production floor is in the field of internal logistic flow. The internal logistic flow can be described as the transport of goods within the walls of the company. This is often described as the material flow. Transport costs the company time and resources. In fact, any form of transport is waste: it offers no added value to the product. In this thesis static transportation models will be designed in which the number of carriers needed to perform the material flow can be estimated. Furthermore, a static simulation tool will be developped that can be used for research by students and researchers from the University of Gent (Belgium). To teach them how to use the simulation tool also a manual will been written. The static simulation can been seen as a run-up to the dynamic simulation. So this thesis will also examine the possibilities of Plant Simulation as a dynamic simulation software package. Furthermore, the potential link between the two applications (the simulation tool and Plant Simulation) will also been studied.
VI
Gebruikte symbolen en afkortingen AEM AGV AGVS API CRUD DAO DTO DBMS EMS EOM ER-diagram FIFO FCFS LIFO MST PDF RDBMS SQL T-SQL XML
automated electrified monorail automated guided vehicles AGV systeem application programming interface Create, Read, Update en Delete Data Access Object Data Transfer Object database management systeem electrified monorail system electrified overhead monorails entiteiten-relatie-diagram First-In-First-Out First-Come, First-Served Last-In-First-Out Minimum Spanning Tree Portable Document Format relationeel DBMS Structured Query Language Transact-SQL eXtensible Markup Language
m, de af te leggen afstand om een volledige ronde af te leggen m, de af te leggen afstand van afzetstation naar oppikstation
η θ
%, de bezettingsgraad %, de factor voor de verkeerscongestie de proportionele factor tussen en [kg] of andere ladingseenheid, de ladingscapaciteit van een carrier m, de af te leggen afstand van oppikstation naar afzetstation
de determinant van een matrix een tak een verzameling van takken het aantal transporten het gereduceerde aantal transporten het nodige aantal transporten van oppikstation naar afzetstation
het nodige aantal verplaatsingen van het afzetstation naar het oppikstation het te verwachten aantal verplaatsingen van het afzetstation naar het
het nodige aantal verplaatsingen van afzetstation naar oppikstation
het nodige aantal verplaatsingen van het afzetstation naar het oppikstation
oppikstation een graaf
VII
ℓ ! " " " "# "$
een lijn het aantal elementen van een verzameling het aantal elementen van een vector het aantal kolommen van een matrix een matrixelement in rij r en kolom c van matrix M een matrix een matrix met " rijen en kolommen het aantal rijen van een verzameling het aantal elementen van een vector het aantal rijen van een matrix het aantal afzethandlers het aantal oppikhandlers
%
%, de totale kans dat een carrier zich verplaatst van afzetstation naar
" % %& %' % %
het aantal ronden af te leggen een punt het eerste punt dat de rechte ℓ vormt het tweede punt dat de rechte ℓ vormt %, de kans dat een beschikbare carrier zich begeeft naar oppikstation %, de kans dat een beschikbare carrier afkomstig is van afzetstation
% %)
oppikstation de (-coördinaat van punt % de *-coördinaat van punt %
,$ , ,/.
afzetstation s, de gemiddelde tijd nodig om een lading op te pikken s, de nodige tijd om een volledige ronde af te leggen s, de nodige verplaatsingstijd in onbeladen toestand van afzetstation naar
+ ,# , ./
0
5 # 6 $
[kg] of andere ladingseenheid, de ladingswaarde van een transportbatch s, de gemiddelde tijd nodig om een lading af te zetten s, de nodige transporttijd in beladen toestand van het oppikstation naar het
oppikstation min/h, de beschikbare tijd van een carrier om actief deel te nemen aan de volledige materiaalstroom s, de totale extra bijkomende tijd door optredende verkeerscongestie s, de totale verloren tijd nodig voor het onderhoud s, de totale tijd besteed aan het afzetten van ladingen s/carrier, de beschikbare tijd van één carrier, de zogenaamde planning horizon s, de totale verloren tijd doordat carriers beschikbaar blijven s, de totale tijd besteed aan het vervoeren van ladingen naar een afzetstation s, de totale tijd besteed aan het oppikken van ladingen VIII
; < = = =# =$ > >? >@ > > > > > > >) B C
s, de benodigde tijd om de volledige materiaalstroom uit te voeren h, de shiftduur s, de totale tijd besteed aan het zich verplaatsen tussen stations s, de totale tijd besteed aan het zich verplaatsen naar een oppikstation een naburige knoop het aantal ladingen het aantal ladingen om af te zetten het aantal ladingen om op te pikken een knoop een vector een beginknoop een vectorelement van vector >? een startknoop een eindknoop m⁄s , de gemiddelde snelheid van een carrier in beladen toestand m⁄s , de gemiddelde snelheid van een carrier in onbeladen toestand de (-coördinaat van vector >? de *-coördinaat van vector >? een verzameling van knopen het aantal carriers
IX
Lijst van figuren en tabellen Figuur 2.1: De globale architectuur van de simulatietool ..................................................................................... 16 Figuur 2.2: Het ER-diagram.................................................................................................................................. 18 Figuur 2.3: De databaseschema – deel 1 ............................................................................................................... 20 Figuur 2.4: De databaseschema – deel 2 ............................................................................................................... 21 Figuur 2.5: De databaseschema – deel 3 ............................................................................................................... 22 Figuur 2.6: De databaseschema – deel 4 ............................................................................................................... 23 Figuur 2.7: Het Windows XP Theme aanpassen ................................................................................................... 30 Figuur 2.8: Een CaptionLabel, aangepast aan het Windows XP Theme ............................................................... 30 Figuur 2.9: Het Windows Classic Theme aanpassen ............................................................................................ 31 Figuur 2.10: De simulatietool aangepast aan het Windows Classic Theme .......................................................... 32 Figuur 2.11: De database navigator....................................................................................................................... 34 Figuur 2.12: De database viewer ........................................................................................................................... 35 Figuur 2.13: De toolbar ......................................................................................................................................... 36 Figuur 2.14: Duidelijk een scrollpane control ....................................................................................................... 37 Figuur 2.15: Het attribuutpanel voor trackpunt en voor track ............................................................................... 38 Figuur 3.1: Een automated guided vehicle (AGV) dat een zichtbaar spoor volgt ................................................. 40 Figuur 3.2: Een automated guided vehicle (AGV) dat geen zichtbaar spoor volgt ............................................... 40 Figuur 3.3: De transportband als conveyorsysteem .............................................................................................. 41 Figuur 3.4: Een kettingconveyorsysteem .............................................................................................................. 42 Figuur 3.5: Een electrified monorail system (EMS) binnen de automobielindustrie ............................................ 43 Figuur 3.6: Een transportsysteem kiezen .............................................................................................................. 43 Figuur 3.7: De mogelijke toestanden van een carrier ............................................................................................ 49 Figuur 3.8: De mogelijke toestanden van een carrier zonder traject ..................................................................... 54 Figuur 3.9: De toestandswisselingen van een carrier dat een traject volgt ............................................................ 59 Figuur 3.10: De lay-out voor de voorbeeldberekening ......................................................................................... 60 Figuur 4.1: De toolbox met de standaardcomponenten ......................................................................................... 65 Figuur 4.2: Eenvoudig transportmodel.................................................................................................................. 66 Figuur 4.3: Een AGV-systeem .............................................................................................................................. 67 Figuur 4.4: Een EOM-systeem .............................................................................................................................. 67 Figuur 4.5: Een converyorssysteem ...................................................................................................................... 68 Figuur 5.1:Speciale takken: (a) Parallel. (b) Parallel. (c) Niet parallel. (d) Een lus. ............................................. 72 Figuur 5.2: (a) Een ongerichte graaf. (b) Een gerichte graaf. ................................................................................ 73 Figuur 5.3: Een gewogen graaf. ............................................................................................................................ 73 Figuur 5.4: Een ongerichte multigraaf zonder parallelle takken en de corresponderende matrix. ........................ 74 Figuur 5.5: Een ongerichte multigraaf met parallele takken en de corresponderende matrix. .............................. 74 Figuur 5.6: Een gerichte multigraaf en de corresponderende matrix. ................................................................... 74 Figuur 5.7: De uitgebreide graaf met één tussenstap en de corresponderende matrix. ......................................... 75 Figuur 5.8: In- en uitgaande takken van een knoop .............................................................................................. 76 Figuur 5.9: Een tak met de start- en eindknoop als knopenpaar............................................................................ 76 Figuur 5.10: Een voorstelling van een queue ........................................................................................................ 77 Figuur 5.11: Een binary max-heap ........................................................................................................................ 78 Figuur 5.12: Een binary min-heap ........................................................................................................................ 78 Figuur 5.13: Een binary heap met geïndexeerde knopen ...................................................................................... 78 Figuur 5.14: Een binary heap in een één-dimensionele array ............................................................................... 79 Figuur 5.15: Een knoop toevoegen aan de heap .................................................................................................... 80 Figuur 5.16: Partieel sorteren van de heap ............................................................................................................ 80 Figuur 5.17: Gesorteerde heap .............................................................................................................................. 80 Figuur 5.18: Een wortel verwijderen van de heap................................................................................................. 81 Figuur 5.19: Partieel sorteren van de heap ............................................................................................................ 81 Figuur 5.20: Een knoop toevoegen aan de heap .................................................................................................... 81 Figuur 5.21: Hiërarchische indeling van een groot gebied in telkens vier kwadranten......................................... 82 Figuur 5.22:De quadtree als platte boom .............................................................................................................. 83 Figuur 6.1: Het startpunt: Databases ..................................................................................................................... 85 Figuur 6.2: Een database herstel uitvoeren ........................................................................................................... 85 Figuur 6.3: Een bestaande database herstellen ...................................................................................................... 86
X
Figuur 6.4: Een nieuwe database met een eigen gekozen naam ‘MyTransport’ ................................................... 86 Figuur 6.5: Kiezen voor 'From device' om een databaseherstelbestand te kiezen ................................................. 87 Figuur 6.6: Een databaseherstelbestand is een bestand en deze toevoegen ........................................................... 87 Figuur 6.7: Een bestaand databaseherstelbestand kiezen ...................................................................................... 88 Figuur 6.8: Een databaseherstelbestand is gekozen en toegevoegd ...................................................................... 88 Figuur 6.9: Alle nodige instellingen zijn gemaakt ................................................................................................ 89 Figuur 6.10: De herstel van de database uitvoeren... ............................................................................................ 90 Figuur 6.11: Succesbericht na het uitvoeren van de herstel van een database ...................................................... 90 Figuur 6.12: De herstelde database is nu aanwezig in Microsoft SQL server 2005 .............................................. 91 Figuur 6.13: Het SQL script toegang verlenen tot de databases ........................................................................... 92 Figuur 6.14: Het geopende SQL script dat geconnecteerd is met de database engine .......................................... 92 Figuur 6.15: Een 'Quick Replace' uitvoeren op het SQL script ............................................................................. 93 Figuur 6.16: Alle 'Transport' tekst vervangen door 'MyTransport' tekst ............................................................... 93 Figuur 6.17: Het SQL script uitvoeren .................................................................................................................. 94 Figuur 6.18: Het SQL script is succesvol uitgevoerd ............................................................................................ 94 Figuur 6.19: De lijst van databases verversen ....................................................................................................... 95 Figuur 6.20: De aangemaakte database is nu aanwezig in Microsoft SQL server 2005 ....................................... 96 Figuur 6.21: Excel sjabloon voor de fabrieksgegevens ......................................................................................... 97 Figuur 6.22: Excel sjabloon voor de lay-out van een fabriek ................................................................................ 97 Figuur 6.23: Excel sjabloon voor de verschillende scenarios van een fabriek ...................................................... 97 Figuur 6.24: Excel bestanden importeren via de simulatietool ............................................................................. 98 Figuur 6.25: De database navigator en viewer gebruiken ..................................................................................... 98 Figuur 6.26: Een nieuw gegeven toevoegen ......................................................................................................... 99 Figuur 6.27: Een bestaand gegeven wijzigen ........................................................................................................ 99 Figuur 6.28: De dialoogvenster voor input van gegevens voor een fabriek ........................................................ 100 Figuur 6.29: De dialoogvenster voor input van gegevens voor een transportsysteem ........................................ 100 Figuur 6.30: De dialoogvenster voor input van gegegevens voor een lay-out .................................................... 101 Figuur 6.31: De dialoogvenster voor input van gegegevens voor een scenario .................................................. 101 Figuur 6.32: Een bestaand gegeven verwijderen................................................................................................. 102 Figuur 6.33: Een lay-out openen in de lay-out editor.......................................................................................... 102 Figuur 6.34: Een lay-out dupliceren.................................................................................................................... 103 Figuur 6.35: Een nieuwe naam ingeven voor het gedupliceerde lay-out ............................................................ 103 Figuur 6.36: Een lay-out geopend in de lay-out editor ........................................................................................ 103 Figuur 6.37: Voor de selectie .............................................................................................................................. 104 Figuur 6.38: Na de selectie.................................................................................................................................. 104 Figuur 6.39: De attribuutpanel voor een geselecteerde trackpunt ....................................................................... 105 Figuur 6.40: De attribuutpanel voor een geselecteerde track .............................................................................. 105 Figuur 6.41: Een nieuwe trackpunt uitlijnen aan één trackpunt .......................................................................... 106 Figuur 6.42: Een nieuwe trackpunt uitlijnen aan een tweede trackpunt .............................................................. 106 Figuur 6.43: Een nieuwe trackpunt uitlijnen volgens een bestaande track.......................................................... 107 Figuur 6.44: Een nieuw trackpunt uitlijnen volgens een bestaande track en op die track loslaten ..................... 107 Figuur 6.45: Een nieuw trackpunt uitlijnen volgens een bestaande track en trackpunt....................................... 107 Figuur 6.46: Een nieuwe trackpunt uitlijnen volgens een bestaande track en trackpunt en op die track loslaten 107 Figuur 6.47: Een nieuwe track toevoegen ........................................................................................................... 108 Figuur 6.48: Het dialoogvenster voor input van gegegevens voor een traject .................................................... 109 Figuur 6.49: Een traject op de lay-out zichtbaar maken ...................................................................................... 109 Figuur 6.50: Track voor éénrichtingsverkeer ...................................................................................................... 110 Figuur 6.51: Track voor tweerichtingsverkeer .................................................................................................... 110 Figuur 6.52: Het afsluiten van een tab via het kruisje ......................................................................................... 111 Figuur 6.53: Het afsluiten van een tab via het opgeroepen contextmenu ............................................................ 111 Figuur 6.54: Uitdrukkelijk vragen om een lay-out tabblad te sluiten .................................................................. 111 Figuur 6.55: De canvas navigator ....................................................................................................................... 112 Figuur 6.56: Een berekening uitvoeren via het contextmenu .............................................................................. 113 Figuur 6.57: Een berekening uitvoeren via de menubalk .................................................................................... 113 Tabel 3.1: Plaats van de stations op de lay-out ..................................................................................................... 61 Tabel 3.2: De transportbatches .............................................................................................................................. 61 Tabel 3.3: De karakteristieken van het transportsysteem ...................................................................................... 61 Tabel 3.4: De bijkomende inputparameters .......................................................................................................... 61 Tabel 6.1: Attributen van een fabriek.................................................................................................................. 118
XI
Tabel 6.2: Attributen van een verpakking ........................................................................................................... 118 Tabel 6.3: Attributen van een onderdeel ............................................................................................................. 118 Tabel 6.4: Attributen van een productielijn ........................................................................................................ 119 Tabel 6.5: Attributen van een station .................................................................................................................. 119 Tabel 6.6: Attributen van een transportbatch ...................................................................................................... 119 Tabel 6.7: Attributen van een transportsysteem .................................................................................................. 120 Tabel 6.8: Attributen van een lay-out.................................................................................................................. 120 Tabel 6.9: Attributen van een spoorpunt ............................................................................................................. 120 Tabel 6.10: Attributen van een spoor .................................................................................................................. 121 Tabel 6.11: Attributen van een waypoint ............................................................................................................ 121 Tabel 6.12: Attributen van een traject ................................................................................................................. 121 Tabel 6.13: Attributen van een scenario.............................................................................................................. 122 Tabel 6.14: Attributen van een inputparameter ................................................................................................... 122 Tabel 6.15: Attributen van een outputparameter ................................................................................................. 122
XII
1 Inleiding 1.1 Situering Tegenwoordig is het voor vele bedrijven interessant om de productie sneller en efficiënter te laten verlopen en meer rekening te houden met de noden van de consument. Dit vraagt natuurlijk om verdere optimalisatie van de verschillende productieprocessen en de organisatie van de productievloer zelf.
1.1.1 Optimalisatie van de interne logistieke flow Eén van de optimalisaties die kan worden uitgevoerd op de productievloer is op het gebied van de interne logistieke flow. De interne logistieke flow kan omschreven worden als het transport van goederen binnen de muren van het bedrijf. Dit wordt ook vaak omschreven als de materiaalstroom. Transport kost voor het bedrijf tijd en middelen. In feite is elke vorm van transport verspilling of “waste”: het biedt namelijk geen toegevoegde waarde aan het product. Momenteel is het meest gebruikte transportmiddel nog steeds de vorkliften. Die zijn bijzonder flexibel om goederen te transporteren doch niet efficiënt en niet veilig. Ze zijn een constant gevaar voor personeel, producten en infrastructuur. Daarom is er een vraag naar alternatieve transportmiddelen zoals automated guided vehicles (AGV), electrified overhead monorails (EOM) en (overhead) conveyors [8]. De efficiëntie van het transport is, naast de verdelingswijze van de goederen, afhankelijk van de indeling van de productievloer, de zogenaamde lay-out van de productievloer. Ook de keuze uit één of meerdere transportsystemen met bepaalde transporteigenschappen en de nodige capaciteit voor het transporteren van goederen draagt bij tot de efficiëntie van het transport [8].
1.1.2 Het nut van simuleren: dynamisch vs. statisch Wijzigingen op de productievloer kunnen de normale werking van de productie in de war sturen. Er kunnen dus niet zomaar aanpassingen worden doorgevoerd. Bovendien komt daarbij een grote investering kijken. Er dient eerst best een onderzoek ingesteld te worden naar de haalbaarheid van dergelijke optimalisaties. Hiervoor bestaan er dynamische simulatiesoftwarepakketten. Dergelijke simulatiesoftware vereist een uitgebreid model met veel verschillende instellingen en mogelijkheden die de werkelijke situatie benadert. In het aanmaken van een dergelijk model kruipt veel tijd. Daarom kan beter eerst worden overgeschakeld naar vereenvoudigde modellen die zich statisch gedragen. Statisch betekent dat er geen rekening gehouden wordt met het tijdsgedrag. Uit ervaring met dergelijke
13
kwantitatieve modellen is gebleken dat zij een krachtig hulpmiddel zijn voor het ondersteunen van beslissingen aangezien ze een eerste idee en inzicht kunnen verschaffen. Op basis van de eerste beslissingen kan het vereenvoudigd model uitgebreid worden naar een dynamisch en realistisch model binnen de simulatiesoftware.
1.2 De doelstelling Bij het optimaliseren van de interne logistieke flow is gebruik van software een groot hulpmiddel. De data, die voorhanden is, is immens van omvang zodat het op papier tijdrovend zou zijn om het te verwerken, laat staan het foutloos uit te voeren. Bijkomend verandert de data ook nog naargelang het scenario en zal dus telkens opnieuw moeten worden verwerkt. Binnen een bedrijf zijn verscheidene scenario’s mogelijk waarvan niet direct duidelijk één uitspringt als het meest optimale voor het productieproces. Naast het verwerken van de data is het visualiseren ervan niet onbelangrijk en kan zelfs een zeer handig hulpmiddel zijn voor de gebruiker. Vlot bewerken, verwerken en visualiseren van dergelijke data met software is dan ook de beste keuze opdat de gebruiker zich meer en beter op andere dingen kan concentreren. Deze masterproef loopt in samenwerking met de vakgroep Industrial Management van de Universiteit Gent. Over de interne logistieke flow is daar heel wat kennis aanwezig. Ze zijn echter op zoek naar een praktische ondersteuning welke deels zal ingevuld worden door de simulatietool die binnen deze masterproef ontwikkeld werd. Het doel van dit masterproef is tweeledig. Ten eerste dient een simulatietool te worden ontwikkeld die ondersteuning biedt bij het uitzoeken naar potentïele optimalisatiemogelijkheden voor de interne logistieke flow. Ten tweede dient een thesis geschreven te worden als een handleiding voor de optimalisatie van de interne logistieke flow. De simulatietool moet aan bepaalde eisen voldoen: − Gebruiksvriendelijk − Ontwikkelen in .NET 2.0 met Visual Studio 2005 − Opslag van data in een database binnen Microsoft SQL Server 2005 − Import van data naar de database via Excel bestanden − Ontwerp van een statisch transportmodel − Ontwerp van een scenario-omgeving − Haalbaarheidsrapporten genereren na het uitvoeren van het gekozen scenario − Transparante koppeling met Plant Simulation voor een dynamische simulatie in 3D via geëxporteerde data uit de database als XML bestanden (enkel eerste aanzet daartoe)
14
2 De application layers Een belangrijk aspect van de masterproef is de gebruiksvriendelijkheid van de simulatietool die ontwikkeld wordt. Het wordt uiteindelijk in gebruik genomen door studenten en onderzoekers van UGent. In figuur 2.1 wordt de resulterende globale architectuur van de simulatietool voorgesteld. Er is gekozen om de applicatie op te bouwen in verscheidene logische lagen die stukken programmacode of bronnen samenbundelen in functie van één of meer specifieke domeinen. Zo concentreert de persistence layer in dit project op de database dat beheerd zal worden door een gekozen databasesysteem. Via de data access layer zal de data uit de database worden opgehaald en in de database worden opgeslagen. Verder verzorgt de business layer de eigenlijke logica (workflow) van de applicatie terwijl de presentatie layer de grafische user interface aan de gebruiker biedt.In de daaropvolgende tekst wordt de nodige functionaliteit in een nodendop beschreven. De nummers verwijzen naar de plaats op het figuur 2.1. Een scenario opbouwen start met de nodige inputgegevens van de materiaalstroom die door de gebruiker wordt verzameld in Excel bestanden (1) en vervolgens worden deze bestanden geïmporteerd (2) naar de database (6). Via de grafische user interface (3) kan een lay-out worden opgebouwd en een scenario worden ingesteld. Op basis van een ingesteld scenario worden de berekeningen uitgevoerd volgens het gekozen statisch transportmodel (4). Nadat de berekeningen zijn uitgevoerd, wordt automatisch een rapport (7) op basis van een Word template aangemaakt waarin de resultaten van de berekeningen worden weggeschreven. Om op zoek te gaan naar een goede optimalisatie worden verdere aanpassingen aan het scenario doorgevoerd zoals een ander transportsysteem kiezen of het wijzigen van de lay-out en vervolgens een herberekening uitvoeren. Een scenario kan worden geëxporteerd naar een XML bestand wat in de toekomst toelaat om deze te importeren via SimTalk, de scriptingtaal binnen het simulatiepakket Plant Simulation.
15
Figuur 2.1: De globale architectuur van de simulatietool
16
2.1 De persistence layer 2.1.1 Het databasesysteem en de database De data moeten ergens bewaard worden. Aangezien het gaat om een immense hoeveelheid data is het gebruik van een database aangewezen. Een database is wel niet rechtstreeks beschikbaar voor de applicatie daar het beheerd wordt door het databasesysteem. Met SQL, een database query taal, is de applicatie in staat om via het databasesysteem specifieke operaties uit te voeren op de database. Dit betekent dat een extra laag tussen de applicatie en het databasesysteem dient te worden verzorgd. Die laag is namelijk de data access layer welke verder in de tekst zal worden toegelicht. Er bestaan veel verschillende databasesystemen. In dit project is er al gekozen voor Microsoft SQL Server 2005. Dit databasesysteem is een RDBMS of relationeel database management systeem. Een relationeel database dient dus te worden ontworpen. Bij het ontwerp van een database is het opstellen van entiteiten-relatie-diagram of ER-diagram zeer handig. Een ERdiagram beschrijft namelijk het relationeel model van de database onafhankelijk van een gekozen databasesysteem. Een dergelijk diagram toont duidelijk de relevante entiteiten uit het domeinmodel en de relaties ertussen. Op basis daarvan wordt een databaseschema opgesteld en volgens dat schema wordt dan de feitelijke databasestructuur opgebouwd in Microsoft SQL Server 2005. Verder wordt op basis van het ER-diagram de corresponderende business entiteiten als klassen in de applicatie aangemaakt.
2.1.2 Het ER-diagram Tijdens het ontwerpen van het entiteiten-relatie-diagram werd nagedacht aan de nodige gegevens nodig voor het statisch transportmodel en voor het aanmaken van een scenario. Deze gegevens zijn dan logisch gegroepeerd als zogenaamde entiteiten. Deze entiteiten kennen een bepaalde relatie t.o.v. andere entiteiten. Deze dienen dan ook worden aangegeven. In figuur 2.2 vind je het resultaat terug. Om het overzichtelijk te houden zijn de attributen van de entiteiten niet weergegeven.
17
Figuur 2.2: Het ER-diagram
In een bedrijf zijn er onderdelen die in verpakkingen (pallet, doos, rek…) geleverd worden. Een station is een onderdeel van een productielijn binnen een bedrijf. De productievloer van een bedrijf kan op verschillende mogelijke manieren worden ingericht en dus zijn er verschillende lay-outs mogelijk. Voor elke lay-out moet duidelijk gemaakt worden hoe de sporen tussen de spoorpunten lopen. Een dergelijke spoorpunt kan een station voortstellen. Verder zijn er trajecten nodig voor treintjes. Een traject is voor te stellen als een aaneenschakeling van sporen. Een transportsysteem met specifieke karakteristieken en een scenario moeten gedefinieerd worden om het totale gedrag van transporten te beschrijven. Verder is een transportbatch een container die telkens dezelfde aantallen en types van goederen bevat, die volgens een bepaalde frequentie moet worden getransporteerd van het ene station naar het andere station.
18
Aan een scenario wordt een bepaalde lay-out, transportsysteem en eventueel ook een traject gekoppeld. Op deze manier kan eenvoudige voor een ander lay-out, transportsysteem of traject worden gekozen en ontstaat er geen woekering aan onnodige scenario’s. De enkelvoudige resultaten worden dan weggeschreven als waarden van de outputparameters.
2.1.3 Het databaseschema Nu de entiteiten en de relaties ertussen bekend zijn, kan een databaseschema opgesteld worden. Naast de bekendmaking van de attributen van een entiteit moet bij een attribuut enkele eigenschappen ingesteld worden. Naast het indexeren ervan is een datatype kiezen zeer belangrijk. Er kunnen alleen datatypes worden gekozen die Microsoft SQL Server 2005 aanbiedt. De onderstaande figuren stellen het databaseschema voor dat aangemaakt is met Microsoft SQL Server 2005 en waarop uiteindelijk de database is gebaseerd. In bijlage A worden de beschrijving en de eigenschappen van de attributen van de entiteiten verder beschreven.
19
Figuur 2.3: De databaseschema – deel 1
20
Figuur 2.4: De databaseschema – deel 2
21
Figuur 2.5: De databaseschema – deel 3
22
Figuur 2.6: De databaseschema – deel 4
23
2.2 De data access layer 2.2.1 Het Data Access Object design pattern Er bestaan veel verschillende persistentiesystemen om data op te slaan om dan deze weer terug op te vragen. Denk maar aan systemen zoals relationele databases, objectgeoriënteerde databases, flat files, XML repository. Verder zijn er verscheidende data access en persistentie mechanismen tussen eenzelfde type persistentiesysteem wat leidt tot verschillende API’s. Het Data Access Object (DAO) design pattern biedt juist een consistente application programming interface (API) aan de bovenliggende lagen van de applicatie. Het biedt namelijk een techniek om de objectpersistentie en de data access logica te scheiden van om het even welk bijzonder persistentiemechanisme via een specifieke API corresponderend met het persistentiesysteem. Het DAO design pattern biedt ook de flexibiliteit om het te gebruiken persistentiemechanisme en/of persistentiesysteem te wijzigen. Die flexibiliteit zit in het feit dat enkel de implementatie ervan moet worden herschreven (lees: de data acces layer te worden vervangen) voor een ander persistentiemechanisme en/of persistentiesysteem zonder aanpassingen te moeten doorvoeren in andere delen van de applicatie. Zonder een dergelijke data acces layer zou bij een wijziging in het persistentiemechanisme en/of persistentiesysteem zeer uitgebreide aanpassingen moeten worden doorgevoerd in de bestaande code en zal het opnieuw debuggen van de gewijzigde code onvermijdelijk zijn.
2.2.2 De implementatie met de business entities Wat elk persistentiesysteem zeker gemeen heeft, zijn de zogenaamde CRUD operaties: Create, Read, Update en Delete. Verder dienen er ook enkele query operaties uitgevoerd te worden. Als peristence systeem werken we met Microsoft SQL Server 2005. De nodige operaties worden dus uitgevoerd via SQL. Een dergelijk persistence systeem is tabel-record gericht. Daarom wordt er voor elke tabel een DAO geschreven. Omdat de code en de SQL generiek zijn, is er gekozen om een abstracte generieke DAO te schrijven vanwaar elke concrete DAO overeenstemmend met de databasetabel zal kunnen overerven. Verder moet er een mapping gebeuren tussen de records van de database en de objecten die aanwezig zijn in de heap van de applicatie. Voor de eenvoud mapt een object volledig met de record en stelt de primary key als integer telkens de ID eigenschap van het object voor tenzij het gaat om een zogenaamde tussentabel om een many to many relatie te kunnen voorstellen. De record zal nog steeds een ID hebben, maar de primary key is nu samengesteld uit de foreign keys van minimum twee betrokken tabellen om geen duplicated records toe te laten in de tussentabel. Om te voorkomen dat twee dezelfde records uit een tabel geladen worden en daarbij als twee verschillende objecten op de heap terecht komen, wordt er ook gewerkt met een identity map om zo geen nieuw object te creëren, maar het reeds bestaande object te nemen. Deze objecten 24
worden namelijk beschouwd alszijnde business entiteiten en dus horen hierbij ongewilde duplicaten niet thuis. Bij het laden van een record kunnen er links zijn met andere records door de relaties tussen de verschillende databasetabellen. Deze andere records kunnen op hun beurt ook weer links hebben met andere records. Om te vermijden dat alle gelinkte records zouden worden geladen, wordt er eerst gezorgd voor de corresponderende entiteit van het geladen record en bijgevolg wordt voor elk gelinkte record gezorgd voor een ghost object. Een ghost object is een object met alleen de geladen ID waarde. Wanneer de interne data van een dergelijke ghost object wordt benaderd, wordt het corresponderende record effectief geladen in het ghost object en wordt het ghost object een zogenaamd loaded object. Een dergelijke techniek wordt lazy loading genoemd.
2.3 De business logic layer 2.3.1 Validatie Via de gebruiker of via de importfunctie wordt de data ingevoerd in de applicatie. Deze data dient geldig te zijn binnen het domeinmodel en dus wordt daarop eerst een validatie uitgevoerd. De validatieregels (de zogenaamde business rules) dienen dus worden beschreven en geschreven in code.
2.3.2 Import- en exportfuncties Een importfunctie is essentieel om de grote hoeveelheid beschikbare externe data in de database te kunnen bewaren. Die data wordt voornamelijk beschikbaar gesteld via Excel bestanden. Bedrijven vinden het namelijk gemakkelijker om de verzamelde data bij te houden in Excel. De aanwezigheid van een exportfunctie is nodig om de data in de database extern beschikbaar te maken voor andere gebruikers of applicaties. Het uiteindelijke doel van de exportfunctie is om met de geëxporteerde data een basismodel binnen Plant Simulation op te bouwen die dan verder aangepast kan worden door de gebruiker voor verdere optimalisaties en voor het uitvoeren van een dynamische simulatie welke ook in 3D gevisualiseerd kan worden. Voor de import- en exportfuncties moeten bestandsformaten gekozen worden die gebruikt worden buiten de applicatie. Enkel twee bestandsformaten zijn interessant voor het project: het Excel en XML bestandsformaat.
25
In een geïmporteerd bestand kunnen er foutieve en ongeldige waarden zijn. Daarom is validatie van de data zeer belangrijk welke dan ook zal verzorgd worden door de importfunctie. 1.1.1.1 De Excel templates De gebruiker werkt liever met Excel bestanden dan met bijvoorbeeld XML omdat het ingeven en aanpassen van data eenvoudig en snel kan gebeuren. Het is dan ook logisch om het Excel bestandsformaat als importformaat te nemen. Binnen een Excel bestand kan er meer dan één werkblad voorkomen. Een werkblad met rijen en kolommen is voor te stellen als een tabel en is dus te vergelijken met een databasetabel. Alleen de relaties tussen de tabellen, verdeeld over meerdere werkbladen en Excel bestanden, bestaan niet. Het is dus aan de importfunctie om naast de structuur van de tabellen ook de relaties te kennen en zo de opgehaalde data juist weg te schrijven naar de database. Om de structuur van de Excel bestanden niet elke keer te moeten opbouwen, is het zeer interessant om er Excel templates van te maken. Er is bewust gekozen om niet het nieuwe Office 2007 bestandsformaat (XLSX) te nemen. Het is een gecompresseerde bestandsformaat dat bij het openen alsook het opslaan met Excel veel tijd in beslag neemt wanneer het een groot bestand betreft, dus met zeer veel data. 2.3.2.1 Het XML bestandsformaat Het XML bestandsformaat biedt een zeer eenvoudig gestructureerde dataopslag onafhankelijk van de te gebruiken applicatie om het in te lezen of weg te schrijven. De inhoud van een XML bestand is namelijk leesbaar voor zowel mens als machine en kan worden geopend met een gewone tekstverwerker zoals Kladblok. In principe kan zelfs de hele inhoud van de database weggeschreven worden in één XML bestand wat niet zomaar kan met een Excel bestand door de beperkingen van de Excel applicatie. Het is dus zeer interessant om XML als exportformaat te kiezen. Dit te meer aangezien de simulatiesoftware Plant Simulation in staat is om een XML bestand in te lezen via het ingebouwde scripttaal SimTalk. Het kan interessant zijn om ook XML als importformaat te nemen. Zo kan de geëxporteerde data terug geïmporteerd worden. Indien XML als native importformaat zou worden genomen dan hoeft alleen een reeks van Excel bestanden geconverteerd worden naar een XML bestand. Aangezien het om grote hoeveelheden data gaat, neemt een dergelijke omweg extra tijd in beslag. Daarom zal er gekozen worden om toch de data uit het Excel bestand rechtstreeks in de database te importeren.
2.3.3 Persistentie De business entiteiten moeten kunnen worden opgeslagen in de database alsook weer worden verwijderd uit de database. Het betreft niet één type business entiteit dat correspondeert met
26
één databasetabel maar om verschillende business entiteiten en dus om meerdere databasetabellen. Omdat er een relatie bestaat tussen de databasetabellen moeten de records binnen een databasetabel volgens een welbepaalde volgorde worden aangemaakt of verwijderd. Bij nieuwe en ondersteunde databasesystemen kan hetzelfde worden uitgevoerd via het zogenaamde cascade delete teckniek. Microsoft SQL Server 2005 ondersteunt dit door de eigenschap ‘ON DELETE CASCADE’ toe te kennen aan de foreign key. Dit stukje persistentielogica hoort in de business logic layer omdat daar eerder het business model beschouwt wordt dan de atomaire business entiteiten. Voor de eenvoud is het business model rechtstreeks opgebouwd uit business entiteiten.
2.3.4 Het statisch transportmodel Dit stukje logica binnen de business logic layer is waar alles om draait binnen het project. Logischerwijs wordt dit uit te doeken gedaan in een apart hoofdstuk namelijk hoofdstuk 3: Het statische transportmodelFout! Verwijzingsbron niet gevonden..
2.3.5 Rapportering Op basis van een scenario worden de gewenste resultaten berekend volgens het statisch transportmodel. Zo’n berekening kan veel tijd vergen afhankelijk van de hoeveelheid data dat moet worden verwerkt. Om de berekening niet telkens te moeten uitvoeren, worden de resultaten wegschreven in een Word document om dan zo de resultaten terug op te vragen en eventueel deze af te printen of in PDF of één of ander bestandsformaat om te zetten. Microsoft Word wordt naast Excel ook vaak gebruikt binnen de bedrijven en dus is het logisch om de rapportdocumenten aan te maken in Word en/of Excel.
2.4 De presentation layer 2.4.1 Inleiding De presentation layer is een belangrijke laag binnen de applicatie aangezien dit de enige laag is die visueel zichtbaar is voor de gebruiker. Ook de gebruikservaring van de applicatie wordt grotendeels bepaald door de implementatie ervan. In de volgende paragrafen wordt kennis gemaakt met de verschillende componenten binnen de presentation layer die zijn geïmplementeerd om de gebruiksvriendelijkheid te verhogen. Op deze manier wordt aangetoond dat daaraan ook aandacht is besteed tijdens het ontwikkelen van de applicatie.
27
2.4.2 De basiscomponenten 2.4.2.1 Acties en commando’s Een applicatie moet de beschikbare acties aan de gebruiker tonen en dit gebeurt veelal via actieknoppen zoals de menu’s, de context menu’s en de toolknoppen. De acties worden dan ook getriggerd door te klikken op de actieknoppen. Verder zijn ze ook beschikbaar via niet zichtbare wegen. Denk maar aan de sneltoetsen zoals de veel voorkomende sneltoetsen ‘Control X’, ‘Control C’ en ‘Control V’ voor respectievelijk de acties knippen, kopieëren en plakken. Een actie biedt hierbij een interface met de gebruiker en zorgt zo ook voor een gemeenschappelijke punt naar de concrete uitvoering van de gekozen actie. Deze concrete uitvoering wordt een commando genoemd. De nodige acties kunnen we programmeren in een aparte klasse voor een modulaire opbouw van de applicatie en worden dan als een object gebonden aan de actieknoppen. Bepaalde acties kunnen niet uitgevoerd worden bij een bepaalde context binnen de applicatie en dit moet duidelijk kunnen worden gemaakt aan de gebruiker door de actieknoppen onbruikbaar te maken door deze te disablen. Om het leven van de programmeur gemakkelijk te maken, kan dat allemaal automatisch via code worden verzorgd. De update event, die nodig is om de acties te kunnen disablen en weer te enablen, vinden we terug in een verdoken functionaliteit in het .NET Framework die niet direct gebruikt wordt, namelijk de event System.Windows.Forms.Application.Idle. Wanneer een dergelijk event zich voortdoet, moet aan de acties de huidige context van de applicatie worden doorgeven. Een belangrijke contextinformatie is de actieve control op de actieve form die opgevraagd wordt via System.Windows.Controls.Form.ActiveForm.ActiveControl. Er moet alleen nog een klein detail opgelost worden. Wanneer deze actieve control afgeleid is van ContainerControl dan dient verder de actieve control binnen die ContainerControl opgevraagd te worden en dit kan op dezelfde manier aangezien de Form zelf is afgeleid van ContainerControl. 2.4.2.2 Workspaces, panels, navigators en editors Een applicatie maakt veelvuldig gebruik van controls. Via deze controls is er communicatie over en weer tussen een gebruiker en de applicatie en dus bieden de controls een grafische interface aan met de gebruiker. De controls dienen gegroepeerd te worden in panels die dan weer gegroepeerd kunnen worden tot de uiteindelijke workspace die de huidige contentpane van de applicatie voorstelt. De gebruiker kan dan switchen tussen de verschillende workspaces. Op deze wijze worden alleen de nodige controls getoond en zo wordt het werkveld binnen de applicatie vergroot. Binnen eenzelfde applicatie zijn er ook controls aanwezig die dienst doen als navigators zoals een treeview, een tabcontrol en dergelijke meer. Dergelijke navigators laten de gebruiker toe
28
om een stukje van het gehele object model te selecteren. Een editor zal dan de data uit het object model zichtbaar maken aan de gebruiker en deze laten bewerken. 2.4.2.3 De undo manager In elke goede applicatie wil de gebruiker de mogelijkheid hebben om zijn acties ongedaan te kunnen maken. Ook hier zal gezocht moeten worden naar een dergelijke implementatie. Doordat de acties in aparte klassen zijn geschreven, kan nu eenvoudig de overeenkomstige undo en redo commando’s ervoor worden geschreven. Om een undo en een redo commando te kunnen uitvoeren moeten de nodige data meegegeven worden bij de aanmaak van een commando object om dan toe te voegen aan de stack van de undo manager. De undo manager zal dan die commando’s bijhouden alsook het juiste undo of redo commando uitvoeren. Er moet alleen nog een compromis genomen worden zoals het maximaal aantal bij te houden commando’s en dat niet alle acties ongedaan kunnen worden gemaakt. Op deze wijze wordt de complexiteit van de applicatie niet verhoogd. Een undo manager hoort gekoppeld te zijn met een object model zoals dit is gedaan voor de Routing Model binnen de applicatie in dit project.
2.4.3 Extra componenten 2.4.3.1 De BorderPanel In Java is het eenvoudig om een control een bepaalde border mee te geven. In .NET Framework ligt dat anders. Bepaalde controls hebben een border, anderen niet. En als ze een border hebben, dan is het mogelijk om deze te verbergen doch is het niet mogelijk om een aangepaste kleur of dikte daarvoor in te stellen. Met de BorderPanel is het mogelijk om een control voor bepaalde kanten te laten voorzien van een border met een bepaalde kleur en dikte. 2.4.3.2 De CaptionLabel De CaptionLabel is ontwikkeld om ten eerste eenvoudig een icoon te kunnen plaatsen naast een label in vetjes en ten tweede om een gradiënt als achtergrond te hebben zoals in MenuStrip, ToolStrip en StatusStrip. De gebruikte kleuren komen van het Windows Theme. Via het event Microsoft.Win32.SystemEvents.UserPreferenceChanged wordt de catergorie van aangebrachte wijzigingen in de gebruikersvoorkeuren opgevraagd via UserPreferenceChangedEventArgs.Category en wanneer deze gelijk is aan de categorie UserPreferenceCategory.Color dan weet de applicatie dat de gebruiker het Windows Theme (Kleurencombinatie) heeft aangepast. Via native calls kan de keuze in het Windows Theme (zie figuur 2.7 en figuur 2.9) worden opgevraagd en op basis daarvan worden de kleuren meegegeven.
29
Figuur 2.7: Het Windows XP Theme aanpassen
Figuur 2.8: Een CaptionLabel, aangepast aan het Windows XP Theme
30
Figuur 2.9: Het Windows Classic Theme aanpassen
31
Figuur 2.10: De simulatietool aangepast aan het Windows Classic Theme
2.4.3.3 De GlassPane Wanneer een applicatie een kritische proces uitvoert, is het gewenst dat de gebruiker tijdelijk de controls van de applicatie niet meer kan benaderen. Dit kan gedaan worden volgens het concept dat de controls zich achter het glas bevinden. De gebruiker ziet de controls nog wel. In Java is dit soort functionaliteit beschikbaar. In het .NET Framework is er geen dergelijk functionaliteit. Om een panel transparant te krijgen, moet extra informatie (CreateParams) worden meegegeven aan Windows die de panel zal aanmaken. Die extra informatie kan worden meegegeven zoals in de onderstaande code listing 2.1. Om te zorgen dat GlassPane de bovenste control wordt, moet deze als eerste control worden toegevoegd en om te zorgen dat alle controls bedekt zijn, moet de DockStyle eigenschap op Fill ingesteld staan. Om de GlassPane nog niet te gebruiken, moet het onzichtbaar gemaakt worden. Ter verduidelijking is de code onderaan in code listing 2.2 meegegeven.
32
Code Listing 2.1: Volgorde van uitvoering public class GlassPane : Panel { protected override CreateParams CreateParams { get { CreateParams createParams = base.CreateParams; createParams.ExStyle |= 0x20; // WS_EX_TRANSPARENT return createParams; } } }
Code Listing 2.2: Volgorde van uitvoering GlassPane glassPane = new GlassPane(); glassPane.Dock = DockStyle.Fill; Form f = new Form() f.Controls.Add(glassPane); f.Controls.Add(toolStripContainer); f.Controls.Add(mnuMain); f.Controls.Add(stbMain); glassPane.Visible = false
2.4.3.4 De TabStrip De TabControl uit de namespace System.Windows.Forms van het standaard .NET Framework biedt geen mogelijkheden zoals de beruchte documentgebaseerde tab control uit Microsoft Visual Studio. Die tab control biedt de mogelijkheid om tabbladen te openen, te sluiten en de volgorde ervan te laten wijzigen door de gebruiker zelf. Daarom wordt een eigen tab control ontwikkeld die vergelijkbare functionaliteit kan bieden als die van Microsoft Visual Studio.
2.4.4 De database workspace 2.4.4.1 Inleiding De gebruiker zal graag de inhoud van de database willen zien. Alle inhoud van de database ophalen en deze weergeven is geen goed idee aangezien het gaat om een enorme hoeveelheid data. Dit kan worden opgelost met een database navigator waar de gebruiker een keuze kan maken om alleen dat deel van de database te tonen. Vervolgens wordt de data uit de database getoond in een database viewer. 2.4.4.2 De database navigator De database is hiërarchisch opgebouwd en dus de navigator moet een treeview zijn. Er is alleen een klein detail dat dient te worden opgelost. De gebruiker kan sneller door de tree 33
wandelen dan data opgehaald kan worden. Om geen vertraging in het doorlopen van de tree op te lopen, is het interessant om delayed events te implementeren. Dit is ook toegepast in Windows Explorer. De event die optreedt bij het selecteren van een tree node wordt gewoon uitgesteld. Dit kan worden verwezenlijkt door de event nog niet af te handelen en alleen een timer te starten. Wanneer een ander event binnen de delay optreedt zal de timer gewoon worden herstart. Wanneer deze timer afloopt, dan pas zal de event afgehandeld worden. Het verstrijken van de tijd van de timer maakt namelijk de applicatie duidelijk dat de gebruiker aan het wachten is op de inhoud van de geselecteerde tree node en dus het tijd is om de data uit de database te halen.
Figuur 2.11: De database navigator
2.4.4.3 De database viewer De snelste en eenvoudigste manier om de data uit de database te tonen aan de gebruiker is door de DataGridView te laten binden met de data via een DataTable. Deze DataTable wordt dan gevuld met de data uit de database. De DataGridView biedt de zogenaamde Virtual Mode waarmee alleen de nodige gegevens worden opgevraagd. Het probleem is dat er geen cache is voorzien en de mogelijkheid om de data te sorteren moeilijker wordt en dus wordt geen gebruik gemaakt van de Virtual Mode.
34
Figuur 2.12: De database viewer
2.4.5 De scenario workspace 2.4.5.1 Inleiding In een scenario-omgeving kan de gebruiker nieuwe scenario’s aanmaken. Een scenario omvat de inputparameters, de lay-out en de transportsystemen met bijhorende karakteristieken. Een nieuw transportsysteem kan eenvoudig aangemaakt en gewijzigd worden via een dialoogvenster. Op dezelfde wijze kan dit ook voor de inputparameters. De lay-out zelf kan best visueel aangemaakt en gewijzigd worden. Een canvas waarop getekend zal worden, is dus nodig en doet bijgevolg dienst als de editor van de lay-out’s. 2.4.5.2 Het canvas Het canvas voor lay-outs heeft verschillende lagen nodig die in vaste volgorde moeten worden getekend. Een laag voor de achtergrondafbeelding welke de plattegrond van de productievloer van een bedrijf moet voorstellen. Een laag voor de sporen en een laag waarop de spoorpunten zich bevinden. Deze spoorpunten stellen ofwel een netwerk node voor ofwel een station. De sporen zijn de verbindingslijnen tussen de spoorpunten. Aangezien er veel punten en verbindingslijnen in een lay-out aanwezig kunnen zijn, is het interessant om deze te verdelen in gebieden om groepen te creëren via bijvoorbeeld een quadtree welke een eenvoudige spatiale datastructuur biedt. Op een dergelijke manier kunnen objecten sneller binnen een gebied gevonden worden. Dit is handig te gebruiken voor de selectietool en bij het tekenen aangezien maar een beperkt aantal punten en verbindingslijnen binnen het canvas zichtbaar zijn voor de gebruiker. 2.4.5.3 De quadtree Er zullen zich veel grafische elementen op een canvas bevinden. Om enkel het deel in het zichtbaar gebied van het canvas te tekenen, kan men met de quadtree1 die elementen opvragen. Ook bij het selecteren van de elementen is de quadtree nuttig. Daarom is het zinvol om in onze applicatie het canvas te voorzien van een quadtree. Om eenvoudig de spoorpunten van de sporen in de quadtree te onderscheiden, worden twee quadtrees gebruikt.
1
De quadtree wordt behandeld in paragraaf 5.3
35
2.4.5.4 De tools Om het canvas of het object model te manipuleren zijn tools nodig. Deze tools werken onafhankelijk van elkaar en daarbij kan er maar één tool tegelijkertijd actief zijn. Navigatietools zoals pan en zoom zijn nodig om te kunnen kunnen navigeren in een canvas dat groter is dan het zichtbaar canvas. Een selectietool selectietool kan gebruikt worden om objecten te selecteren. en om de geselecteerde objecten te verplaatsen. Met de pentool kan men de punten op de laylay out plaatsen en met de lijntool tool worden de punten met elkaar verbonden. nden. Een taject kan opgesteld worden via de trajecttool. traje Het één- of tweerichtingsverkeer van een track kan eenvoudig aangepast worden met de penseel. De mogelijkheid om snel te veranderen van tool of van gedrag ervan wordt verwezenlijkt via voorgedefinieerde sneltoetsen. toetsen.
Figuur 2.13: De toolbar
De punttool beschikt over uitlijningsfuncties zodat een trackpunt uitgelijnd kan worden met bestaande trackpunten en/of tracks. Deze uitlijningsfunctie maakt gebruik van de projectie van een punt op een lijn. De wiskundige uitvoering ervan is na te lezen in paragraaf B.1. 2.4.5.5 De cursors Via cursors sors geven de tools een visuele status weer naar de gebruiker toe. De icoonafbeelding wordt hiervoor ingeladen in het Cursor object en vervolgens toegekend aan de control, control namelijk de canvas, waarboven de cursor zal worden veranderd in de ingestelde cursor. cursor 2.4.5.6 De scrollpane Het canvas kan groter zijn dan het zichtbaar gedeelte. Om dit naar de gebruiker te tonen worden scrollbars gebruikt. Het .NET framework biedt echter geen echte scrollpane zoals de JScrollPane in Java. Er is wel een dergelijke dergelijk functionaliteitt in het .NET framework ingebouwd, namelijk in de ScrollableControl, maar is niet zo handig voor onze canvas. Deze scrollpane is eerder bedoeld voor wanneer er meer controls zijn dan zichtbaar voor de gebruiker en dus niet alle controls getoond kunnen worden. worden. In dat geval zullen de nodige scrollbars getoond worden. Een eenvoudig scrollpane kan ontwikkeld worden door een panel als viewport te nemen waar onze canvas volledig zal plaatsnemen en vervolgens v de horizontale en verticale scrollbars aan toe te voegen. voegen. En als laatste dient nog het gedrag te worden geprogrammeerd en uiteindelijk hebben we ons eigen scrollpane dat goed bruikbaar is voor onze canvas.
36
Figuur 2.14: Duidelijk een scrollpane control
2.4.5.7 De canvas navigator De afbeelding van de plattegrond van de productievloer zal veelal groter zijn dan één computerscherm. Om sneller naar een bepaalde plaats te navigeren is een degelijke navigator voor het canvas nodig. Hierbij biedt de navigator een miniatuur van het volledige canvas (alleen de plattegrond) en een rechthoekig venster op de miniatuur dat de plaats van het huidige zichtbare gedeelte van het canvas aanduidt. De gebruiker kan het venster dan bewegen over de miniatuur of ergens klikken op de miniatuur om naar de gewenste plaats te navigeren. Er is ook plaats aanwezig voor de nodige controls die de gebruiker kan gebruiken om de zoom van het canvas in te stellen. In de rechterbenedenhoek van de scrollpane zit ook nog een gelijkaardige canvas navigator. Dit is in het leven geroepen om plaats te besparen dat de eerste canvas navigator inneemt in de lay-out editor. 2.4.5.8 Het attribuutpanel Wanneer een relevant object op het canvas wordt geselecteerd dan worden de attributen ervan getoond in het attribuutpanel. Bepaalde waarden van de attributen kunnen in het attribuutpanel gewijzigd worden door de gebruiker.
37
Figuur 2.15: Het attribuutpanel voor trackpunt en voor track
38
3 Het statische transportmodel 3.1 Inleiding De bedoeling van de statische berekening is om sneller benaderend te kunnen bepalen hoeveel carriers binnen een transportsysteem nodig zijn om tijdens een shift alle materiaalstromen te kunnen uitvoeren. In dit transportmodel wordt voor de vertrouwde vorklift gekeken naar een alternatief transportsysteem zoals de automated guided vehicle (AGV) welke vergelijkbaar is met de vorklift qua transporteigenschappen. Ook andere transportsystemen zoals AGV treinen, conveyors en electrified overhead monorails (EOM) worden bekeken. In de eerstvolgende paragraaf wordt dan ook de interessante transportsystemen kort beschreven. Verder wordt de vraag gesteld waarom het aantal carriers kennen zo belangrijk is. In de zoektocht naar het aantal nodige carriers is hierbij de afstand tussen de stations belangrijk. In de laatste paragraaf wordt de formule naar het aantal nodige carriers opgesteld.
3.2 Transportsystemen 3.2.1 Wat is een AGV? Een automated guided vehicle (AGV, automatisch geleide voertuig) is een onbemand voertuig welke autonoom goederen van het ene station kan vervoeren naar een ander station. Door het transporteren van goederen – de materiaalstroom – volledig te automatiseren, wordt een hoge mate van efficiëntie bereikt en dit tegen lagere kosten. Het gebruik van AGV’s vraagt wel om een centraal besturingssysteem die de locatie en de status van elke AGV in real-time moet kennen. Het is namelijk het centraal besturingssysteem dat de beslissingen neemt en vervolgens de opdrachten geeft aan de AGV’s. Verder dient een AGV geleid te kunnen worden naar een bepaald station via de toegestane paden. Het geleiden van een AGV kan gebeuren via een spoor, een inductieve geleiding, een optische geleiding of tegenwoordig ook met RFID-tags. Combinaties van de genoemde geleidingssystemen zijn ook mogelijk.
39
Figuur 3.1: Een automated guided vehicle (AGV) dat een zichtbaar spoor volgt (http://www.wampfler.com/data/files/bildarchiv/FTS_105_530_3.jpg)
Figuur 3.2: Een automated guided vehicle (AGV) dat geen zichtbaar spoor volgt (http://www.cstckm.com/ch/uploadfile/2008/721/2008728124035379.jpg)
3.2.2 Wat is een AGV trein? Een AGV trein is een automatisch geleide voertuig dat is uitgevoerd als een trein dus met verschillende carriers aan elkaar alszijnde de wagons van een trein. Dit type transportsysteem kent voorlopig nog geen grote doorbraak aangezien een AGV in vergelijking met de treinversie een grotere flexibiliteit kent. Mocht een dergelijk systeem nodig zijn, dan wordt het eerder uitgevoerd als een (ketting)conveyorsysteem.
40
3.2.3 Wat is een conveyor? Een conveyor is een zeer eenvoudig transportsysteem en kan ladingen in alle verschillende vormen probleemloos transporteren aan een hoge snelheid van het ene oppikstation naar de andere afzetstation. Er bestaan verschillende conveyorsystemen [7]. De meest gekende conveyorsysteem is traditioneel de transportband. Een ander ook veelvoorkomend systeem is de kettingconveyorsysteem. Een dergelijk conveyorsysteem heeft als voordelen dat (zoals te zien is in figuur 3.4) de ladingen zich stabieler verplaatsen dankzij een dempend ophangingsysteem en de aanwezige klemmen en dat de ladingen eenvoudig naar een hogere of lagere niveau binnen de productiehal kan worden getransporteerd.
Figuur 3.3: De transportband als conveyorsysteem (http://www.automation-supplies.com/resources/Modular+Plastic+Belt+Conveyor.jpg)
41
Figuur 3.4: Een kettingconveyorsysteem (http://www.vanbellen.org/HANGBAAN.jpg)
3.2.4 Wat is een EOM? Een electrified overhead monorail (EOM) is een monorail systeem dat vergelijkbaar is met een conveyorsysteem met het verschil dat aan een monorail een aantal carriers hangen die onafhankelijk van elkander kunnen verplaatsen doch in dezelfde richting. Bij een conveyorsysteem verplaatsen alle ladingen aan een zekere snelheid, terwijl bij een monorail systeem dit niet hoeft. De carriers kunnen tijdelijk hun snelheid aanpassen en zelfs stilstaan zolang er maar geen botsing tussen de carriers ontstaan. Dit maakt als transportsysteem zeer interessant voor bijvoorbeeld de automobielindustrie. In figuur 3.5 is het duidelijk te zien dat elke carrier een eigen aandrijfsysteem heeft.
42
Figuur 3.5: Een electrified lectrified monorail system (EMS) binnen de automobielindustrie industrie (http://www.wampfler.com/data/files/bildarchiv/TRAN_02 http://www.wampfler.com/data/files/bildarchiv/TRAN_02-09-18-01_0815_EHB_BMW_Dingolfingen_105_559_4.jpg 01_0815_EHB_BMW_Dingolfingen_105_559_4.jpg)
3.2.5 Het juiste transportsysteem kiezen Het juiste transportsysteem kiezen is een zeer cruciale beslissing voor de efficiëntie van het tranport en naar kostenn toe. In onderstaande figuur 3.6 is het duidelijk dat de keuze van een transportsysteem in eerste instantie wordt gemaakt in functie van de te overbruggen afstand en de hoeveelheid te verplaatsen materiaal. Via simulatie latie en na economische analyse moet dan verder duidelijk worden of de gemaakte keuze voor een transportsysteem qua type en transporteigenschappen de gewenste efficiëntie efficiëntie van het tranport effectief behaald en dat de kosten daarvoor aanvaardbaar zijn. zijn
Figuur 3.6: Een transportsysteem kiezen
43
3.3 Waarom is het aantal carriers kennen zo belangrijk? De implementatie van een volledig transportsysteem is weliswaar een serieuse investering. Eén carrier alleen al kost heel veel. Daarom is het geen slecht idee om eerst goed te bepalen met welk (minimaal) aantal carriers de volledige materiaalstroom binnen een zekere tijd kan worden uitgevoerd. Door de lay-out van de productievloer en de te volgen paden voor de carriers te wijzigen (lees: optimaliseren) alsook het goed kiezen van een transportsysteem met bepaalde transporteigenschappen kan het aantal carriers worden verminderd. Daarnaast bepaalt het aantal carriers ook het het performantieniveau van een transportsysteem. Wanneer er te veel carriers zijn, is de kans groter dan er een opstopping in het verkeer zal optreden. Doch wanneer er te weinig carriers zijn, zullen de wachttijden oplopen voor een beschikbare carrier en zal de lading dus later dan verwacht bezorgd worden wat nefast is voor een productieproces dat constant moet worden gevoed met materiaal. Later kan men de dynamische simulatie uitvoeren met het ingeschatte aantal nodige carriers als de initiële waarde. Het dynamisch gedrag (uitval door defecte carriers en dergelijke meer) wordt nagegaan en eventueel wordt het aantal carriers aangepast om de efficiëntie van het transport te kunnen blijven behouden ongeacht de onvoorziene omstandigheden die kunnen optreden.
3.4 Het kortstepadalgoritme 3.4.1 Inleiding In de statische berekening wordt verondersteld dat de carriers de korste paden nemen en zich voortbewegen aan een constante snelheid. De paden, waarop het transport van batches zal verlopen, zijn terug te vinden in de lay-out van de productievloer als sporen gekoppeld via spoorpunten. De vergelijking met een graaf kan worden gemaakt met de spoorpunten als knopen en de sporen als takken. Hierbij hebben de sporen een richting en een lengte. Een graaf is hier ook interessant omdat het bekende kortstepadalgoritme van Dijkstra wordt uitgevoerd op een graaf. Daarom dient een graaf als datastructuur te worden ontworpen. Wat een graaf is en hoe ermee moet worden omgegaan, vereist verdere studie waarvan het resultaat na te lezen is in paragraaf 5.1.
3.4.2 De Minimum Spanning Tree Op basis van een ongerichte graaf kan een opspannende boom (een subgraaf) worden gevonden die de incidente knopen van de graaf bezit. Er zijn verschillende bomen (lees: oplossingen) mogelijk. Voor een ongerichte, gewogen graaf kan verder een minimum
44
opspannende boom of in het Engels Minimum Spanning Tree (MST) worden gevonden. Een minimum opspannende boom heeft namelijk het minimum aan gewicht in vergelijking met de gewichten van alle mogelijke opspannende bomen voor eenzelfde graaf. Het gewicht van een boom is gewoonweg de som van de gewichten van zijn takken. Merk op dat er nog steeds verschillende minimum opspannende bomen voor eenzelfde graaf kunnen worden gevonden die hetzelfde minimum gewicht hebben. De resulterende MST biedt niet echt het kortste pad tussen twee knopen, maar eerder het minimum aan totale lengte van de paden tussen alle knopen. Doch helpt de studie van MST om het kortstepadalgoritme van Dijkstra beter te doen begrijpen aangezien Prim-Jarnik’s algoritme er sterk op lijkt. Prim’s algoritme alsook die van Kruskal’s en Borůvka's worden binnen de grafentheorie gebruikt om een MST te vinden. [9, 23, 32, 33]
3.4.3 Het kortstepadalgoritme van Dijkstra Het kortstepadalgoritme van Dijkstra bouwt in feite een korstepadboom op vertrekkende vanaf een beginknoop welke de root van de korstepadboom zal zijn. Dankzij de opbouw van de korstepadboom kan inderdaad het kortst mogelijke pad vanaf de beginknoop naar elke knoop binnen de graaf alsook de bijhorende lengte ervan worden teruggevonden na de uitvoering van het algortime. [13, 20, 25, 31]
45
Input: Output:
Variabelen:
Initialization:
Algoritme 1: Kortstepadalgoritme van Dijkstra − Gerichte, gewogen graaf met positief gewogen takken − Beginknoop >@ D EBF Voor elke knoop > D EBF kunnen we opvragen: − de kortste afstand tussen >@ en > via G,E>F − de tussenknopen op het kortste pad via voorganger %HI",E>F naar >@ − G,H"J: array van de afstand van >@ naar elke vertex om zo de kortste afstand tussen >@ en elke vertex op te kunnen vragen − %HI",: array van de voorgangers van elke vertex om zo de kortstepadboom op te kunnen bouwen − +==: een binary heap priority queue dat telkens de kleinste afstand tussen >@ en te onderzoeken > teruggeeft in de queue // Alle afstanden op oneindig en voorlopers op onbekend stellen. for each > in EBF G,H"JE>F K L∞ %HI",E>F K ="" end for // De afstand van de beginknoop >@ tot diezelfde knoop is logisch nul. E>@ F K 0
// De beginknoop >@ is vanaf waar zal begonnen worden naar de zoektocht naar de kortste paden naar alle andere knopen. +== K O>@ P Algoritme: // Zolang er nog knopen te onderzoeken zijn… while +== is not empty // De knoop met de kortste afstand tot >@ in de +== wegnemen. > K +==. %R% // De naburige knopen = van > overlopen for each edge O>, =P of outgoing edges of > // Nagaan of de afstand van de route via > naar = korter is. "U_G,H"J WX G,H"J> L Y",ZE>, =F if "U_G,H"J W[ G,H"JE=F // De kortere afstand nu toekennen als de nieuwe afstand G,H"JE=F K "U_G,H"J // Het voorlaatste knoop op het pad naar = is > %HI",E=F K >
end if end for end while
// Knoop = heeft een nieuwe afstand +==. %=GZE"U_G,H"J, =F
De priority queue had ook een lijst kunnen zijn. Hiervoor moet je telkens de volledige lijst doorlopen om te zoeken naar de kleinste waarde in de lijst. Een betere en performantere datastructuur dan een binary heap priority queue is de Fibonacci heap priority queue voor het 46
algoritme van Dijkstra. De implementatie ervan vraagt om veel meer inzicht en dus wordt voor de eenvoud de vertrouwde binary heap priority queue genomen. Een dergelijke datastructuur is niet te vinden in het .NET Framework en dus wordt deze zelf geschreven. De implementatie van de binary heap priority queue wordt in paragraaf 5.2 uit te doeken gedaan.
3.4.4 Floyd–Warshall algoritme Een andere manier om de korste paden tussen de knopen te bepalen is via het Floyd–Warshall algoritme die wel in staat is om de kortste afstanden tussen alle knopen in één uitvoering van het algoritme te berekenen. Dit lijkt interessant maar het algoritme geeft geen informatie terug over de tussenknopen waarlangs gepasseerd moet worden om van de beginknoop naar de eindknoop te passeren. Verder heeft het algoritme de volledige " ( " adjacency matrix nodig en geen graaf en is daardoor trager in vergelijking met het kortstepadalgoritme van Dijkstra bij het uitvoeren op een sparse graaf door zijn complexiteit van OE|B|^ F met |B| als het aantal knopen in een graaf. [29] Algoritme 2: Kortsteafstandalgoritme van Floyd–Warshall Input: Een " ( " adjacency matrix van een gerichte, gewogen graaf met positief gewogen takken waarvan hier de matrixelementen het gewicht van de tak tussen de knopen voorstellen. Is er geen tak tussen de twee knopen dan wordt dit voorgesteld met de waarde oneindig. Output: Tussen elke knopenpaar >& en >' D EBF kunnen we de kortste afstand opvragen. Algoritme: for(int k = 0; k < "; ++k) for(int i = 0; i < "; ++i) for(int j = 0; j < "; ++j) , K minO, , , L , P end for end for end for
3.5 De formule voor het aantal carriers De formule voor het aantal carriers is onrechtstreeks gebaseerd op het werk van Egbelu en anderen. [1, 2, 3, 4, 6, 10, 11, 12, 14, 18, 22] Om de volledige materiaalstroom uit te laten voeren is er een bepaalde tijd nodig. Wanneer deze benodigde tijd groter wordt dan de beschikbare tijd 0 van één carrier dan moeten er meer carriers ingezet worden. Het aantal carriers wordt dus bepaald volgens het onderstaande basisformule:
47
C X met
η · 6 C ` 6
(3.1) : : : :
het aantal carriers %, de bezettingsgraad s, de benodigde tijd om de volledige materiaalstroom uit te voeren s/carrier, de beschikbare tijd van één carrier, de zogenaamde planning horizon
De factor ` voorkomend in de bovenstaande formule (3.1) is de zogenaamde bezettingsgraad. De factor duidt aan in hoeverre de carriers bezet zullen zijn en dus niet beschikbaar zijn tijdens het uitvoeren van de materiaalstroom. Doch kiest men beter voor een lagere bezettingsgraad dan 100%. Het voordeel hierbij is dat de wachttijden op een beschikbare carrier tot een minimum worden herleid en er rekening wordt gehouden met mogelijke uitval van een carrier door een defect. In de meeste gevallen wordt er gewerkt met een factor van 80..90%. Om de resterende factoren, namelijk de tijden en 6 te kunnen bepalen moeten we eerst begrijpen in welke toestand een carrier kan verkeren. Een carrier verplaatst zich tussen de stations en aan de stations worden de ladingen opgepikt en afgezet. Tijdens de verplaatsing kan er verkeerscongestie (verstopping in het verkeersnetwerk) optreden waardoor de verplaatsingstijd groter wordt. Verder moet er ook rekening gehouden worden dat een carrier op bepaalde tijdstippen in onderhoud is en zal bijvoorbeeld zijn accu, batterij of brandstoftank nodig moet gaan opladen, vervangen of vullen is. Een carrier kan ook beschikbaar blijven voor een volgende opdracht, maar gebruikt zijn tijd niet nuttig voor het uitvoeren van de materiaalstroom. De toestanden van een carrier wordt schematisch weergegeven in figuur 3.7. De index verwijst altijd naar de index van het oppikstation en de index naar de index van het afzetstation. Wanneer een carrier zich begeeft van oppikstation naar afzetstation zal de index gevormd worden en indien andersom de index .
48
verplaatsen
beschikbaar
onderhoud
geblokkeerd
lading afzetten
lading oppikken
Figuur 3.7: De mogelijke toestanden van een carrier
3.5.1 De planning horizon
De beschikbare tijd van één carrier 6 is te bepalen door de totale tijd welke nodig is voor onderhoud zoals het opladen, vervangen of vullen van een accu, batterij of brandstoftank en de totale tijd dat carriers beschikbaar blijven, af te trekken van de shiftduur zoals één, 8 of 16 uren. Een carrier die beschikbaar blijft of in onderhoud is, gebruikt zijn tijd niet nuttig en dus hoort deze tijd niet tot de beschikbare tijd om de materiaalstroom uit te voeren. 6 X 3600 · ; c c met
6 ;
(3.2)
: s/carrier, de beschikbare tijd van één carrier, de zogenaamde planning horizon : h, de shiftduur : s, de totale verloren tijd nodig voor het onderhoud : s, de totale verloren tijd doordat carriers beschikbaar blijven
Om beter te kunnen inschatten en dit onafhankelijk van de shiftduur te doen, schatten we eerder het aantal minuten van een uur in dat een carrier actief deelneemt aan de volledige materiaalstroom. 6 X 60 · 0 · ;
(3.3)
49
met
6 0 ;
: s/carrier, de beschikbare tijd van één carrier, de zogenaamde planning horizon : min/h, de beschikbare tijd van een carrier om actief deel te nemen aan de volledige materiaalstroom : h, de shiftduur
3.5.2 De benodigde tijd om de volledige materiaalstroom uit te voeren
De benodigde tijd is te bepalen door de som te nemen van de totale tijdsduur van elke toestand waarin een carrier actief deelneemt aan de volledige materiaalstroom. X < L $ L # L 5 met
< $
# 5
(3.4)
: s, de benodige tijd om de volledige materiaalstroom uit te voeren : s, de totale tijd besteed aan het zich verplaatsen tussen stations : s, de totale tijd besteed aan het oppikken van ladingen
: s, de totale tijd besteed aan het afzetten van ladingen : s, de totale extra bijkomende tijd door optredende verkeerscongestie
Voor bepaalde toestanden zoals ‘lading oppikken’ en ‘lading afzetten’ (zie figuur 3.7) zijn hun totale tijdsduur min of meer exact te bepalen. Voor de andere toestanden zal hun totale tijdsduur eerder moeten worden ingeschat. De methode voor de statische bepaling van de tijdsduur is echter afhankelijk van het type transportsysteem en het centrale besturingssysteem.
3.5.3 Het benodigd aantal transporten
Het nodige aantal transporten en dus ook de verplaatsingstijd < kan worden gereduceerd door een grotere ladingscapaciteit van een carrier. Hierdoor kunnen meer ladingen tegelijk worden getransporteerd voor eenzelfde transportbatch. De ladingscapaciteit van een carrier wordt uitgedrukt als de maximum massa dat een carrier kan transporteren. Daarmee is het aantal ladingen = te bepalen dat een carrier kan meenemen binnen één transport van een transportbatch. X d e = met
=
(3.5) : het gereduceerde aantal transporten : het aantal transporten : het aantal ladingen
50
=Xf met
g +
(3.6)
=
+
: het aantal ladingen : [kg] of andere ladingseenheid, de ladingscapaciteit van een carrier : [kg] of andere ladingseenheid, de ladingswaarde van een transportbatch
Het is duidelijk vanuit de twee bovenstaande formules dat wanneer een carrier een ladingscapaciteit kent dat kleiner is dan te ladingswaarde van een transportbatch geen enkele lading van deze kan oppikken en dat hierdoor in geen eindig aantal transporten de transportbatch zal worden geleverd. Het te klein gekozen ladingscapaciteit zal dan ook gemeld worden naar de gebruiker toe om een grotere ladingscapaciteit te nemen. Een andere oplossing is om de ladingswaarde van de transportbatch te verkleinen met als gevolg dat het aantal transporten zal moeten worden verhoogd.
3.5.4 De benodigde tijd om alle ladingen op te pikken en af te zetten
Om de totale tijd $ , besteed aan het oppikken van de lading, te bepalen, moet het aantal
keren dat een lading wordt opgepikt, worden vermenigvuldigd met de gemiddelde tijd ,$ om
een lading op te pikken. Die tijd ,$ kan gereduceerd worden door meer handlers in te zetten. De tijd kan niet verder gereduceerd worden wanneer er meer handlers zijn dan ladingen vandaar dat het minimum aantal handlers als actieve handlers genomen wordt. Verder kan de handling tijd niet fractioneel verdeeld worden over de handlers en dus wordt de bovengrens tot een geheel getal genomen van het reductiegetal. $ X h h · i,$ · j
$ X ,$ h h · j
met
$
,$
=$
mn min k"$ , =$ l
(3.7)
=$
m min k"$ , =$ l
: s, de totale tijd besteed aan het oppikken van ladingen
: het nodige aantal transporten van oppikstation naar afzetstation
: s, de gemiddelde tijd nodig om een lading op te pikken
=$ : het aantal ladingen om op te pikken "$
: het aantal oppikhandlers
Analoog kan de totale tijd voor het afzetten van de lading worden bepaald met onderstaande formule:
51
# X h h · i,# · j
# X ,# h h · j
met
=#
min k"# , =# l =#
m min k"# , =# l
mn
#
: s, de totale tijd besteed aan het afzetten van ladingen : het nodige aantal transporten van oppikstation naar afzetstation
"#
: het aantal afzethandlers
(3.8)
,# : s, de gemiddelde tijd nodig om een lading af te zetten =# : het aantal ladingen om af te zetten
3.5.5 De extra bijkomende tijd door optredende verkeerscongestie De waarde voor de verkeerscongestie uitgedrukt in percentage loopt van 0 tot 1 waar 0 betekent geen opstopping in het netwerk terwijl 1 de volledige opstopping is in het verkeersnetwerk. De waarde 1 betekent dan ook dat geen eindig aantal carriers de volledige materiaalstroom zal kunnen uitvoeren door de volledige verkeersopstopping. De factor dat vermenigvuldigd moet worden met de verplaatsingstijd < is liefst van het bereik 1. . ∞ terwijl voor de verkeerscongestie van het bereik 0. .1 is. De formule om het bereik van de factor voor de verkeerscongestie om te vormen tot het gewenste bereik en dus de gewenste factor is: θ 1cθ met
(3.9) θ
: %, de factor voor de verkeerscongestie
In onderstaande vergelijking (3.10) is na te gaan dat het gewenste getal in het bereik van 1. . ∞ inderdaad kan verkregen worden vanuit een getal in het bereik 0. .1. 1 1 1 X X X 1. . ∞ 1 c θ 1 c 0. .1 0. .1
(3.10)
De totale extra bijkomende tijd 5 door verkeerscongestie welke is in te schatten door een factor te nemen van de tijden waarin verplaatsingen tussen de stations optreedt, namelijk de tijd < :
52
1 · c < 1cθ < 1 5 X p c 1q · < 1cθ 1 c E1 c θF 5 X r s · < 1cθ θ 5 X · 1cθ < 5 X
met
5 < θ
(3.11)
: s, de totale extra bijkomende tijd door optredende verkeerscongestie : s, de totale tijd besteed aan het zich verplaatsen tussen stations : %, de factor voor de verkeerscongestie
3.5.6 De benodige verplaatsingstijd voor een carrier zonder een vast traject Deze paragraaf heeft betrekking tot transportsystemen vergelijkbaar met AGV’s en vorkliften die het volgende toestandendiagram beschrijven: Een carrier verplaatst zich onbeladen naar een oppikstation waar de lading zal worden opgepikt en vervolgens de lading naar een afzetstation transporteert en daar de lading afzet. De carrier is dan nu beschikbaar voor de volgende opdracht. Tijdens de verplaatsing kan er verkeerscongestie (verstopping in het verkeersnetwerk) optreden waardoor de verplaatsingstijd groter wordt. Verder moet er ook rekening gehouden worden dat een carrier op bepaalde tijdstippen zijn accu, batterij of brandstoftank nodig moet gaan opladen, vervangen of vullen of ander onderhoud moet ondergaan waardoor de carrier tijdelijk niet beschikbaar is. De toestanden van een carrier wordt schematisch weergegeven in figuur 3.8.
53
onderhoud beschikbaar
onbeladen naar oppikstation
lading afzetten geblokkeerd
beladen naar afzetstation
lading oppikken
De totale verplaatsingstijd < kan het best opgesplitst worden volgens twee deeltoestanden beladen en onbeladen en dus in de verplaatsingstijd in beladen toestand en de verplaatsingstijd in onbeladen toestand. Figuur 3.8: De mogelijke toestanden van een carrier zonder traject
De totale tijd besteed aan het vervoeren van de lading worden bepaald door het aantal keren dat een lading wordt opgepikt te vermenigvuldigen met de nodige tijd om de lading te vervoeren. Die nodige tijd kan berekend worden door de overeenkomstige af te leggen afstand te delen door de gemiddelde snelheid van een carrier in zijn beladen toestand. X h h · , ./
X h h · X met
(3.12)
>
1 h h · >
, ./
: s, de totale tijd besteed aan het vervoeren van ladingen : het nodige aantal transporten van oppikstation naar afzetstation
: s, de nodige transporttijd in beladen toestand van het oppikstation naar het afzetstation
54
: m, de af te leggen afstand van oppikstation naar afzetstation
: m⁄s , de gemiddelde snelheid van een carrier in beladen toestand
>
De totale tijd dat de carriers nodig zullen hebben om zich onbeladen te verplaatsen naar een oppikstation kan niet zodanig berekend worden naar waarheid aangezien het sterk afhankelijk is van de gekozen methode om een bepaalde carrier te kiezen. Die methode wordt gekozen via het centrale besturingssysteem van een transportsysteem. Dit maakt dat dit een dynamisch gegeven is en moet dus worden ingeschat. Methode 1 Een manier om in te schatten is in functie van deze te bepalen. In vele gevallen zal groter zijn dan . De meest eenvoudige manier om in te schatten in functie van is dan ook door gewoonweg te laten vermenigvuldigen met een bepaalde factor. Die factor kan empirisch worden bepaald ofwel worden nagegaan in de productiehal. X E F X E F X · met
(3.13) (3.14)
: s, de totale tijd besteed aan het zich verplaatsen naar een oppikstation : s, de totale tijd besteed aan het vervoeren van ladingen : de proportionele factor tussen en
Methode 2 Een andere mogelijke methode dat ingesteld staat in het centrale besturingssysteem is om elke carrier die zijn lading heeft afgezet aan het afzetstation gewoonweg terugkeert naar het oppikstation waar hij vandaan kwam. De totale tijd besteed aan het terugkeren van de afzetstation naar de oppikstation kan dan worden bepaald door het hetzelfde aantal keren dat een lading wordt opgepikt te vermenigvuldigen met de nodige tijd om terug te keren. Die nodige tijd kan dan worden berekend door de overeenkomstige af te leggen afstand te delen door de gemiddelde snelheid van een carrier in zijn onbeladen toestand. X h h · ,/.
X h h · X met
(3.15)
>
1 h h · >
: s, de totale tijd besteed aan het zich verplaatsen naar een oppikstation : het nodige aantal verplaatsingen van afzetstation naar oppikstation 55
,/.
>
: s, de nodige verplaatsingstijd in onbeladen toestand van afzetstation naar
oppikstation : m, de af te leggen afstand van afzetstation naar oppikstation
: m⁄s , de gemiddelde snelheid van een carrier in onbeladen toestand
Methode 3 Een andere veelvoorkomende methode om een carrier te kiezen is volgens het First-Come, First-Served (FCFS) principe. Dit wil zeggen dat het besturingssysteem zal kiezen voor de eerstvolgende beschikbare carrier en deze zal sturen naar de oppikstation die het eerst nodig heeft. Dit betekent ook dat de frequentie dat een carrier aan een bepaalde afzetstation zich zal begeven naar een bepaalde oppikstation nog eerst moet worden bepaald. De totale tijd kan nu op dezelfde wijze bepaald worden als vergelijking (3.15) maar met totaal andere waarden voor de frequentie aan verplaatsingen. X h h · ,/.
X h h · X met
(3.16)
>
1 h h · >
: s, de totale tijd besteed aan het zich verplaatsen naar een oppikstation : het te verwachten aantal verplaatsingen van het afzetstation naar het
naar het oppikstation : m, de af te leggen afstand van het afzetstation naar het oppikstation
,/. >
oppikstation volgens het FCFS principe : s, de nodige verplaatsingstijd in onbeladen toestand van het afzetstation : m⁄s ,de gemiddelde snelheid van een carrier in onbeladen toestand
Het te verwachten aantal verplaatsingen is afhankelijk van het aantal inkomende carriers aan een afzetstation i en van het aantal uitgaande carriers aan een oppikstation j. De kans is namelijk veel groter dat een beschikbare carrier afkomstig is van een afzetstation waar vaak carriers aankomen. Ook is de kans groter dat die beschikbare carrier zich verplaatst naar de oppikstation waar vaak carriers vertrekken. X % h h
% X % · %
(3.17) (3.18)
56
met
% % %
: het te verwachten aantal verplaatsingen van afzetstation naar oppikstation volgens het FCFS principe : het nodige aantal verplaatsingen van afzetstation naar oppikstation : %, de totale kans dat een carrier zich verplaatst van afzetstation naar
oppikstation : %, de kans dat een beschikbare carrier zich begeeft naar oppikstation : %, de kans dat een beschikbare carrier afkomstig is van afzetstation
De kansen % en % zijn te bepalen door deze kansen te bezien als de procentuele verdeling van de kanshebbenden. Om een procentuele voorstelling te kunnen bekomen moet de ene waarde afgewogen worden tot de totale waarde, dus de ene waarde laten delen door de totale waarde. De totale waarde is hier het totaal aantal verplaatsingen tussen oppikstation en afzetstation . De ene waarde is dan het totaal aantal verplaatsingen van een carrier van een afzetstation j naar hetzelfde oppikstation waar een carrier nodig is en is dus de som van het aantal verplaatsingen van elk afzetstation j naar dat oppikstation i. En in analogie is de andere waarde het totaal aantal verplaatsingen van een oppikstation naar hetzelfde afzetstation j waar een carrier zich beschikbaar maakt en is dus de som van het aantal verplaatsingen van elk afzetstation j naar dat oppikstation i. % X h th h
met
%
: %, de kans dat een beschikbare carrier zich begeeft naar het oppikstation : het nodige aantal verplaatsingen van het afzetstation naar het oppikstation : het nodige aantal verplaatsingen van het afzetstation naar het oppikstation
% X h th h
met
%
(3.19)
(3.20)
: %, de kans dat een carrier zich beschikbaar maakt aan het afzetstation
: het nodige aantal verplaatsingen van het afzetstation naar het oppikstation : het nodige aantal verplaatsingen van het afzetstation naar het oppikstation
Nu worden de verschillende vergelijkingen (3.16) tot en met (3.20) tot één vereenvoudigd formule samengevoegd waarmee de totale tijd in te schatten is. De betekenis van elke parameter werd reeds toegelicht. X
1 h h · >
(3.21)
57
X X X X
1 h h i% h h n · >
1 h h i% · % h h n · >
∑ ∑ 1 hhi · h h n · ∑ ∑ ∑ ∑ >
∑ · ∑ 1 hh · ∑ ∑ >
3.5.7 De benodige verplaatsingstijd voor een carrier met een vast traject Deze paragraaf heeft betrekking tot transportsystemen vergelijkbaar met electified overhead monorails en treintjes. Dergelijke transportsystemen hebben een toestandendiagram met complexe toestandswisselingen door het feit dat ze bijkomende toestanden introduceren door de bijkomende tijdsafhankelijke beslissingen ‘wachten of verplaatsen volgens traject‘ en ‘een lading aan oppikstation accepteren of afwijzen’ gemaakt door het centraal besturingssysteem. Dit zijn duidelijk dynamische toestanden. Een vereenvoudigd toestandendiagram kan schematisch worden voorgesteld zoals in het onderstaande figuur 3.9. De toestanden ‘lading oppikken’ en ‘lading afzetten’ zijn hetzelfde gebleven en dus kan dezelfde formule worden gebruikt.
58
traject volgen
onderhoud
geblokkeerd
lading afzetten
lading oppikken
Figuur 3.9: De toestandswisselingen van een carrier dat een traject volgt
Eén carrier volgt in ronden een vast traject. De verplaatstingstijd is dus afhankelijk van het aantal gemaakte ronden tijdens het uitvoeren van de materiaalstroom en de tijd om één ronde af te leggen: < X " · , < X " · > met
< " , >
(3.22)
: : : : :
s, de totale tijd besteed aan het zich verplaatsen tussen stations het aantal ronden af te leggen s, de nodige tijd om een volledige ronde af te leggen m, de af te leggen afstand om een volledige ronde af te leggen m⁄s , de gemiddelde snelheid van een carrier
Voor de statische berekening wordt het aantal ronden gelijkgesteld aan het aantal transporten van ladingen dat verricht moet worden. Het aantal ronden zal bij een dynamische simulatie lager liggen. Het bekomen aantal carriers bij de statische berekening is dus te zien als een bovengrens. " X h h
met
"
(3.23)
: het aantal ronden af te leggen 59
: het nodige aantal transporten van oppikstation naar afzetstation
3.6 Voorbeeldberekening In dit paragraaf wordt een voorbeeldberekening uitgevoerd voor een transportsysteem zonder traject en dit volgens methode 3 zoals uitgelegd in de vorige paragraaf. Dit voorbeeldberekening is ook een hulpmiddel om zelf eens met pen en papier het aantal carriers te bepalen.
Figuur 3.10: De lay-out voor de voorbeeldberekening
60
De stations A tot H bevinden zich ergens op de lay-out zoals voorgesteld in figuur 3.10: Tabel 3.1: Plaats van de stations op de lay-out
Station Trackpunt A B C D E F G H
P002 P005 P008 P010 P013 P015 P016 P019
De transportbatches: Tabel 3.2: De transportbatches
Opikkstation Afzetstation Frequentie Lading A B F C A B
G H E F C E
100 300 200 150 400 250
80 40 120 200 100 160
Het transportysteem heeft volgende karakteristieken: Tabel 3.3: De karakteristieken van het transportsysteem 500,00 Ladingscapaciteit: Snelheid (beladen): 17,50 m / s Snelheid (onbeladen): 35,00 m / s 3,00 s Oppiktijd: 10,00 s Afzettijd: 2,00 Aantal oppikhandlers: 4,00 Aantal afzethandlers:
De scenario heeft volgende bijkomende inputparameters: Tabel 3.4: De bijkomende inputparameters 8,00 h Totaal tijdsduur: 55,00 min/h Beschikbare tijd: 90,00 % Bezettingsgraad: 5,00 % Verkeerscongenstie:
De eenheidsladingen worden bepaald volgens onderstaande vergelijking:
61
500 =&& X v wXf g X z6,25| X 6 +&& 80 G H A B F C
E
F
80
C
G H E F C
100 40
160 120
⇒ 200
A B F C
6
5 12
3 4 2
De gereduceerde aantal transporten worden bepaald volgens onderstaande vergelijking: } && Xd
&& 100 eXd e X ~16,666. . . X 17 =&& 6 G H E F C 400 A 100 300 250 B 200 F 150 C
⇒
G H E F C 80 A 17 25 84 B 50 F 75 C
Nu kan de totale oppik- en afzettijd worden bepaald volgens onderstaande vergelijkingen: ,$ && X && · ,$ · j ,$ && X 17 · 3 · d
=$ &&
min k"$ , =$ && l
m
6 6 e X 51 · d e X 51 · ~3 X 51 · 3 X 153 minO2, 6P 2
$ X h h ,$ X ,$ && L X 153 L
=# && ,# && X && · ,# ·
min"# , =# && 6 6 ,$ && X 17 · 10 · d e X 170 · d e X 170 · ~1,5 X 170 · 2 X 340 minO4, 6P 4 # X h h ,# X ,# && L X 340 L
G
H
E
F
C
720 A 153 450 504 B 300 F 225 C
G
H
E
F
C
1600 A 340 750 840 B 500 F 750 C
62
$ X h h ,$ X 153 L 720 L 450 L 504 L 300 L 225 X 2352 s
# X h h ,# X 340 L 1600 L 750 L 840 L 500 L 750 X 4780 s
Volgens methode 3 moet het aantal transporten tussen afzetstation en oppikstation ingeschat worden: && X
∑ & · ∑ & 17 · 97 1649 X X X 4,98 ∑ ∑ 331 331
∑ & = de som van kolom 1 (dus kolom G) ∑ & = de som van rij 1 (dus rij A) ∑ ∑ = de som van alle cellen G A B F C In
H
E
F
17
C 80
25
84 50 75
17
25
134
75
80
Uit 97 109 50 75 331
⇒
G H E F C 23,44 A 4,98 8,23 44,13 B 20,24 F 16,99 C
De afstanden tussen de stations moeten nog bepaald worden. Neem aan dat met het kortstepadalgoritme van Dijkstra de volgende afstanden zijn bekomen. Doordat alle paden tweerichtingsverkeer zijn, is de afstand tussen de twee stations hetzelfde en bekomen we een identieke tabellen van afstanden zoals hieronder. G H E F C 6400 A 4600 4600 5800 B 3000 F 4200 C
G H E F C 6400 A 4600 4600 5800 B 3000 F 4200 C
Nu kan de verplaatsingstijd bepaald worden, zowel voor in beladen als in onbeladen toestand: X X
&& · && L 1 h h · X > >
17 · 4600 L 80 · 6400 L 25 · 4600 L 84 · 5800 L 50 · 3000 L 75 · 4200 17,5
63
78200 L 512000 L 115000 1657400 L X 487200 L 150000 L 315000 X X 94709 s 17,5 17,5 X
&& · && L 1 h h · X > >
4,98 · 4600 L 23,44 · 6400 L 8,23 · 4600 L 44,13 · 5800 L 20,24 · 3000 L 16,99 · 4200 598814 X X X 17109 s 35 35 < X L X 94709 L 17109 X 11818 s
De totale nodige tijd om de volledige materiaalstroom kan nu bepaald worden, rekening houdend met de extra tijd door de verkeerscongestie: X < L $ L # L 5 X X
1 · L $ L # 1cθ <
1 · 11818 L 2352 L 4780 X 124835 s 1 c 0,05
Daartegen moet ook de beschikbare tijd worden bepaald: 6 X 60 · 0 · ; X 60 · 8 · 55 X 26400 s En finaal kan nu het aantal nodige carriers worden ingeschat: C X
124835 124835 X X X 5,25 η · 6 0,9 · 26400 23760
64
4 De mogelijkheden met Plant Simulation 4.1 Inleiding Plant Simulation is een simulatiesoftwarepakket bedoeld om de dynamische processen van een real-world installatie te simuleren. Met deze simulatiesoftware is de gebruiker in staat om bijvoorbeeld logistieke processen te modeleren, te simuleren, te onderzoeken (lees: beoordelen) en verder te optimaliseren. Tijdens de simulatie kan de gebruiker visueel in 2D of 3D de diverse dynamische processen volgen. Verder kan men de karakteristieken van een simulatiemodel van een systeem binnen een dynamische context analyseren na het uitvoeren van de simulatie. Met Plant Simulation kunnen de voorgestelde wijzingen in één of meerdere processen of zelfs in het totale systeem vooraf worden beoordeeld vooraleer men de wijzigingen daadwerkelijk doorvoert. Door ook te experimenteren met alternatieven, namelijk het opzetten van verschillende scenario’s, is men in staat om te zoeken naar een zo optimaal mogelijk systeem. Met behulp van de aanwezige documentatie [15, 16, 17] van Plant Simulation en twee gevolgde cursusdagen in UGent kan Plant Simulation bestudeerd worden in zijn mogelijkheden.
4.2 Dynamische simulatie van een dynamisch transportmodel In deze paragraaf wordt aangetoond dat met Plant Simulation wel degelijk een dynamisch transportmodel kan worden gemodelleerd voor simulatie. Naast het feit dat Plant Simulation uitgebreid kan worden met extra library’s en eigen componenten wordt eerst geprobeerd om een eenvoudig transportmodel op te bouwen uit alleen standaardcomponenten.
4.2.1 Een eenvoudig transportmodel uit standaardcomponenten Om een simulatie te kunnen uitvoeren, moet er eerst een simulatiemodel worden gemodelleerd. Plant Simulation biedt allerhande standaardcomponenten (figuur 4.1) waarmee een simulatiemodel kan worden opgebouwd en dit via de grafische gebruikersinterface.
Figuur 4.1: De toolbox met de standaardcomponenten
65
Een simpel transportmodel zoals in het onderstaande figuur 4.2 kan inderdaad worden opgebouwd met de standaardcomponenten. Het gemodelleerd transportmodel kan worden beschreven als volgt: Een vast aantal producten worden in een container gestoken en vervolgens wordt de container op een lijn geplaatst. Zolang de lijn vol is wordt geen nieuwe container met producten op de lijn geplaatst. De container ondergaat eerst een snelle test en daarna een uitgebreide test. Er zijn twee dezelfde teststations: test1 en test2. De verdeling van de containers over de twee teststations is geraamd op verhouding 60-40. Nadat alles is getest wordt de container verpakt en verplaatst naar een opslagplaats afhankelijk van het type product, namelijk een TV of een VCR.
Figuur 4.2: Eenvoudig transportmodel
4.2.2 Complexe transportmodellen uit transportcomponenten Na de installatie van de Transport library kan men met Plant Simulation sneller een transportsysteem simuleren.
Drie verschillende transportsystemen namelijk AGV, EOM en conveyors zijn experimenteel opgezet ter studie voor dit project. Het resulterende simulatiemodel van elk transportsysteem is te bezien in de onderstaande figuren.
66
Figuur 4.3: Een AGV-systeem
Figuur 4.4: Een EOM-systeem
67
Figuur 4.5: Een converyorssysteem
Tijdens het opzetten van de transportmodellen werd het snel duidelijk dat er veel tijd kruipt in het opbouwen van de lay-out van het transportsysteem en ook om een goed en betrouwbaar simulatiemodel met specifiek ingestelde systeemparameters te verkrijgen, zelfs met de grafische gebruikersinterface van Plant Simulation. Verder biedt elk transportsysteem een totaal andere manier om inputparameters in te geven. Deze inputparameters bevinden zich niet op een centrale plaats maar verdeeld over de verschillende componenten en zelfs over de componenten binnen een component.
4.2.3 Eigen componenten en SimTalk Dankzij de wijze van object georiënteerde modellering en met de ingebouwde scriptingtaal SimTalk (afgeleid van Eiffel) biedt Plant Simulation veel mogelijkheden. Er is de mogelijkheid om een eigen component aan te maken die afgeleid is van een bestaande component. Ook kan een component opgebouwd worden uit meerdere bestaande componenten. Een dergelijk component kan aangezien worden als een simulatiemodel op zich. Verder kan men met SimTalk bijvoorbeeld complexere processen programmeren. SimTalk is een volwaardig programmeertaal en kent haast geen beperkingen qua programmeermogelijkheden. Verder is het zelfs mogelijk om met de C-interface van Plant Simulation (zelf geschreven) C-code uit te voeren.
68
4.3 De externe interfaces Er zijn verschillende interfaces beschikbaar binnen Plant Simulation. Zo biedt Plant Simulation een aantal manieren om data binnen te halen vanuit externe bronnen: − Een tekstbestand − Een XML bestand − Een geformateerde Microsoft Excel werkblad − Een database Een XML bestand is hier het meest flexibele dataformaat om te importeren aangezien de data duidelijker gestructureerd zijn ten opzichte van een tekstbestand en een Microsoft Excel werkblad en via SimTalk kan dan de benodigde data worden ingelezen. Werken met een database vereist een goed databasestructuur en verschillende SQL query’s waardoor het minder flexibel is qua aanpassingen in de datastructuur ten opzichte van XML.
4.4 De communicatie interfaces Naast de externe interfaces beschikt Plant Simulation ook over zogenoemde communicatie interfaces: − OPC-interface − Socket-interface − HTML-interface − COM-interface Via de OPC-interface kunner er datasignalen uitgewisseld worden met bijvoorbeeld PLC’s terwijl via de Socket-interface er data uitgewisseld wordt over het netwerk. Met specifieke ingegeven URL’s in Microsoft Internet Explorer kunnen HTML-pagina’s afkomstig van Plant Simulation opgevraagd worden dankzij de HTML-interface. De COM-interface is een zeer interessante interface. Dankzij COM-technologie kan een extern programma via COM Plant Simulation benaderen. Er is maar één COM-interface beschikbaar met een beperkt aantal functies zoals te zien in code listing 4.1
69
Code Listing 4.1: Het COM-interface van Plant Simulation interface IRemoteControl : IDispatch { HRESULT NewModel(); HRESULT LoadModel(BSTR); HRESULT SaveModel(BSTR); HRESULT CloseModel(); HRESULT StartSimulation(BSTR); HRESULT StopSimulation(); HRESULT ResetSimulation(BSTR); HRESULT IsSimulationRunning([out,retval]VARIANT_BOOL*); HRESULT SetPathContext(BSTR); HRESULT ExecuteSimTalk(BSTR,[optional]VARIANT,[out,retval]VARIANT*); HRESULT GetValue(BSTR,[out,retval]VARIANT*); HRESULT SetValue(BSTR,VARIANT); HRESULT Quit(); };
Na het bekijken van de COM-interface wordt snel duidelijk dat het object model van Plant Simulation alleen te benaderen is via SimTalk code (zie functie ExecuteSimTalk). Er dient dus eerst SimTalk code geschreven of genereerd worden om vervolgens deze uit te voeren. Met Microsoft Visual Studio 2005 is dit even snel getest. En er is dus inderdaad de mogelijkheid om buiten Plant Simulation deze te besturen of zelfs een dynamisch model te laten genereren, vervolgens de simulatie uit te voeren en de bekomen resultaten te analyseren. Deze code is terug te vinden op de CD.
70
5 Datastructuren In dit hoofdstuk worden interessante datastructuren besproken die gebruikt zijn in de simulatietool zoals grafen [13, 30], binary heap priority queue’s [27, 34] en quadtrees [35].
5.1 Grafen Er wordt stilgestaan bij het concept graaf en de bijhorende eigenschappen met gedefinieerde begrippen. Verder wordt ook de connectiematrix bekeken als een eenvoudige datastructuur. Met de opgedane kennis over grafen en zijn connectiematrices wordt een datastructuur voor een graaf als een object model uitgebouwd welke zeer bruikbaar is in dit project.
5.1.1 Definitie De grafentheorie is een onderdeel van de discrete wiskunde die de eigenschappen van grafen bestudeerd. Een graaf bestaat uit een verzameling van knopen welke verbonden kunnen zijn door takken. Deze takken vormen zelf een verzameling binnen de graaf. Wiskundig wordt een dergelijke graaf gedefinieerd en dus zo genoteerd als een verzameling B van n knopen > en een verzameling van m takken met elke tak een knopenpaar als deelverzamling van B: X EB, F B X EBF X O>& , >' , >^ , … , > P X EF X O& , ' , ^ , … , ! | X O> , > P >, > D BP met
B > > >
: : : : : : :
(5.1) (5.2) (5.3)
een graaf een verzameling van knopen een verzameling van takken een knoop een tak een startknoop een eindknoop
De notatie B en komen uit de Engelse literatuur waar een knoop ‘vertex’ en een tak ‘edge’ genoemd worden. In de meest algemene vorm van een graaf kunnen er zelfs takken aanwezig zijn die geen of maar één knoop bezitten. Een dergelijke graaf is niet zo interessant en dus wordt het ook niet
71
behandeld. Het is ook niet het doel van deze paragraaf om alles uit de grafentheorie uit de doeken te doen.
5.1.2 Begrippen Er bestaan een aantal elementaire begrippen die belangrijk zijn binnen de grafentheorie: In een graaf kunnen incidenten optreden. Wanneer een tak gekoppeld is aan het knopenpaar O>, > P dan is de tak incident met > en > . Omgekeerd kunnen we ook zeggen dat de knopen > en > incident zijn met de tak . Naburige knopen zijn dan de knopen die incident zijn met dezelfde tak terwijl een geïsoleerde knoop met geen enkele tak incident is. In een graaf kunnen er ook speciale takken aanwezig zijn, namelijk parallelle takken en lussen. Wanneer twee takken dezelfde knopen of anders hetzelfde knopenpaar hebben, dan worden deze parallelle takken genoemd. Bij een gerichte graaf zijn twee takken dus pas parallel wanneer deze dezelfde begin- en eindknoop hebben. Een tak waarvan de begin- en eindknoop dezelfde is, wordt een lus genoemd.
Figuur 5.1:Speciale takken: (a) Parallel. (b) Parallel. (c) Niet parallel. (d) Een lus.
Afhankelijk van de aanwezige eigenschappen krijgt een graaf een specifieke naam. Zo wordt een graaf een enkelvoudige graaf genoemd wanneer deze geen lussen en parallelle takken bezit. Indien een graaf deze toch bezit, dan wordt het een multigraaf genoemd. Een ongerichte graaf is een graaf waar voor elke tak van knoop > naar knoop > ook een tak van knoop > naar knoop > aanwezig is. Dergelijke takken en worden samengenomen als één tak zonder pijlen die de richting aanduiden. Een gerichte graaf bezit dus takken met een vaste richting die aangeduid worden met een pijl.
72
Figuur 5.2: (a) Een ongerichte graaf. (b) Een gerichte graaf.
Aan een tak kan ook een gewicht toegekend worden. Een dergelijke graaf wordt een gewogen graaf genoemd. Vaak wordt een gewicht als een numerieke waarde voorgesteld en om de samenhangendheid tussen de twee knopen aan te duiden. Hoe kleiner de waarde hoe meer samenhangend de twee knopen zijn. Op analoge manier kan men ook stellen dat twee knopen totaal onsamenhangend zijn wanneer er geen tak is met deze twee knopen als knopenpaar of wanneer het gewicht op oneindig staat.
Figuur 5.3: Een gewogen graaf.
5.1.3 De connectiematrix Een graaf kan voorgesteld worden op papier, maar in feite hebben we een representatie nodig die in een computer kan worden opgeslagen. Er zijn verschillende representaties mogelijk. De keuze van een representatie hangt af van het probleem en van de benodigde eigenschappen van de graaf. Men kiest dan een representatie waarmee het meest efficiënt gewerkt kan worden in de meeste gevallen. Een veel toegepaste representatie is een " " matrix of ook wel een vierkante matrix genoemd. De rijen en de kolommen worden dan gekoppeld aan de overeenkomstige knopen en de elementen van de matrix zijn dan de mogelijk bestaande takken. Een dergelijke matrix wordt een nabuurmatrix genoemd. In het Engels wordt dit een ‘adjacency matrix’ genoemd. Een andere represenatie is de zogenaamde ‘incidence matrix’ welke een % + matrix is waar p en q het aantal knopen en respectievelijk het aantal takken voorstellen. Hierbij worden de rijen dus gekoppeld aan de overeenkomstige knopen en respectievelijk de kolommen aan de overeenkomstige takken. Hierop wordt niet verder ingegaan omdat een dergelijke
73
datastructuur meer zoekoperaties vereist om de naburige knopen te vinden van een bepaalde knoop. Wanneer in een graaf geen parallelle takken voorkomen dan kunnen de elementen van de adjacency matrix door bits (‘0’, ‘1’) worden voorgesteld. Indien er toch parallelle takken zijn dan kan de matrix ingevuld worden met alleen numerieke waarden. De waarde in de matrix komt dan overeen met het aantal bestaande takken tussen een knoop in de rij en een knoop in de kolom. Merk op dat voor een ongerichte graaf de matrix altijd een symmetrische matrix is. Merk op dat de som van de rijelementen overeenkomt met het totaal aantal takken waarlangs bewandeld kan worden naar de naburige knopen.
1 1 1
1 0 0
1 0 0
Figuur 5.4: Een ongerichte multigraaf zonder parallelle takken en de corresponderende matrix.
1 2 1
2 0 0
1 0 0
Figuur 5.5: Een ongerichte multigraaf met parallele takken en de corresponderende matrix.
1 1 1
2 0 0
1 0 0
Figuur 5.6: Een gerichte multigraaf en de corresponderende matrix.
Merk op dat een connectiematrix geen informatie over de takken zoals het gewicht weergeeft. Ook wordt de grootte van de matrix bepaald door het aantal knopen. Meestal zal een knoop alleen verbonden zijn met een paar andere knopen en zullen dus in de matrix veel nullen staan. Een dergelijke graaf wordt een ‘sparse’ graaf genoemd. Het tegengestelde wordt een ‘dense’ graaf genoemd. Trouwens om te weten hoeveel uitgaande takken een knoop heeft, moeten alle elementen in de overeenkomstige rij van de knoop opgeteld worden. Analoog kan het aantal ingaande takken worden bepaald door alle elementen in de overeenkomstige kolom 74
van de knoop op te tellen. Bij operaties op de matrix met veel nullen moeten er onnodig veel nulelementen worden overlopen. Er wordt dus zowel wat geheugenruimte als een zekere rekentijd verspild per element. Er bestaan wel veel mogelijke oplossingen voor een zogenaamde sparse matrix. Dit vereist ééndimensionele arrays, pointer adressen naar elementen in een array en het implementeren van specifieke algoritmes die niks meer te maken hebben met het concept graaf. Daarom wordt er gekeken naar een objectmodel wat tevens meer flexibel is en meer aanleunt op het concept graaf. Toch heeft een adjacency matrix een degelijk nut. De bovenste matrices zijn zogenaamde directe-wegenmatrices. Dit wil zeggen dat zonder een tussenstap van de ene knoop naar de andere knoop kan bewandeld worden. Stel dat we willen weten op hoeveel manieren we van de ene knoop naar een andere knoop kunnen bewandelen. Hiervoor moet eerst beslist worden in hoeveel stappen dit gedaan moet worden, met andere woorden via hoeveel tussenliggende knopen. We nemen als voorbeeld de graaf uit figuur 5.6 en bepalen de wegen met één tussenstap, dus via één tussenknoop. We breiden hiervoor de graaf uit en stellen opnieuw de matrix op.
4 1 1
2 2 2
1 1 1
Figuur 5.7: De uitgebreide graaf met één tussenstap en de corresponderende matrix.
We hebben de matrix nu wel kunnen opstellen voor één tussenstap. Hadden we dit voor meerdere tussenstappen gedaan en/of dit bij een grotere graaf, dan wordt het moeilijk om nog duidelijk de uitgebreide graaf en de corresponderende matrix op te stellen. Diezelfde matrix is ook te bepalen door eenvoudigweg de directe-wegenmatrix een aantal keren met zichzelf te vermenigvuldigen als de ( nodige tussenstappen. Voor één tussenstap gaat de berekening van de matrix als volgt:
75
&
'
met
1 2 1 1 ' X X X 1 0 0 1 1 0 0 1
2 1 0 0 X 0 0
' X h · && X 1·1L2·1L1·1X 4
4 1 1
2 2 2
1 1 1
&
(5.4)
(5.5)
: een matrix ( : het aantal nodige tussenstappen : een matrixelement in rij r en kolom c
5.1.4 Het objectmodel
Als we een graaf kunnen zien als een uitgebreide versie van een boomstructuur dan kan deze opgebouwd worden met knopen en takken en bekomt men automatisch een objectgeoriënteerd model voor de graaf. Op deze wijze gedraagt de graaf zich als een flexibele datastructuur. De graaf zal een verzameling van knopen en takken bevatten. Voor elke knoop zal een lijst van in- en uitgaande takken worden bijgehouden:
Figuur 5.8: In- en uitgaande takken van een knoop
En voor elke tak zal de start- en eindknoop waarmee incident als een knopenpaar worden bijgehouden:
Figuur 5.9: Een tak met de start- en eindknoop als knopenpaar
Op die manier kan elke knoop onmiddellijk via de in- en uitgaande takken rechtstreeks de naburige knopen benaderen. Verder wordt aan een tak een richting toegekend door een knoop als startknoop en de andere knoop als eindknoop toe te kennen.
76
Dankzij de bijgehouden lijst van ingaande takken kan nu eenvoudig, eenvoudig snel en efficiënt bij het verwijderen van een knoop naast de uitgaande takken ook de ingaande takken, takken waarmee de knoop ook mee incident is, verwijderd worden. worden
5.2 De binary heap priority queue 5.2.1 Wat is een priority queue? Een queue (lees: kju,, in het Nederlands: wachtrij) wachtrij) is een datastructuur waarin je een element achteraan aan kan toevoegen (push, (push enqueue), ), een element voorraan kan afnemen (pop, (pop dequeue) en datzelfde element kan bekijken zonder het af te nemen (peek). De queue volgt dus het First-In-First-Out Out (FIFO) principe en is daarmee te vergelijken met een rij mensen aan de kassa van een warenhuis. De tegenhanger van de queue is de stack (in het Nederlands: stapel) die werkt volgens het Last-In--First-Out (LIFO) principe.
Figuur 5.10: Een voorstelling van een queue
De standaarddefinitie van een queue biedt geen mogelijkheid om aan elementen een prioriteit toe te kennen zodanig dat een bepaalde element volgens de prioriteit eerder van de queue kan worden afgenomen. Een priority queue kan eenvoudig geïmplementeerd worden met een gesorteerde lijst als interne datastructuur. Bij veelvuldig toevoegen en afnemen is dit geen performante datastructuur daar telkens opnieuw een nieuw element perfect tussen de andere elementen moet plaatsen volgens prioriteit. Het zou beter zijn het gedeeltelijk te laten sorteren zodat het minder focust op het perfect sorteren van de lijst en meer op op de element met de hoogste prioriteit die als eerste zal worden afgenomen. Dit kan gedaan worden met behulp van de binary heap als datastructuur.
5.2.2 Wat is een binary heap? Een heap (in het Nederlands: hoop) is een bijna complete boomstructuur wat wil zeggen dat alle niveau’s in de boom buiten het laatste niveau volledig worden opgevuld. Dit maakt dat de hoogte van de boom, namelijk het aantal niveau’s minimaal wordt. De wijze van het opvullen hangt af van de keuze van de heap: een max-heap max (figuur 5.11) of een min--heap (figuur 5.12).
77
heap geldt dat de kinderen een lagere of gelijke waarde hebben dan hun Bij een max-heap voorganger. De min-heap heap is de tegenhanger van de max-heap max heap en daarbij geldt dat de kinderen een hogere of gelijke elijke waarde hebben dan hun voorganger. Bijgevolg heeft de wortel bij de max-heap heap de grootste waarde terwijl bij de min-heap min de kleinste waarde. Een binary heap is een heap waarbij wa de knopen maximaal twee (inn het Latijn: bi) kinderen hebben.
Figuur 5.11: Een binary max-heap
Figuur 5.12: Een binary min-heap
5.2.3 Eén-dimensionele dimensionele array als datastructuur Een binary heap is een zeer simpele vorm van een heap en kan compact in een éénéén dimensionele array worden bijgehouden. De wortel van de heap heeft index 0 en bevindt zich dus in de array als eerste element. Om de andere knopen van de heap te vinden in de array moet hun indexen eerst bepaald kunnen worden.
Figuur 5.13: Een binary heap met geïndexeerde knopen
78
Voor een binary heap kunnen dee twee kinderen van een knoop met index teruggevonden worden via indexen en . En vervolgens kan de voorganger van v een knoop met index via index benaderd worden.
Figuur 5.14 14: Een binary heap in een één-dimensionele array
Afhankelijk van de representatie van een hoogste prioriteit van de binary heap priority queue wordt een max-heap heap of een min-heap min heap als interne datastructuur gekozen. Indien de grootste waarde de hoogste prioriteit voorstelt dan wordt voor de max-heap max heap gekozen en anders de minmin heap. De binary heap priority queue kan nu het element met de hoogste prioriteit welke zich bevindt in de wortel van de heap ervan afnemen.
5.2.4 Partieel sorteren Partieel sorteren slaat op het gedeeltelijk sorteren van de elementen. Er wordt zodanig gesorteerd zodat bijvoorbeeld bij de max-heap de kinderen steeds een lagere gere of gelijke waarde hebben dan hun voorganger. Er dient gesorteerd te worden bij het toevoegen (push, enqueue) en bij het verwijderen (pop, dequeue) van een element. element Het sorteren gebeurt gebeur door de knopen te verwisselen, dus de elementen van de array worden worde verwisseld. Een dergelijke operatie is namelijk efficiënter dan een element tussenvoegen op de juiste plaats in de lijst. Hoe het partieel sorteren verloopt voor een heap wordt uitgelegd met een max-heap. max In analogie met de max-heap kan partieel sorteren ook met een min-heap. min 5.2.4.1 Een knoop toevoegen aan de heap. Een knoop met waarde 50 wordt toegevoegd als laatste element in de max-heap max (lees: ééndimensionele array).
79
Figuur 5.15: Een knoop toevoegen aan de heap
Nu is de waarde 50 van de zojuist toegevoegde knoop groter dan de waarde 15 van zijn voorganger. De twee knopen worden met elkaar verwisseld. verwisseld. Nu is de waarde 50 groter dan de waarde 40 van zijn voorganger. Deze twee knopen worden den weer met elkaar verwisseld. De waarde 50 bevindt zich nu in de wortel. Stel dat de waarde 50 30 was geweest dan was er geen verwisseling gebeurd met de waarde 40 in de wortel. Er treedt dus alleen telkens een verwisseling op wanneer de waarde van de toegevoegde toegevoegde knoop groter is dan de voorganger ervan.
Figuur 5.16: Partieel sorteren van de heap
artieel sorteren alleen gekeken wordt naar de voorganger van de Merk op dat tijdens het partieel knoop in kwestie. Er wordt dus een hele hoop knopen overgeslagen en toch is de grootste waarde binnen de max-heap heap in de wortel terecht gekomen.
Figuur 5.17: Gesorteerde heap
5.2.4.2 De wortel verwijderen van de heap Bij de binary heap eap priority queue wordt bij het afnemen van een element de wortel van de heap verwijderd. Bij het verwijderen van die wortel moet een nieuwe wortel in de plaats worden gesteld. Volgens de definitie van de heap, namelijk de bijna complete boomstructuur, is de enige knoop die daarvoor in aanmerking komt, is de laatste knoop in de heap indien er natuurlijk nog knopen zijn.
80
Figuur 5.18: Een wortel verwijderen van de heap
Vervolgens moet er opnieuw gesorteerd worden vanaf de wortel. Er wordt bij het sorteren niet naar de voorgangers gekeken maar naar de kinderen ervan. De knoop in kwestie wordt nu telkens verwisseld met het kind met de grootste waarde totdat zijn waarde groter of gelijk is dan de waarde rde van zijn kinderen of er geen verdere kinderen zijn.
Figuur 5.19: Partieel sorteren van de heap
Merk op dat tijdens het partieel artieel sorteren alleen gekeken wordt naar de kinderen van de knoop in kwestie. Er wordt dus een hele hoop knopen overgeslagen en toch is weeral de grootste waarde binnen de max-heap heap in de wortel terecht gekomen.
Figuur 5.20: Een knoop toevoegen aan de heap
81
5.3 De quadtree 5.3.1.1.1
Inleiding in de spatial datastructuren
Om het doorploegen van een grote hoeveelheid data te minimaliseren is het slim om data te groeperen op basis van gemeenschappelijke ‘waardenbereiken’ of ‘deterministische eigenschappen’.. Hierdoor kan een spatial datastructuur meerdimensionaal opgesteld worden. Een dergelijke spatial datastructuur, dat interessant kan zijn voor voor ons project, is een quadtree welke een eenvoudige, twee-dimensionale dimensionale datastructuur is. Omdat het niet gaat om zodanig immense hoeveelheden, zal er geen gebruik gemaakt worden van spatial indexing wat bepaalde query operaties sneller en efficiënter doet uitvoeren en natuurlijk ook de opbouw van een datastructuur complexer maakt. 5.3.1.1.2
Het principe van de quadtree
Een quadtree is een hiërarchische hiërarchisch boomstructuur waarbij elke knoop vier kinderen heeft. Een quadtreee wordt opgebouwd door een twee-dimensionaal twee dimensionaal gebied op te delen in vier even grote deelgebieden (de kwadranten) op een recursieve manier om zo een hiërarchie te creëren. cre Via een dergelijk quadtree kan men de sneller elementen opvragen die zich in een bepaald gebied bevinden.
Figuur 5.21: Hiërarchische iërarchische indeling van een groot gebied in telkens vier kwadranten
Een quadtree moet ergens beginnen en dit met een wortel voor een gegeven gebied. Alles wat zich buiten het gebied bevindt, wordt in een aparte lijst gestopt. Wanneer die aparte lijst het maximum aantal elementen overschrijdt, dan breiden we het gebied van de wortel uit. Wanneer het aantal elementen in een knoop het maximum overschrijdt, dan zal het gebied van de knoop worden verdeeld in vier kwadranten die de vier kinderen van diezelfde knoop zullen 82
vormen. Om een limiet in opsplitsen te leggen wordt een minimum gebied opgelegd waarop niet meer verder verdeeld mag worden in vier kwadranten. Wanneer een element het gebied van de knoop kan overlappen, dan wordt dit element niet opgeslagen in de vier kinderen ervan, maar in de knoop zelf. Op deze manier wordt het geheugen efficiënter gebruikt alsook het minimum aan testen of het zich niet reeds in de lijst bevindt tijdens het uitvoeren van een query operatie. Een dergelijke boom wordt vaak als een platte boom voorgesteld (figuur 5.22) wat ook direct de vereiste hiërarchische indeling van een gebied in de vier kwadranten weergeeft. De boom effectief tekenen in plaats van een platte boom zou teveel plaats innemen.
Figuur 5.22:De quadtree als platte boom
Er zijn natuurlijk enkele nadelen aan deze datastructuur. Zo kan het niet goed overweg met beweegbare objecten of objecten die van vorm veranderen, aangezien dergelijke objecten eerst verwijderd moeten worden uit de datastructuur en dan weer toegevoegd moeten worden door de quadtree opnieuw te doorlopen en zo terug in de juiste knopen terecht te komen. Het zojuist beschreven nadelig effect van de quadtree is minimaal doordat de gebruiker niet voortdurend de objecten laat veranderen van vorm of positie in een twee-dimensionaal gebied.
83
6 Handleiding Dit hoofdstuk is een handleiding voor de gebruikers zoals studenten en onderzoekers van UGent om zelfstandig met de simulatietool te kunnen omgaan. Naast deze handleiding zal ook een videohandleiding worden gemaakt. De video is terug te vinden op de bijgeleverde CD. De video zal ook gebruikt worden tijdens de presentatie van deze masterproef.
6.1 Systeemvereisten De applicatie is getest op Windows XP Service Pack 3 en maakt gebruik van het Windows besturingssysteem. De applicatie is nog niet getest op Vista of op de opkomende opvolger Windows 7. De applicatie draait op het .NET Framework en heeft zowel versie 2.0 als versie 3.5 nodig. De applicatie maakt als relationele databasesysteem gebruik van Microsoft SQL Server. Voor het inlezen van en wegschrijven naar Excel bestanden en voor het genereren van Word documenten is de applicatie versieloos geprogrammeerd volgens het object model van versie 2007. Offcie 2007 of hoger is dus vereist. De installatiebestanden van het .NET Framework versie 2.0 en 3.5 zijn terug te vinden op de bijgeleverde CD.
6.2 Aanmaak van de database in Microsoft SQL 2005 Voor de aanmaak van de database zijn er twee methoden namelijk met een databaseherstelbestand of met een SQL script. Beide bestanden zijn terug te vinden op de bijgeleverde CD.
6.2.1 Databaseherstelbestand Met de eerste methode wordt naast de database zelf ook het reeds aangemaakte database schema ter beschikking gesteld. Ook is het nemen van een zelfgekozen naam voor de database eenvoudiger. Na het klikken op de node ‘Databases’, waar alle databases zich bevinden, wordt er gekozen voor ‘Restore Database’ via het opgeroepen contextmenu.
84
Figuur 6.1: Het startpunt: Databases
Figuur 6.2: Een database herstel uitvoeren
Er is keuze om een bestaande database zoals ‘Transport’ te herstellen of een nieuwe database met een eigen gekozen naam zoals ‘MyTransport’ aan te maken op basis van een databaseherstelbestand. Om dit databaseherstelbestand te kunnen kiezen, moet er gekozen worden voor een ‘From device’ en vervolgens klikken op de knop ‘…’ ernaast.
85
Figuur 6.3: Een bestaande database herstellen
Figuur 6.4: Een nieuwe database met een eigen gekozen naam ‘MyTransport’
86
Figuur 6.5: Kiezen voor 'From device' om een databaseherstelbestand te kiezen
Figuur 6.6: Een databaseherstelbestand is een bestand en deze toevoegen
87
Figuur 6.7: Een bestaand databaseherstelbestand kiezen
Figuur 6.8: Een databaseherstelbestand is gekozen en toegevoegd
88
Nu rest nog alleen een vinkje bij de kolom ‘Restore’ in de set van databaseherstelbestanden. En vervolgens klikken op de knop ‘OK’ om de herstel van de database uit te voeren.
Figuur 6.9: Alle nodige instellingen zijn gemaakt
89
Figuur 6.10: De herstel van de database uitvoeren...
Als alles in orde is, komt het onderstaande dialoogvenster:
Figuur 6.11: Succesbericht na het uitvoeren van de herstel van een database
De database is nu aanwezig onder de node ‘Databases’
90
Figuur 6.12: De herstelde database is nu aanwezig in Microsoft SQL server 2005
6.2.2 SQL script Het SQL script wordt geopend via Microsoft SQL 2005. Bij het openen ervan wordt een dialoogvenster getoond waarmee het SQL script toegang verleent tot de databases.
91
Figuur 6.13: Het SQL script toegang verlenen tot de databases
Figuur 6.14: Het geopende SQL script dat geconnecteerd is met de database engine
Standaard is de databasenaam ‘Transport’. Om die naam te wijzigen, zal er een ‘Quick Replace’ moeten worden uitgevoerd op het SQL script.
92
Figuur 6.15: Een 'Quick Replace' uitvoeren op het SQL script
Figuur 6.16: Alle 'Transport' tekst vervangen door 'MyTransport' tekst
93
Vervolgens wordt het SQL script uitgevoerd met de knop ‘Execute’ met het rood uitroepteken.
Figuur 6.17: Het SQL script uitvoeren
Figuur 6.18: Het SQL script is succesvol uitgevoerd
94
Na het uitvoeren van het SQL Script is de aangemaakte database niet zichtbaar onder de node ‘Databases’. De lijst van databases moet ververst worden. Na het klikken op de node ‘Databases’, waar alle databases zich bevinden, wordt er gekozen voor ‘Refresh’ via het opgeroepen contextmenu.
Figuur 6.19: De lijst van databases verversen
95
Figuur 6.20: De aangemaakte database is nu aanwezig in Microsoft SQL server 2005
6.3 Hoe de simulatietool gebruiken? 6.3.1 Bij eerste opstart Bij de eerste opstart van de simulatietool wordt de gebruiker verzocht om eerst enkele nodige instellingen te maken vooraleer verder te gaan. De belangrijkste instelling is de connectiestring om de simulatietool toegang te verlenen tot de database.
6.3.2 Excel bestanden importeren Er zijn drie sjablonen voor het aanmaken van een Excel bestand voor de gegevens omtrent de fabriek, de layout en de verschillende scenarios. Voor meer uitleg om de juiste data in te vullen, wordt er verwezen naar de bijlage A ‘Database’.
96
Figuur 6.21: Excel sjabloon voor de fabrieksgegevens
Figuur 6.22: Excel sjabloon voor de lay-out van een fabriek
Figuur 6.23: Excel sjabloon voor de verschillende scenarios van een fabriek
97
De Excel bestanden worden via de simulatietool als volgt geïmporteerd naar de database:
Figuur 6.24: Excel bestanden importeren via de simulatietool
6.3.3 De gegevens in de database bekijken De gegevens in de database kunnen worden bekeken met de simulatietool. Daarvoor moet er geklikt worden op een node met het icoon van een tabel.
Figuur 6.25: De database navigator en viewer gebruiken
6.3.4 De gegevens aanmaken, bewerken of verwijderen Naast het importeren van de gegevens, kunnen bepaalde gegevens worden bewerkt, verwijderd en zelfs nieuwe gegevens kunnen worden aangemaakt. Voor het aanmaken van een nieuwe gegeven moet eerst geklikt worden op een node met het icoon van een tabel. Vervolgens wordt er gekozen voor ‘Nieuw…’ via het opgeroepen con-
98
textmenu. Hetzelfde kan worden gedaan door te klikken op dezelfde uitziende actieknoppen in de knoppenbalk en in de menubalk. Ook de sneltoets ‘Control N’ is voorhanden.
Figuur 6.26: Een nieuw gegeven toevoegen
Voor het bewerken van een bestaand gegeven moet eerst geklikt worden op een node met het icoon van een databasebestand. Vervolgens wordt er gekozen voor ‘Wijzigen…’ via het opgeroepen contextmenu. Hetzelfde kan worden gedaan door te klikken op dezelfde uitziende actieknoppen in de knoppenbalk en in de menubalk. Ook de sneltoets ‘F2’ is voorhanden.
Figuur 6.27: Een bestaand gegeven wijzigen
Voor elke type gegeven wordt een dialoogvenster aangeboden om gegevens in te geven. Voor meer uitleg om de juiste data in te vullen, wordt er verwezen naar de bijlage A ‘Database’.
99
Figuur 6.28: De dialoogvenster voor input van gegevens voor een fabriek
Figuur 6.29: De dialoogvenster voor input van gegevens voor een transportsysteem
100
Figuur 6.30: De dialoogvenster voor input van gegegevens voor een lay-out
Figuur 6.31: De dialoogvenster voor input van gegegevens voor een scenario
101
Voor het verwijderen van een bestaand gegeven moet eerst geklikt worden op een node met het icoon van een databasebestand. Vervolgens wordt er gekozen voor ‘Verwijderen’ via het opgeroepen contextmenu. Hetzelfde kan worden gedaan door te klikken op dezelfde uitziende actieknoppen in de knoppenbalk en in de menubalk. Ook de sneltoets ‘Delete’ is voorhanden. Het is mogelijk dat een gegeven niet verwijderd kan worden doordat een ander gegeven het te verwijderen gegeven nodig heeft. Een foutmelding zal dan worden weergegeven.
Figuur 6.32: Een bestaand gegeven verwijderen
6.3.5 Werken met lay-outs 6.3.5.1 Lay-outs openen of dupliceren Een lay-out kan naast geopend te worden in de lay-out editor ook gedupliceerd worden.
Figuur 6.33: Een lay-out openen in de lay-out editor
102
Figuur 6.34: Een lay-out dupliceren
Figuur 6.35: Een nieuwe naam ingeven voor het gedupliceerde lay-out
Figuur 6.36: Een lay-out geopend in de lay-out editor
103
out tools 6.3.5.2 Werken met de lay-out Er kan maar één lay-out out tool tegelijkertijd actief zijn. Er kan met de spatiebalk eenvoudig gewisseld worden tussen de selectietool en de handtool en tussen de punttool en de lijntool. De lay-out out tools zijn alleen actief wanneer de canvas de focus heeft en kan verkregen worden door de klikken op de canvas. 6.3.5.2.1
De selectietool
Met de selectietool kunnen tracks en trackpunten worden geselecteerd. Vervolgens kunnen de geselecteerde objecten worden verplaatst of verwijderd.
Figuur 6.37:: Voor de selectie
Figuur 6.38:: Na de selectie
Wanneer één object is geselecteerd, geselecteerd hetzij een trackpunt hetzij een track, track dan wordt het overeenkomstige attribuutpanel zichtbaar in de rechterpanel. De attributen kunnen dan aangepast worden en worden pas doorgevoerd wanneer de knop ‘OK’ wordt geklikt of op ‘Enter’ wordt gedrukt na het wijzigen van een attribuut. attribuut Met de knop ‘Annuleren’ worden de aangebrachte wijzigingen in de attribuutpanel terug op de originele waarden van het geselecteerde object gezet indien de wijzigingen nog niet zijn doorgevoerd. doorgevoerd.
104
Figuur 6.39: De attribuutpanel voor een geselecteerde trackpunt
Figuur 6.40: De attribuutpanel voor een geselecteerde track
105
6.3.5.2.2
De punttool
Met de punttool
wordt een trackpunt aan de lay-out toevoegd of van de lay-out lay verwijderd.
Om een trackpunt toe te voegen aan een lay-out lay moet eerst de linkermuisknop worden ingedrukt. Een trackpunt zal worden weergegeven. De trackpunt kan verder naar een preciezere locatie worden gebracht door deze met de muis te verplaatsen. en. Om de definitieve locatie vast te leggen wordt de linkermuisknop losgelaten. Wanneer met de rechtermuisknop op een trackpunt wordt geklikt, wordt het trackpunt verwijverwij derd van de lay-out. Er is geen grid aanwezig in de lay-out lay editor, maar wel een manier om te kunnen uitlijnen aan bestaande trackpunten. Dit uitlijnen wordt geactiveerd wanneer de Shift toets wordt ingedrukt en over een bestaande trackpunt wordt gegaan met de muis. Met de Control toets wordt de wijze van uitlijnen gewisseld tussen horizontaal, verticaal en 45° diagonaal. Er wordt altijd rechthoekig uitgelijnd wanneer er over een tweede bestaande trackpunt wordt gegaan met de muis.
Figuur 6.41 41: Een nieuwe trackpunt uitlijnen aan één trackpunt
Figuur 6.42: Een nieuwe ni trackpunt uitlijnen aan een tweede trackpunt
Wanneer bij het toevoegen van een trackpunt geklikt wordt op een track, dan zal het trackpunt altijd de richting van de track volgen. volgen Wanneer het trackpunt niet op de track wordt losgelalos ten, dan wordt er gewoon een trackpunt op die locatie aangemaakt. Anders wordt de track gesplitst in twee tracks. In combinatie met een bestaande trackpunt uitlijnen is ook mogelijk.
106
Figuur 6.43: Een nieuwe trackpunt uitlijnen volgens een bestaande track
Figuur 6.44: Een nieuw trackpunt uitlijnen volgens een bestaande track en op die track loslaten
Figuur 6.45: Een nieuw trackpunt uitlijnen volgens een bestaande track en trackpunt
Figuur 6.46: Een nieuwe trackpunt uitlijnen volgens een bestaande track en trackpunt en op die track loslaten
107
Een bestaande trackpunt kan met de punttool worden verwijderd wanneer met de rechtermuisrechtermuis knop op het trackpunt wordt geklikt. 6.3.5.2.3
De lijntool
Met de lijntool
wordt een track aan de lay-out lay out toevoegd of deze van de lay-out lay verwijderd.
Om een track toe te te voegen aan een lay-out lay out moet eerst op een bestaand trackpunt geklikt worden met de linkermuisknop. Vervolgens wordt de muis telkens verplaatst naar het volgende bestaande trackpunt en daarop geklikt. Stoppen van de lijntool kan eenvoudig eenv door op de rechtermuisknop te klikken, door op de Escape toets te drukken of door een andere tool actief te maken.
Figuur 6.47: Een nieuwe track toevoegen
Wanneer op de Control toets wordt gedrukt, zal de cursor veranderen eranderen in de cursor . Nu kan de tracks verwijderd worden van de lay-out lay out wanneer er geklikt wordt op de tracks. Om terug te keren naar de vorige cursor en dus weer tracks te kunnen toevoegen aan de lay-out lay moet opnieuw op de Control toets worden gedrukt. gedrukt 6.3.5.2.4
De trajecttool
Met de trajecttool kan een traject samengesteld worden. Voorlopig zijn alleen gesloten trajecten toegelaten met een unieke set aan trackpunten. Het gedraagt zich als de lijntool. Een traject wordt aangemaakt wanneer er terug op het eerstee trackpunt wordt geklikt. Vervolgens wordt een dialoogvenster weergeven om de gegevens voor de traject zoals naam en beschrijbeschrij ving in te geven.
108
Figuur 6.48: Het dialoogvenster voor input van gegegevens voor een traject
De trajecten kunnen zichtbaar gemaakt worden op de lay-out wanneer in de linkerpanel ‘Trajecten’ één of meerdere trajecten worden geselecteerd. Wanneer in diezelfde linkerpanel niet op een traject wordt geklikt, zullen geen trajecten geselecteerd zijn en dus ook niet meer zichtbaar worden gemaakt op de canvas.
Figuur 6.49: Een traject op de lay-out zichtbaar maken
109
6.3.5.2.5
De penseeltool
Met de penseeltool kan eenvoudig éénéé of tweerichtingsverkeer worden ingesteld voor een track. Standaard wordt een track aangemaakt voor éénrichtingsverkeer.
Figuur 6.50:: Track voor éénrichtingsverkeer
6.3.5.2.6
Toon of verberg namen
Via de actieknop ‘Toon/Verberg Namen’ getoond of verborgen. 6.3.5.2.7
Figuur 6.51:: Track voor tweerichtingsverkeer
wordt de naam van de trackpunten op de canvas
Toon of verberg achtergrondafbeelding
Via de actieknoop ‘Toon/Verberg Achtergrondafbeelding’ van de lay-out out op de canvas getoond of verborgen. 6.3.5.2.8
wordt de achtergrondafbeelding
De handtool
is het mogelijk om het canvas te verschuiven zodat andere delen d van de Met de handtool lay-out zichtbaar kunnen worden gemaakt. Dit is een flexibelere manier dan te werken met de schuifbalken van het canvas.. Met de handtool kan ook worden gezoomd met het scrollwiel van de muis. 6.3.5.2.9
De zoomtool
Met de zoomtool is het mogelijk om op een bepaald deel van het canvas in of uit te zoomzoom en.. Dit kan op verschillende manieren. De eenvoudigste is met het scrollwiel van de muis. Een andere manier is om een zoomgebied te selecteren zoals objecten geselecteerd ge worden. Als laatste manier kan klikken op het canvas ook leiden tot inzoomen of tot uitzoomen . Het wisselen len tussen de twee cursors gebeurt door een klik op de rechtermuisknop. 6.3.5.3 Ongedaan maken van gemaakte acties Met de actieknop ‘Ongedaan Maken’ worden de gemaakte acties ongedaan gemaakt terwijl met de actieknop ‘Opnieuw’ de ongedaan gemaakte acties terug worden uitgevoerd.. De actieknoppen zijn ook beschikbaar via sneltoetsen. Met de sneltoets ‘Control
110
Z’ wordt de actie ‘Ongedaan Maken’ opgeroepen opgeroepen en met de sneltoets ‘Control Y’ de actie ‘Opnieuw’. Er kan maar maximaal 100 acties worden onthouden. Wanneer een zijsprong wordt geïntroduceerd duceerd door een nieuwe actie uit te voeren, voeren worden alle ongedaan gemaakte acties verwijderd derd van de geschiedenislijst geschiede van acties. 6.3.5.4 Opslaan van een lay-out out Met de actieknop ‘Opslaan’ wordt de lay-out out opgeslagen naar de database. Na het opslaan gebeurt er niks met de geschiedenislijst van acties. Zo kan bij per ongeluk opslaan toch nog de ongewenste acties ongedaann worden gemaakt. De actieknop ‘Opslaan’ kan ook worden opgeroepen pen met de sneltoets ‘Control S’. S’ 6.3.5.5 Sluiten van een lay-out out tabblad. Het openstaande lay-out tabblad blad kan het handigst worden gesloten door met de muis over de tabstrip strip te gaan (niet persé over de tab zelf) en deze te klikken. Voor een minder ervaren gege bruiker kan het lay-out out tabblad ook worden afgesloten door rechts in de tabstrip op het kruisje te klikken of door via het opgeroepen context menu voor ‘Sluiten’ te kiezen.
Figuur 6.52: Het afsluiten van een tab via het kruisje
Figuur 6.53:: Het afsluiten van een tab via het opgeroepen contextmenu
Bij het sluiten van een lay-out out tabblad zal er telkens eenn dialoogvenster te voorschijn komen om uitdrukkelijk te vragen om het tabblad effectief af te sluiten.
Figuur 6.54:: Uitdrukkelijk vragen om een lay-out lay tabblad te sluiten
6.3.5.6
De volgorde wijzigen van de tabbladen
De volgorde van de tabbladen kan eenvoudig gewijzigd worden via het drag and drop principrin pe.
111
6.3.5.7 Werken met de canvas navigator Met de canvas navigator kan het zichtbare gedeelte van de canvas worden veranderd. Beweeg de muis naar de blauwe rechthoek. De cursor
zal veranderen in
. Bij het indrukken
van de linkermuisknop op die blauwe rechthoek zal de cursor verder veranderen in en kan deze worden verplaatst. Het gebied van de blauwe rechthoek komt overeen met het zichtbare gebied van de canvas. Dus een ander zichtbaar gedeelte wordt getoond in de canvas. De blauwe rechthoek kan sneller naar een plaats worden gebracht wanneer buiten de blauwe rechthoek wordt geklikt. Met de knoppen ‘+‘ en ‘-’ kan respectievelijk in- en uitgezoomd worden. Ook met de trackbar kan de zoom van de canvas worden veranderd. Verder kan een specifieke zoomwaarde worden genomen door deze in te vullen in het daarvoor voorziene tekstvak.
Figuur 6.55: De canvas navigator
Er is ook nog een verborgen canvas navigator. Deze kan opgeroepen worden door in de rechterbenedenhoek van de scrollpane van het canvas te door met de muisknop te klikken. Indien deze wordt opgeroepen met de linkermuisknop dan blijft de verborgen canvas navigator toonbaar totdat de muis zich buiten de verborgen canvas navigator bevindt. Indien deze met de rechtermuisknop wordt opgeroepen dan blijft deze toonbaar totdat de rechtermuisknop is losgelaten. Het bestaan van die verborgen canvas navigator was om meer plaats in de lay-out workspace ter beschikking te stellen voor de canvas.
6.3.6 Een scenario uitvoeren Een scenario kan uitgevoerd worden door in het opgeroepen contextmenu of onder het menu ‘Scenario’ in de menubalk te kiezen voor de gewenste berekening.
112
Figuur 6.56: Een berekening uitvoeren via het contextmenu
Figuur 6.57: Een berekening uitvoeren via de menubalk
Er wordt eerst nog een dialoogvenster getoond om aan het resutaatrapport (een Word document) de volledige bestandsnaam mee te geven. De bestandsnaam van het rapport wordt genereerd uit de naam van de scenario en het tijdstip van uitvoering.
113
114
Besluit Het was niet altijd even gemakkelijk tijdens de masterproef maar toch zijn de belangrijke doelstellingen gehaald. Er is een gebruiksvriendelijke simulatietool ontwikkeld waarmee een scenario kan worden opgesteld. Vervolgens kan een statische simulatie uitgevoerd worden op basis van een gekozen scenario. De simulatietool is gebruiksklaar en zal effectief gebruikt kunnen worden door studenten en onderzoekers van UGent. In de toekomst kan de simulatietool verder uitgebouwd worden met nieuwe functies. De simulatietool is reeds in gebruik genomen door een student van UGent voor zijn thesis. Tijdens de eerste gebruikname zijn enkele mankementen naar boven gekomen die ondertussen zijn weggewerkt doch in de toekomst kan deze simulatietool groeien tot een echt volledig en volwaardig programma. Verder is er ook een handleiding geschreven zodat de studenten en onderzoekers van UGent de simulatietool zelfstandig kunnen leren omgaan.
115
Literatuurlijst [1]
[2]
[3] [4] [5] [6]
[7] [8] [9] [10]
[11] [12] [13] [14]
[15] [16] [17] [18]
[19]
Agarkar, K. G., Flow Path Design and Reliability of Automated Guided Vehicles in material handling, India: University of Mumbai, 2004, 07/04/2009. http://www.min.uc .edu/robotics/papers/theses2004/Kedar_Thesis.pdf Arunapuram, S., Z.-L.Chen, X. Hang,S. Rajagopa, Solving a Practical Pickup and Delivery Problem, Pennsylvania: INFORMS Transportation Science, Vol. 37, No. 3, 2003, pp. 347–364 Berbeglia, G, J. Cordeau, G. Laporte, Dynamic pickup and delivery problems, Canada: 2009 Berbeglia, G, J. Cordeau, I. Gribkovskaia, G. Laporte, Static Pickup and Delivery Problems: A Classifcation Scheme and Survey, Canada: 2007 Card PLM Solutions, Plant Simulation, http://www.cardsplmsolutions.nl/producten/soft ware/tecnomatix-software/plant-simulation-software/ Doerner, K. F., R. F. Hartl ,S. N. Parragh, A survey on pickup and delivery problems, Part II: Transportation between pickup and delivery locations, 2007, 10/05/2009. http://prolog.univie.ac.at/research/publications/downloads/Par_2008_356.pdf Eisenmann, Conveyor Systems, 2008, 23/04/2009. http://www.materials-handling.germ an-pavilion.com/gp/mathan09/exhibitors/dateien/05_Conveyor_Systems_en.pdf Ghent University Departement Industrial Management, Feasibility Study - Forklift Free Factory, Gent: Industrial Management, Universiteit Gent, 2007 Goodrich, M. T., T. Roberto, Minimum Spanning Trees, 2004, 30/10/2008. http://ww0. java4.datastructures.net/handouts/MST.pdf Hung P.-C., F.-H. Liu, Estimation of the Fleet Size for a Multi-load Automated Guided Vehicle System, Republic of China: Proceedings of the National Science Council, Vol. 25, No. 4, 2001, pp. 244-253 Lin, J. T., Determine How Many AGVs Are Needed, Industrial Engineering, Vol. 22, No. 3, 1990, pp. 53-56 Louveaux, J.J., F.V. Salazar, A Pickup-and-Delivery Routing Problem with Stochastic Demands, 2006, 10/05/2009. http://transp-or2.epfl.ch/tristan/FullPapers/181Salazar.pdf Masselis, B, Problem Solving 2: Lineaire algebra, Kortrijk: Cursoa, 2004 Material Handling Industry of America, Number of AGVs: An Experiential Learning Based Exercise, 06/04/2009. http://www.mhia.org/industrygroups/cicmhe/resources /classroom/number-of-agvs Siemens Product Lifecycle Management Software II (DE) GmbH, Tecnomatix Plant Simulation 8.2 User Guide, Siemens, 2008 Siemens Product Lifecycle Management Software II (DE) GmbH, Tecnomatix Plant Simulation 8.2 Step-by-Step Help, Siemens, 2008 Siemens Product Lifecycle Management Software II (DE) GmbH, Transport Libraries, Siemens, 2007 Sinreich, D, Determining Type and Number of Automated Guided Vehicles Required in a System, 16/04/2009. http://www.mhia.org/downloads/ industrygroups/cicmhe/lectures/numberofagvs.ppt Solomon, A, J. Wilck, Introduction to Automatic Guided Vehicles, 2004, 23/04/2009. http://tamcam.tamu.edu/courses/inen416/Handouts/AGV%20Presentation%20-%202% 20 per.pdf
116
[20] Technische Universiteit Eindhoven, Kun je me de kortste weg vertellen?, 30/10/2008. http://stuvo.tue.nl/fileadmin/win/studievoorlichting/VWO_service_wiskunde/kortstewe g .pdf [21] The Code Project, The .NET Framework's New SynchronizationContext Class, 2007, 01/05/2009. http://www.codeproject.com/KB/cpp/SyncContextTutorial.aspx [22] Texas A&M Computer Aided Manufacturing, Handouts: AGV System Design, 06/04/2009. http://tamcam.tamu.edu/courses/inen416/Handouts/AGV%20System%20 Design.pdf [23] University of New South Wales, Department of Computer Science and Engineering, Minimum Spanning Tree, 2004, 30/10/2008. http://www.cse. unsw.edu.au/~cs2011/lect/ 26_MST4b.pdf [24] University of Utah, Department of Mathematics, Determinants and Cramer's Rule manuscript, 2008, 01/05/2009. http://www.math.utah.edu/~gustafso/determinants.pdf [25] Van Vliet, R, Algoritme van Dijkstra, Analyse van Algoritmen, 30/10/2008. http://www .liacs.nl/~rvvliet/hslava/dijkstra.pdf [26] Van Vliet, R, Heap, Analyse van Algoritmen, 30/10/2008. http://www.liacs.nl/~rvvliet/ hslava/heap.pdf [27] Wikipedia, Binary heap, 30/10/2008. http://en.wikipedia.org/wiki/Binary_heap [28] Wikipedia, Floor and ceiling functions, 01/05/2009. http://en.wikipedia.org/wiki/Floor_ function [29] Wikipedia, Floyd-Warshall algorithm, 30/10/2008. http://en.wikipedia.org/wiki/FloydWarshall_algorithm [30] Wikipedia, Grafentheorie, 30/10/2008. http://nl.wikipedia.org/wiki/Grafentheorie [31] Wikipedia, Kortstepadalgoritme, 30/10/2008. http://nl.wikipedia.org/wiki/Kortste_ Pad_Algoritme [32] Wikipedia, Minimum Spanning Tree, 30/10/2008. http://en.wikipedia.org/wiki/ Minimum_spanning_tree [33] Wikipedia, Prim's algorithm. 30/10/2008. http://en.wikipedia.org/wiki/Prim's_algorithm [34] Wikipedia, Priority queue. 30/10/2008. http://en.wikipedia.org/wiki/Priority_queue [35] Wikipedia, Quadtree. 30/10/2008. http://en.wikipedia.org/wiki/Quadtree [36] Wolfram MathWorld, Gaussian Elimination, 01/05/2009. http://mathworld.wolfram.co m/GaussianElimination.html [37] Wolfram MathWorld, Triangle Area, 01/05/2009. http://mathworld.wolfram.com/Trian gleArea.html
117
A Database A.1 Beschrijving van de attributen van de entiteiten Tabel 6.1: Attributen van een fabriek
Factory Attribuut
Beschrijving
ID
De identifier toegekend aan de fabriek.
Name
De naam toegekend aan de fabriek.
Description
De beschrijving van de fabriek.
Tabel 6.2: Attributen van een verpakking
Package Attribuut
Beschrijving
ID
De identifier toegekend aan de verpakking.
Code
De code toegekend aan de verpakking.
Description
De beschrijving van de verpakking.
Factory
De betreffende fabriek.
Mass
De massa van de verpakking, uitgedrukt in kg.
Volume
Het volume van de verpakking, uitgedrukt in m³.
Image
De afbeelding dat de verpakking representeert.
Tabel 6.3: Attributen van een onderdeel
Part Attribuut
Beschrijving
ID
De identifier toegekend aan het onderdeel.
PartNumber
Het unieke codenummer toegekend aan het onderdeel.
Description
De beschrijving van het onderdeel.
Factory
De betreffende fabriek.
SupplierPackage
De pakketvorm van het onderdeel geleverd door een leverancier.
SupplierAmount
Het aantal onderdelen in één pakket geleverd door een leverancier.
IsExternalSupplier
Is het onderdeel afkomstig van een externe leverancier?
Mass
De massa van het onderdeel, uitgedrukt in kg.
Volume
Het volume van het onderdeel, uitgedrukt in m³.
Image
De afbeelding dat het onderdeel representeert.
118
Tabel 6.4: Attributen van een productielijn
Line Attribuut
Beschrijving
ID
De identifier toegekend aan de productielijn.
Name
De naam toegekend aan de productielijn.
Description
De beschrijving van de productielijn.
Factory
De betreffende fabriek.
Tabel 6.5: Attributen van een station
Station Attribuut
Beschrijving
ID
De identifier toegekend aan het station.
Name
De naam toegekend aan het station, vaak gevormd door een combinatie van een zoneletter [A, B, C, ...], een stationzijde [L, R, ...] en een stationnummer [0, 1, 2, ...] De beschrijving van het station.
Description Factory
De betreffende fabriek.
Line
De betreffende productielijn.
Tabel 6.6: Attributen van een transportbatch
TransportBatch Attribuut
Beschrijving
ID
De identifier toegekend aan de transportbatch.
Name
De naam toegekend aan de transportbatch.
Description
De beschrijving van de transportbatch.
Factory
De betreffende fabriek.
IsKit
Wordt het opgepikt in kit? Anders als bulk.
PickupStation
Het station waar het moet worden opgepikt.
DropoffStation
Het station waar het moet worden afgezet.
Mass
De totale massa van de transportbatch, uitgedrukt in kg.
Volume
Het totale volume van de transportbatch, uitgedrukt in m³.
Frequency
Het gemiddeld aantal keer dat het moet worden getransporteerd, uitgedrukt per shift.
119
Tabel 6.7: Attributen van een transportsysteem
TransportSystem Attribuut
Beschrijving
ID
De identifier toegekend aan het transportsysteem.
Name
De naam toegekend aan de karakteristieken van het transportsysteem.
Description
De beschrijving van de karakteristieken van het transportsysteem.
Factory
De betreffende fabriek.
MaximumMass Velocity
De maximum massa het kan transporteren, uitgedrukt in kg. (Voor een trein: voor één wagon) De gemiddelde snelheid, uitgedrukt in m/s.
VelocityLoaded
De gemiddelde snelheid in geladen toestand, uitgedrukt in m/s.
PickupTime
De gemiddelde tijd nodig om een lading op te pikken, uitgedrukt in s.
DropoffTime
De gemiddelde tijd nodig om een lading af te zetten, uitgedrukt in s.
PickupHandlerCount
Het aantal handlers aan de oppikstation.
DropoffHandlerCount Het aantal handlers aan de afzetstation. Tabel 6.8: Attributen van een lay-out
Layout Attribuut
Beschrijving
ID
De identifier toegekend aan de lay-out.
Name
De naam toegekend aan de lay-out.
Description
De beschrijving van de lay-out.
Factory
De betreffende fabriek.
Image
De afbeelding dat de lay-out van de fabriek representeert.
PixelSize
De grootte van de pixel op de afbeelding, uitgedrukt in m.
Tabel 6.9: Attributen van een spoorpunt
TrackPoint Attribuut
Beschrijving
ID
De identifier toegekend aan het spoorpunt.
Name
De naam toegekend aan het spoorpunt.
Description
De beschrijving van het spoorpunt.
Layout
De betreffende lay-out.
XPosition
De x-postie van het spoorpunt uitgedrukt in pixels.
YPosition
De y-positie van het spoorpunt uitgedrukt in pixels.
IsNetworkNode
Stelt het punt een netwerknode voor? Anders stelt het een station voor.
Station
De referentie naar het station. Zie ook attribuut IsNetworkNode.
Image
De afbeelding dat het spoorpunt representeert.
120
Tabel 6.10: Attributen van een spoor
Track Attribuut
Beschrijving
ID
De identifier toegekend aan het spoor.
Name Layout
De naam toegekend aan het spoor, gevormd met de namen van de twee te verbinden spoorpunten gescheiden door een ‘_’. De betreffende lay-out.
StartPoint
De spoorpunt als startpunt.
EndPoint
De spoorpunt als eindpunt.
WayBack
Kan men in de andere richting verplaatsen, als terugweg nemen?
Length
De afstand af te leggen van het ene spoorpunt naar het andere spoorpunt volgens het spoor, uitgedrukt in m. Deze afstand wordt berekend. Het gemiddeld aantal transporten dat er zal passeren. Dit wordt berekend.
Traffic
Tabel 6.11: Attributen van een waypoint
WayPoint Attribuut
Beschrijving
ID
De identifier toegekend aan de waypoint.
Route
Het betreffende traject.
Track
De betreffende spoor. Tabel 6.12: Attributen van een traject
Route Attribuut
Beschrijving
ID
De identifier toegekend aan het traject.
Name
De naam toegekend aan het traject.
Description
De beschrijving van het traject.
Layout
De betreffende lay-out.
121
Tabel 6.13: Attributen van een scenario
Scenario Attribuut
Beschrijving
ID
De identifier toegekend aan het scenario.
Name
De naam toegekend aan het scenario.
Description
De beschrijving van het scenario.
Factory
De betreffende fabriek.
Layout
De betreffende lay-out.
Route
Het betreffende traject.
TransportSystem
Het betreffende transportsysteem.
AvailableTimePerCarrier CarrierUtilization
De beschikbare tijd van een carrier voor de uitvoering van de materiaalstroom, uitgedrukt in min/uur. De bezettingsgraad van een carrier, uitgedrukt in percentage.
TrafficCongestion
De verkeerscongestie, uitgedrukt in percentage.
ShiftDuration
De tijdsduur van een shift voor de uitvoering van de materiaalstroom.
Tabel 6.14: Attributen van een inputparameter
InputParameter Attribuut
Beschrijving
ID
De identifier toegekend aan de inputparameter.
Name
De naam toegekend aan de inputparameter.
Description
De beschrijving van de inputparameter.
Scenario
Het betreffende scenario.
Unit
De eenheid van de inputwaarde.
ValueT
De inputwaarde als tekst.
ValueN
De inputwaarde als een decimaal getal.
Numeric
Is de inputwaarde een getal?
Tabel 6.15: Attributen van een outputparameter
OutputParameter Attribuut
Beschrijving
ID
De identifier toegekend aan de outputparameter.
Name
De naam toegekend aan de outputparameter.
Description
De beschrijving van de outputparameter.
Scenario
Het betreffende scenario.
Unit
De eenheid van de inputwaarde.
ValueT
De inputwaarde als tekst.
ValueN
De inputwaarde als een decimaal getal.
IsNumeric
Is de inputwaarde een getal?
122
B Enkele wiskundige uitwerkingen B.1 De loodrechte projectie van een punt op een rechte
Punten in een 2D-vlak worden volgens het Cartesiaans assenstelsel gedefinieerd door een ( en een *-coördinaat. Een rechte ℓ kan dan worden gedefinieerd door twee punten %&en %' . Verder is er een derde punt + dat niet colineair is met de punten %&en %' en bevindt zich dus niet op de rechte ℓ.
De loodrechte projectie van het punt + op de rechte ℓ geeft als resultaat het punt % dat zich op de rechte ℓ bevindt. Een rechte heeft een bepaalde richting gekarakteriseerd door de vector = ?. Een andere rechte Z door het punt + heeft ook een bepaalde richting gekarakteriseerd door de vector >?. De twee
rechten zijn loodrecht (90° of ' ) wanneer het inwendig product van = ? en >? gelijk is aan nul: = ? · >? X r
= > s·r s =) >)
= ? · >? X = > L =) >)
(B.1)
= ? · >? X = ? · >? X = ? · >? · cos = ? · >? X = ? · >? · cos 2 = ? · >? X = ? · >? · 0 = ? · >? X 0 met
= ? >? = =) > >)
: : : :
de vector dat de richting aanduidt van de rechte ℓ de vector dat de richting aanduidt van de rechte Z door het punt + de (-coördinaat van vector = ? de *-coördinaat van vector = ?
: de (-coördinaat van vector >? : de *-coördinaat van vector >?
: de hoek tussen de vectoren = ? en >?
Dus de eerste vergelijking waaraan de projectie van een punt op een rechte moet voldoen is: = ? · >? X E%' c %& F · E% c +F X 0 met
= ? >? %&
(B.2)
: de vector dat de richting aanduidt van de rechte ℓ : de vector dat de richting aanduidt van de rechte Z door het punt + : het eerste punt dat de rechte ℓ vormt 123
%' % +
: het tweede punt dat de rechte ℓ vormt : een punt dat zich op de rechte ℓ bevindt : een punt dat zich niet op de rechte ℓ bevindt
En uitgeschreven in x,y-coördinaten wordt de bovenstaande vergelijking (B.2) vergelijking (B.4): = ? · >? X E%' c %& F · E% c +F %' c %& % c+ = ? · >? X r s·r s %' ) c %& ) %) c +)
(B.3)
= ? · >? X %' c %& E% c + F L %' ) c %& ) %) c +)
= ? · >? X % %' c %& L %) %' ) c %& ) c + %' c %& c +) %' ) c %& ) % %' c %& L %) %' ) c %& ) c + %' c %& c +) %' ) c %& ) X 0 met
= ? >? %& %' % + % %)
: : : : : : : :
%& %&)
: de (-coördinaat van punt %& : de *-coördinaat van punt %&
+ +)
(B.4)
de vector dat de richting aanduidt van de rechte ℓ de vector dat de richting aanduidt van de rechte Z door het punt + het eerste punt dat de rechte ℓ vormt het tweede punt dat de rechte ℓ vormt een punt dat zich op de rechte ℓ bevindt een punt dat zich niet op de rechte ℓ bevindt de (-coördinaat van punt % de *-coördinaat van punt %
: de (-coördinaat van punt + : de *-coördinaat van punt +
%' : de (-coördinaat van punt %' %') : de *-coördinaat van punt %' De bovenstaande vergelijking (B.4) zegt alleen iets over de loodrechte projectie van het punt + volgens de rechte Z die loodrecht staat op de rechte ℓ, maar niks over het feit dat de projectie van het punt + , namelijk het punt % op de rechte ℓ bevindt. Een tweede vergelijking is dus vereist, namelijk dat de punten %&, %' en % colineair zijn. De oppervlakte van een driehoek gevormd door die punten %&, %' en % kan berekend worden als volgt [37]:
124
%& 1 X %' 2 % met
% %)
%& %&)
%& ) %' ) %)
1 1 1
(B.5)
: de (-coördinaat van punt % : de *-coördinaat van punt %
: de (-coördinaat van punt %& : de *-coördinaat van punt %&
%' : de (-coördinaat van punt %' %') : de *-coördinaat van punt %' Als de oppervlakte van de driehoek gelijk is aan nul, dan kan gesteld worden dat de punten colineair zijn. Eerst kan die matrix, waarvan de determinant zal worden genomen, verder worden vereenvoudigd via Gauss-eliminatie door nullen te introduceren [36]: %& X %' % met
% %)
%& %&)
%& ) %' ) %)
%& 1 1 X %' c %& % c %& 1
%& ) %' ) c %& ) %) c %& )
1 %' c %& 0 X ¡ % c %& 0
%' ) c %& ) %) c %& ) ¡
(B.6)
: de determinant van een matrix : de (-coördinaat van punt % : de *-coördinaat van punt % : de (-coördinaat van punt %& : de *-coördinaat van punt %&
%' : de (-coördinaat van punt %' %') : de *-coördinaat van punt %'
De determinant van een 2 ( 2 matrix wordt berekend als volgt: && X detE' ' F X ¤
'&
met
&' '' ¤ X && '' c &' '&
(B.7)
: de determinant van een matrix ' ' : een matrix met 2 rijen en 2 kolommen : een matrixelement in rij r en kolom c van matrix M
De determinant in vergelijking (B.5) kan nu uitgewerkt worden volgens (B.6):
1 %' c %& X ¡% c% & 2
%' ) c %& ) %) c %& ) ¡ X 0
125
%' c %& DX¡% c% &
%' ) c %& ) %) c %& ) ¡
D X %' c %& %) c %& ) c %' ) c %& ) % c %&
D X c% %' ) c %& ) L %) %' c %& c %& ) %' c %& L %& %' ) c %& ) c% %' ) c %& ) L %) %' c %& c %& ) %' c %& L %& %' ) c %& ) X 0 met
% %)
%& %&)
(B.8)
: de determinant van een matrix : de (-coördinaat van punt % : de *-coördinaat van punt % : de (-coördinaat van punt %& : de *-coördinaat van punt %&
%' : de (-coördinaat van punt %' %') : de *-coördinaat van punt %'
De vergelijkingen (B.4) en (B.8) worden hieronder samengevat en vervolgens in de · C X matrixvergelijkingsvorm gegoten: % %' c %& L %) %' ) c %& ) X + %' c %& L +) %' ) c %& ) § ¦ c% %' ) c %& ) L %) %' c %& X %& ) %' c %& c %& %' ) c %& ) %' c %& ¨% c % &) ') met
% %)
%& %&)
(B.9)
+ %' c %& L +) %' ) c %& ) %' ) c %& ) % © ª « X ¬ %' c %& %) %& ) %' c %& c %& %' ) c %& )
: de (-coördinaat van punt % : de *-coördinaat van punt %
: de (-coördinaat van punt %& : de *-coördinaat van punt %&
%' : de (-coördinaat van punt %' %') : de *-coördinaat van punt %'
Een lineaire 2 ( 2 stelsel van de vorm · C X kan opgelost worden met de regel volgens Cramer [24]: %' c %& X detE' ' F X ¡% c % &) ')
%' ) c %& ) %' c %& ¡
(B.10)
Δ X %' c %& %' c %& c %& ) c %' ) %' ) c %& ) ¯ 0
126
° X
%& ) %' c %& c %& %' ) c %& )
± X % X
%) X
+ %' c %& L +) %' ) c %& )
%' c %&
%& ) c %' )
°
%' ) c %& ) %' c %&
+ %' c %& L +) %' ) c %& )
%& ) %' c %& c %& %' ) c %& )
(B.12)
(B.13)
±
met
(B.11)
(B.14)
)
: de determinant van een matrix : de determinant van aangepaste matrix: B elementen op de plaats van x factoren : de determinant van aangepaste matrix: B elementen op de plaats van y factoren
%& %&)
: de (-coördinaat van punt %& : de *-coördinaat van punt %&
% %)
: de (-coördinaat van punt % : de *-coördinaat van punt %
%' : de (-coördinaat van punt %' %') : de *-coördinaat van punt %'
Op eerste zicht lijkt dit een complexe berekening, maar de geschreven code om % en %) te berekenen, is zeer compact: Code Listing B.1: De loodrechte projectie van een punt op een rechte int int int int
a b c d
= = = =
x2 y2 y1 x2
-
x1; y1; y2; x1;
int D = a * d - b * c; if (D != 0) { int e = x * a + y * b; int f = y1 * a - x1 * b; Point p = Point.Round(new PointF( (float)(e * d - b * f) / (float)D, (float)(a * f - e * c) / (float)D)); }
127