diff --git a/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj b/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj index 7426ce847c7e001cb3da56e82a9a73293b69b435..fcef676f339aef78819dcf2a0f0a61305c78a88c 100644 --- a/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj +++ b/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj @@ -3,7 +3,7 @@ <OutputType>Exe</OutputType> <RootNamespace>DeclarationCycleZip</RootNamespace> <AssemblyName>DeclarationCycleZip</AssemblyName> - <TargetFrameworks>net6.0</TargetFrameworks> + <TargetFrameworks>net5.0</TargetFrameworks> <DefineConstants /> </PropertyGroup> diff --git a/Tools/GraphDrawer/GraphDrawer.csproj b/Tools/GraphDrawer/GraphDrawer.csproj index fedd980a65886e9f4df4de0c3dce29bc8467ec3d..e26fef0a461607748f47be4df98184b65178c292 100644 --- a/Tools/GraphDrawer/GraphDrawer.csproj +++ b/Tools/GraphDrawer/GraphDrawer.csproj @@ -3,7 +3,7 @@ <OutputType>Exe</OutputType> <RootNamespace>GraphDrawer</RootNamespace> <AssemblyName>GraphDrawer</AssemblyName> - <TargetFrameworks>net6.0-windows</TargetFrameworks> + <TargetFrameworks>net5.0-windows</TargetFrameworks> <DefineConstants /> </PropertyGroup> diff --git a/Tools/LicenceHeader/LicenceHeader.csproj b/Tools/LicenceHeader/LicenceHeader.csproj index 832dd4037d1ee0285597297ff630353f748a7c8f..daf6950908b73103d7f79dd9511f5a551e3313ab 100644 --- a/Tools/LicenceHeader/LicenceHeader.csproj +++ b/Tools/LicenceHeader/LicenceHeader.csproj @@ -3,7 +3,7 @@ <OutputType>Exe</OutputType> <RootNamespace>LicenceHeader</RootNamespace> <AssemblyName>LicenceHeader</AssemblyName> - <TargetFrameworks>net6.0</TargetFrameworks> + <TargetFrameworks>net5.0</TargetFrameworks> <DefineConstants /> </PropertyGroup> <ItemGroup> diff --git a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj index 709802e110259afb2ea612c12eeab84f033a3b2e..28d399122f5e3c47736429da2b291d609a39c775 100644 --- a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj +++ b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj @@ -7,7 +7,7 @@ <OptionCompare>Binary</OptionCompare> <OptionStrict>On</OptionStrict> <OptionInfer>On</OptionInfer> - <TargetFrameworks>net6.0</TargetFrameworks> + <TargetFrameworks>net5.0</TargetFrameworks> <DefineConstants /> </PropertyGroup> diff --git a/VectoConsole/VectoConsole.csproj b/VectoConsole/VectoConsole.csproj index cf2935dcb40b6f82b1d797fb0bf8e72cf50e96cf..7f48f347ae5be890cb3fa022303fcee68cdca42b 100644 --- a/VectoConsole/VectoConsole.csproj +++ b/VectoConsole/VectoConsole.csproj @@ -4,7 +4,7 @@ <RootNamespace>VectoConsole</RootNamespace> <AssemblyName>vectocmd</AssemblyName> <ApplicationIcon>VECTO.ico</ApplicationIcon> - <TargetFrameworks>net45;net48;net6.0</TargetFrameworks> + <TargetFrameworks>net45;net48;net5.0</TargetFrameworks> <DefineConstants /> </PropertyGroup> diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index f9798274940804902cf76b7757f5e0db53520941..a3e0ab5d7f37683db512aa38bf9e6cc2b21e59cf 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -985,15 +985,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter var overloadTestSpeed = voltageEntry.OverloadTestSpeed ?? 0.RPMtoRad(); - var peakElPwr = voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, overloadTestSpeed, -overloadTorque, true) + var peakElPwr = voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, overloadTestSpeed, -overloadTorque, 0, true) .ElectricalPower; var peakPwrLoss = -peakElPwr - overloadTorque * overloadTestSpeed; // losses need to be positive var contElPwr = voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, continuousTorqueSpeed, - -continuousTorque).ElectricalPower ?? + -continuousTorque, 0).ElectricalPower ?? voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, continuousTorqueSpeed, voltageLevels.FullLoadDriveTorque(voltageEntry.VoltageLevel, continuousTorqueSpeed), - true).ElectricalPower; + 0, true).ElectricalPower; var continuousPowerLoss = -contElPwr - continuousTorque * continuousTorqueSpeed; // loss needs to be positive var overloadBuffer = (peakPwrLoss - continuousPowerLoss) * voltageEntry.OverloadTime; return new OverloadData() { diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index 14e0216082301ea06f305e2be208d0d3813f34c9..3d2659fe3bca7ee6fb56456af1ec7d3415c28e1e 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -200,9 +200,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data } if (runData.Cycle != null && runData.Cycle.Entries.Any(e => e.PTOActive == PTOActivity.PTOActivityDuringStop)) { - if (jobType == VectoSimulationJobType.BatteryElectricVehicle) { - // TODO: MQ 20201020 - validate depending on EM position!? - } + if (jobType == VectoSimulationJobType.BatteryElectricVehicle) { + // TODO: MQ 20201020 - validate depending on EM position!? + } if (runData.PTO == null || runData.PTO.PTOCycle == null) { return new ValidationResult("PTOCycle is used in DrivingCycle, but is not defined in Vehicle-Data."); diff --git a/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs b/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs index 9c65c7585e9c48cee154e80b36d6d46c8d9b00dc..12cc6ed0875877f1c341d000f7d3fa5446033e08 100644 --- a/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs +++ b/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs @@ -12,7 +12,7 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus PerSecond MaxSpeed { get; } Watt DragPower(Volt volt, PerSecond electricMotorSpeed); Watt MaxPowerDrive(Volt volt, PerSecond inAngularVelocity); - NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt); + NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt, uint gear); bool DeRatingActive { get; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs index f81e5e977d5077fb6ac407b2c8647eb1ac103182..601d6e04cfe4af77582d888d18129beb1d7a5004 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs @@ -41,17 +41,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public PerSecond MaxSpeed => _maxSpeed ?? (_maxSpeed = VoltageLevels - .Min(v => VectoMath.Min(v.EfficiencyMap.MaxSpeed, v.FullLoadCurve.MaxSpeed))); + .Min(v => VectoMath.Min(v.MaxSpeed, v.FullLoadCurve.MaxSpeed))); - public NewtonMeter EfficiencyMapLookupTorque(Volt voltage, Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque) + public NewtonMeter EfficiencyMapLookupTorque(Volt voltage, Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque, uint gear) { if (avgSpeed.IsEqual(0.RPMtoRad()) || avgSpeed.IsGreater(MaxSpeed)) { return 0.SI<NewtonMeter>(); } var (vLow, vHigh) = GetSection(voltage); - var r1 = vLow.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); - var r2 = vHigh.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); + var r1 = vLow.LookupTorque(electricPower, avgSpeed, maxEmTorque, gear); + var r2 = vHigh.LookupTorque(electricPower, avgSpeed, maxEmTorque, gear); if (r1 is null && r2 is null) { return null; @@ -69,7 +69,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ? r1 : VectoMath.Interpolate(vLow.Voltage, vHigh.Voltage, r1, r2, voltage); - var elPwr = LookupElectricPower(voltage, avgSpeed, retVal, true); + var elPwr = LookupElectricPower(voltage, avgSpeed, retVal, gear, true); if (elPwr.ElectricalPower != null && electricPower.IsEqual(elPwr.ElectricalPower, 1e-3.SI<Watt>())) { return retVal; } @@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data var searchResult = SearchAlgorithm.Search(retVal, electricPower - elPwr.ElectricalPower, interval: 10.SI<NewtonMeter>(), getYValue: x => (Watt)x - electricPower, - evaluateFunction: x => LookupElectricPower(voltage, avgSpeed, x, true).ElectricalPower, + evaluateFunction: x => LookupElectricPower(voltage, avgSpeed, x, gear, true).ElectricalPower, criterion: x => ((Watt)x - electricPower).Value(), searcher: this ); @@ -87,12 +87,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data //throw new NotImplementedException("EfficientyMapLookupTorque"); } - public EfficiencyMap.EfficiencyResult LookupElectricPower(Volt voltage, PerSecond avgSpeed, NewtonMeter torque, bool allowExtrapolation = false) + public EfficiencyMap.EfficiencyResult LookupElectricPower(Volt voltage, PerSecond avgSpeed, NewtonMeter torque, uint gear, bool allowExtrapolation = false) { var (vLow, vHigh) = GetSection(voltage); - var r1 = vLow.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); - var r2 = vHigh.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); + var r1 = vLow.LookupElectricPower(avgSpeed, torque, gear, allowExtrapolation); + var r2 = vHigh.LookupElectricPower(avgSpeed, torque, gear, allowExtrapolation); if (r1 == null || r2 == null || r1.ElectricalPower == null || r2.ElectricalPower == null) { return new EfficiencyMap.EfficiencyResult() { @@ -163,9 +163,37 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public ElectricMotorFullLoadCurve FullLoadCurve { get; internal set; } [ValidateObject] - public EfficiencyMap EfficiencyMap { get; internal set; } + protected internal EfficiencyMap EfficiencyMap { protected get; set; } + public virtual PerSecond MaxSpeed => EfficiencyMap.MaxSpeed; + public virtual EfficiencyMap.EfficiencyResult LookupElectricPower(PerSecond avgSpeed, NewtonMeter torque, uint gear, bool allowExtrapolation) + { + return EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); + } + + public virtual NewtonMeter LookupTorque(Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque, uint gear) + { + return EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); + } + } + + public class IEPCVoltageLEvelData : ElectricMotorVoltageLevelData + { + [ValidateObject] + protected internal Dictionary<uint, EfficiencyMap> IEPCEfficiencyMap { protected get; set; } + + public override PerSecond MaxSpeed => IEPCEfficiencyMap.Values.Min(x => x.MaxSpeed); + + public override EfficiencyMap.EfficiencyResult LookupElectricPower(PerSecond avgSpeed, NewtonMeter torque, uint gear, bool allowExtrapolation) + { + return IEPCEfficiencyMap[gear].LookupElectricPower(avgSpeed, torque, allowExtrapolation); + } + + public override NewtonMeter LookupTorque(Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque, uint gear) + { + return IEPCEfficiencyMap[gear].LookupTorque(electricPower, avgSpeed, maxEmTorque); + } } public class OverloadData diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index 8ef923828af37da0c9bc0a5704a39d2b8658f64d..ace92cb4be72704f46691e6c5772c8c404825dd9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -65,12 +65,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return ModelData.EfficiencyData.FullLoadDriveTorque(volt, electricMotorSpeed) * electricMotorSpeed; } - public NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt) + public NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt, uint gear) { var maxTorque = electricPower > 0 - ? GetMaxRecuperationTorque(volt, dt, avgEmSpeed) - : GetMaxDriveTorque(volt, dt, avgEmSpeed); - var tqEmMap = ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, electricPower, avgEmSpeed, maxTorque); + ? GetMaxRecuperationTorque(volt, dt, avgEmSpeed, gear) + : GetMaxDriveTorque(volt, dt, avgEmSpeed, gear); + var tqEmMap = ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, electricPower, avgEmSpeed, maxTorque, gear); if (tqEmMap == null) { return null; } @@ -144,6 +144,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public IResponse DoHandleRequest(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun, double ratio) { + var gear = DataBus.GearboxInfo.Gear; var voltage = DataBus.BatteryInfo.InternalVoltage; var iceOn = Position == PowertrainPosition.HybridP1 && @@ -159,8 +160,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ? 0.SI<NewtonMeter>() : Formulas.InertiaPower(avgEmSpeed, PreviousState.EMSpeed, ModelData.Inertia, dt) / avgEmSpeed; - var maxDriveTorqueEmMap = GetMaxDriveTorque(voltage, dt, avgEmSpeed); - var maxRecuperationTorqueEmMap = GetMaxRecuperationTorque(voltage, dt, avgEmSpeed); + var maxDriveTorqueEmMap = GetMaxDriveTorque(voltage, dt, avgEmSpeed, gear.Gear); + var maxRecuperationTorqueEmMap = GetMaxRecuperationTorque(voltage, dt, avgEmSpeed, gear.Gear); // inertia has to be added here. drive torque is negative, when accelerating inertia is positive and thus 'reduces' drive torque, i.e 'less negative' var maxDriveTorqueEm = maxDriveTorqueEmMap == null ? null : maxDriveTorqueEmMap + inertiaTorqueEm; @@ -254,10 +255,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl emTorqueMap = null; } + var electricPower = emOff || (ModelData.DragCurve.Lookup(avgEmSpeed) + inertiaTorqueEm).IsEqual(emTorque, 1e-3.SI<NewtonMeter>()) ? 0.SI<Watt>() : ModelData.EfficiencyData - .LookupElectricPower(voltage, avgEmSpeed, emTorqueMap, DataBus.ExecutionMode != ExecutionMode.Declaration) + .LookupElectricPower(voltage, avgEmSpeed, emTorqueMap, gear.Gear, DataBus.ExecutionMode != ExecutionMode.Declaration) .ElectricalPower; var electricSupplyResponse = @@ -379,7 +381,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return retVal; } - private NewtonMeter GetMaxRecuperationTorque(Volt volt, Second dt, PerSecond avgSpeed) + private NewtonMeter GetMaxRecuperationTorque(Volt volt, Second dt, PerSecond avgSpeed, uint gear) { var tqContinuousPwr = DeRatingActive ? ModelData.Overload.ContinuousTorque : null; @@ -394,20 +396,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var maxBatRecuperationTorque = maxBatPower.IsEqual(0, 1e-3) ? ModelData.DragCurve.Lookup(avgSpeed) - : ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque); + : ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque, gear); var maxTorqueRecuperate = VectoMath.Min(maxEmTorque, maxBatRecuperationTorque); if (maxTorqueRecuperate < 0) { return null; } - var elPower = ModelData.EfficiencyData.LookupElectricPower(volt, avgSpeed, maxTorqueRecuperate); + var elPower = ModelData.EfficiencyData.LookupElectricPower(volt, avgSpeed, maxTorqueRecuperate, gear); if (elPower.ElectricalPower?.IsSmallerOrEqual(0) ?? true) { return null; } return maxTorqueRecuperate; } - private NewtonMeter GetMaxDriveTorque(Volt volt, Second dt, PerSecond avgSpeed) + private NewtonMeter GetMaxDriveTorque(Volt volt, Second dt, PerSecond avgSpeed, uint gear) { var tqContinuousPwr = DeRatingActive ? -ModelData.Overload.ContinuousTorque : null; @@ -422,7 +424,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var maxBatDriveTorque = maxBatPower.IsEqual(0, 1e-3) ? ModelData.DragCurve.Lookup(avgSpeed) - : ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque); + : ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque, gear); var maxTorqueDrive = VectoMath.Max(maxEmTorque, maxBatDriveTorque); return maxTorqueDrive > 0 ? null : maxTorqueDrive; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs index 10c099c6556a4eacc0f7857ea50f570c915088d3..661c1c83aafabc8bad0a7d4919b822013c138ead 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs @@ -561,7 +561,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var engineSpeed = response.ElectricMotor.AngularVelocity; - var fcCurRes = VoltageLevels.LookupElectricPower(DataBus.BatteryInfo.InternalVoltage, engineSpeed, tqCurrent / EMRatio, true); + var fcCurRes = VoltageLevels.LookupElectricPower(DataBus.BatteryInfo.InternalVoltage, engineSpeed, tqCurrent / EMRatio, currentGear.Gear, true); if (fcCurRes.Extrapolated) { Log.Warn( "EffShift Strategy: Extrapolation of power consumption for current gear! n: {0}, Tq: {1}", diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs index dce109a26ab15efe8b83981c4c0838a3bb92cdc0..ec5fa606aa5fdb24df1b96d6dec122f8af4d3dc4 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs @@ -154,7 +154,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies try { Genset.ElectricMotor.Initialize(0.SI<NewtonMeter>(), speed); - var tq = Genset.ElectricMotor.GetTorqueForElectricPower(voltage, pwr, speed * EmData.RatioADC, dt); + var tq = Genset.ElectricMotor.GetTorqueForElectricPower(voltage, pwr, speed * EmData.RatioADC, dt, 0); if (tq == null || tq.IsSmallerOrEqual(0)) { continue; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index 627b76836238251d1788b9801e01521bed48afdc..c76db1c435316428ccbddc124f18d84fa67a5b1e 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -1975,7 +1975,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies //var emDriveTorque = ModelData.ElectricMachinesData.Where(x => x.Item1 == emPos).First().Item2.EfficiencyMap // .LookupTorque(emDrivePower, firstResponse.ElectricMotor.AngularVelocity, maxEmTorque); - var emDriveTorque = DataBus.ElectricMotorInfo(emPos).GetTorqueForElectricPower(voltage, emDrivePower, firstResponse.ElectricMotor.AngularVelocity, dt); + var emDriveTorque = DataBus.ElectricMotorInfo(emPos).GetTorqueForElectricPower(voltage, emDrivePower, firstResponse.ElectricMotor.AngularVelocity, dt, 0); var emDragTorque = ModelData.ElectricMachinesData.First(x => x.Item1 == emPos).Item2 .DragCurve.Lookup(firstResponse.ElectricMotor.AngularVelocity); if (emDriveTorque != null && diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs index da5d0c02532ae9f635d672d65fc8538f98eab1cb..311160ee353bdeb50456b605a1a79e5c589c1562 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs @@ -419,7 +419,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies genSetOperatingPoint = MaxGensetPower(absTime, dt, drivetrainDemand, maxPowerGenset, gensetState); emTorque = TestPowertrain.ElectricMotor.GetTorqueForElectricPower( DataBus.BatteryInfo.InternalVoltage, drivetrainDemand.Response.ElectricSystem.MaxPowerDrive, - drivetrainDemand.Response.ElectricMotor.AngularVelocity, dt); + drivetrainDemand.Response.ElectricMotor.AngularVelocity, dt, DataBus.GearboxInfo?.Gear.Gear ?? 0); if (emTorque == null) { emTorque = -emResponse.MaxDriveTorque; } else { diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs index 09a94a6622c2ba3aa597b866a8bf2a1ba38dbe59..14e5839242ba69f8363415bd5be1bf5daa3a4798 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs @@ -162,17 +162,17 @@ namespace TUGraz.VectoCore.Tests.FileIO Assert.AreEqual(370.153, em.FullGenerationTorque(500.SI<Volt>(), 2000.RPMtoRad()).Value()); Assert.AreEqual(388.1145, em.FullGenerationTorque(550.SI<Volt>(), 2000.RPMtoRad()).Value()); - Assert.AreEqual(-101.70072, em.EfficiencyMapLookupTorque(400.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); - Assert.AreEqual(-25000, em.LookupElectricPower(400.SI<Volt>(), 2000.RPMtoRad(), -101.70072.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1); + Assert.AreEqual(-101.70072, em.EfficiencyMapLookupTorque(400.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3); + Assert.AreEqual(-25000, em.LookupElectricPower(400.SI<Volt>(), 2000.RPMtoRad(), -101.70072.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1); - Assert.AreEqual(-114.51788, em.EfficiencyMapLookupTorque(600.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); - Assert.AreEqual(-25000, em.LookupElectricPower(600.SI<Volt>(), 2000.RPMtoRad(), -114.51788.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1); + Assert.AreEqual(-114.51788, em.EfficiencyMapLookupTorque(600.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3); + Assert.AreEqual(-25000, em.LookupElectricPower(600.SI<Volt>(), 2000.RPMtoRad(), -114.51788.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1); - Assert.AreEqual(-107.772009, em.EfficiencyMapLookupTorque(500.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); - Assert.AreEqual(-25000, em.LookupElectricPower(500.SI<Volt>(), 2000.RPMtoRad(), -107.772009.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1); + Assert.AreEqual(-107.772009, em.EfficiencyMapLookupTorque(500.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3); + Assert.AreEqual(-25000, em.LookupElectricPower(500.SI<Volt>(), 2000.RPMtoRad(), -107.772009.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1); - Assert.AreEqual(-111.053784, em.EfficiencyMapLookupTorque(550.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3); - Assert.AreEqual(-25000, em.LookupElectricPower(550.SI<Volt>(), 2000.RPMtoRad(), -111.053784.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1); + Assert.AreEqual(-111.053784, em.EfficiencyMapLookupTorque(550.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3); + Assert.AreEqual(-25000, em.LookupElectricPower(550.SI<Volt>(), 2000.RPMtoRad(), -111.053784.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1); } diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs index 25c891c1ed8069b4ed71593edbace5cce9ad0924..c1995654882dc0adca8ad6ebc651b87b19a4abeb 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs @@ -69,8 +69,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(30 * count, emModelData.DragCurve.Lookup(2500.RPMtoRad()).Value(), 1e-3); Assert.AreEqual(-14579 * count, - emModelData.EfficiencyData.VoltageLevels.First().EfficiencyMap - .LookupElectricPower(190.99.RPMtoRad(), (-500 * count).SI<NewtonMeter>(), false).ElectricalPower.Value(), + emModelData.EfficiencyData.VoltageLevels.First() + .LookupElectricPower(190.99.RPMtoRad(), (-500 * count).SI<NewtonMeter>(), 0, false).ElectricalPower.Value(), 1e-3);