From 54e663ad54cec0b31b674077d23ef0678bf8faa8 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <quaritsch@ivt.tugraz.at> Date: Wed, 16 Aug 2023 17:45:54 +0200 Subject: [PATCH] bugfix: reading the voltage level at the completed stage results in a null-reference error because the voltage level is not defined. use same wrapper class to use same voltage level data for two voltage levels --- ...ElectricMotorDeclarationInputDataProvider.cs | 1 + .../ElectricMachinesDataAdapter.cs | 12 ++++++------ .../GenericBusElectricMotorData.cs | 17 +++++++++++------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs index ab5a24e25b..49749f994f 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricMotorDeclarationInputDataProvider.cs @@ -510,6 +510,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels ?? (_voltageLevels = GetVoltageLevels()); + public TableData DragCurve => ReadDragCurve(); public TableData Conditioning => ElementExists(XMLNames.Conditioning) ? ReadConditioning() : null; diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs index 64a42dba71..68b4bb322b 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs @@ -265,9 +265,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen iepc = new StandardValuesInputData.StandardValueIEPCInputData(iepc, 1.SI<Volt>(), 10E9.SI<Volt>()); } - - - var pos = PowertrainPosition.IEPC; var count = iepc.DesignTypeWheelMotor && iepc.NrOfDesignTypeWheelMotorMeasured == 1 ? 2 : 1; @@ -277,7 +274,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen .Select(x => new { x.GearNumber, x.Ratio, Diff = Math.Round(Math.Abs(x.Ratio - 1), 6) }).GroupBy(x => x.Diff) .OrderBy(x => x.Key).First().OrderBy(x => x.Ratio).Reverse().First(); - var voltageLevels = new List<ElectricMotorVoltageLevelData>(); foreach (var entry in iepc.VoltageLevels.OrderBy(x => x.VoltageLevel).AsEnumerable()) { @@ -447,13 +443,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen if (iepc == null) { return null; } + if (iepc.CertificationMethod == CertificationMethod.StandardValues) { + //Fake one very low voltage level and one very high for standard values + iepc = new StandardValuesInputData.StandardValueIEPCInputData(iepc, 1.SI<Volt>(), 10E9.SI<Volt>()); + } - var pos = PowertrainPosition.IEPC; + var pos = PowertrainPosition.IEPC; var count = iepc.DesignTypeWheelMotor && iepc.NrOfDesignTypeWheelMotorMeasured == 1 ? 2 : 1; var gearRatioUsedForMeasurement = iepc.Gears .Select(x => new { x.GearNumber, x.Ratio, Diff = Math.Round(Math.Abs(x.Ratio - 1), 6) }).GroupBy(x => x.Diff) .OrderBy(x => x.Key).First().OrderBy(x => x.Ratio).Reverse().First(); - var voltageLevels = new List<ElectricMotorVoltageLevelData>(); + //var voltageLevels = new List<ElectricMotorVoltageLevelData>(); var genericIEPCData = _genericIepcData.CreateIEPCElectricMotorData(iepc); genericIEPCData.OverloadRecoveryFactor = DeclarationData.OverloadRecoveryFactor; genericIEPCData.TransmissionLossMap = diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs index 1d0b903e0f..a0cd0268b5 100644 --- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs +++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents; @@ -29,8 +30,12 @@ namespace TUGraz.VectoCore.Models.GenericModelData ElectricMachineEntry<IElectricMotorDeclarationInputData> electricMachineEntry, IList<Tuple<Volt, TableData>> torqueLimits, Volt averageVoltage) { - var electricMachineType = electricMachineEntry.ElectricMachine.ElectricMachineType; - var efficiencyData = GetVoltageLevels(electricMachineEntry, electricMachineType, torqueLimits); + var motorData = electricMachineEntry.ElectricMachine; + if (electricMachineEntry.ElectricMachine.CertificationMethod == CertificationMethod.StandardValues) { + motorData = new StandardValuesInputData.StandardValuesEmInputData(motorData, 1.SI<Volt>(), 10e9.SI<Volt>()); + } + var electricMachineType = electricMachineEntry.ElectricMachine.ElectricMachineType; + var efficiencyData = GetVoltageLevels(motorData, electricMachineEntry.Count, electricMachineType, torqueLimits); var powertrainPosition = electricMachineEntry.Position; //var adcLossMap = electricMachineEntry.MechanicalTransmissionLossMap; var adcRatio = electricMachineEntry.RatioADC; @@ -41,6 +46,7 @@ namespace TUGraz.VectoCore.Models.GenericModelData ? TransmissionLossMapReader.CreateEmADCLossMap(adcLossMap, adcRatio, "EM ADC LossMap") : TransmissionLossMapReader.CreateEmADCLossMap(DeclarationData.ElectricMachineDefaultMechanicalTransmissionEfficiency, adcRatio, "EM ADC LossMap Eff"); + var electricMotorData = new ElectricMotorData { RatioPerGear = electricMachineEntry.RatioPerGear, @@ -49,7 +55,7 @@ namespace TUGraz.VectoCore.Models.GenericModelData EfficiencyData = efficiencyData, Inertia = electricMachineEntry.ElectricMachine.Inertia * electricMachineEntry.Count,//?? RatioADC = electricMachineEntry.RatioADC, - Overload = CalculateOverloadData(electricMachineEntry.ElectricMachine, electricMachineEntry.Count, efficiencyData, averageVoltage ), + Overload = CalculateOverloadData(motorData, electricMachineEntry.Count, efficiencyData, averageVoltage ), TransmissionLossMap = lossMap, OverloadRecoveryFactor = DeclarationData.OverloadRecoveryFactor, }; @@ -132,11 +138,10 @@ namespace TUGraz.VectoCore.Models.GenericModelData } private VoltageLevelData GetVoltageLevels( - ElectricMachineEntry<IElectricMotorDeclarationInputData> electricMachineEntry, + IElectricMotorDeclarationInputData motorData, int count, ElectricMachineType electricMachineType, IList<Tuple<Volt, TableData>> torqueLimits) { - var voltageLevels = electricMachineEntry.ElectricMachine.VoltageLevels; - var count = electricMachineEntry.Count; + var voltageLevels = motorData.VoltageLevels; var normalizedMap = GetNormalizedEfficiencyMap(electricMachineType); -- GitLab