From 17d4af59160329df2e8fcb6e502c31fb3fd9b642 Mon Sep 17 00:00:00 2001 From: Sidi Liang <1467329765@qq.com> Date: Sun, 25 Aug 2019 09:40:26 +0800 Subject: [PATCH] Electrical: More rework --- Nasal/electrical.nas | 107 ++++++++++++++++++++++++++++++++----------- 1 file changed, 81 insertions(+), 26 deletions(-) diff --git a/Nasal/electrical.nas b/Nasal/electrical.nas index 919a579..0bdd3d8 100644 --- a/Nasal/electrical.nas +++ b/Nasal/electrical.nas @@ -1,11 +1,19 @@ + +var kWh2kWs = func(kWh){ + return kWh * 3600; +} +var kWs2kWh = func(kWs){ + return kWs / 3600; +} + var Series = { #//Class for any series connection new: func() { - return { parents:[Circuit] }; + return { parents:[Series] }; }, units: [], addUnit: func(unit){ - me.units.append(unit); + append(me.units, unit); }, @@ -20,7 +28,7 @@ var Series = { totalPower: func(){ var total = 0; foreach(elem; units){ - total += elem.power; + total += elem.power(); } return total; }, @@ -31,15 +39,23 @@ var Series = { }, - #/*calculateVoltage: func(){ - # foreach(elem; units){ - # elem.voltage - # } - #},*/ + calculateSeriesVoltage: func(){ + var tR = me.totalResistance(); + foreach(elem; units){ + elem.voltage = (elem.resistance/tR) * me.voltage; + } + }, + + calculateSeriesCurrent: func(){ + foreach(elem; units){ + elem.current = me.current(); + } + }, }; var Circuit = { #//Class for any circuit + #//Currently must be initalized with a source #//Currently only support one current source in a circuit new: func(cSource) { var new_circuit = { parents:[Circuit] }; @@ -60,7 +76,7 @@ var Circuit = { }, addParallel: func(units){ - me.parallelConnection.append(units); + append(me.parallelConnection, units); }, current: 0, #//Ampere @@ -70,18 +86,44 @@ var Circuit = { calculateParallelVoltage: func(){ foreach(elem; parallelConnection){ - elem.voltage = me.voltage; + elem.voltage = me.voltage(); } }, #//Volt - totalParalleCurrent: func(){ + calculateSeriesVoltage: func(){ + foreach(elem; parallelConnection){ + elem.calculateSeriesVoltage(); + } + }, #//Volt + + calculateTotalParalleCurrent: func(){ var total = 0; foreach(elem; parallelConnection){ - total += elem.current; + total += elem.current(); } + me.current = total; return total; }, #//Ampere + calculateTotalPower: func(){ + var total = 0; + foreach(elem; parallelConnection){ + total += elem.totalPower(); + } + }, + + updateInterval: 0.1, #//Seconds between each update + + update: func(){ + me.calculateParallelVoltage(); + me.calculateSeriesVoltage(); + foreach(elem; parallelConnection){ + elem.calculateSeriesCurrent(); + } + me.calculateTotalParalleCurrent(); + parallelConnection[0].units[0].remaining -= me.calculateTotalPower() * me.updateInterval; # + }, + }; @@ -91,10 +133,21 @@ var Appliance = { return { parents:[Appliance] }; }, + ratedPower: 0, #//rate power , Watt, 0 if isResistor + + resistance: 0, #//electric resistance, Ωμέγα voltage: 0, #//electric voltage, Volt current: 0, #//electric current, Ampere - power: 0, #//electric power, Watt + activePower: 0, #//Output Power + heatingPower: func(){ + return me.current * me.current * me.resistance; + },#//heating Power + power: func(){ + return activePower + heatingPower; + }, + + isResistor: 0, applianceName: "Appliance", @@ -109,31 +162,33 @@ var Appliance = { setResistance: func(r){ me.resistance = r; }, - calculatePower: func(){ - me.power = me.voltage * me.current; - return me.power; - }, - }; var CurrentSource = { #//Class for any current source - new: func() { - return { parents:[Appliance], applianceName: "CurrentSource" }; + new: func(eR, eF, eC, name = "CurrentSource") { + var newCS = { parents:[CurrentSource, Appliance.new()], applianceName: name, resistance: eR, electromotiveForce:eF, electricalCapacity:eC }; + newCS.resetRemainingToFull(); + return newCS; }, electromotiveForce: 0, #//Volt + electricalCapacity: 0, #//kWs + remaining: 0, #//kWs + + resetRemainingToFull: func(){ + me.remaining = me.electricalCapacity; + }, + getRemainingPercentage: func(){ + return sprintf("%.0f", me.remaining/2880)~"%"; + }, }; -var cSource = CurrentSource.new(); -cSource.name = "Battery"; -cSource.resistance = 13.6 * 0.001; -cSource.electromotiveForce = 760; - - +var cSource = CurrentSource.new((13.6*0.001), 760, kWh2kWs(80), "Battery"); +var circuit_1 = Circuit.new(cSource);