diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs index 74824470c2c751032d7fea79137ff1dfaba54de4..f81e5e977d5077fb6ac407b2c8647eb1ac103182 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs @@ -49,9 +49,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data if (avgSpeed.IsEqual(0.RPMtoRad()) || avgSpeed.IsGreater(MaxSpeed)) { return 0.SI<NewtonMeter>(); } - var (a, b) = GetSection(voltage); - var r1 = a.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); - var r2 = b.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); + var (vLow, vHigh) = GetSection(voltage); + var r1 = vLow.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); + var r2 = vHigh.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque); if (r1 is null && r2 is null) { return null; @@ -65,8 +65,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data r2 = maxEmTorque; } - var retVal = VectoMath.Interpolate(a.Voltage, b.Voltage, - r1, r2, voltage); + var retVal = vLow.Voltage.IsEqual(vHigh.Voltage) + ? r1 + : VectoMath.Interpolate(vLow.Voltage, vHigh.Voltage, + r1, r2, voltage); var elPwr = LookupElectricPower(voltage, avgSpeed, retVal, true); if (elPwr.ElectricalPower != null && electricPower.IsEqual(elPwr.ElectricalPower, 1e-3.SI<Watt>())) { return retVal; @@ -87,10 +89,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public EfficiencyMap.EfficiencyResult LookupElectricPower(Volt voltage, PerSecond avgSpeed, NewtonMeter torque, bool allowExtrapolation = false) { - var tuple = GetSection(voltage); + var (vLow, vHigh) = GetSection(voltage); - var r1 = tuple.Item1.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); - var r2 = tuple.Item2.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); + var r1 = vLow.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); + var r2 = vHigh.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation); if (r1 == null || r2 == null || r1.ElectricalPower == null || r2.ElectricalPower == null) { return new EfficiencyMap.EfficiencyResult() { @@ -100,8 +102,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data }; } - var pwr = VectoMath.Interpolate(tuple.Item1.Voltage, tuple.Item2.Voltage, r1.ElectricalPower, - r2.ElectricalPower, voltage); + var pwr = vLow.Voltage.IsEqual(vHigh.Voltage) + ? r1.ElectricalPower + : VectoMath.Interpolate(vLow.Voltage, vHigh.Voltage, r1.ElectricalPower, + r2.ElectricalPower, voltage); return new EfficiencyMap.EfficiencyResult() { ElectricalPower = pwr, @@ -113,20 +117,28 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public NewtonMeter FullGenerationTorque(Volt voltage, PerSecond avgSpeed) { - var tuple = GetSection(voltage); + var (vLow, vHigh) = GetSection(voltage); - return VectoMath.Interpolate(tuple.Item1.Voltage, tuple.Item2.Voltage, - tuple.Item1.FullLoadCurve.FullGenerationTorque(avgSpeed), - tuple.Item2.FullLoadCurve.FullGenerationTorque(avgSpeed), voltage); + if (vLow.Voltage.IsEqual(vHigh.Voltage)) { + return vLow.FullLoadCurve.FullGenerationTorque(avgSpeed); + } + + return VectoMath.Interpolate(vLow.Voltage, vHigh.Voltage, + vLow.FullLoadCurve.FullGenerationTorque(avgSpeed), + vHigh.FullLoadCurve.FullGenerationTorque(avgSpeed), voltage); } public NewtonMeter FullLoadDriveTorque(Volt voltage, PerSecond avgSpeed) { - var (electricMotorVoltageLevelData, item2) = GetSection(voltage); + var (vLow, vHigh) = GetSection(voltage); + + if (vLow.Voltage.IsEqual(vHigh.Voltage)) { + return vLow.FullLoadCurve.FullLoadDriveTorque(avgSpeed); + } - return VectoMath.Interpolate(electricMotorVoltageLevelData.Voltage, item2.Voltage, - electricMotorVoltageLevelData.FullLoadCurve.FullLoadDriveTorque(avgSpeed), - item2.FullLoadCurve.FullLoadDriveTorque(avgSpeed), voltage); + return VectoMath.Interpolate(vLow.Voltage, vHigh.Voltage, + vLow.FullLoadCurve.FullLoadDriveTorque(avgSpeed), + vHigh.FullLoadCurve.FullLoadDriveTorque(avgSpeed), voltage); } protected (ElectricMotorVoltageLevelData, ElectricMotorVoltageLevelData) GetSection(Volt voltage) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs index 7203984dea9c861b79b1cde68ad97709826fb50e..da5d0c02532ae9f635d672d65fc8538f98eab1cb 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs @@ -188,7 +188,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; - var testResponse = + if (TestPowertrain.Gearbox != null) { + TestPowertrain.Gearbox.PreviousState.InAngularVelocity = + (DataBus.GearboxInfo as Gearbox).PreviousState.InAngularVelocity; + } + var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse() { diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/AT-Shift.vgbs b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/AT-Shift.vgbs deleted file mode 100644 index 4da1c5a5aedffae8d86fd20777c0e56b83b0bea2..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/AT-Shift.vgbs +++ /dev/null @@ -1,4 +0,0 @@ -engine torque [Nm],downshift rpm [1/min],upshift rpm [1/min] --200,700,800 -0,700,800 -3000,700,800 diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxPowerSplit.vgbx b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxPowerSplit.vgbx index fd4f513c68633b5c8fe5132a2be6b3fe225ae6e4..361b61daa0471822aacb0b19af24693732091f78 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxPowerSplit.vgbx +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxPowerSplit.vgbx @@ -18,19 +18,19 @@ { "Ratio": 1.35, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 1.0, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 0.73, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" } ], @@ -45,7 +45,7 @@ "File": "TorqueConverterPowerSplit.vtcc", "RefRPM": 1000.0, "Inertia": 0.0, - "ShiftPolygon": "AT-Shift.vgbs" + "ShiftPolygon": "" }, "DownshiftAferUpshiftDelay": 0.0, "UpshiftAfterDownshiftDelay": 0.0, diff --git a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxSerial.vgbx b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxSerial.vgbx index 0620238ba28721816eb911ec7850274e1482ddcc..9cbd0b62769194c8bac77778f7c066ce43ad91bc 100644 --- a/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxSerial.vgbx +++ b/VectoCore/VectoCoreTest/TestData/Hybrids/GenericVehicle_S2_AT/GearboxSerial.vgbx @@ -18,37 +18,37 @@ { "Ratio": 3.4, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 1.9, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 1.42, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 1.0, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 0.7, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" }, { "Ratio": 0.62, "Efficiency": 0.98, - "ShiftPolygon": "AT-Shift.vgbs", + "ShiftPolygon": "", "MaxTorque": "" } ], @@ -63,7 +63,7 @@ "File": "TorqueConverter.vtcc", "RefRPM": 1000.0, "Inertia": 0.0, - "ShiftPolygon": "AT-Shift.vgbs" + "ShiftPolygon": "" }, "DownshiftAferUpshiftDelay": 0.0, "UpshiftAfterDownshiftDelay": 0.0,