• No results found

Optimering av motorunderhåll RM15

N/A
N/A
Protected

Academic year: 2021

Share "Optimering av motorunderhåll RM15"

Copied!
67
0
0

Loading.... (view fulltext now)

Full text

(1)

EXAMENSARBETE I

FLYGTEKNIK

15 HP, GRUNDNIVÅ 300

Akademin för innovation, design och teknik

Optimering av motorunderhåll RM15

Författare: Jonas Fredriksson & Mauricio Espinosa Rapportkod: MDH.IDT.FLYG.0228.2010.GN300.15HP.M

(2)

ii

SAMMANFATTNING

Detta examensarbete har utförts på Saab Support and Services i Arboga. Syftet med examensarbetet har varit att ta fram en modell i Matlab som skall beräkna antal motorbyten, och hur många stora motortillsyner (Check 3) det kommer att bli. Detta skall utföras för att få en så kostnadseffektiv drift som möjligt fram till valt slutscenario, med 40 SK60 det vill säga 80 stycken RM15 motorer i drift. De scenarion som har påverkat projektet har varit 2014 VT, 2017 VT samt 2020 VT. Projektet har delats upp i två moment, där det ena har varit att skapa en databas i Excel för alla motorer och det andra är ett program i Matlab som skall bearbeta all data från Excel, för att på så sätt kunna få ut det mest optimala tillvägagångssättet.

Det som vi har kommit fram till är att scenario 2014 VT kommer att uppnås med de aktuella motorer som finns tillgängliga idag utan att någon motor skickas iväg på Check 3. Vi har även beräknat fram att cyklerna hos alla motorer kommer att ta slut innan scenario 2017 VT (cirka månad 50-60), så motorer kommer att behövas skickas på Check 3 hur man än går till väga. Vi har beräknat fram teoretiskt att vi kommer cirka att behöva fem Check 3 för att kunna klara oss till scenario 2017 VT, samt cirka 50 Check 3 för att klara av scenario 2020 VT.

Vi har under projektets gång fått tilldelat olika priser kring motorbyten och Check 3. Vi har då jämfört våra teoretiska resultat med simulerade resultat från Matlab. Det man kan se här är att det skiljer sig ganska mycket från de teoretiska värdena, kontra de simulerade värdena trots att körningarna i Matlab inte är optimala.

Dock är dessa värden baserade på en total cykelsumma och inte på att man har 80 motorer i drift, med andra ord samma motor inte kan användas på flera ställen.

Programmet som vi har skapat i Matlab delar nu upp motorer i höger och vänster sida av flygplanet, för att vi skall kunna se vilken motor som faller ut samt vilken sida den nya motorn kommer att monteras.

Programmet som vi har skapat lagrar all data om hur många motorbyten det blir för vänster samt höger monterade motorer. Programmet räknar även hur många motorer man skickar på Check 3, programmet har även en ”fördröjning” för att kunna symbolisera att när en motor skickas på Check 3 så skall det innebära att motorn inte skall tas med i beräkningarna inom en period (1 månad). Detta förenklar spårbarheten hos varje motor och eventuella händelser.

Vi har även kommit fram till att man måste med stor omtanke skicka rätt antal Check 3 vid rätt tidpunkt, samt att man måste veta vilken motor man skall byta med under ett motorbyte för att inte få brist på motorer, eller få ett alldeles för högt cykelvärde hos alla motorer när slutscenariot är nått.

(3)

ABSTRACT

This thesis has been performed at Saab Support and Services in Arboga. The aim of the thesis has been to develop a model in Matlab to calculate the number of engine changes, and how many major engine inspections (Check 3) and also when they will be performed to obtain the most cost-effective operation as possible to the final scenario, with 40 SK60 that is, 80 pieces of RM15 in operation. The scenarios that have affected the project have been 2014 VT, 2017 VT 2020 VT. The project has been divided into two parts, one of which was to create a database in Excel for all engines and the other is a program in Matlab, to process all data from Excel, in order to be able to get the most optimal approach.

What we have found is that the scenario in 2014 VT will be achieved with the current engines

available today without any engine sent on Check 3. We have also calculated that the cycles of all the engines will run out before the scenario 2017 VT (approximately 50-60 months), so engines will have to be sent on Check 3. We have estimated in theory that we will need approximately five Check 3 to clear scenario 2017 VT, and approximately 50 Check 3 to cope with the scenario 2020 VT.

We have during the project been awarded various prizes around the engine replacement and Check 3. We have then compared our theoretical results with simulated results from Matlab. What we can see here is that the results are quite different from the theoretical values, versus the simulated values, despite the fact that the execution in Matlab is not optimal. However, these values are based on a total sum of cycles, and not the fact that you have 80 engines, in other words, the same engine can’t be used in several places.

The program that we have created in Matlab are now dividing the engines on the right and left side of the aircraft for us, to be able to see which engine will fall out and which side the new engine will be mounted on.

The program that we have created stores all data from the number of engine changes that creates on the left-and right-mounted engines. The program also calculates how many engines it sends to

Check 3, the program also has a "delay" in order to symbolize the time taken when an engine is sent to Check 3 which means that the engine will not be taken into account within a period (1 month). This facilitates the traceability of each engine and any events.

We have also come to the conclusion that we must with great care send the correct number of engines to Check 3 at the right time, and that you have to know which engine you should change during an engine replacement, so that we don’t have a shortage of engines, or have a way too high cycle value on all engines when the final scenario is reached.

Datum: 30 november 2010 Utfört vid: Saab AB, Arboga

Handledare vid Mälardalens Högskola: Tommy Nygren

Handledare vid Saab AB, Support and Services: Mikael Abrahamsson, Jan Block & Lars-Erik Käll. Examinator: Tommy Nygren

(4)

NOMENKLATUR

1. Check 3/SMT Stor Motor Tillsyn

2. VT Vårtermin

3. HT Hösttermin

4. Fpl Flygplan

5. Dttot Total Drifttid

6. Atg kod Åtgärdskod

(5)

INNEHÅLL

Kapitel 1 INLEDNING 1 1.1 Projektets Bakgrund ...1 1.2 Syfte ... 2 1.3 Problemställning ... 2 1.4 Avgränsningar ... 2 Kapitel 2 METODER 3 2.1 Arbete med Excel ... 3

2.2 Presentation av Matlab ... 6

2.2.1 Huvudprogram & Funktionsfil ... 7

2.3 Arbetet med Matlab ... 8

2.4 Arbetet med kostnadsanalys ... 25

Kapitel 3 RESULTAT 26 3.1 Excel resultat ... 26 3.2 Matlab resultat ... 28 3.3 Scenario 2017 ... 33 3.4 Scenario 2020 ... 38 3.5 Kostnadsanalys ... 41

3.5.1 Beräkning av antal Check 3 teoretiskt ... 41

3.5.2 Kostnader Scenario 2017 simulering ... 42

3.5.2 Kostnader Scenario 2020 simulering ... 42

3.5.3 Jämförelse av resultat ... 43 Kapitel 4 DISKUSSION 44 4.1 Diskussioner ... 44 Kapitel 5 SLUTSATSER 45 5.1 Slutsatser... 45 Kapitel 6 REKOMMENDATIONER 46 6.1 Rekommendationer ... 46 Kapitel 7 TACK 47 Kapitel 8 REFERENSER 48 Kapitel 9 BILAGOR A

(6)

Kapitel 1

INLEDNING

1.1 Projektets Bakgrund

Försvarsmakten har idag 80 stycken skolflygplan av typen SK60, med 231 RM15-motorer inklusive reservmotorer. Saab AB har idag ett kontrakt på att driva samt avveckla hela SK60 systemet. Det finns alltså ett ”överskott” på motorer som kommer att öka ytterligare genom att knappt hälften av den nuvarande flottan kommer att flyga efter år 2012, det vill säga 40 flygplan. Dessa 40 flygplan kommer att genomgå en avionik-modifiering för att efterlikna JAS-39 Gripen. Kontraktet som man arbetar efter omfattar ett par optioner som ger en komplex planeringssituation.

För bland annat motorunderhållet, ett exempel är det underhåll som kallas för Check 3/SMT som skall ske med det maximala intervallet av 1550 motorcykler. Underhållet utförs hos motortillverkaren Williams International som då kostar ca: 1,5 miljoner kronor per tillfälle. Det nuvarande kontraktet som Saab AB har innebär avveckling av SK60 år 2017. Optimalt inkluderar här balans mellan resursbrukning och att byta motorer i flygplan samt även att skicka motorer på underhåll till USA. Avvecklingen av flygplansparken SK60 och där med också motorn RM15 kan ske vid olika alternativa tidpunkter, så som år 2014, 2017 eller 2020. Beslutet om avveckling och eller fortsättning kan också tas vid olika tidpunkter under dessa år. Det finns olika optioner för att förändra driftprofilen för hela flottan, vilket försvårar behovsplaneringen av motorunderhåll vid rätt tidpunkt och antal.

Option 1:

Man har möjlighet att beställa 2000 extra timmar per år, det finns inga begränsningar på hur mycket man kan beställa.

Option 2:

1.0) Förkortning av två leveransperioder med ett års framförhållning, detta innebär att 2013-06-30 måste man senast meddela att man skall sluta flyga 2014-06-30.

1.1) Om man slutar 2014-06-30 med två års framförhållning, detta innebär att 2012-06-30 måste man senast meddela om man skall sluta flyga 2014-06-30.

Option 3:

Om man skulle förlänga så säger kontraktet att man senast skall meddela 2015-06-30, att man vill flyga till 2020-06-30, detta ger exklusivt tillkommande motorunderhåll ”SMT”, så detta måste förhandlas separat.

(7)

1.2 Syfte

Syftet med den här rapporten är att ta fram en beräkningsmodell som Saab AB kan använda för att planera motorunderhåll av RM15. Modellen är baserat på de olika villkoren som minimerar underhållskostnader/ motorbyten samt att minimera risken för tillgänglighetsbrister vid olika avvecklingsscenarier samt driftprofiler. Modellen som tas fram skall sträcka sig från år 2012 – 2020 med scenarier 2014, 2017 och 2020 som tänkbara alternativ.

1.3 Problemställning

Att studera motorunderhållet med planeringsproblematiken för SK60 motorpark RM15. Hur stort är underhållsbehovet för RM15, och skall underhållsplaneringen inriktas för några olika potentiella scenarier. Det är aktuellt att studera underhållsbehovet med hänsyn till ett antal olika variabler, så som avvecklingstakt, operationsprofil, motorcykler, reparationstider etc.

Underhållsbehovet samt underhållsplaneringen skall styras så att kostnaderna för underhållet minimeras, dock måste hänsyn tas till tillgänglighet/ risktagning, det vill säga att otillgänglighet inte skapas av förslagen underhållsplaneringsstrategi. Även hänsyn till den operativa driften och underhållet att skifta motorer i flygplan måste beaktas.

Examensarbetet förväntas att ge svar på följande frågor:

1. Hur ser underhållsbehovet samt underhållsplaneringen för SK60 motorpark RM15 ut för olika scenarier, då underhållskostnaden minimeras samt att bibehållen tillgänglighet på RM15 motorerna beaktas?

2. Hur stor kommer underhållskostnaderna att bli för RM15 motor parken givet i de olika scenarierna, då en Check 3 beräknas att kosta 1 500 000 kronor, samt att ett motorbyte kostar 20 000 kronor?

3. Hur kan framtagen planeringsmodell tillämpas för alternativa nya varianter på scenarier för SK60 som försvarsmakten kan komma att föreslå?

1.4 Avgränsningar

Under projektets gång kommer 40 stycken SK60 att användas i beräkningarna samt de scenarier som skall arbetas med är år 2014, 2017 och 2020.

Motorcykler per flygtimma/ motor kan variera i verkligheten beroende på flygningarna, men vi har satt ett cykelvärde på 1,8 per motor under projektets gång.

Antal flygtimmar för varje scenario, VT samt HT kan också variera, men vi har använt oss av VT= 3800 flygtimmar, HT=2699 flygtimmar.

Check 3 är satt på 1550 motorcykler per motor, detta värde har använts under projektets gång. Men motortillverkaren Williams kan ändra detta intervall, då har detta värde satts in som en variabel som kan ändras manuellt efter behov.

Antal motorer som finns totalt i motorparken är 233 stycken.

Vi har även ansatt ett tillfälligt toleransvärde på 10 000 cykler som säkerhetsmarginal. Detta värde ansatts till en början för att kunna underlätta lösandet av problemet. Detta värde kommer att ändras under arbetets gång.

(8)

Kapitel 2

METODER

Under projektets gång så har programmen Excel och Matlab använts, för att kunna lösa problemet som Saab AB tilldelat. Ständiga möten med Saab´s handledare Jan Block, Lars-Erik Käll och Mikael Abrahamsson har hjälpt oss med vägledning samt idéer. För att kunna lösa problemet så har vi delat upp arbetet i två områden, sortering i Excel och optimering/ programmeringen i Matlab. Processen kommer att beskrivas i följande delkapitel. Informationen från Excel kommer sedan att användas i Matlab.

2.1 Arbete med Excel

Det första som skall göras här är att sortera, strukturera samt sammanställa all data som kommer att användas i projektet. Här har vi gjort en Excel-fil som vi döpt till ”Grunddata” och i denna fil så finns flera blad vid namn:

1. Grunddata

2. Avionikmod fpl motorer 3. Motorparken,

4. Totalt anv cykler

Första sidan som skapats heter Grunddata, denna sida visar vilka typer av indata som kommer att användas för båda scenarion nämligen 2017 samt 2020. Indata som visas i tabellen nedan är data som har tilldelats från Saab, och kommer att användas som grunddata vid fortsatta beräkningar och som redovisningsmaterial. Data värdena har delats upp i olika kategorier:

check3 1550

cykler per flygtimma 1,8

antal flygplan 40

Första indata värdet i tabellen beskriver intervallet för stor motortillsyn, denna tillsyn kallas för Check 3, och har ett förutbestämt intervall på 1550 motorcykler och har fastställts av motortillverkaren Williams International. Varje motor som är i drift kommer att ha en cykelförbrukning per flygtimma på 1,8.

Värdet 1,8 är ett medelvärde av hela motorparken och har blivit angivet av Mikael Abrahamsson för att underlätta studien. Under scenario 2012 till slutscenariot kommer 40 stycken SK60 flygplan att operera. Sedan är tanken att bygga på denna tabell med fördelning av antal flygtimmar per månad, tanken med detta är att vi skall kunna få så noggrant resultat som möjligt.

(9)

Vi vet redan nu att varje Vårtremin (VT) så kommer det att förbrukas 3800 flygtimmar, respektive 2699 flygtimmar varje hösttermin (HT). Men eftersom vi är ute att få reda på vad flygtimmarna blir varje månad så måste vi använda oss av följande ekvationer:

Vårtermin = Antal flygtimmar/6 månader (2.1) Hösttermin = Antal flygtimmar/6 månader (2.2)

Det andra bladet Avionikmod fpl motorer beskriver vilka flygplan samt motorer som kommer att opereras från år 2012 – 2017 alternativt 2020. Detta är en trolig prognos framtagen av Mikael Abrahamsson och beskriver vilka flygplan och motorer som kommer att operera.

Fpl Vänster motor Cykler Höger motor Cykler Kommentar, prognos Motorbyte (vid eller före avionikmod)

79 16123 1 139,00 16214 938,00 flyger ej nu, 100 cy/per motor 141 16229 975,00 16226 988,00 flygs ytterligare 200 cy/per motor

88,4 16241 893,00 16048 1 278,00 flygs ytterligare 150 cy/per motor Ev motor 16048 vid avionikmod För en mer detaljerad bild se Bilaga 2 Avionikmod fpl motorer.

Första kolumnen heter Fpl och beskriver vilket flygplan som kommer att operera, vissa SK60 i flottan är utrustade med fyra säten vilket beskrivs i tabellen som tillexempel 88,4. Vidare i tabellen så beskrivs vilka motorer som kommer att vara monterade på flygplanet. Varje motor som är monterad har ett motornummer för identifiering som kan ses i tabellen under kolumnen Vänster motor respektive Höger motor. Varje motor har under sin drifttid förbrukat ett visst antal cykler, och avläsning sker efter vissa och läggs då in i en databas.

Kommentar, prognos visar aktuell status på motorerna och eventuell information om förändringar i data. Den sista kolumnen Motorbyte (vid eller före avionikmod) beskriver om något motorbyte kan komma att utföras vid avionik modifieringen.

Tredje bladet heter Motorparken och beskriver alla motorer som finns tillgängliga. Här har en sortering utförts för att ta bort kasserade motorer som inte skall användas men fortfarande finns kvar i systemet. Även motorer till Avionikmod fpl med motorer har tagits bort.

Fplno Myndighet Motornr Avläst Drifttid Cykelvärde 005 60000 16095 2009-07-01 864 1440 005 60000 16192 2009-07-01 629 997 007 60000 16069 2009-07-01 507 702 007 60000 16100 2009-07-01 507 724 010 60000 16085 2009-07-01 661 984 010 60000 16208 2009-07-01 386 597

Cykler/h Flightno Dttot Ber Cykler Atg kod Cykelvärde åtg.

1,7 3043 864 1440 1,6 2755 629 997 1,4 2626 507 702 1,4 2627 507 724 1,5 2792 661 984 1,5 2476 386 597

(10)

Precis som Avionikmod fpl med motorer finns här beskrivet vilket flygplan motorerna är monterade på och vilket cykelvärde de har samt även hur många cykler som har förbrukats per timma.

Myndighet beskriver vart fpl/motor finns till exempel Ljungbyhed, Malmslätt. Flghtno visar hur många pass motorn har flugit. Dttot beskiver total drifttid hos motorerna. Atg kod anger om någon typ av åtgärd har utförts på motorn, där Cyklevärde åtg beskriver vid vilket cykelvärde som åtgärden utfördes.

Värdena som beskrivs ovan ändras kontinuerligt då flygplanen används, så listan som används nu kommer att bli inaktuell.

Det fjärde och sista bladet som har skapats i Excel heter Totalt anv cykler som beskriver hur många cykler som har förbrukats hos alla motorer samt även hur många cykler som finns tillgängliga. Här finns även en ruta som beskriver hur många motorer som finns att använda samt. Då vi redan vet hur många motorer vi har att använda oss av så kan vi ansätta detta värde direkt i tabellen.

Totalt använda cykler XXXXXX

Totalt tillgängliga cykler XXXXXX

Antal motorer 233,00

Då vi är intresserade av att veta hur många tillgängliga cykler vi har hos alla motorer, så måste vi först ta reda på hur många cykler som blivit förbrukade. Detta kan vi enkelt få reda på genom att tillämpa ekvation (2.1). Med hjälp av detta värde så kan vi bygga vidare vår uträkning.

Då vi vet att varje motor inte får gå över 1550 cykler (Check3), så kan vi nu genom att multiplicera vår Check 3 konstant med alla motorer som vi har tillgängliga, och sedan subtraherar detta med totalt använda cykler. Så skall vi nu kunna få ut våra totala tillgängliga cykler hos alla motorer. Detta kan vi då utföra med ekvation (2.2).

Totalt använda cykler = ∑ cykelvärdet för alla motorer (2.1) Totalt tillgängliga cykler = ((Check 3*alla motorer) – Totalt använda cykler) (2.2)

(11)

2.2 Presentation av Matlab

Matlab är framtaget av företaget The MathWorks, och användas för matematiska samt tekniska beräkningar. Matlab är ett dataprogram och matrisbaserat programspråk, där Matlab står för Matrix Laboratory. Nedan ses en bild av programmet Matlab.

Current Directory anger från vilken katalog som Matlab sparar och hämtar filer. I Command Window körs programmen i Matlab. I rutan Workspace lagras alla värden på de variabler som beräknats eller angetts och i Command History sparas all data som skrivits i Command Window.

 Grön text är kommentarer i Matlab och påverkar inte programmet under körning.

 Röd text är skrift i Matlab till exempel vid frågor.

(12)

2.2.1 Huvudprogram & Funktionsfil

En funktionsfil är en typ av M-fil där man utför en funktionsberäkning så som y=x+3, och kan skrivas i formatet y(x) eller f(x). Denna fil är beroende av ett antal parametrar, i det här fallet x, som kan fås från programmet man skrivit i Matlab eller från annan källa så som tillexempel Excel.

Här ses ett exempel på en funktionsfil vid namn namn.m.

När man sedan kallar på en funktions-fil till huvudprogrammet, exempel.m, måste man ange namnet på funktionsfilen, vilket kan ses nedan.

Ett enkelt sätt att skriva in data i Matlab är genom att använda kommandot input. I huvudprogrammet exempel.m har vi valt att låta användaren skriva in ett värde på x. Detta värde kommer då att användas i funktionsfilen och ekvationen y=x+3. Eftersom y är beroende av x så kommer y att få ett värde som sedan kommer att skrivas ut genom kommandot disp.

För att kunna starta programmet skrivs namnet på huvudprogrammet i Matlab’s Command Window. Efter att programmet har avslutas läggs variablerna x och y in i Workspace, där de sedan kan återanvändas tills annat värde angetts på x och y.

(13)

2.3 Arbetet med Matlab

Det första som skapas i Matlab är en fil som ska fungera som exekveringsfil, här skall alla körningar och beräkningar utföras. Det som skrivs först är kommandot Clear all. Detta kommando rensar all sparad data i Matlab efter varje körning, syftet med detta är att man inte vill ha kvar några eventuella variabler som kan påverka senare resultat i beräkningarna.

Det andra kommandot som vi vill använda oss av heter Close all, detta kommando stänger ner alla öppna fönster/ tabeller när en ny körning skall påbörjas.

Det tredje kommandot heter clc, detta rensar Command Window i Matlab innan ny körning påbörjas. Det fjärde kommandot heter warning off, här tar vi bort mindre kritiska felmeddelanden som inte påverkar körningen av programmet.

Det femte kommandot heter Format short vilket minskar antal decimaler från svaren, och det sista kommandot heter more off vilket ger möjligheten att se mer värden i Command Window i Matlab efter varje körning (Ni kan se hela programmet sammanställt i delkapitlet Bilagor Bilaga 4 Matlab fil ” Examensarbete ”).

Då detta projekt innefattar flera olika scenarier (2014, 2017, 2020), så vill vi nu försöka skapa ett sådant öppet program som möjligt. Här skapar vi en frågeställning med hjälp av kommandot Input, detta kommando låter användaren att skriva in de värden han/ hon själv önskar i frågeställningarna som vi skapar. Då vi är i behov av att veta till vilket år, månad, dag (scenario) man vill flyga till, så skapar vi dessa tre frågeställningar:

1. Ange till vilket år ni vill flyga till? 2. Ange till vilken månad ni vill flyga till? 3. Ange till vilken dag ni vill flyga till?

Då vi har delat upp alla scenarier i månadsbasis i Excel-dokumentet Grunddata så vill vi även i resterande beräkningar i Matlab i månadsbasis. Detta kan vi enkelt göra genom att använda oss av följande ekvation efter vår första frågeställning:

(14)

Om man nu skulle råka skriva fel i någon av frågeställningarna så vill vi även försäkra oss om att inte programmet skall stanna/ avbrytas. Detta kan vi lösa genom att skapa en så kallad while-sats, genom denna sats så kan användaren få möjligheten att skriva in fel data utan att programmet stannar, om detta skulle ske så upprepas frågan igen för användaren tills han/ hon skriver in rätt data. Nedan på följande sida kan ni se själva upplägget på frågeställningarna och ekvationen:

När det kommer till frågeställning nummer tre så måste vi ställa in hur programmet skall svara när man ansätter själva datumet i en månad. Detta kan vi göra genom att tillämpa en if-sats, med hjälp av denna så kan vi säga åt programmet hur den skall arbeta. Det vi kan se på rad nummer 14 på bilden, så ansätter vi om dag > 15 så kommer day (dag) = 1, sedan genom att skriva kommandot else, som man kan översätta till ”annars” så blir day = 0. Det vill säga ansätter man ett värde som är 15 eller mindre så kommer vi få noll som svar. Sedan avslutas if-satsen med kommandot end.

Nu vill vi kunna spara undan de antal månader som blir totalt efter att man har svarat på de tre frågeställningarna, detta värde kommer att sparas i en variabel som vi kallar för Slutdatum. Detta kan vi enkelt göra genom att tillämpa enkel addition med följande ekvation:

Slutdatum = (år + månad + day) (2.4)

Nästa steg blir nu att göra klart while-satsen, här vill vi nu kunna meddela användaren om han/ hon skulle mata in eventuella felaktiga värden. Här så skapar vi ytterligare en if-sats, genom kännedom av att från scenario 2012 till scenario 2020 VT innefattar 102 månader totalt, samt att det finns 12 månader på ett år och att en månad aldrig kommer att ha fler än 31 dagar. Så skapar vi villkoren:

- Om slutdatum < = 0 - Om slutdatum > 102 - Om månad > 12 - Om dag > 31

(15)

Bryts något av dessa villkor så kommer en ruta att informera användaren att felaktig inmatning har skett.

Om alla inmatningar stämmer överens med våra villkor som vi har skapat så kommer while-satsen att avbrytas med hjälp av kommandot break, detta leder till att programmet kan fortsätta och att ett värde i variabeln Slutdatum kommer att sparas. Detta moment avslutas sedan med kommandot end för vår if-sats och för while-if-satsen.

Nu när vi vet till vilket scenario (Månad) som vi skall operera till, så måste vi nu kunna hämta in alla variabler som vi har lagrat i vår Excel-fil Grunddata. Det vi måste ha i åtanke nu är att vi måste även kunna hämta in rätt sida från Excel-filen. Detta kan vi då göra med hjälp av följande metod:

[Varibelnamn i Matlab]=xlsread(’Sökväg till Excelfil’, ‘Blad i Excelfil’)

Då kan vi även se att när en variabel skrivs inom ”[ ]” så omvandlas variabeln till en vektor, om flera parametrar används inom samma ”[ ]” samt ” ; ” används efter varje parameter så skapas en matris. Nu kan vi skriva ut följande kommandon för att kunna kalla in data från Excel-fillen Grunddata. Vi kommer att göra tre inhämtningar, en inhämtning för varje sida från Grunddata filen.

Genom kommandot görs data om till en matris i Matlab.

Eftersom data nu är sammanhängande i en matris måste vi välja ut vilken data som skall användas i programmet. En matris består av ett antal olika rader och kolumner, och eftersom data som skall användas i Matlab nu är sparad i en matris, så kan man med hjälp av följande kommando specificera vilken data man är intresserad av:

Matrisnamn(rad, kolumn)

Här visas på bilden nedan hur kommandot skall användas (För att se en mer komplett lista på vilka värden vi läser in, se då Bilagor).

Detta betyder att variabeln check3 kommer att få ett värde som finns lagrad i matrisen Grunddata på rad nummer 1. Enligt bilden ovan så kommer alla variabler i Matlab att få ett värde från matrisen. Nu när vi har lyckats att läsa in de värden vi behöver så kan vi nu räkna ut vilken cykelminskning vi har på motorerna i Matlab. Vi börjar med att skapa en variabel som heter Cykelminskning, därefter så måste vi använda oss av följande ekvation för att kunna räkna ut det vi söker efter. Det man kan se här är att vi nu använder oss av de inlästa värden vi har sparat tidigare. (Cykelminskningen kommer att tillämpas senare i projektet).

(16)

Cykelminskning = ((Flygtimmar(: , 1) * Cykler per flygtimma) / Antal flygplan) (2.5)

Ekvationen ser exakt likadan ut i Matlab när man skriver in den i programmet.

Om vi nu noterar på bilden ovan på sida 10 som visar alla sidor som vi anropar, så kan man se på rad 35 följande kommando:

All data kommer nu att sparas i en tillfällig variabel ”A” som i sin tur kommer att ge sina värden till variabeln Avionikmod_fpl_motorer, dessa värden kommer nu att presenteras i matrisform enligt följande:

Eftersom all data är sparad i en matris så kan vi nu välja vilken data som vi vill använda, nämligen cykler samt motornummer. Som kan ses i bilden ovan finns cykler lagrade i kolumn 3 och 5 och motornummer inlagd i kolumn 2 och 4 vilket kan ses som kolumn B, C, D och E .

Data som beskriver cykelvärdet hos alla motorer, kolumn 3 och 5 eller C och E, är det aktuella cykelvärdet hos varje motor. Varje motor får förbruka max 1550 cykler, drifttidsbegränsning, innan den måste tas ur drift och eventuellt skickas på Check 3. Eftersom vi är intresserade av att se hur många cykler som är kvar hos varje motor innan motorn når Check 3 så skapar vi två ekvationer:

[Kvarvarandecykler_Vmotor] = check3 – Avionikmod_fpl_motorer ( : , 2 ) (2.6) [Kvarvarandecykler_Hmotor] = check3 – Avionikmod_fpl_motorer ( : , 4 ) (2.7)

Efter att ha tillämpat ekvationerna (2.6) och (2.7) så kommer resultatet att sparas i de nyskapta vektorerna Kvarvarandecykler_Vmotor och Kvarvarandecykler_Hmotor, dessa värden skall representera det aktuella cykelvärdet som varje motor har som är monterade på vänster respektive höger sida på flygplanet.

(17)

Det sista vi vill göra nu innan nästa skede är att para ihop alla motornummer med de kvarvarande cyklerna vi har på vänster och höger sida. Detta kan vi göra genom att skapa en ny matris som vi namnger till Motordata. Följande kommando kommer att tillämpas:

När alla de monterade motorerna är sparade i matrisen Motordata, så måste vi fortsätta att lagra de övriga motorer som inte är monterade från motorparken. Vi måste även här utnyttja samma princip för att kunna räkna ut hur många kvarvarande cykler varje motor har i parken innan vi kan lägga ihop dem till en matris. Två nya variabler kommer att skapas här, den ena kommer att heta Motor_ID som kommer att enbart bestå av motornummer, och den andra variabeln kommer att heta Cykel_Data som kommer att innehålla det aktuella cykelvärdet.

Därefter skapar vi en ny vektor som kommer att få heta Kvarvarandecykler_Motorpark. Här tillämpas samma ekvationer som tidigare, ekvationerna (2.6) och (2.7). Skillnaden här dock är att vi inte

behöver ta hänsyn till höger eller vänster motor, då skapar vi ekvation (2.8).

Kvarvarandecykler_Motorpark = [ check3 – Cykel_Data ] (2.8)

Resultaten som vi får ut gällande Motor_ID och Kvarvarandecykler_Motorpark kommer nu att sparas i matrisen som står beskriven på rad 54, denna matris har vi namngett till Motorparks_Individer. Nu vill vi arbeta vidare med Motorparks_Individer, det vi vill göra nu är att sortera alla värden i matrisen. Vi vill att alla motorer som har flest cykler kvar att förbruka hamnar längst upp, samt de som har lägst antal cykler kvar att förbruka hamnar längst ner i matrisen.

Om vi tillämpar kommandot sort som ni kan se på bilden nedan, så kommer det att resultera att Matlab automatiskt sorterar alla variabler i matrisen Motorparks_Individer efter ordningen minst cykler kvar högst upp, och flest cykler kvar längst ner i matrisen.

Men innan vi kan komma dit så har vi några andra steg som vi måste utföra. Det vi måste göra först är att bryta ner matrisen Motorparks_Individer då vissa ändringar måste ske. Det vi gör först är att skapa en radvektor samt använder oss av kommandot sort, som ni kan se på bilden ovan på rad 55 så får vi följande kommando: [ I , J ] = sort(Motorparks_Individer(: ,2). ” I ” kommer att få de aktuella cykelvärdena sorterade efter kommandot sort, medan ” J ” kommer att visa vilken position alla motorer låg i matrisen innan de blev sorterade.

(18)

Då ” I ” blir sorterat enligt minst antal cykler högst upp, och flest antal cykler längst ner. Då måste vi nu skapa en ny variabel som vi döper till Motorparks_ID, denna variabel kommer att innehålla alla motornummer från matrisen. Sedan ansätter vi en tillfällig variabel ” W ” som är lika med

Motorparks_ID(J).

Då vi har kommit så här långt nu så måste vi sätta ihop vår matris igen, så nu kan vi använda kommandona flipud och fliplr. Där efter så måste vi nu ansätta att ” W ” och ” J ” skall hamna i en vektor och varav därför de skrivs [ W , J ]. Det första kommandot (flipud) vänder på hela vår matris som gör att de värden som hamnade längst ner hamnar längst upp.

Det andra kommandot (fliplr) byter plats på våra kolumner med varandra. Så nu får vi ut matrisen som vi vill ha den, det vill säga cykelvärdet på motorerna i kolumn ett och motornummer i kolumn två och högst antal cykler kvar att förbruka längst upp med rätt tillhörande motornummer.

För att kunna gå vidare med, så måste vi nu skapa fler variabler, dessa kan vi nu hämta från en av våra matriser som vi har skapat. Matrisen som vi är i behov av nu är Motordata matrisen. Vi vill nu ha värdena för vänster motor och höger motor separerade från varandra. Detta kan vi nu enkelt lösa genom att skapa två nya variabler där vi kallar på de rader och kolumner som vi vill använda oss av. Detta kan ni se på bilden nedan i rad 61 och rad 62. Vi skapar två variabler som heter

Motordata_VMotor och Motordata_HMotor. I dessa två variabler så får vi ut det aktuella cykelvärde som varje motor har på respektive sida de är monterade.

På rad 63 och 64 så skapar vi två andra variabler som har till uppgift att läsa in alla motornummer till respektive motor. Variablerna som vi har skapat kommer att få heta ID_VM och ID_HM. Dessa fyra variabler som vi nu skapat kommer att tillämpas senare i programmet för vidare beräkningar.

Nu börjar vi närma oss alla beräkningar som skall utföras i Matlab, det vi måste göra innan är att skapa variabler, som vi vill hålla koll på under tiden Matlab kör programmet. Utöver dessa variabler så måste vi skapa flera vektorer/ matriser, det som menas med skapandet av vektorer/ matriser är att vi ska lämna dessa ”öppna” [ ]. Detta gör vi för att kunna fylla dessa vektorer/ matriser med värden under körningarna, har vi inte dessa så kommer programmet inte att veta vart dessa värden skall lagras om vi hoppar över detta steg.

Som vi nämnde tidigare så är vi intresserade av vissa faktorer så som perioder för att veta vilken månad vi befinner oss i, Antal check3 för vänster respektive höger motor etc.

De två första variablerna ”j”, ”s” samt ”Antal_Check3_Nya_Motorer_L_Cykler”, på raderna 65, 66 och 70, är variabler som kommer att förklaras mer ingående senare i programmet. Det viktiga att notera här när det gäller alla de nya variabler som vi har ansatt, är att de kommer att gå in i programmet med värdet noll, detta är till för att ha ett startvärde på alla variabler innan uträkningarna påbörjas. Genom att ansätta att variablerna skall vara lika med noll så kan vi följa upp programmet under varje sekvens.

(19)

På raderna 74, 75, 76 och 77 visas några av de öppna matriserna som vi har skapat som kommer att sedan ansättas senare i programmet. Detta är en del av listan, då det är många matriser vi har varit tvungna att skapa, så har vi valt att bara visa de fyra första som skapades, för att se en mer komplett lista se då ”Bilagor” (Bilaga 4 Matlab fil ” Examensarbete ” sida J).

Efter att vi har initierat alla våra matriser som förklarades på föregående sida, så vill vi nu sortera ut vissa motorer ur matrisen Motorparken som vi skapat. Det vi vill åstadkomma här är att ta bort de motorer som har mindre än 100 cykler kvar att använda. Syftet med detta är att dessa motorer skall läggas undan och ha som eventuella reservmotorer eller att de skall skickas till kassering. Då det är ett antal motorer som har mindre än 100 cykler kvar så skall vi lägga undan dessa i en rad vektor som vi döper till ” z ”, som ni kan se på bilden nedan på rad 104.

För att kunna hitta de motorer vi söker efter, så använder vi oss av kommandot find. Detta kommando söker efter de värden som man har angett i kommandot. I vårt fall så har vi angett att den skall söka igenom matrisen Motorparken alla värden i första kolumnen, varav därför vi skriver ( : , 1 ). Sedan säger vi bara åt programmet att den skall leta efter värden som är mindre eller lika med 100. Dessa motorer kommer sedan att läggas i en ny matris som vi skapar som heter L_Cykler_Motorpark. I denna matris så kommer alla motorer att placeras som har ett cykelvärde som är lägre än 100 cykler kvar att använda, samt senare i programmet så kommer alla motorer som har blivit utbytta att hamna i denna matris också. Så detta kommer att bli en lagringsplats där vi kan utgå från och se hur många samt vilka motorer som kommer att skickas iväg till check3. I samband med detta så måste vi nu skapa en annan matris som lägger undan de motorer som har fler än 100 cykler kvar att använda.

Här kommer vi då att tillämpa samma princip som ovan. Skillnaden här blir att istället för att söka efter motorer som har mindre eller lika med 100 cykler, så kommer det att bli fler eller lika med 100 cykler.

Denna vektor döper vi för tillfället till ” q ”, dessa värden kommer vi nu att lagra i vår befintliga matris Motorparken, detta gör vi nu för att få bort de motorer som har mindre än 100 cykler kvar att använda, då de nu ändå ligger i en separat matris vid sidan av.

Nu ska vi påbörja skapandet av en så kallad ”loop” i programmet, en loop låter programmet utföra ett antal beräkningar över en viss period/ körningar. Detta kan vi initiera med kommandot for, som ni kan se på bilden nedan så har vi ansatt att for = i : Slutdatum. Det innebär att programmet kommer nu att köras från värdet 1 till det slutvärde som man har angett. Som i vårt fall nu så kommer det att bli från månad 1 (januari) 2012 till det slutdatum som vi vill flyga till (slut scenario), då Slutdatum är baserat på inmatningarna från början av programmet.

Körningarna kommer att lagras i variabeln ” i ”, då ” i ” kommer att få värdena från värdet 1 till det slutdatum som man har valt att flyga till, och när slutdatum nås så kommer loopen att avslutas.

(20)

Nu när loopen har blivit bestämd så skall vi nu skapa två matriser för de monterade motorerna, vi skiljer på motorerna som sitter monterade på vänster respektive höger sida på flygplanet. Dessa två värden kan ni se på bilden nedan på rad 115 och 116 i Matlab,

MOMENTANT_KVARVARANDECYKLER_VMOTOR och

MOMENTANT_KVARVARANDECYKLER_HMOTOR.

Om ni tittar på raderna 118 och 119 Motordata_VMotor samt Motordata_HMotor, så innehåller dessa alla cykelvärden hos de monterade motorerna som kommer att användas i drift. För att kunna räkna ut de cykler som finns kvar hos varje motor kommer följande formel att användas:

Motordata_VMotor = Motordata_VMotor – Cykelminskning( i ) (2.9) Motordata_HMotor = Motordata_HMotor – Cykelminskning( i ) (2.10)

Det man skall ta hänsyn till är att cykelminskningen i loopen kommer att vara beroende av faktorn ”i” som då är de antal körningar (månader). Då variabeln ”i” kommer att variera i värden beroende på vilken period man befinner sig i, det vill säga VT (Vårtermin) eller HT (Hösttermin). Om man

fortsätter att bygga på programmet för att kunna få ut de resultat som vi söker efter, så kan ni se på rad 121 och 122, hur vi skall beräkna det behov vi har för att kunna flyga till angivet slutdatum. Även en beräkning på hur många tillgängliga cykler vi har är av intresse då vi vill kunna jämföra dessa två värden med varandra.

Vi kommer att tillämpa två nya ekvationer för att kunna räkna ut dessa två värden. Det första som kommer att göras är att ansätta två nya variabler som vi döper till Behov och Tillgängligacykler. För att kunna enkelt lägga ihop alla de värden vi kommer att få från varje körning, så använder vi oss av kommandot sum. Detta kommando har till uppgift att addera ihop alla variabler till ett totalt värde. Ekvationerna som vi kommer att använda oss av är:

Behov = sum(cykelminskning(i: Slutdatum)) * Antal_Motorer (2.11)

Tillgängligacykler = sum(Motorparken(: , 1 )) + sum(MOMENTANT_KVARVARANDECYKLER_VMOTOR ( : , 1)) + sum(MOMENTANT_KVARVARANDECYKLER_HMOTOR( : , 1)) (2.12)

(21)

Nästa steg är att hitta alla motorer under körningens gång som får ett cykelvärde som är mindre än 30 under varje körning. Detta gör vi nu genom att tillämpa kommandot find som vi har använt oss av tidigare i programmeringen. Nu kommer kommandot att leta upp motorernas positioner i matrisen, och lagrar dessa i variablerna ” I1, I2”.

Detta kommer att göras för de motorer som sitter monterade på vänster sida, samt höger sida på flygplanet.

Det vi vill göra nu är att testa om ”I1, I2” har en längd, detta kan vi göra med hjälp av kommandot length. if-satsen skapar vi för att kunna kontrollera om det logiska uttrycket length(I1)>0, samma process kommer att göras för ”I2”. Om fallet är att ”I1” och/eller ”I2” har en längd så kommer programmet att gå in i if-satsen. Eftersom ”I1,I2” bara anger positionerna på de motorer som är monterade så vill vi nu få reda på vilket motornummer och cykelvärde som dessa positioner har.

Som man kan se på rad 138 så tar vi nu ut cykelvärdet och motornummer genom kommandot MOMENTANT_KVARVARANDECYKLER_VMOTOR ( I1 , 1 ), vilket betyder att den letar i kolumn 1 efter ”I1” som är cykelvärdet, och MOMENTANT_KVARVARANDECYKLER_VMOTOR( I1 , 2 ) för att kunna få ut motornumret. Samma process kommer att ske för höger motor som ni kan se på i bilden ovan på rad 139. Nu har vi gjort om positionerna till aktuella motorer som kommer att lagras i våra nya variabler som vi har namnget till Motor_Bortfall_VM och Motor_Bortfall_HM.

Nu har vi tagit ut alla motorer som har fått ett cykelvärde som är mindre än 30 cykler, det vi vill göra nu är att ersätta dessa med nya motorer från vår matris Motorparken. Det vi vill göra nu är att se vilken storlek dessa har för att kunna veta vilken storlek, på antal motorer, vi skall ta ut från Motorparken. Genom kommandot size som ni kan se på raderna 141 och 142, så kan vi ta ut storlekarna på variablerna Motor_Bortfall_VM och Motor_Bortfall_HM och lagra dessa i vektorerna ”L1,L2,L3 och L4”.

Vektorerna [L1] och [L3] anger hur många rader som Motor_Bortfall_VM samt Motor_Bortfall_HM medans vektorerna [L2] och [L4] anger hur många kolumner de innehåller. Eftersom kolumnerna alltid är konstanta på två och raderna varierar så använder vi ”L1,L3” för att ange hur många rader som skall plockas ut ur matrisen Motorparken. Vi döper då alla nya motorer som kommer ut ur Motorparken till Replace_VM. Replace_VM innehåller nu så många motorer som föll ut ur variabeln Motor_Bortfall_VM.

Vi skapar sedan en matris som vi döper till M_VM som visar vilken motor som faller ut med den motor som blir insatt, detta för att få en sådan noggrann spårbarhet som möjligt.

(22)

Vi vill även veta vid vilken period som det eventuella motorbytet sker vid, så vi skapar en tillfällig variabel ”x1” som skall vara lika stor som M_VM’s kolumner.

När vi vet hur stor denna variabel skall vara så ansätter vi att ”x1” skall vara beroende av ” i ”, då ”i” är våran loops värde, vilket är periodens värde, vid det tillfället. På rad 149 skapar vi en lagrings matris M_VM_Matris där varje månad med ett motorbortfall sparas. Samma process kommer att tillämpas för motorerna som är monterade på höger sida.

För att kunna få programmet att fungera innan optimeringen blir färdigt, så ansätter vi nu en slumpvariabel i programmet, för att kunna få motorer att skickas iväg på Check 3. Detta kan ni nu se på rad 151 på bilden nedan:

Vi namnger variabeln till slumpad_Check3 och är normalfördelad mellan värdena 0 till 9. Slumpen kommer att skapas med hjälp av kommandot rand.

Nu när vi kan slumpa om en Check 3 skall ske eller inte, så måste vi nu ha ett villkor som säger att om ett visst värde uppfylls så kommer en Check 3 att skickas iväg eller inte. Då skapar vi en if-sats med det logiska uttrycket om slumpad_Check3 ==1 så kommer programmet att ta sig in i if-satsen och utföra de kommandon som finns angivna.

Det första som kommer att hända är att alla motorbortfall som blev för vänster motor i detta fall, kommer att få sitt cykelvärde ändrat till 1550 cykler genom kommandot på rad 154 i bilden nedan. Eftersom cykelvärdet på motorerna i Motor_Bortfall_VM finns lagrade i första kolumnen, och om en Check 3 utförs så kommer det aktuella cykelvärdet att ändras till 1550 cykler.

Vid rad 155 på bilden ovan, då alla motorer från Motor_Bortfall_VM som blivit nya motorer (Check 3), inte får heta samma namn som Motor_Bortfall_VM, så ansätter vi nu en ny variabel där vi lagrar dessa motorer med namnet Ny_Motor_VM.

Vi kommer att räkna antal Check 3 med hjälp av variabeln [L1] som beskrev hur många motorbortfall det blir under varje körning. Eftersom vi nu gör om alla motorbortfall till Check 3 så blir det samma antal. Vi ansätter även en räknare ” j ” som kommer att beskrivas mer om senare i rapporten, men idén med den är att ” j ” skall få ett värde större än det aktuella värde på variabeln ” i ”. För att undvika att samma motor skall användas flera gånger under körningarna, så tömmer vi motorparken med samma antal rader som nya motorer monteras vilket ni kan se på rad 158 på bilden ovan.

Nästa steg är att precis som vi ville se vilken period som vi utför ett motorbyte, så vill vi kunna se vilken period en Check 3 utförs. Då skapar vi en tillfällig variabel ” y ” och utför sedan samma process som för motorbortfall. Vi sparar sedan de nya motorerna i en matris Ny_Motor_VM_Matris som innehåller vilken period, samt vilken motor med cykelvärde och motornummer.

Om logiska villkoret inte uppfylls i if-satsen så kommer kommandot else att utföras av programmet. Här tömmer vi precis som ovan Motorparken med samma antal motorer som tas ut.

(23)

Viktigt att veta här är att if-satsen och else-satsen inte utförs samtidigt, utan det bara är en av dessa som kommer att utföras åt gången.

Eftersom det inte blir någon Check 3 här, så ansätter vi att Antal_Check3_VM = 0, och vi lägger in alla värdet i variabeln L_Motor_Bortfall_VM.

Alla ovanstående steg kommer att utföras på samma princip för höger monterade motorer i programmet, så dessa kommer inte att beskrivas (se bilagor).

Nu har vi tagit ut alla de nya motorer som har fallit ut och ersatt dessa med nya motorer från Motorparken. Det vi ska göra nu är då att uppdatera våra matriser som innehåller de monterade motorerna på flygplanet.

Då vi har tagit ut motorer från våran matris MOMENTANT_KVARVARANDECYKLER-_VMOTOR från positionen i ” I1 ”, så vill vi nu att de nya motorerna skall komma in på den gamla motorns position i matrisen. Det första som händer på rad 194 på bilden ovan är att vi läser in på vilken rad från den första kolumnen som ” I1 ” finns i, och ersätter sedan denna med vår nya motor som finns i Replace_VM.

Eftersom vi tittar just nu i den första kolumnen så vill vi bara få ut cykelvärdet från vår Replace_VM, vilket vi gör genom att läsa första kolumnen från den genom kommandot Replace_VM( : , 1 ). Då har vi nu ersatt cykelvärdet, men nu vill vi också ersätta motornummer och då använder vi samma princip bara att vi byter från kolumn 1 till kolumn 2 som kan ses på bilden ovan på rad 195. Samma princip kommer sedan att ske för höger motor på raderna 197 och 198 på bilden ovan.

Nu har vi ersatt positionerna på de gamla motorerna med de nya motorerna, det vi vill göra nu är att uppdatera de in-värden till matrisen MOMENTANT_KVARVARANDECYKLER_VMOTOR och HMOTOR som beskrevs i början på rad 115.

Det sista vi gör i denna if-sats innan vi avslutar den, är att lagra all värden i matriser. Som ni kan se på bilden nedan så lagrar vi antal Check 3 och motorbyten som blev under loopen i matrisen Antal_Check3_VM_Matris och Antal_Byten_VM_Matris. Samma sak kommer att göras för höger motor som ni kan se på bilden nedan.

(24)

Eftersom if-satsen som vi beskrev innan endast kommer att uppfyllas om ett motorbyte sker, så måste vi även skriva en sats som sker om inget motorbyte sker. Då skapar vi en else-sats för att kunna uppfylla det andra villkoret.

Det som kommer att hända här är att alla räkningar på Check 3 och motorbyten kommer att nollas, som för tillfället aktiveras endast om ett motorbyte sker. Vi uppdaterar även matriserna så att nollor kan skrivas ut under de perioder då inga Check 3 eller motorbyten sker.

Nu har vi beskrivit vad som händer när ett motorbyte sker och om en Check 3 sker med ett motorbyte. Men vi vill även kunna skicka en motor på Check 3 utan att ett motorbyte sker, vilket är ett mer trovärdigt scenario. Det vi gör då är precis som tidigare att vi skapar en slumpgenerator som kan ses på rad 224. Den har samma princip som tidigare och den följs av en if-sats med samma typ av villkor som tidigare.

Förut så använde vi motorbortfall för att se hur många motorer som skulle skickas på Check 3. Det vi gör nu istället är att vi använder alla motorer i motorparken som vi tidigare sorterade bort på grund av att de hade ett cykelvärde under 100 cykler.

Här finns även de monterade motorer som fått ett cykelvärde under 30 cykler som inte blev iväg skickade på check 3. Vi vill inte att alla motorer i parken skall skickas på Check 3 samtidigt utan vi vill att bara ett fåtal skall skickas iväg. Det vi gör då är att vi skapar en ny slumpgenerator, som kan ses på rad 227 i if-satsen.

Den här slumpgeneratorn slumpar fram en längd, vilken kommer att användas på rad 229, där vi säger att alla motorer från rad 1 i L_Cykler_Motorpark till den rad som slumpgeneratorn har skapat, så kommer alla cykelvärden på de motorer som finns här att få 1550 cykler, det vill säga Check 3 värdet. Exempel: Om slumpgeneratorn får värdet 4, så kommer alla motorer på rad 1 till 4 i L_Cykler_Motorpark i första kolumnen att få sitt cykelvärde ändrat till 1550.

Alla motorer som nu har blivit Check 3 i L_Cykler_Motorpark sparar vi nu i matrisen Nya_Motorer_L_Cykler som innehåller både cykelvärdet hos dessa motorer samt även vilket motornummer som dessa har.

(25)

Vi vill även att de motorer som har blivit Check 3 från L_Cykler_Motorpark skall tas bort, vilket vi gör på rad 231, och inte vara tillgängliga igen för att motverka att dubbletter skapas.

Precis som tidigare vill vi veta när Check 3 utfördes, så vi skapar även här en tillfällig variabel som vi döper till ” m ” som är beroende av hur många motorer som skickas iväg på Check 3. Variabelns värde ansätts sedan till värdet på ” i ” vilket ger våran period. Alla motorer som nu har blivit Check 3 läggs in i en matris, Nya_Motorer_L_Matris, där vi lagrar när motorn blev Check 3 och vilken motor som blev skickad på Check 3.

Som vi beskrev tidigare för vänster och höger motor så räknar vi hur många Check 3 vi har skickat vilket kan ses på rad 238. Vi måste även ta hänsyn till att om det inte blir någon Check 3, om inte villkoret hos if-satsen uppfylls så läser programmet else-satsen istället och antal Check 3 blir ansatt till noll.

Nu har vi beskrivit vad som kommer att hända under programmets beräkningsdel, det vi kommer att göra nu är att lagra all data som skapats under programmets gång. All lagring kommer att ske i matriser.

Första matrisen vi skapar är Antal_Check3_Nya_Motorer_L_Cykler_Matris, som lagrar all data som kommer från hur många Check 3 som skapats av vår motorpark med mindre än 100 cykler samt de motorer som fallit ut under drift som inte har blivit Check 3. Vi skapar även en matris, Motor_parken_Matris, som innehåller den totala cykelsumman hos motorparken efter varje körning.

Vi spara även det totala cykelvärdet hos alla motorer som är monterade enligt bilden ovan för både höger och vänster motor.

(26)

Vi vill även se hur många cykler vi har tillfört totalt under hela körningen. Eftersom vi har lagrat hur många Check 3 som har skapats under varje loop kan vi beräkna totalt tillförda cykler med följande ekvationer:

Tillforda_cykler_VM = cumsum((Antal_Check3_VM_Matris*check3)) (2.13) Tillforda_cykler_HM = cumsum((Antal_Check3_HM_Matris*check3)) (2.14) Tillforda_cykler_Nya_Motorer_L_Cykler=

cumsum((Antal_Check3_Nya_Motorer_L_Cykler*check3)) (2.15)

Kommandot cumsum, kumulativ summa, används för att visa förändringen mellan varje körning där det nya värdet adderas med det gamla.

Nu har vi beräknat alla tillförda cykler var för sig, så det vi gör nu är att vi adderar ihop alla värden och lagrar dessa i en ny variabel, Totalt_Tillforda_Cykler.

Vi använder oss av följande ekvation:

Totalt_Tillforda_Cykler= Tillforda_cykler_VM+ Tillforda_cykler_HM

+ Tillforda_cykler_Nya_Motorer_L_Cykler (2.16)

Matrisen på rad 256 lägger ihop alla värden som lagrats under körning på hur många Check 3 som skaptas varje gång.

Matrisen på rad 257 lagrar när Check 3 utfördes och vilken motor som blev Check 3.

Nästa matris, Totalt_Antal_Motor_Byten_Matris, lägger ihop alla motorbyten som skapats. Matrisen innehåller vid vilken period som bytet ägde rum, vilken motor som föll ut samt vilken motor som monterades.

Matriserna på rad 261 samt 262 visar varje värde på cykelbehovet samt tillgängliga cykler som skapas under loopens gång. Värdena som fås kommer från ekvationerna (2.11) samt (2.12).

Sista matrisen som vi skapar är den som visar hur motorparken som innehåller alla motorer som har mindre än 100 cykler eller som har blivit utbytta under programmets gång och inte har blivit skickade på Check 3.

(27)

Det sista vi gör i programmet är att vi öppnar alla variabler som har värden lagrade i sig, så att inga värden kommer att dubbleras vilket man kan se på raderna 266 till 274. På rad 276 har vi en utskrivning på vilken aktuell period som visas och på rad 278 avslutas for-loopen.

Då följande stycke fanns tidigare i programmet men inte nämndes var på grund av att vissa variabler var då okända. Nu har vi förklarat vad ” j ” och ” s ” har för funktion, och det som händer är att dessa två variabler får ett värde när en Check 3 utförs på antingen motorbortfall eller på vår L_Cykler_Motorpark som är 1 större än ” i ” under den omgången.

När loopen körs igen kommer det logiska uttrycket på rad 125 att uppfyllas då dessa variabler får samma värde. Då kommer alla motorer som blivit Check 3 att placeras i motorparken, som sedan blir tillgängliga att monteras vid ett motorbortfall. Vi har valt att använda en fördröjning på när Check 3-motorer blir tillgängliga igen då dessa 3-motorer skickas iväg. Fördröjningen ligger nu på en månad.

På rad 132 har vi skapat ytterligare en if-sats som här kontrollerar om antalet värden i I1 samt I2, vilket är hur många motorbortfall som genereras, blir större än antalet motorer som finns i Motorparken.

Syftet med detta är att om det är fler bortfall än tillgängliga motorer så kan vi inte fortsätta och programmet kommer att utföra kommandot msgbox, som beskrevs i början av programmet, och skriva ut Slut på motorer! for-loopen bryts då med hjälp av kommandot break och fortsätter ner till nästa del som är grafritning.

Nu när vi har lagrat all värden så kan vi nu ritat ut alla värden i grafer och diagram, för att enklare visa resultaten av projektet.

Det första vi skapa stapeldiagram för Antal_Byten_VM_Matris, Antal_Byten_HM_Matris samt Total_Check3_Matris. Stapeldiagram skapas med hjälp av kommandot bar. Vi har även skapat en överskrift till diagrammet med hjälp av kommandot title. Axlarna för x samt y har namngetts med hjälp av kommandon xlabel samt ylabel som kan ses på rad 282 samt 283. Kommandot figure skapar olika separata bilder för varje stapeldiagram.

(28)

Nästa diagram som vi ritar är en sammanställning av Motor_parken_Matris, MOMENTANT_KVARVARANDECYKLER_VMOTOR_MATRIS,

MOMENTANT_KVARVARANDECYKLER_HMOTOR_MATRIS samt Totalt_Tillforda_Cykler.

Den första kurvan som ritas använder vi kommandot stairs som skapar en trappform på kurvan, vilket gör att förändringen blir enklare att se.

Nästa tre kurvor ritas enbart ut med kommandot plot, vilket är det vanliga kommandot för att rita ut kurvor.

För att kunna skilja på kurvorna så färgläggs dessa med olika färger. Genom att skriva i parentesen där grafritningen sker (se tillexempel rad 298) olika bokstäver kan man skapa olika färger. Man kan även skapa olika mönster på kurvorna på samma ställe som vi anger färgerna (se rad 307).

(29)

Efter att all grafritning är klar skapar vi nu en informationsruta med hjälp av kommandot legend som här specificerar vad varje kurva betyder. Vi använder även samma kommandon som tidigare för att skapa namn till x-, y-axlarna samt överskriften.

Det sista som vi ritar ut är kurvorna som beskriver behovet kontra tillgängliga cykler. Samma metoder som har beskrivits ovan kommer att användas här.

(30)

2.4 Arbetet med kostnadsanalys

Eftersom vi har beräknat vilket behov som kommer att finnas i Matlab för att uppnå våra scenarion, så kan vi nu med hjälp av kostnader för antal motorbyten samt för antal Check 3 beräkna totala kostnader för varje scenario.

Det första som vi gör är att tillämpa ekvation (2.17) som visar hur många cykler som kommer teoretiskt att behövas för att uppnå det scenario som vi har som mål. Nästa steg blir då att beräkna hur många Check 3 det blir totalt, då använder vi oss av ekvation (2.18).

Cykler kvar till scenario = Behov – Tillgängliga cykler (2.17)

Antal Check 3 = Cykler kvar / Check 3 (2.18)

De kostnader som vi har erhållit från Saab AB är att ett motorbyte kostar cirka 20 000 kronor, och en Check 3 kostar cirka 1 500 000 kronor. För att kunna räkna ut den totala kostnaden för ett motorbyte så har vi tillämpat ekvation (2.19), samt ekvation (2.20) för Check 3. Utöver dessa två ekvationer så använder vi oss av ekvation (2.21) för att enkelt kunna addera ihop dessa värden och få ut den totala kostnaden för respektive scenario.

Kostnad Motorbyte = Antal Motorbyten * 20 000 (2.19)

Kostnad Check 3 = Antal Check 3 * 1 500 000 (2.20)

Totala kostnaden = Kostnad Motorbyte + Kostnad Check 3 (2.21)

Nu när vi har teoretiskt beräknat antal Check 3 så kan vi nu jämföra de värden vi får med de värden vi kommer att få i simuleringen i Matlab.

(31)

Kapitel 3

RESULTAT

Följande kapitel kommer att redovisa de resultat vi har kommit fram till under projektets gång. Kapitel 3 har blivit uppdelat i 2 delkapitel där kapitel 3.1 beskriver resultaten i Excel, medans kapitel 3.2 beskriver resultaten i Matlab.

3.1 Excel resultat

Då vi ville dela upp antal flygtimmar i månadsbasis istället för halvårsbasis (VT, HT), så var vi tvungna att tillämpa ekvationerna (2.1) och (2.2). Med hjälp av dessa så kan vi nu enkelt få ut hur många flygtimmar de blir varje månad.

3800/6 = 633,333 flygtimmar per Vårtermin 2699/6 = 449,833flygtimmar per Hösttermin

Då kan vi nu fortsätta att bygga färdigt vår tabell på första sidan i Excel-filen ”Grunddata”, där vi nu kan se flygtimmarna jämt fördelat över varje månad i respektive år.

check3 1 550,00 cyklerperflygtimma 1,80 antalflygplan 40,00 jan VT2012 633,33 feb VT2012 633,33 mar VT2012 633,33 apr VT2012 633,33 maj VT2012 633,33 jun VT2012 633,33 jul HT2012 449,83 aug HT2012 449,83 sep HT2012 449,83

Dessa värden och övriga tabeller från Excel dokumentet kommer nu att tillämpas i programmet Matlab för vidare beräkningar. (För en mer komplett tabell, se då Bilagor, Bilaga 1 Grunddata).

(32)

För att kunna räkna ut Totalt använda cykler hos alla motorer så har ekvation (2.1) använts, det man gör här är att addera ihop cykelvärdet hos varje motor. Tillämpar vi denna metod så får vi ett totalt cykelvärde på 236529 cykler. Värdet beskriver hur många cykler som varje motor totalt har förbrukat tillsammans.

Eftersom vi är intresserade av att ta reda på hur många cykler som finns kvar hos varje motor, så måste vi använda oss av ekvation (2.2). Där ekvation (2.2) blir påverkad av resultatet från ekvation (2.1).

((1550*233)-236529) = 124621 cykler

Genom att multiplicera vår Check 3 konstant med antal motorer så kan vi nu anta att, om varje motor hade varit nya så hade alla motorer kunnat förbruka 361650 cykler (1550*233). Men nu vet vi också hur många cykler som har förbrukats tack vare ekvationen (2.1), så kan vi med enkel subtraktion få ut 124621 cykler som finns tillgängliga. Nu kan vi bygga klart vår tabell på sista sidan” Totalt anv cykler” i Excel-filen ”Grunddata” enligt följande:

Totalt använda cykler 236 529,00

Totalt tillgängliga cykler 124 621,00

Antal motorer 233,00

Dessa värden och övriga tabeller från Excel dokumentet kommer nu att tillämpas i programmet Matlab för vidare beräkningar.

(33)

3.2 Matlab resultat

Då vi ville ge användaren möjlighet att kunna bestämma själv till vilken månad han/ hon vill flyga till, så skulle programmet veta hur många månader det blir totalt som man vill flyga. Detta kunde vi räkna ut genom att tillämpa ekvation (2.3). Om vi tar den första frågeställningen ”Ange till vilket år ni vill flyga till?”, om vi då matar in vårt första scenario år 2017 vid den första frågeställningen så kommer ekvation (2.3) att ge svaret 60 månader.

((2017 – 2012) * 12) = 60 Månader

Detta värde kommer nu att sparas i variabeln ”År”, om man sedan går vidare till den andra frågeställningen ”Ange till vilken månad ni vill flyga till?” så kan användaren här ange ett värde mellan 1 till 12. Då 1 motsvarar januari månad, och 12 motsvarar december månad.

Då scenariot år 2017 sträcker sig till juni månad, så blir vi tvungna här att ansätta värdet 6 på den andra frågeställningen.

Den tredje och sista frågeställningen ”Ange till vilken dag ni vill flyga till?”, så har användaren möjlighet att välja ett datum mellan 1 och 31 vilket motsvarar antalet dagar i en månad. Vi hade då skapat ett villkor som säger att alla värden som är mindre eller lika med 15 kommer att få slutvärde 0, och ett värde som är större än 15 kommer att få värdet 1. Då vi ska flyga till början av juni månad så ansätter vi värdet 1 i den tredje frågeställningen, som då kommer att leda till att vi får värdet 0. Nu med hjälp av ekvation (2.4) så kan vi nu få ut ett slutdatum som vi skall flyga till som är i

månadsbasis.

60+6+0 = 66 Månader

Genom att tillämpa ekvation (2.4) så får vi då ett värde på 66 månader som kommer att sparas i variabeln Slutdatum. Efter att vi har fått ut hur många månader som vi skall flyga, så måste vi veta hur många cykler som vi kommer att förbruka under varje månad. Då vi vet att varje VT och HT har olika antal flygtimmar så måste vi även veta skillnaden i cykelminskningen hos varje motor i respektive period (månader). Vi har ansatt att månaderna januari till juni går under VT och månaderna juli till december är HT, med hjälp av ekvation (2.5) så kan vi enkelt få ut vilken cykelminskning vi kommer att få per motor. Då vi ansätter i ekvationen att Matlab skall läsa in alla värden från den första kolumnen i Excel dokumentet Grunddata så kommer vi få ett värde för varje månad.

(34)

Efter att ha tillämpat ekvation (2.5) så kommer Matlab att lagra alla dessa värden i en matris enligt följande:

Här kan vi då se att efter sex månader så börjar själva HT perioden, vilket leder till att ett annat cykelvärde erhålls.

Som vi beskrev i metod om arbetet med Matlab har vi nu läst in alla motorer till Matlab. Dessa motorers cykelvärde visar just nu hur många cykler de har förbrukat. Vi vill veta hur många cykler motorerna har kvar innan de når 1550, som vi beskrev tidigare är det maximala cykelintervallet som dessa motorer får operera, så vi tillämpar ekvation (2.6) samt (2.7).

Ekvationerna säger att vi tar det värde på Check 3, vilket är 1550, och subtraherar det värdet med det aktuella cykelvärdet på motorerna från Excel-bladet Avionikmod_fpl_motorer. Eftersom Matlab är matrisbaserat kan vi med kommandot ( :,2) samt ( :,4 ) få Matlab att subtrahera alla värden i dessa två kolumner, vilket är deras cykelvärde, med 1550. Resultatet av uträkningen blir då för första motorn på vänster sida.

( 1550-1139)=411cykler

Resultatet blir då alltså 411 cykler finns kvar att förbruka hos motorn innan den når 1550 cykler. Dessa beräkningar kommer att utföras på alla motorer i Avionikmod_fpl_motorer vilket kan ses i matrisen/ matriserna nedan:

(35)

Den vänstra matrisen representerar då alla motorer innan vi har subtraherat Check 3 värdet med de aktuella cyklerna som varje motor har, medan den högra matrisen visar det aktuella cykelvärdet som varje motor har kvar att förbruka efter tillämpning av ekvationerna (2.6) och (2.7). Kolumnerna 1 och 3 är motornummer för vänster och höger motor, medan kolumnerna 2 och 4 är cykelvärdet för respektive motor.

Nu när vi har beräknat hur många cykler som finns kvar hos varje monterad motor, måste vi även utföra samma beräkning på vår Motorpark då den fortfarande visar hur många cykler som varje motor har förbrukat. Genom att tillämpa ekvation (2.8), som baseras på samma princip som ekvation (2.6) samt (2.7) kan vi nu subtrahera Check 3 värdet 1550 med varje motor i Motorparken som finns i bilagor. Exempel och resultatet på ekvationen för första motorn ses nedan:

(1550-1440)=110 cykler

Genom att tillämpa ekvationen på alla motorer i Motorparken kan vi skapa följande matris från Matlab:

Nu har alla motorer som kommer att användas, fått sitt cykelvärde ändrat till hur många cykler de har kvar att förbruka. Nu kan vi påbörja våra beräkningar på förbrukningen varje motor kommer att ha under våra olika scenarier.

Tidigare har vi beräknat hur många cykler som kommer att användas under varje period, som just nu är varje månad. Genom att tillämpa ekvationerna (2.9) samt (2.10) kan vi använda de cykelvärden vi har beräknat för de monterade motorerna i drift och subtrahera de med vilken förbrukning som kommer att finnas varje period. Programmet kommer nu att minska alla motorers cykler över varje period. Nedan följer ett exempel på den monterade motor på vänster sida som vi beräknade kvarvarande cykler på tidigare:

References

Related documents

Detta kan tol- kas så att priset på småhus under den senare perioden till en del bestämdes av förväntningar om framtida kapitalvinster, men det kan också bero på att bristen

En undersökning i Adelaide visar att 31 % av fotgängarna kände sig osäkra när de delar gångväg med elsparkcyklister (större andel ju äldre fotgängare), och 29 % av

De flesta av de data som behövs för att undersöka förekomsten av riskutformningar finns som öppna data där GIS-data enkelt går att ladda ned från till exempel NVDB

Jag tror inte det är någon överdrift att fastslå att det inte för någon annan handikapporganisation har betytt så mycket att man haft ett eget språkrör som för Riksförbundet

Anja påpekar att det var väldigt mycket blått för pojkar och rosa till flickor både när hennes barn var små och idag när hon tänker efter på vad barnen på förskolan har på

Jag fotograferade under hela processen, men när barnen kände sig färdiga med ett projekt bad de mig ta en bild för att sedan kunna använda lådorna till något annat.. Vi var

Efter Krimockupationen 2015 har säkerhet både vad avser yttre och inre hot ånyo börjat uppmärksammas i Sverige.. Det gamla totalförsvaret tog lång tid att demontera och det blir

När du upplever att du inte längre lär dig något eller inte längre har något att bidra med går du vidare till nästa station. Fastnar du – gå