diff --git a/Documentation/VehiclesReleaseComparisonDeclarationMode/Class_9_RigidTruck_AT_Decl.xml b/Documentation/VehiclesReleaseComparisonDeclarationMode/Class_9_RigidTruck_AT_Decl.xml index c4645f198a33cd81d902adfc5fb8059e53e39fc5..fec3f265cc5b4c2a3105e65baf0da562e1dd142a 100644 --- a/Documentation/VehiclesReleaseComparisonDeclarationMode/Class_9_RigidTruck_AT_Decl.xml +++ b/Documentation/VehiclesReleaseComparisonDeclarationMode/Class_9_RigidTruck_AT_Decl.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <tns:VectoInputDeclaration schemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoInput.xsd"> - <Vehicle id="VEH-N.A."> + <Vehicle id="VEH-class9_AT"> <Manufacturer>TUG Generic</Manufacturer> <ManufacturerAddress>N.A.</ManufacturerAddress> <Model>N.A.</Model> diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs index 7ba29d28ac9aded0a597818704374c9cc8e897b1..51da402b0e0f46d8dcd748eeca99abd4a4d551b3 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs @@ -303,8 +303,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var avgEngineSpeed = (DataBus.EngineSpeed + outAngularVelocity * effectiveRatio) / 2; powershiftLoss = aliquotEnergyLoss / dt / avgEngineSpeed; inTorque += powershiftLoss; - + //inTorque += CurrentState.PowershiftLossEnergy; + } else { + _powershiftLossEnergy = null; } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs index 40e1c4a4340fb87f245341ec4d6c2d5a012052b3..a2a7fae5b8eccb3d14f811a40190f61ae7cd60d7 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs @@ -245,7 +245,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var nextGearboxInTorque = outTorque / nextGear.TorqueConverterRatio; var shiftLosses = _gearbox.ComputeShiftLosses(outTorque, outAngularVelocity, gear + 1) / ModelData.PowershiftShiftTime / nextGearboxInSpeed; nextGearboxInTorque += shiftLosses; - var tcOperatingPoint = _gearbox.TorqueConverter.FindOperatingPoint(nextGearboxInTorque, nextGearboxInSpeed); + var tcOperatingPoint = _gearbox.TorqueConverter.FindOperatingPoint(absTime, dt, nextGearboxInTorque, nextGearboxInSpeed); var engineSpeedOverMin = tcOperatingPoint.InAngularVelocity.IsGreater(minEngineSpeed); var avgSpeed = (DataBus.EngineSpeed + tcOperatingPoint.InAngularVelocity) / 2; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs index e26ffc6ceb3ef9f70d85658acd4b8d8e5394e0a2..cd7d75c756442175bb8abf40c3fc6fada9801e80 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs @@ -102,7 +102,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun = false) { - var operatingPoint = FindOperatingPoint(outTorque, outAngularVelocity); + var operatingPoint = FindOperatingPoint(absTime, dt, outTorque, outAngularVelocity); var inTorque = CalculateAverageInTorque(operatingPoint); if (dryRun) { @@ -209,7 +209,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl engineResponse.DragPower - engineResponse.AuxiliariesPowerDemand, DataBus.EngineSpeed, outAngularVelocity, _engineInertia, dt, previousPower); var maxInputSpeed = VectoMath.Min(ModelData.TorqueConverterSpeedLimit, DataBus.EngineN95hSpeed); - var lowerInputSpeed = VectoMath.Max(DataBus.EngineIdleSpeed, 0.8 * DataBus.EngineSpeed); + var lowerInputSpeed = VectoMath.Max(DataBus.EngineIdleSpeed * 1.001, 0.8 * DataBus.EngineSpeed); var corrected = false; if (operatingPoint.InAngularVelocity.IsGreater(maxInputSpeed)) { operatingPoint = ModelData.FindOperatingPoint(maxInputSpeed, outAngularVelocity); @@ -316,7 +316,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return retVal; } - protected internal TorqueConverterOperatingPoint FindOperatingPoint( + protected internal TorqueConverterOperatingPoint FindOperatingPoint(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity) { @@ -324,6 +324,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (operatingPointList.Count == 0) { Log.Debug("TorqueConverter: Failed to find torque converter operating point, fallback: creeping"); var tqOperatingPoint = ModelData.FindOperatingPoint(DataBus.EngineIdleSpeed, outAngularVelocity); + + var engineResponse = (ResponseDryRun) + NextComponent.Request(absTime, dt, tqOperatingPoint.InTorque, tqOperatingPoint.InAngularVelocity, true); + + var engineOK = engineResponse.DeltaDragLoad.IsGreaterOrEqual(0) && engineResponse.DeltaFullLoad.IsSmallerOrEqual(0); + if (!engineOK) { + tqOperatingPoint = ModelData.FindOperatingPoint(VectoMath.Max(DataBus.EngineIdleSpeed, DataBus.EngineSpeed * 0.9), outAngularVelocity); + } + tqOperatingPoint.Creeping = true; return tqOperatingPoint; } diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs index dbb18171b27fb6533ca32668552bf89d0ef79bbd..6e63b354eb6e48c613d3846eca242551ffc2081a 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs @@ -79,7 +79,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData fullLoad.Columns.Add("drag torque"); fullLoad.Columns.Add("PT1"); fullLoad.Rows.Add("3", "3", "-3", "3"); - fullLoad.Rows.Add("3", "3", "-3", "3"); + fullLoad.Rows.Add("4", "3", "-3", "3"); var data = new CombustionEngineData { ModelName = "asdf", @@ -116,7 +116,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData fullLoad.Columns.Add("drag torque"); fullLoad.Columns.Add("PT1"); fullLoad.Rows.Add("3", "3", "-3", "3"); - fullLoad.Rows.Add("3", "3", "-3", "3"); + fullLoad.Rows.Add("4", "3", "-3", "3"); var data = new MockEngineDataProvider { Model = "asdf", Displacement = 6374.SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(), @@ -151,7 +151,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData fullLoad.Columns.Add("drag torque"); fullLoad.Columns.Add("PT1"); fullLoad.Rows.Add("3", "3", "-3", "3"); - fullLoad.Rows.Add("3", "3", "-3", "3"); + fullLoad.Rows.Add("4", "3", "-3", "3"); var data = new MockEngineDataProvider { Model = "asdf", Displacement = 6374.SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(),