Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen Arv och polymorfi

Relevanta dokument
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen Arv och polymorfi

Lösningsförslag Inlämningsuppgift 3 Kapacitans, ström, resistans

Lektion 2: Automation. 5MT042: Automation - Lektion 2 p. 1

Lektion 1: Automation. 5MT001: Lektion 1 p. 1

Tentamen på elläradelen i kursen Elinstallation, begränsad behörighet ET

Qucs: Laboration kondensator

Elteknik. Superposition

Elektro och Informationsteknik LTH. Laboration 3 RC- och RL-nät i tidsplanet. Elektronik för D ETIA01

IDE-sektionen. Laboration 5 Växelströmsmätningar

Elektriska komponenter och kretsar. Emma Björk

LABORATION SPÄNNING, STRÖM OCH RESISTANS

1. q = -Q 2. q = 0 3. q = +Q 4. 0 < q < +Q

VÄXELSTRÖM SPÄNNINGSDELNING

Extralab fo r basterminen: Elektriska kretsar

Vecka 2 ELEKTRISK POTENTIAL OCH KAPACITANS (HRW 24-25) Inlärningsmål

VÄXELSTRÖM SPÄNNINGSDELNING

Laboration 2 Elektriska kretsar Online fjärrstyrd laborationsplats Blekinge Tekniska Högskola (BTH)

Sammanfattning av likströmsläran

Tentamen i Elektronik, ESS010, del 2 den 17 dec 2007 klockan 8:00 13:00 för inskrivna på elektroteknik Ht 2007.

Lab nr Elinstallation, begränsad behörighet ET1013 Likströmskretsar

IF1330 Ellära KK1 LAB1 KK2 LAB2 KK4 LAB4. tentamen

Tentamen Elektronik för F (ETE022)

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

Spänning, ström och energi!

Införa begreppen ström, strömtäthet och resistans Ohms lag Tillämpningar på enkla kretsar Energi och effekt i kretsar

Tentamen i Elektronik för F, 2 juni 2005

FK Elektromagnetism, Fysikum, Stockholms universitet Tentamensskrivning (1:a omtentan), tisdag 17 juni 2014, kl 9:00-14:00

LTK010, vt 2017 Elektronik Laboration

Efter avsnittet ska du:

Analys av elektriska nät med numeriska metoder i MATLAB

Elektriska Kretsar. En fördjupning gjord av Philip Åhagen. Philip Åhagen Mälardalens Högskola Produktutveckling /2010 KPP 039

Sammanfattning av kursen ETIA01 Elektronik för D, Del 1 (föreläsning 1-10)

Elektriska och elektroniska fordonskomponenter. Föreläsning 4 & 5

Laboration - Va xelstro mskretsar

Lab 2. Några slides att repetera inför Lab 2. William Sandqvist

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Introduktion till LTspice

Tentamen på elläradelen i kursen Elinstallation, begränsad behörighet ET

Ellära. Lars-Erik Cederlöf

Byggsats Radio med förstärkare Art.nr: 99409

Introduktion till modifierad nodanalys

Sensorer och mätteknik Laborationshandledning

Tentamen ETE115 Ellära och elektronik för F och N,

Föreläsning 1 i Elektronik ESS010

3.4 RLC kretsen Impedans, Z

Spänningsfallet över ett motstånd med resistansen R är lika med R i(t)

4:2 Ellära: ström, spänning och energi. Inledning

1 Grundläggande Ellära

IE1206 Inbyggd Elektronik

Laborationsrapport Elektroteknik grundkurs ET1002 Mätteknik

4. Elektromagnetisk svängningskrets

IE1206 Inbyggd Elektronik

Ellära. Laboration 2 Mätning och simulering av likströmsnät (Thevenin-ekvivalent)

Övningsuppgifter i Elektronik

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

6. Likströmskretsar. 6.1 Elektrisk ström, I

Elektricitet och magnetism

Tentamen i Elektronik för F, 13 januari 2006

Sammanfattning av kursen ETIA01 Elektronik för D, Del 1 (föreläsning 1-6)

IF1330 Ellära KK1 LAB1 KK2 LAB2. tentamen

Objektorientering i liten skala

Sensorer och elektronik. Grundläggande ellära

Wheatstonebryggans obalansspänning

Laboration 1 Elektriska kretsar Online fjärrstyrd laborationsplats Blekinge Tekniska Högskola (BTH)

Spolen och Kondensatorn motverkar förändringar

Laborationsrapport. Kurs El- och styrteknik för tekniker ET1015. Lab nr. Laborationens namn Lik- och växelström. Kommentarer. Utförd den.

Elektronik grundkurs Laboration 1 Mätteknik

isolerande skikt positiv laddning Q=CV negativ laddning -Q V V

Förberedelseuppgifter... 2

Tentamen i Elektronik, ESS010, del1 4,5hp den 19 oktober 2007 klockan 8:00 13:00 För de som är inskrivna hösten 2007, E07

Think, pair, share. Vad tänker du på när du hör ordet elektricitet? Vad vill du veta om elektricitet?

Tentamen i ELEKTROMAGNETISM I, för W2 och ES2 (1FA514)

Grundläggande matematik och Ohms lag

Simulering med simulatorn TINA version 1.0

Tentamen på del 1 i kursen Elinstallation, begränsad behörighet ET

Tentamen i Elektronik för E (del 2), ESS010, 11 januari 2013

Sven-Bertil Kronkvist. Elteknik. Tvåpolssatsen. Revma utbildning

Föreläsning 29/11. Transienter. Hambley avsnitt

r 2 Arbetet är alltså endast beroende av start- och slutpunkt. Det följer av att det elektriska fältet är konservativt ( E = 0).

Du behöver inte räkna ut några siffervärden, svara med storheter som V 0 etc.

TENTAMEN. Linje: Tekniskt-Naturvetenskapligt basår Kurs: Fysik A Hjälpmedel: Miniräknare, formelsamling. Umeå Universitet. Lärare: Joakim Lundin

Ellära och Elektronik Moment AC-nät Föreläsning 4

Tentamen i Elektronik för E (del 2), ESS010, 5 april 2013

Tvåvägsomkopplaren som enkel strömbrytare

Extra kursmaterial om. Elektriska Kretsar. Lasse Alfredsson. Linköpings universitet November 2015

ETE115 Ellära och elektronik, tentamen oktober 2006

ELLÄRA Laboration 4. Växelströmslära. Seriekrets med resistor, spole och kondensator

1. Skriv Ohm s lag. 2. Beräkna strömmen I samt sätt ut strömriktningen. 3. Beräkna resistansen R. 4. Beräkna spänningen U över batteriet..

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Batteri. Lampa. Strömbrytare. Tungelement. Motstånd. Potentiometer. Fotomotstånd. Kondensator. Lysdiod. Transistor. Motor. Mikrofon.

Fö 2 - TMEI01 Elkraftteknik Trefas effektberäkningar

Laborationer i miljöfysik. Solcellen

KOMPENDIUM I RÖNTGENTEKNOLOGI

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Komplettering: 9 poäng på tentamen ger rätt till komplettering (betyg Fx).

Onsdagen den 16 mars 2005, 8:00 13:00

Elektroakustik Något lite om analogier

Att fjärrstyra fysiska experiment över nätet.

Transkript:

Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2017-01-16 Mål Arv och polymorfi I denna laboration ska du skapa ett objektorienterat program som använder arv, polymorfi och flera delar av det du tidigare lärt dig. Läsanvisningar - Objektorientering - Arv (inheritance) - Polymorfi (polymorphism) - Klasser - Referensmedlemsvariabler (&) - Konstanta medlemsvariabler (const) - Konstanta medlemsfunktioner (const) - ( Statiska medlemsvariabler (static) ) - Argument till main (kommandoradsargument) - C-strängar - Inbyggda arrayer (C-arrayer) - Typkonverteringar (to_string, stod, stoi) - Fånga undantag från dessa (try, catch, exception) - Repetition - Minneshantering, pekare - Allt om klasser - Filseparering Uppgift: Förenklad kretssimulator Du ska skriva ett program som utför en förenklad simulering av en elektrisk krets. En (icke förenklad) elektrisk krets skulle kunna bestå av exempelvis Resistorer, Kondensatorer, Spolar, Dioder, Transistorer, Spänningskällor och Strömkällor. I våra förenklade kretsar förekommer Resistorer (som har en viss resistans), Kondensatorer (som har en viss kapacitans och en nuvarande laddning) och Batterier (som har en outtömlig laddning). Dessa komponenter är sammankopplade via kopplingspunkter. Varje komponent måste vara kopplad till två (olika) kopplingspunkter. Varje kopplingspunkt representeras av en viss potential och kan vara kopplad till oändligt många komponenter. Observera att det räcker att komponenterna vet hur de är kopplade. Kopplingspunkterna behöver bara veta sin potential, inte vad som är anslutet. Du ska skapa klasser för att representera de olika komponenterna och göra det möjligt att bygga upp olika kretskort i huvudprogrammet. Målet är att det ska vara relativt enkelt att bygga upp en ny krets med dina klasser. Därefter ska alla komponenter i kretsen simuleras i små tidsintervall.

Simulering av komponenter Simuleringen går till så att varje komponent utför sitt arbete under ett litet tidsintervall, och detta upprepas under ett stort antal iterationer. Varje komponent har ett speciellt beteende i hur den överför laddningspartiklar (förändrar potentialen) från kopplingspunkt till kopplingspunkt. OBS! I detta program frångår vi för enkelhets skull hur det fungerar i verkligheten på flera punkter. Istället följer vi följande specifikation: Ett batteri ser till att kopplingspunkten på plus-sidan får samma potential som batteriets spänning och kopplingen på minussidan får potential noll. En resistor förflyttar laddningspartiklar från sin mest positiva kopplingspunkt till sin minst positiva kopplingspunkt. Mängden flyttade partiklar beror på skillnaden i potential, hur stor resistansen är, samt hur lång tid som förflyter. Exempel: Antag att resistansen är 2.0Ω och vi simulerar i steg om 0.1 tidsenheter. Om potentialen på sida a är 5.0V och potentialen på sida b är 9.0V blir spänningen över resistorn 9.0V 5.0V = 4.0V. Nu flyttas 4.0/2.0 0.1 laddningspartiklar från sida b (som ju har högst potential) till sida a. En kondensator suger upp positiva laddningspartiklar från sin mest positiva sida och lagrar dessa internt. Samtidigt suger den upp lika många negativa laddningspartiklar från sin minst positiva sida (vilket i praktiken innebär att den lägger till positiva laddningspartiklar där). Mängden laddningspartiklar som sugs upp beror på hur stor potentialskillnad det är mellan sidorna, hur mycket som tidigare sugits upp, och kapacitansen. Exempel: Antag att kapacitancen är 0.8 Farad och vi simulerar i steg om 0.1 tidsenheter. Om potentialen på sida a är 5.0V och potentialen på sida b är 9.0V så är skillnaden 9.0 5.0 = 4.0V. Om vi har 3.0V lagrat sedan tidigare kommer vi nu lagra ytterligare 0.8 (4.0 3.0) 0.1. Dessa tas från sidan med högst potential och läggs till både internt och på andra sidan. Spänningen över en komponent mäts genom att ta skillnaden i potential på vardera sida. Strömmen genom en resistor fås genom att dela spänningen över resistorn med dess resistans. Strömmen genom en kondensator approximerar vi med C(V L) där C är kapacitancen, V är spänningen över kondensatorn och L dess laddning. Ett batteri låtsas vi alltid har strömmen noll. För kretsar med enbart ett batteri, resistorer och kondensatorer ska spänningen över varje komponent stabiliseras efter många iterationer. Hur många iterationer som krävs beror på storlek av komponenternas värden och hur stort varje tidsintervall är. Det stabila värdet ska stämma med det resultat som kan räknas fram enligt elläran. Beroende på hur man kopplat positiva och negativa sidan av komponenter kan det tänkas skilja på tecken. Huvudprogrammet ska från kommandoraden ta in: - hur många iterationer som ska simuleras - hur många iterationer (rader) som ska skrivas ut

- hur stort tidsintervall som simuleras i varje steg - spänningen på batteriet Ett typexempel på indata skulle kunna vara att vi vill simulera 1 000 000 iterationer i steg om 0.01 tidsenheter med spänningen 10 Volt och totalt 10 utskrifter (d.v.s. 100000 iterationer mellan varje utskrift). KRAV: Om något kommandoradsargument saknas eller är ogiltigt ska programmet avsluta med ett instruktivt felmeddelande. Ogiltiga värden ska detekteras genom att fånga de undantag som slängs av std::stoi, eller fånga egendefinerade undantag som slängs inifrån egna underfunktioner för felkontroll. I huvudprogrammet ska du bygga upp tre olika kretsar enligt nedan. Klassdesignen ska vara sådan att detta är enkelt. Dessa kretsar ska simuleras och spänningen över varje komponent ska skrivas ut i en tabell med så många rader som efterfrågats. Resultatet ska stämma val överens med exemplen. OBS! Vi bryr oss inte om mycket små avvikelser, rådgör med assistenten om du är osäker. Ett exempel på hur en krets med två parallellkopplade resistorer kan byggas upp och simuleras ses i kodexempel 1. Connection p, n; vector<component*> net; net.push_back(new Battery("Bat", 24.0, p, n)); net.push_back(new Resistor("R1", 6.0, p, n)); net.push_back(new Resistor("R2", 8.0, p, n)); simulate(net, 10000, 10, 0.1); Listing 1: Kretsexempel

Kretsexempel R 1 (6Ω) P Q 124 R 2 (4Ω) U(24.0V ) Q 23 R 4 (12Ω) R 3 (8Ω) N Figur 1: Krets 1 Kretsen i figur 1 har 4 resistorer och ett batteri som är sammankopplade i kopplingspunkterna P, N, Q 124 och Q 23. P R 2 (50Ω) U(24.0V ) L R 1 (150Ω) R 4 (300Ω) R 3 (100Ω) R R 5 (250Ω) N Figur 2: Krets 2 Nästa krets (figur 2) har 5 resistorer som är ganska besvärliga att räkna ut spänningen över för hand, där det kanske snabbare att skriva programmet. Vi kan se att R 1 går mellan P och L, R 3 mellan R och L och så vidare. Sista kretsen (figur 3) har även några kondensatorer. För denna krets är det intressant hur den beter sig när spänningen ändras, och att rita grafer över detta, dock fungerar inte vår enkla simulering bra för detta och C++ saknar enkla grafritningsverktyg. Att skapa växelströmkällor eller transistorer

P R 2 (50Ω) U(24.0V ) L R 1 (150Ω) R 4 (300Ω) C 3 (1.0F ) R C 5 (0.75F ) N Figur 3: Krets 3 lämnas därför till den intresserade. Vi tittar bara att slutvärdena då kondensatorerna är fullt laddade är rimliga.

Körexempel 1./a.out 200000 10 0.01 24 Krets 1: Bat R1 R2 R3 R4 Volt Curr Volt Curr Volt Curr Volt Curr Volt Curr Krets 2: Bat R1 R2 R3 R4 R5 Volt Curr Volt Curr Volt Curr Volt Curr Volt Curr Volt Curr 24.00 0.00 7.47 0.05 5.28 0.11 2.19 0.02 16.52 0.06 18.72 0.07 24.00 0.00 6.40 0.04 4.72 0.09 1.68 0.02 17.60 0.06 19.28 0.08 24.00 0.00 6.35 0.04 4.69 0.09 1.66 0.02 17.65 0.06 19.31 0.08 Krets 3: Bat R1 R2 C3 R4 C5 Volt Curr Volt Curr Volt Curr Volt Curr Volt Curr Volt Curr 24.00 0.00 8.50 0.06 4.10 0.08 4.40 0.01 15.50 0.05 19.90 0.03 24.00 0.00 7.31 0.05 0.94 0.02 6.38 0.01 16.69 0.06 23.06 0.01 24.00 0.00 7.57 0.05 0.30 0.01 7.27 0.00 16.43 0.05 23.70 0.00 24.00 0.00 7.79 0.05 0.12 0.00 7.67 0.00 16.21 0.05 23.88 0.00 24.00 0.00 7.90 0.05 0.05 0.00 7.85 0.00 16.10 0.05 23.95 0.00 24.00 0.00 7.96 0.05 0.02 0.00 7.93 0.00 16.04 0.05 23.98 0.00 24.00 0.00 7.98 0.05 0.01 0.00 7.97 0.00 16.02 0.05 23.99 0.00 24.00 0.00 7.99 0.05 0.00 0.00 7.99 0.00 16.01 0.05 23.99 0.00 24.00 0.00 8.00 0.05 0.00 0.00 7.99 0.00 16.00 0.05 24.00 0.00 24.00 0.00 8.00 0.05 0.00 0.00 8.00 0.00 16.00 0.05 24.00 0.00

För att tydligare se vad som händer kommer vi nu studera ett enda steg med krets 1 då vi antar att steget är 1 tidsintervall. Vi börjar med batteriet, som sätter kopplingspunkt P till att ha 24V. Därefter går vi till R 1 som har P = 24, Q 124 = 0 så potentialen (skillnad i laddning) är 24V. Med resistans 6 och steglängd 1 flyttas 1 24/6 = 4 över till Q 124 som därefter har laddning 4. På samma sätt har R 2 potential 4V och flyttar därför över 1 4/4 = 1 till Q 23. R 3 flyttar 1 1/8 = 0.125 till N. För R 4 blir det lite krånligare. Nu har vi tagit 1 från Q 124 och N har värdet 1/8. Därför flyttar R 4 över 1 ((4 1) 1/8)/12 = 0.24 till N. Stegvis skulle det bli enligt nedan: 1. Bat sätter P = 24, N = 0. 2. R 1 sätter P = 20, Q 124 = 4 3. R 2 sätter Q 124 = 3, Q 23 = 1 4. R 3 sätter Q 23 = 0.88, N = 0.12 5. R 4 sätter Q 124 = 3 0.24 = 2.76, N = 0.36 Skulle vi skriva ut en rad i tabellen efter detta första steg skulle vi få följande resultat: Bat R1 R2 R3 R4 Volt Curr Volt Curr Volt Curr Volt Curr Volt Curr 24.00 0.00 17.24 2.87 1.89 0.47 0.51 0.06 2.40 0.20 Detta för att P = 24 4 = 20 Q 124 = 4 1 0.24 = 2.76 Q 23 = 1 1/8 = 7/8 N = 1/8 + 0.24 = 0.36 Bat (U, I) = (24, 0) (alltid) R 1 (U, I) (P Q 124 = 17.24, 17.24/6 = 2.87) R 2 (U, I) (Q 124 Q 23 = 1.88, 1.88/4 = 0.47) R 3 (U, I) (Q 23 N = 0.51, 0.51/8 = 0.06) R 4 (U, I) (Q 124 N = 2.4, 2.4/12 = 0.2) Bonusuppgift: Bättre objektorientering Om vi tittar närmare på den givna koden för att skapa en krets så ser vi att det vore lämpligt att representera hela kretsen som en klass. Det blir då naturligt att anropa simulate som en medlemsfunktion i kretsen, och vi får hjälp med minneshanteringen genom att lägga till en destruktor. De problem vi då får är hur kretsen ska byggas upp så att alla anslutningspunkter och komponenter ingår (composition) i kretsklassen. Det man kan tänka sig är att det finns en medlemsfunktion för att lägga till en ny namngiven kopplingspunkt, och en annan för att lägga till en komponent. I denna uppgift ska ni lösa detta. Modifiera ert klassdiagram och diskutera med assistent innan ni börjar koda. Om något går fel när användaren försöker bygga upp kretsen (exempelvis om hen namnger en kopplingspunkt som inte finns) ska ett undantag av egendefinierad typ kastas. Undantagsklassen ska ärva från en väl vald klass i klassheirarkin från <stdexcept>.