From 1ae2403a929ed4207cce20178d46527b1448ef17 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 3 Mar 2022 17:21:06 +0100 Subject: [PATCH] fixes APT-N transmission: treat as automatic transmission, do not overwrite model data in component --- VectoCommon/VectoCommon/Models/GearboxType.cs | 4 ++-- .../DataObjectAdapter/EngineeringDataAdapter.cs | 10 ++++++---- .../SimulationComponent/Impl/APTNGearbox.cs | 4 +--- .../Impl/VelocitySpeedGearshiftPreprocessor.cs | 4 ++++ .../Strategies/TestPowertrain.cs | 2 +- .../OutputData/SummaryDataContainer.cs | 17 ++++++++++------- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/VectoCommon/VectoCommon/Models/GearboxType.cs b/VectoCommon/VectoCommon/Models/GearboxType.cs index 3e3e0383a4..d5c29e4951 100644 --- a/VectoCommon/VectoCommon/Models/GearboxType.cs +++ b/VectoCommon/VectoCommon/Models/GearboxType.cs @@ -66,11 +66,11 @@ namespace TUGraz.VectoCommon.Models [DebuggerStepThrough] public static bool AutomaticTransmission(this GearboxType type) => - type == GearboxType.ATPowerSplit || type == GearboxType.ATSerial; + type == GearboxType.ATPowerSplit || type == GearboxType.ATSerial || type == GearboxType.APTN; [DebuggerStepThrough] public static bool ManualTransmission(this GearboxType type) => - type == GearboxType.MT || type == GearboxType.AMT || type == GearboxType.APTN; + type == GearboxType.MT || type == GearboxType.AMT; public static Second TractionInterruption(this GearboxType type) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index a1252d14af..23cfb10d4b 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -206,7 +206,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter } retVal.Inertia = engine.Inertia + - (gbx != null && gbx.Type.AutomaticTransmission() ? torqueConverter.Inertia : 0.SI<KilogramSquareMeter>()); + (gbx != null && gbx.Type.AutomaticTransmission() + ? (gbx.Type == GearboxType.APTN ? 0.SI<KilogramSquareMeter>() : torqueConverter.Inertia) + : 0.SI<KilogramSquareMeter>()); retVal.EngineStartTime = engine.EngineStartTime ?? DeclarationData.Engine.DefaultEngineStartTime; var limits = torqueLimits.ToDictionary(e => e.Gear); var numGears = gbx?.Gears.Count ?? 0; @@ -321,7 +323,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter var gears = new Dictionary<uint, GearData>(); ShiftPolygon tcShiftPolygon = null; - if (gearbox.Type.AutomaticTransmission()) { + if (gearbox.Type.AutomaticTransmission() && gearbox.Type != GearboxType.APTN) { tcShiftPolygon = torqueConverter.ShiftPolygon != null ? ShiftPolygonReader.Create(torqueConverter.ShiftPolygon) : DeclarationData.TorqueConverter.ComputeShiftPolygon(engineData.FullLoadCurves[0]); @@ -356,7 +358,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter retVal.Gears = gears; - if (retVal.Type.AutomaticTransmission()) { + if (retVal.Type.AutomaticTransmission() && retVal.Type != GearboxType.APTN) { var ratio = double.IsNaN(retVal.Gears[1].Ratio) ? 1 : retVal.Gears[1].TorqueConverterRatio / retVal.Gears[1].Ratio; retVal.PowershiftShiftTime = gearbox.PowershiftShiftTime; retVal.TorqueConverterData = TorqueConverterDataReader.Create( @@ -398,7 +400,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter IGearboxEngineeringInputData gearbox, IGearshiftEngineeringInputData gearshiftData, GearboxData retVal) { retVal.Inertia = gearbox.Type.ManualTransmission() ? gearbox.Inertia : 0.SI<KilogramSquareMeter>(); - retVal.TractionInterruption = gearbox.TractionInterruption; + retVal.TractionInterruption = gearbox.Type == GearboxType.APTN ? 0.SI<Second>() : gearbox.TractionInterruption; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs index bcded50386..f0c00dce38 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs @@ -13,9 +13,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public class APTNGearbox : Gearbox { public APTNGearbox(IVehicleContainer container, IShiftStrategy strategy) : base(container, strategy) - { - ModelData.TractionInterruption = 0.SI<Second>(); - } + { } public override IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs index 8542399f7b..f4262e239e 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs @@ -152,6 +152,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { var simulationInterval = TractionInterruption; + if (simulationInterval.IsEqual(0)) { + return vehicle.VehicleSpeed; + } + var acceleration = 0.SI<MeterPerSquareSecond>(); var absTime = 0.SI<Second>(); var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs index 2184f718a7..46a49f5cac 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/TestPowertrain.cs @@ -80,7 +80,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } } - if (Gearbox != null && Gearbox.GearboxType.AutomaticTransmission()) { + if (Gearbox != null && Gearbox.GearboxType.AutomaticTransmission() && Gearbox.GearboxType != GearboxType.APTN) { TorqueConverter = Container.TorqueConverterInfo as TorqueConverter; if (TorqueConverter == null) { throw new VectoException("Torque converter missing for automatic transmission: {0}", Container.TorqueConverterInfo?.GetType().FullName); diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 9c53788dc3..f95b8c7378 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -1065,13 +1065,16 @@ namespace TUGraz.VectoCore.OutputData row[Fields.GEAR_RATIO_LAST_GEAR] = data.Gears.Count > 0 ? (ConvertedSI)data.Gears.Last().Value.Ratio.SI<Scalar>() : (ConvertedSI)0.SI<Scalar>(); - row[Fields.TORQUECONVERTER_MANUFACTURER] = data.TorqueConverterData.Manufacturer; - row[Fields.TORQUECONVERTER_MODEL] = data.TorqueConverterData.ModelName; - row[Fields.TORQUE_CONVERTER_CERTIFICATION_NUMBER] = - data.TorqueConverterData.CertificationMethod == CertificationMethod.StandardValues - ? "" - : data.TorqueConverterData.CertificationNumber; - row[Fields.TORQUE_CONVERTER_CERTIFICATION_METHOD] = data.TorqueConverterData.CertificationMethod.GetName(); + if (data.Type != GearboxType.APTN) { + row[Fields.TORQUECONVERTER_MANUFACTURER] = data.TorqueConverterData.Manufacturer; + row[Fields.TORQUECONVERTER_MODEL] = data.TorqueConverterData.ModelName; + row[Fields.TORQUE_CONVERTER_CERTIFICATION_NUMBER] = + data.TorqueConverterData.CertificationMethod == CertificationMethod.StandardValues + ? "" + : data.TorqueConverterData.CertificationNumber; + row[Fields.TORQUE_CONVERTER_CERTIFICATION_METHOD] = + data.TorqueConverterData.CertificationMethod.GetName(); + } } else { row[Fields.GEAR_RATIO_FIRST_GEAR] = data.Gears.Count > 0 ? (ConvertedSI)data.Gears.First().Value.Ratio.SI<Scalar>() -- GitLab