From 7b1479d127eb0b9b1993db019ba2fdc5b6c755a4 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 13 Apr 2017 14:23:58 +0200 Subject: [PATCH] use more explicit condition to decide if PTO is active --- .../VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs | 2 +- .../VectoCore/Models/Simulation/Impl/VehicleContainer.cs | 5 +++++ .../Models/SimulationComponent/IDrivingCycleInfo.cs | 2 ++ .../SimulationComponent/Impl/DistanceBasedDrivingCycle.cs | 6 ++++++ .../SimulationComponent/Impl/IdleControllerSwitcher.cs | 7 +++---- .../SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs | 5 +++++ .../SimulationComponent/Impl/PowertrainDrivingCycle.cs | 5 +++++ VectoCore/VectoCoreTest/Utils/MockAuxiliaryDemand.cs | 5 +++-- VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs | 2 ++ 9 files changed, 32 insertions(+), 7 deletions(-) diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index a7c0d04161..fc29667638 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -269,7 +269,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl Constants.Auxiliaries.PowerPrefix + Constants.Auxiliaries.IDs.PTOTransmission); aux.Add(Constants.Auxiliaries.IDs.PTOConsumer, - n => container.CycleData.LeftSample.PTOActive ? null : data.PTO.LossMap.GetTorqueLoss(n) * n); + n => container.PTOActive ? null : data.PTO.LossMap.GetTorqueLoss(n) * n); container.ModalData.AddAuxiliary(Constants.Auxiliaries.IDs.PTOConsumer, Constants.Auxiliaries.PowerPrefix + Constants.Auxiliaries.IDs.PTOConsumer); } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index 4487d0eb16..cb1f4ecb75 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -406,6 +406,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl get { return DrivingCycle.CycleData; } } + public bool PTOActive + { + get { return DrivingCycle.PTOActive; } + } + public DrivingCycleData.DrivingCycleEntry CycleLookAhead(Meter distance) { return DrivingCycle.CycleLookAhead(distance); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/IDrivingCycleInfo.cs b/VectoCore/VectoCore/Models/SimulationComponent/IDrivingCycleInfo.cs index 5c5d33f124..3eea43638f 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/IDrivingCycleInfo.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/IDrivingCycleInfo.cs @@ -46,6 +46,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent /// </summary> CycleData CycleData { get; } + bool PTOActive { get; } + /// <summary> /// get a single driving-cycle entry at a certain distance ahead /// altitude is interpolated between sampling points, slope is averaged diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs index 81254a2372..44fef3bf3e 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs @@ -208,8 +208,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl case 3: CurrentState.WaitPhase++; IdleController.ActivateIdle(); + PTOActive = false; return Left.StoppingTime / 2; case 2: + PTOActive = true; IdleController.ActivatePTO(); return IdleController.GetNextCycleTime(); } @@ -223,6 +225,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl case 5: CurrentState.WaitPhase++; IdleController.ActivateIdle(); + PTOActive = false; return Constants.SimulationSettings.TargetTimeInterval; case 3: case 7: @@ -233,6 +236,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.WaitPhase++; return Left.StoppingTime / 2 - 2 * Constants.SimulationSettings.TargetTimeInterval; case 4: + PTOActive = true; IdleController.ActivatePTO(); return IdleController.GetNextCycleTime(); } @@ -455,6 +459,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } } + public bool PTOActive { get; private set; } + public DrivingCycleData.DrivingCycleEntry CycleLookAhead(Meter distance) { var absDistance = CurrentState.Distance + distance; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/IdleControllerSwitcher.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/IdleControllerSwitcher.cs index a6a415cba3..6682c6287a 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/IdleControllerSwitcher.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/IdleControllerSwitcher.cs @@ -32,6 +32,7 @@ using System; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.OutputData; @@ -65,8 +66,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public ITnOutPort RequestPort { - set - { + set { _idleController.RequestPort = value; _ptoController.RequestPort = value; } @@ -103,8 +103,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public Second Duration { - get - { + get { if (_ptoController != null) { return _ptoController.Duration; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs index 5789c105b0..948ab95cd8 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs @@ -307,6 +307,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } } + public bool PTOActive + { + get { return false; } + } + public DrivingCycleData.DrivingCycleEntry CycleLookAhead(Meter distance) { return new DrivingCycleData.DrivingCycleEntry(CycleIterator.RightSample); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs index bfb53ef499..4832ec5296 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs @@ -183,6 +183,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } } + public bool PTOActive + { + get { return true; } + } + public DrivingCycleData.DrivingCycleEntry CycleLookAhead(Meter distance) { return new DrivingCycleData.DrivingCycleEntry() { diff --git a/VectoCore/VectoCoreTest/Utils/MockAuxiliaryDemand.cs b/VectoCore/VectoCoreTest/Utils/MockAuxiliaryDemand.cs index b74dd43c86..194c38bb1d 100644 --- a/VectoCore/VectoCoreTest/Utils/MockAuxiliaryDemand.cs +++ b/VectoCore/VectoCoreTest/Utils/MockAuxiliaryDemand.cs @@ -63,8 +63,7 @@ namespace TUGraz.VectoCore.Tests.Utils public CycleData CycleData { - get - { + get { return new CycleData { AbsTime = 0.SI<Second>(), AbsDistance = 0.SI<Meter>(), @@ -74,6 +73,8 @@ namespace TUGraz.VectoCore.Tests.Utils } } + public bool PTOActive { get; set; } + public DrivingCycleData.DrivingCycleEntry CycleLookAhead(Meter distance) { return new DrivingCycleData.DrivingCycleEntry() { diff --git a/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs b/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs index 054e95e082..5b94e64f13 100644 --- a/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs +++ b/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs @@ -190,6 +190,8 @@ namespace TUGraz.VectoCore.Tests.Utils public VectoRun.Status RunStatus { get; set; } + public bool PTOActive { get; private set; } + public void AddComponent(VectoSimulationComponent component) { Components.Add(component); -- GitLab