From 889da87084a2b21d3b3886df8d708484addd396d Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Fri, 19 Feb 2016 12:34:33 +0100 Subject: [PATCH] clutch: if disengaged use engine speed as angular speed --- .../Models/SimulationComponent/Impl/Clutch.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs index 0e203fd500..e0ffe91dc5 100644 --- a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs +++ b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs @@ -55,9 +55,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected override void DoWriteModalResults(IModalDataContainer container) { - var avgAngularVelocity = (PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2.0; - container[ModalResultField.P_clutch_out] = CurrentState.OutTorque * avgAngularVelocity; - container[ModalResultField.P_clutch_loss] = (CurrentState.InTorque - CurrentState.OutTorque) * avgAngularVelocity; + if (PreviousState.InAngularVelocity == null || CurrentState.InAngularVelocity == null) { + container[ModalResultField.P_clutch_out] = 0.SI<Watt>(); + container[ModalResultField.P_clutch_loss] = 0.SI<Watt>(); + } else { + var avgAngularVelocity = (PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2.0; + container[ModalResultField.P_clutch_out] = CurrentState.OutTorque * avgAngularVelocity; + container[ModalResultField.P_clutch_loss] = (CurrentState.InTorque - CurrentState.OutTorque) * avgAngularVelocity; + } } protected override void DoCommitSimulationStep() @@ -87,6 +92,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var retval = IdleController.Request(absTime, dt, torque, null, dryRun); retval.ClutchPowerRequest = 0.SI<Watt>(); + CurrentState.SetState(0.SI<NewtonMeter>(), retval.EngineSpeed, torque, retval.EngineSpeed); return retval; } if (IdleController != null) { @@ -96,10 +102,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl PerSecond angularVelocityIn; AddClutchLoss(torque, angularVelocity, out torqueIn, out angularVelocityIn); - CurrentState.SetState(torqueIn, angularVelocityIn, torqueIn, angularVelocity); + CurrentState.SetState(torqueIn, angularVelocityIn, torque, angularVelocity); var retVal = NextComponent.Request(absTime, dt, torqueIn, angularVelocityIn, dryRun); - retVal.ClutchPowerRequest = torque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0; + + retVal.ClutchPowerRequest = torque * + ((PreviousState.OutAngularVelocity ?? 0.SI<PerSecond>()) + CurrentState.OutAngularVelocity) / 2.0; return retVal; } @@ -108,6 +116,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl NewtonMeter torqueIn; PerSecond engineSpeedIn; AddClutchLoss(torque, angularVelocity, out torqueIn, out engineSpeedIn); + PreviousState.SetState(torqueIn, angularVelocity, torque, angularVelocity); var retVal = NextComponent.Initialize(torqueIn, engineSpeedIn); retVal.ClutchPowerRequest = torque * angularVelocity; -- GitLab