diff --git a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 1e0bc504df8c254d9228def3bc62257e76faa079..06149ca14279a1d0d844d5f22f82d63fac1ed765 100644 --- a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -85,12 +85,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl switch (data.Retarder.Type) { case RetarderData.RetarderType.Primary: - tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap)); + tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap, data.Retarder.Ratio)); tmp = AddComponent(tmp, gearbox); break; case RetarderData.RetarderType.Secondary: tmp = AddComponent(tmp, gearbox); - tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap)); + tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap, data.Retarder.Ratio)); break; case RetarderData.RetarderType.None: tmp = AddComponent(tmp, new DummyRetarder(container)); @@ -158,12 +158,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl switch (data.Retarder.Type) { case RetarderData.RetarderType.Primary: - tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap)); + tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap, data.Retarder.Ratio)); tmp = AddComponent(tmp, gearbox); break; case RetarderData.RetarderType.Secondary: tmp = AddComponent(tmp, gearbox); - tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap)); + tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap, data.Retarder.Ratio)); break; case RetarderData.RetarderType.None: tmp = AddComponent(tmp, gearbox); @@ -236,12 +236,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl switch (data.Retarder.Type) { case RetarderData.RetarderType.Primary: - tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap)); + tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap, data.Retarder.Ratio)); tmp = AddComponent(tmp, GetGearbox(container, data.GearboxData)); break; case RetarderData.RetarderType.Secondary: tmp = AddComponent(tmp, GetGearbox(container, data.GearboxData)); - tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap)); + tmp = AddComponent(tmp, new Retarder(container, data.Retarder.LossMap, data.Retarder.Ratio)); break; case RetarderData.RetarderType.None: tmp = AddComponent(tmp, GetGearbox(container, data.GearboxData)); diff --git a/VectoCore/Models/SimulationComponent/Impl/Retarder.cs b/VectoCore/Models/SimulationComponent/Impl/Retarder.cs index d9ebabdf24ae63f841fd6cf77da12a62ab2c9274..0011c9463dacd4b78be377e4671bcbf53b45f264 100644 --- a/VectoCore/Models/SimulationComponent/Impl/Retarder.cs +++ b/VectoCore/Models/SimulationComponent/Impl/Retarder.cs @@ -20,6 +20,7 @@ using System; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.Utils; @@ -32,10 +33,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected ITnOutPort NextComponent; private readonly RetarderLossMap _lossMap; + private double _ratio; - public Retarder(IVehicleContainer cockpit, RetarderLossMap lossMap) : base(cockpit) + public Retarder(IVehicleContainer cockpit, RetarderLossMap lossMap, double ratio) : base(cockpit) { _lossMap = lossMap; + _ratio = ratio; } protected override void DoWriteModalResults(IModalDataContainer container) @@ -68,7 +71,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return NextComponent.Request(absTime, dt, torque, null, dryRun); } var avgAngularSpeed = (PreviousState.InAngularVelocity + angularVelocity) / 2.0; - var retarderTorqueLoss = _lossMap.RetarderLoss(avgAngularSpeed); + var retarderTorqueLoss = + _lossMap.RetarderLoss(avgAngularSpeed * _ratio, DataBus.ExecutionMode != ExecutionMode.Declaration) / _ratio; CurrentState.SetState(torque + retarderTorqueLoss, angularVelocity, torque, angularVelocity); return NextComponent.Request(absTime, dt, torque + retarderTorqueLoss, angularVelocity, dryRun); @@ -76,7 +80,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity) { - var retarderTorqueLoss = _lossMap.RetarderLoss(angularVelocity); + var retarderTorqueLoss = + _lossMap.RetarderLoss(angularVelocity * _ratio, DataBus.ExecutionMode != ExecutionMode.Declaration) / _ratio; PreviousState.SetState(torque + retarderTorqueLoss, angularVelocity, torque, angularVelocity); return NextComponent.Initialize(torque + retarderTorqueLoss, angularVelocity); diff --git a/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs b/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs index 9b5bceeb239b3ca6f9776ef6d5390c61de42422c..fa3ca751c8323ec639b4baae4f9661d8a3fee4b3 100644 --- a/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs @@ -37,7 +37,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent { var vehicle = new VehicleContainer(); var retarderData = RetarderLossMap.ReadFromFile(RetarderLossMapFile); - var retarder = new Retarder(vehicle, retarderData); + var retarder = new Retarder(vehicle, retarderData, 1.0); var nextRequest = new MockTnOutPort();