- Sarah Peeters, IT-Support Medewerker
๐ฏ Doel: Verstaan en gebruiken van basis C# datatypes met elektrische toepassingen
โก Focus: Strings, int, double, bool, char - float vs double - commentaar
๐ Wat is programmeren eigenlijk?
Programmeren is het geven van instructies aan de computer. Net zoals je een collega uitlegt hoe hij een schakelschema moet lezen, geef je de computer stap-voor-stap instructies.
๐งฎ Datatypes: De Bouwstenen van je Programma
In de elektrotechniek werk je met verschillende soorten gegevens: namen van apparaten, metingen, etc. In C# heeft elk soort gegeven een specifiek "datatype".
๐ฆ De belangrijkste datatypes:
- string: Voor tekst zoals apparaatnamen ("Transformator_TR1")
- int: Voor hele getallen (2400 windingen)
- double: Voor decimale getallen (230.5V, 15.75A)
- bool: Voor ja/nee, waar/onwaar, aan/uit (true/false)
๐ก Praktijkoefening: "Transformator Basisgegevens"
Scenario: Registreer de gegevens van een nieuwe transformator.
Stap-voor-stap uitleg:
- Maak een nieuw Console Application project in Visual Studio.
- Verzamel gebruikersinvoer met
Console.ReadLine(). - Converteer tekst naar getallen met
Convert.ToDouble()ofConvert.ToInt32(). - Toon de resultaten netjes geformatteerd met string interpolatie:
$"Tekst {variabele}".
๐ฏ Complete voorbeeldcode:
// Transformator gegevens registratie programma
using System;
namespace TransformatorRegistratieatie
{ document.addEventListener('DOMContentLoaded', () => {
class ProgrameMenuButton = document.getElementById('mobile-menu-button');
{ const mobileMenu = document.getElementById('mobile-menu');
static void Main(string[] args)utton.querySelector('.hamburger-icon');
{
Console.WriteLine("=== TRANSFORMATOR REGISTRATIE SYSTEEM ===");
t isOpen = mobileMenu.classList.contains('show');
Console.Write("Transformator naam/ID: ");
string naam = Console.ReadLine();
bileMenu.classList.remove('show');
Console.Write("Vermogen in kVA: "););
double vermogen = Convert.ToDouble(Console.ReadLine());;
se {
Console.Write("Primaire spanning in kV: ");
double primaireSpanning = Convert.ToDouble(Console.ReadLine());
mobileMenu.classList.add('show');
Console.Write("In bedrijf? (true/false): ");
bool inBedrijf = Convert.ToBoolean(Console.ReadLine());
Console.WriteLine("\\n=== GEREGISTREERDE GEGEVENS ===");
Console.WriteLine($"Transformator: {naam}");
Console.WriteLine($"Vermogen: {vermogen:F1} kVA");
Console.WriteLine($"Primaire spanning: {primaireSpanning:F1} kV");
Console.WriteLine($"Status: {(inBedrijf ? "In bedrijf" : "Uit bedrijf")}");
}ink.addEventListener('click', () => {
} mobileMenu.classList.remove('show');
}`rgerIcon.classList.remove('open');
},imeout(() => mobileMenu.classList.add('hidden'), 300);
{
"id": "module03",
"title": "Module 3: Rekenen met Elektrische Grootheden",
"description": "Implementeer elektrische formules in C# met operators en type casting. Bereken primaire en secundaire
stroom van transformatoren.",
"difficulty": "Makkelijk",
"xp: 30,ag async blijven, is 3rd party) -->
"steps": "๐ฏ Doel: Elektrische formules programmeren met C# operators
โก Formule: I = P / (U ร โ3) voor driefasensystemen
๐งฎ Rekenkundige Operators
Gebruik +, -, * (vermenigvuldigen), en / (delen) om
berekeningen uit te voeren. Voor de wortel van 3 gebruik je Math.Sqrt(3).
โก Driefasige stroom: De belangrijkste formule
โก Driefasige stroomberekening:
I = P / (U ร โ3)
- I = Stroom in Ampรจre
- P = Vermogen in Watt (of VA)
- U = Spanning in Volt
๐ก Praktijkoefening: \"Driefasige Stroomberekening\"
Scenario: Bereken de primaire en secundaire stroom van een transformator om de juiste kabeldikte te bepalen.
- Verzamel vermogen (kVA), primaire spanning (kV) en secundaire spanning (kV).
- Converteer de eenheden naar VA en V (door te vermenigvuldigen met 1000).
- Pas de formule toe voor zowel de primaire als secundaire kant.
- Toon de resultaten.
๐ฏ Complete voorbeeldcode:
// Driefasige stroomberekening voor transformatoren\\nusing System;\\n\\nnamespace StroomBerekening\\n{\\n class Program\\n {\\n static void Main(string[] args)\\n {\\n Console.WriteLine(\\\"=== DRIEFASIGE STROOMBEREKENING ===\\\");\\n \\n Console.Write(\\\"Vermogen in kVA: \\\");\\n double vermogenKVA = Convert.ToDouble(Console.ReadLine());\\n\\n Console.Write(\\\"Primaire spanning in kV: \\\");\\n double primaireSpanningKV = Convert.ToDouble(Console.ReadLine());\\n\\n Console.Write(\\\"Secundaire spanning in kV: \\\");\\n double secundaireSpanningKV = Convert.ToDouble(Console.ReadLine());\\n\\n // Eenheden converteren\\n double vermogenVA = vermogenKVA * 1000;\\n double primaireSpanningV = primaireSpanningKV * 1000;\\n double secundaireSpanningV = secundaireSpanningKV * 1000;\\n\\n // Stroomberekeningen\\n double primaireStroom = vermogenVA / (primaireSpanningV * Math.Sqrt(3));\\n double secundaireStroom = vermogenVA / (secundaireSpanningV * Math.Sqrt(3));\\n\\n Console.WriteLine(\\\"\\\\n=== BEREKENINGSRESULTATEN ===\\\");\\n Console.WriteLine($\\\"Primaire stroom: {primaireStroom:F2} A\\\");\\n Console.WriteLine($\\\"Secundaire stroom: {secundaireStroom:F2} A\\\");\\n }\\n }\\n}
`
},PI = Tawk_API || {}, Tawk_LoadStart = new Date();
{ ()
id: "module04",
title: "Module 4: Beslissingen in Code",cument.getElementsByTagName("script")[0];
description: "Implementeer veiligheidschecks en logica met condities. Controleer transformator overbelasting met
if/else statements.",
difficulty: "Gemiddeld",cdda8db9993f2ada1525e2/default';
xp: 35,-8';
steps: `๐ฏ Doel: Veiligheidscondities en logica implementeren
โก Scenario: Overbelasting detectie van transformatoren
Conditionele Statements
Met if, else if, en else kan je programma beslissingen nemen op basis van
voorwaarden. Gebruik vergelijkings- (>, ==) en logische operators (&& voor
EN, || voor OF).
๐ก Oefening: "Overbelasting Check"
- Vraag de gebruiker om de nominale stroom (A) en de huidig gemeten stroom (A).
- Bereken het belastingspercentage:
(gemetenStroom / nominaleStroom) * 100. - Implementeer de volgende logica:
- Normaal: Belasting โค 100%
- Waarschuwing: 100% < Belasting โค 110%
- Overbelast: 110% < Belasting โค 125%
- Kritiek: Belasting > 125%
- Toon een gepaste statusmelding.
๐ฏ Voorbeeldcode:
double nominaleStroom = 36.4; // A
double gemetenStroom = 42.0; // A1, s0);
})();
double belastingPercentage = (gemetenStroom / nominaleStroom) * 100;
string status;
if (belastingPercentage <= 100){ status = "โ
Normaal";}else if (belastingPercentage <= 110){ status = "โ ๏ธ Waarschuwing";}else if (belastingPercentage <= 125){ status = "โ Overbelast";}else{ status = "๐ฅ KRITIEK: Onmiddellijke actie vereist!";}Console.WriteLine($"Belasting: {belastingPercentage:F1}%");Console.WriteLine($"Status: {status}");
` }, { "id": "module05", "title": "Module 5: Lussen & Gegevens Verwerken", "description": "Gebruik for/while loops en
arrays voor meetgegevens analyse. Verwerk meerdere temperatuurmetingen van transformatorwikkelingen.", "difficulty":
"Gemiddeld", "xp: 40, "steps": "๐ฏ Doel: Meerdere meetgegevens verwerken met lussen en lijsten.
โก Toepassing: Temperatuuranalyse van transformatorwikkelingen.
Lussen en Collecties
Een for-lus is perfect om een vast aantal keer code te herhalen. Een List<double>
is een flexibele lijst om een onbekend aantal metingen op te slaan.
๐ก Oefening: \"Meetwaarden Analyseren\"
- Vraag de gebruiker om 6 temperatuurmetingen in te voeren (voor 6 wikkelingen).
- Gebruik een
for-lus om de invoer te vragen en sla elke meting op in eenList<double>. - Gebruik de ingebouwde functies van de Lijst (uit
System.Linq) om het volgende te berekenen:- Gemiddelde temperatuur:
temperaturen.Average() - Maximum temperatuur:
temperaturen.Max() - Aantal metingen boven 75ยฐC:
temperaturen.Count(t => t > 75.0)
- Gemiddelde temperatuur:
- Toon de analyseresultaten.
๐ฏ Voorbeeld implementatie:
using System;\\nusing System.Collections.Generic;\\nusing System.Linq; // Essentieel voor Average, Max, etc.\\n\\nList<double> temperaturen = new List<double>();\\n\\n// Invoer loop\\nfor (int i = 1; i <= 6; i++)\\n{\\n Console.Write($\\\"Temperatuur wikkeling {i} (ยฐC): \\\");\\n double temp = double.Parse(Console.ReadLine());\\n temperaturen.Add(temp);\\n}\\n\\n// Berekeningen\\ndouble gemiddelde = temperaturen.Average();\\ndouble maximum = temperaturen.Max();\\nint alarmCount = temperaturen.Count(t => t > 75.0);\\n\\nConsole.WriteLine(\\\"\\\\n=== ANALYSE RESULTATEN ===\\\");\\nConsole.WriteLine($\\\"Gemiddelde temperatuur: {gemiddelde:F1}ยฐC\\\");\\nConsole.WriteLine($\\\"Maximum temperatuur: {maximum:F1}ยฐC\\\");\\nConsole.WriteLine($\\\"Aantal wikkelingen boven 75ยฐC: {alarmCount}\\\");
}, { id: "module06", title: "Module 6: Methoden & Code Structureren", description: "Leer functies/methoden gebruiken
voor herbruikbare code. Bouw een vermogensberekenings-functie.", difficulty: "Gemiddeld", xp: 45, steps: `๐ฏ Doel: Code structureren met herbruikbare methoden (functies).
โก Focus: Parameters, return values, en code organisatie.
Waarom Methoden Gebruiken?
Methoden (of functies) laten je toe om een stuk code een naam te geven en het steeds opnieuw aan te roepen. Dit voorkomt dubbele code en maakt je programma overzichtelijker.
๐ก Oefening: \"Vermogensberekening als Functie\"
- Maak een
staticmethode genaamdBerekenVermogen. - Deze methode accepteert twee
doubleparameters:spanningenstroom. - De methode berekent het driefasig vermogen in kW met de bekende formule.
- De methode geeft het berekende vermogen terug met het
returnsleutelwoord. - Roep deze methode aan vanuit je
Mainfunctie en print het resultaat.
๐ฏ Voorbeeld implementatie:
using System;namespace ElektrischeBerekeningen{ class Program { // Hoofdmethode waar het programma start static void Main(string[] args) { // Roep onze eigen methode aan double vermogen = BerekenDriefasigVermogen(400, 50); // 400V, 50A Console.WriteLine($\"Berekend vermogen: {vermogen:F2} kW\"); } // Onze herbruikbare methode voor vermogensberekening // static: We kunnen het aanroepen zonder een object te maken // double: Het type waarde dat de methode teruggeeft // (double spanning, double stroom): De input parameters public static double BerekenDriefasigVermogen(double spanning, double stroom) { // P = โ3 ร U ร I (in Watt) double vermogenInWatt = Math.Sqrt(3) * spanning * stroom; // Converteer naar kW en geef het resultaat terug return vermogenInWatt / 1000.0; } }}
` }, { "id": "module07", "title": "Module 7: Classes & Objecten", "description": "Introductie objectgeoriรซnteerd
programmeren met een Transformator klasse. Leer properties, constructors en berekende waarden.", "difficulty":
"Moeilijk", "xp": 55, "steps": "๐ฏ Doel: Objectgeoriรซnteerd denken met een praktisch elektro-object.
โก Focus: Classes, properties, constructors, en automatische berekeningen.
OOP Concepten
- Class: Een blauwdruk. Bijvoorbeeld: een algemeen ontwerp voor een
Transformator. - Object: Een specifieke instantie van die blauwdruk. Bijvoorbeeld:
transformatorTR01. - Properties: De eigenschappen van het object (
Vermogen,Spanning). - Constructor: Een speciale methode die wordt uitgevoerd wanneer je een nieuw object maakt
(
new Transformator(...)).
๐ก Oefening: \"Maak een Transformator-klasse\"
- Maak een nieuwe class
Transformator. - Geef het properties voor
VermogenKVA,PrimaireSpanningKVenSecundaireSpanningKV. - Maak een 'read-only' property
PrimaireStroomdie de stroom automatisch berekent op basis van de andere properties. Gebruik de=>syntax voor een compacte notatie. - Maak een constructor die de basis-eigenschappen instelt bij het aanmaken van een object.
- Maak in
Maineen nieuwTransformatorobject en toon zijn berekende stroom.
๐ฏ Complete implementatie:
using System;\\n\\n// De blauwdruk voor elke transformator\\npublic class Transformator\\n{\\n // 1. Properties: De data van het object\\n public double VermogenKVA { get; set; }\\n public double PrimaireSpanningKV { get; set; }\\n public double SecundaireSpanningKV { get; set; }\\n \\n // 2. Berekende 'read-only' property\\n // Deze waarde wordt elke keer berekend als je hem opvraagt.\\n public double PrimaireStroom => VermogenKVA / (PrimaireSpanningKV * Math.Sqrt(3));\\n public double SecundaireStroom => VermogenKVA / (SecundaireSpanningKV * Math.Sqrt(3));\\n\\n // 3. Constructor: wordt uitgevoerd bij 'new Transformator(...)'\\n public Transformator(double vermogen, double primV, double secV)\\n {\\n VermogenKVA = vermogen;\\n PrimaireSpanningKV = primV;\\n SecundaireSpanningKV = secV;\\n }\\n}\\n\\n// Hoofdprogramma om de class te testen\\nclass Program\\n{\\n static void Main(string[] args)\\n {\\n // Maak een specifiek transformator object aan\\n var tr1 = new Transformator(630, 10, 0.4); // 630kVA, 10kV/400V\\n \\n Console.WriteLine($\"TR1 Vermogen: {tr1.VermogenKVA} kVA\");\\n Console.WriteLine($\"TR1 Primaire Stroom: {tr1.PrimaireStroom:F2} A\");\\n Console.WriteLine($\"TR1 Secundaire Stroom: {tr1.SecundaireStroom:F2} A\");\\n }\\n}
` }, { id: "module08", title: "Module 8: Foutenafhandeling", "description": "Leer foutafhandeling met try/catch en
debugging technieken in Visual Studio. Maak robuuste invoer voor elektrische berekeningen.", "difficulty": "Moeilijk",
"xp: 50, "steps": "๐ฏ Doel: Robuuste programma's bouwen die niet crashen bij foute invoer.
โก Focus: Try/catch, exceptions, en input validatie.
Waarom Foutafhandeling?
Een gebruiker kan per ongeluk tekst invoeren waar een getal wordt verwacht. Zonder foutafhandeling crasht je
programma. Een try-catch blok laat je dit soort fouten (exceptions) 'opvangen' en netjes afhandelen.
๐ก Oefening: \"Veilige Invoer\"
- Maak een methode
VraagGeldigGetal(string vraag)die een gebruiker om een getal vraagt. - Gebruik een
while(true)lus om te blijven vragen totdat de invoer geldig is. - Plaats de
Convert.ToDouble()aanroep binnen eentryblok. - Als het converteren lukt, gebruik
returnom het getal terug te geven en de lus te stoppen. - In het
catch (FormatException)blok geef je een foutmelding. De lus zal dan automatisch opnieuw proberen. - Gebruik deze veilige methode in je
Mainprogramma om vermogen en spanning te vragen.
๐ฏ Complete implementatie:
using System;\\n\\nnamespace VeiligeInvoer\\n{\\n class Program\\n {\\n static void Main(string[] args)\\n {\\n Console.WriteLine(\"=== VEILIGE BEREKENING ===\");\\n \\n // Gebruik onze robuuste methode om invoer te krijgen\\n double vermogen = VraagGeldigGetal(\"Voer vermogen in kVA in: \");\\n double spanning = VraagGeldigGetal(\"Voer spanning in kV in: \");\\n\\n // Controleer op delen door nul\\n if (spanning == 0)\\n {\\n Console.WriteLine(\"Fout: Spanning mag geen nul zijn.\");\\n }\\n else\\n {\\n double stroom = vermogen / (spanning * Math.Sqrt(3));\\n Console.WriteLine($\"Berekend stroom: {stroom:F2} A\");\\n } \\n }\\n\\n // Een herbruikbare, veilige methode om een getal te vragen\\n public static double VraagGeldigGetal(string vraag)\\n {\\n while (true) // Blijf proberen tot we een geldig getal hebben\\n {\\n Console.Write(vraag);\\n string input = Console.ReadLine();\\n\\n try\\n {\\n // Probeer de tekst om te zetten naar een getal\\n double getal = Convert.ToDouble(input);\\n return getal; // Success! Verlaat de methode en geef het getal terug.\\n }\\n catch (FormatException)\\n {\\n // Vang de fout op als de invoer geen geldig getal is\\n Console.ForegroundColor = ConsoleColor.Red;\\n Console.WriteLine(\"Ongeldige invoer. Voer alstublieft een getal in.\");\\n Console.ResetColor();\\n }\\n }\\n }\\n }\\n}
}, { "id": "herhaling01", "title": "๐ Herhalingsoefening: Variabelen, Loops & If-statements", "description":
"Combineer variabelen, loops en if/else logica in een kwaliteitscontrole systeem voor Royal Smith componenten.",
"difficulty": "Gemiddeld", "xp: 40, "steps": "๐ฏ Doel: Kernconcepten van C# (variabelen, loops, if/else) toepassen in een praktisch scenario.
โก Focus: Variabelen declareren, for-loops, conditionele logica combineren.
๐ Vereiste kennis: Module 2 (Variabelen), Module 4 (If/Else), Module 5 (Loops).
๐ง Het Scenario: Kwaliteitscontrole bij Royal Smith
Je werkt bij de kwaliteitscontrole van Royal Smith. Een nieuwe batch van 5 transformatorspoelen is geproduceerd. Jouw taak is om een programma te schrijven dat:
- De weerstand van elke spoel meet en valideert
- Bijhoudt hoeveel spoelen goedgekeurd/afgekeurd zijn
- Een samenvatting toont met statistieken
๐ Stap-voor-stap Opdrachten
Volg deze stappen nauwkeurig om het programma te bouwen:
๐ STAP 1: Project Setup & Basis Variabelen
Wat ga je doen:
- Maak een nieuw Console App project in Visual Studio
- Naam:
BatchValidator - Definieer drie basis variabelen in
Main():double nominaleWeerstand = 50.0;// De ideale weerstanddouble tolerantiePercentage = 5.0;// Toegestane afwijking in %int aantalSpoelen = 5;// Hoeveel spoelen we gaan testen
- Print een welkomstbericht met
Console.WriteLine()
๐ก Tip: Gebruik emoji's of box-drawing characters (โโโโโโ) voor een professionele look!
๐ STAP 2: Bereken Acceptabele Limieten
Wat ga je doen:
- Bereken de toegestane afwijking in
Ohm:
double afwijking = (tolerantiePercentage / 100.0) * nominaleWeerstand; - Bereken de minimale acceptabele
weerstand:
double minWeerstand = nominaleWeerstand - afwijking; - Bereken de maximale acceptabele
weerstand:
double maxWeerstand = nominaleWeerstand + afwijking; - Print deze waarden naar de console met 2 decimalen:
{waarde:F2}
๐ก Rekenvoorbeeld: 50ฮฉ ยฑ 5% โ afwijking = 2.5ฮฉ โ bereik: 47.5ฮฉ tot 52.5ฮฉ
๐ STAP 3: Maak Tellers voor Statistieken
Wat ga je doen:
- Declareer een integer teller voor goedgekeurde spoelen:
int goedgekeurd = 0; - Declareer een integer teller voor afgekeurde spoelen:
int afgekeurd = 0;
๐ก Waarom 0? We beginnen altijd bij 0 en verhogen de teller elke keer als we een spoel testen.
๐ STAP 4: Bouw de For-Loop Structuur
Wat ga je doen:
- Maak een for-loop die 5 keer herhaalt (voor elke
spoel):
for (int i = 1; i <= aantalSpoelen; i++) - Binnen de loop: print
Spoel {i} - Gemeten weerstand (ฮฉ): - Lees gebruikersinvoer:
string invoer = Console.ReadLine(); - Converteer naar double:
double gemeten = Convert.ToDouble(invoer);
๐ก Let op: We starten bij i = 1 (niet 0) zodat
we "Spoel 1" t/m "Spoel 5" krijgen.
๐ STAP 5: Implementeer Validatie Logica
Wat ga je doen:
- Binnen de for-loop: schrijf een if-statement met deze
conditie:
if (gemeten >= minWeerstand && gemeten <= maxWeerstand) - In het if-block (spoel is GOED):
- Zet tekstkleur groen:
Console.ForegroundColor = ConsoleColor.Green; - Print:
โ GOEDGEKEURD - {gemeten:F2}ฮฉ - Reset kleur:
Console.ResetColor(); - Verhoog teller:
goedgekeurd++;
- Zet tekstkleur groen:
- In het else-block (spoel is SLECHT):
- Zet tekstkleur rood:
Console.ForegroundColor = ConsoleColor.Red; - Print:
โ AFGEKEURD - {gemeten:F2}ฮฉ - Reset kleur:
Console.ResetColor(); - Verhoog teller:
afgekeurd++;
- Zet tekstkleur rood:
๐ก &&-operator: Beide condities moeten waar zijn (groter DAN min รN kleiner DAN max).
๐ STAP 6: Toon Batch Samenvatting
Wat ga je doen:
- Na de for-loop (niet erbinnen!): print een mooie header
- Toon
Totaal getest: {aantalSpoelen} spoelen - Toon
โ Goedgekeurd: {goedgekeurd} - Toon
โ Afgekeurd: {afgekeurd}
๐ก Tip: Gebruik box-drawing characters voor een professioneel rapport.
๐ STAP 7: Bereken Succespercentage
Wat ga je doen:
- Bereken het
succespercentage:
double succesPercentage = (goedgekeurd / (double)aantalSpoelen) * 100; - Print dit percentage met 1 decimaal:
{succesPercentage:F1}%
๐ก Belangrijk: De (double) cast is essentieel!
Anders krijg je integer deling en altijd 0.
โ ๏ธ Voorbeeld: 3 / 5 = 0 (integer) maar
3 / 5.0 = 0.6 (double)
๐ STAP 8: Geef Eindoordeel over de Batch
Wat ga je doen:
- Schrijf een if/else-if/else keten met 3 scenario's:
- Scenario 1 - Perfect:
if (goedgekeurd == aantalSpoelen)
โ Print:๐ BATCH GOEDGEKEURD - Perfecte kwaliteit!(groen) - Scenario 2 - Acceptabel:
else if (succesPercentage >= 80)
โ Print:โ BATCH GEACCEPTEERD - Binnen kwaliteitsnorm(geel) - Scenario 3 - Afgekeurd:
else
โ Print:โ ๏ธ BATCH AFGEKEURD - Te veel defecten(rood)
- Scenario 1 - Perfect:
- Gebruik
Console.ForegroundColorenConsole.ResetColor()voor kleuren
๐ก Logica: Als ALLE spoelen OK zijn โ perfect. Anders als โฅ80% OK โ acceptabel. Anders โ afgekeurd.
๐ STAP 9: Afsluiting en Testen
Wat ga je doen: Je applicatie uitvoeren en testen
- Druk op F5 of klik op de groene "โถ Start" knop bovenaan Visual Studio
- Je applicatie venster verschijnt!
- Test de volgende scenario's:
- Happy Path: Laat de standaardwaarden staan, klik "Bereken" โ Moet succesvol berekenen
- Ongeldige spanning: Vul "abc" in bij spanning โ Moet foutmelding tonen
- Negatieve stroom: Vul "-10" in bij stroom โ Moet foutmelding tonen
- CosFi te groot: Vul "1.5" in bij cos ฯ โ Moet foutmelding tonen
- Reset functie: Klik "Reset" โ Alle velden moeten gereset worden
- Verwachte resultaten (standaardwaarden):
- Schijnbaar Vermogen: 34641.02 VA
- Werkelijk Vermogen: 27712.81 W
- Vermogen in kW: 27.713 kW
โ ๏ธ Debugging Tips:
- Als er rode squiggly lijnen in je code staan: er is een syntaxfout. Lees de foutmelding onderaan.
- Druk op F9 op een regel om een breakpoint te zetten (rode bol) en debuggen.
- Je kan tijdens debugging over variabelen hoveren om hun waarde te zien.
๐จ BONUS: Eyeshot 3D Visualisatie Integratie
Voor gevorderde gebruikers: voeg een visuele weergave van het elektrische systeem toe met de Eyeshot library (free mode).
๐ฆ BONUS STAP 1: Eyeshot Library Installeren
Wat is Eyeshot? Een CAD library voor 3D visualisatie in .NET applicaties (free mode beschikbaar voor niet-commercieel gebruik).
- Download Eyeshot: Ga naar
https://www.devdept.com/products/eyeshot/ - Kies: "Free Mode" โ Download de installer
- Installeer: Volg de installatiewizard
- In Visual Studio:
- Rechtermuisklik op je project in Solution Explorer
- Kies "Add Reference..."
- Browse naar de Eyeshot DLL (meestal:
C:\\Program Files\\Eyeshot\\devDept.Eyeshot.dll) - Klik "Add"
๐ฆ BONUS STAP 2: 3D Viewer Control Toevoegen
- Maak een nieuw tabblad: Sleep een
TabControlop je form - Tab 1: "Berekeningen" (plaats hier je huidige controls in)
- Tab 2: "3D Visualisatie"
- Voeg Eyeshot Control toe:
- In Toolbox, klik rechts โ "Choose Items..."
- Browse naar Eyeshot DLL
- Selecteer
devDept.Eyeshot.Model - Sleep het control naar Tab 2
DockโFill
๐ฆ BONUS STAP 3: Simpele 3D Scene Renderen
Voeg deze methode toe aan je Form class:
using devDept.Eyeshot;using devDept.Eyeshot.Entities;using devDept.Graphics;// In je Form class:private void ToonTransformator3D(double vermogenKW){ // Clear bestaande scene model1.Entities.Clear(); // Maak een simpele box als transformator representatie // Grootte is proportioneel aan vermogen double grootte = Math.Sqrt(vermogenKW) / 2; Box transformator = new Box( new Point3D(0, 0, 0), // Positie grootte, grootte * 0.8, grootte * 1.2 // Afmetingen ); // Kleur afhankelijk van vermogen if (vermogenKW < 20) transformator.Color = Color.Green; else if (vermogenKW < 50) transformator.Color = Color.Yellow; else transformator.Color = Color.Red; // Voeg toe aan scene model1.Entities.Add(transformator); // Voeg labels toe Text label = new Text( new Point3D(0, 0, grootte * 1.5), $"{vermogenKW:F1} kW", 0.3 ); label.Color = Color.Black; model1.Entities.Add(label); // Zoom om alles in beeld te krijgen model1.ZoomFit(); // Refresh de view model1.Invalidate();}
๐ฆ BONUS STAP 4: 3D View Aanroepen bij Berekening
Voeg dit toe AAN HET EINDE van je buttonBereken_Click methode:
// ... bestaande berekeningen ... // Roep 3D visualisatie aan ToonTransformator3D(vermogenKW); // Switch automatisch naar 3D tab tabControl1.SelectedIndex = 1;}
๐ก Resultaat: Na elke berekening zie je een 3D representatie van de transformator waarbij de grootte en kleur het vermogen weerspiegelen!
๐ Wat Heb Je Geleerd?
- โ Windows Forms Basis: Controls slepen, properties instellen, layout maken
- โ Event Handlers: Code koppelen aan gebruikersacties (button clicks)
- โ
Input Validatie:
TryParse(), foutafhandeling, gebruikersvriendelijke feedback - โ UI Updates: Labels updaten, kleuren veranderen, MessageBox tonen
- โ Math.Sqrt(): Worteltrekken voor โ3 berekeningen
- โ Math.Pow(): Machtsverheffen voor sin berekening
- โ
String Formatting:
{waarde:F2}voor decimale weergave - โ Event-driven Programming: Reageren op gebruikersinteractie
- ๐จ BONUS - 3D Visualisatie: CAD library integratie voor visuele feedback
๐ Extra Uitdagingen
- NumericUpDown Controls: Vervang TextBoxes door NumericUpDown voor betere input controle
- Progress Bar: Voeg een ProgressBar toe die de belasting t.o.v. max vermogen toont
- Save/Load: Implementeer opslaan van berekeningen naar een tekstbestand
- Data Logging: Maak een ListBox die alle uitgevoerde berekeningen bijhoudt
- Graph Chart: Gebruik een Chart control om vermogen vs cos ฯ grafiek te tonen
- Multi-language: Voeg een dropdown toe om tussen Nederlands/Engels te schakelen
- Custom Icons: Voeg een icoon toe aan je applicatie (.ico bestand)
- Keyboard Shortcuts: Implementeer Enter voor Bereken, Escape voor Reset
๐ Veelvoorkomende Problemen & Oplossingen
โ "Object reference not set to an instance of an object"
โ Je probeert een control te gebruiken die niet bestaat. Check of je de
(Name) property correct hebt ingesteld.
โ Labels updaten niet
โ Check of je .Text property gebruikt en niet per ongeluk iets anders.
Vergeet niet $"..." voor string interpolatie.
โ Event handler wordt niet aangeroepen
โ Ga naar Designer, selecteer de control, klik op โก (Events) in Properties venster, check of de event gekoppeld is.
โ Voltooiing Checklist
Check af wat je hebt gedaan:
- โ Windows Forms project aangemaakt
- โ Form configured (titel, grootte, etc.)
- โ Alle input controls toegevoegd (3 TextBoxes met labels)
- โ Bereken button met werkende event handler
- โ Input validatie geรฏmplementeerd
- โ Vermogensberekeningen correct (alle 4 types)
- โ Resultaat labels updaten correct
- โ Reset button werkt
- โ Applicatie getest met verschillende invoeren
- โ BONUS: 3D visualisatie toegevoegd (optioneel)