diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs index 32dd75df726cdfbc6e170d08b6f91b119a3d9ae2..2e6111328d9f76c41556d9ac0f5b08632626afc4 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs @@ -235,31 +235,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return retVal; } - protected internal NewtonMeter ComputeShiftLosses(Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity) - { - var torqueGbxIn = outTorque / ModelData.Gears[Gear].Ratio; - var deltaEngineSpeed = DataBus.EngineSpeed - outAngularVelocity * ModelData.Gears[Gear].Ratio; - var deltaClutchSpeed = (DataBus.EngineSpeed - PreviousState.OutAngularVelocity * ModelData.Gears[Gear].Ratio) / 2; - var torqueInertia = EngineInertia * deltaEngineSpeed / dt; - var averageEngineSpeed = (DataBus.EngineSpeed + outAngularVelocity * ModelData.Gears[Gear].Ratio) / 2; - var torqueLoss = (torqueGbxIn + torqueInertia) * deltaClutchSpeed / averageEngineSpeed; - - return torqueLoss.Abs(); - } - - private bool ConsiderShiftLosses(GearInfo nextGear, NewtonMeter torqueOut) - { - if (torqueOut.IsSmaller(0)) { - return false; - } - if (nextGear.Gear == 0) { - return false; - } - if (ModelData.Gears[2].HasTorqueConverter) { - return false; // nextGear.TorqueConverterLocked || nextGear.Gear == 2; - } - return nextGear.TorqueConverterLocked; - } private IResponse RequestEngaged(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs index f04fa7759cc2d74a8f1d39671bba12ffbd744ec6..3c5065a01872a9d6a3d00ba78493219e6e4f26d5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs @@ -42,8 +42,8 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { public abstract class AbstractGearbox<TStateType> : - StatefulProviderComponent<TStateType, ITnOutPort, ITnInPort, ITnOutPort>, ITnOutPort, ITnInPort, IGearbox, - IClutchInfo + StatefulProviderComponent<TStateType, ITnOutPort, ITnInPort, ITnOutPort>, ITnOutPort, ITnInPort, IGearbox, + IClutchInfo where TStateType : GearboxState, new() { /// <summary> @@ -125,6 +125,35 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl #endregion public abstract bool ClutchClosed(Second absTime); + + protected bool ConsiderShiftLosses(GearInfo nextGear, NewtonMeter torqueOut) + { + if (ModelData.Type.ManualTransmission()) { + return false; + } + if (torqueOut.IsSmaller(0)) { + return false; + } + if (nextGear.Gear == 0) { + return false; + } + if (ModelData.Gears[2].HasTorqueConverter) { + return false; // nextGear.TorqueConverterLocked || nextGear.Gear == 2; + } + return nextGear.TorqueConverterLocked; + } + + protected internal NewtonMeter ComputeShiftLosses(Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity) + { + var torqueGbxIn = outTorque / ModelData.Gears[Gear].Ratio; + var deltaEngineSpeed = DataBus.EngineSpeed - outAngularVelocity * ModelData.Gears[Gear].Ratio; + var deltaClutchSpeed = (DataBus.EngineSpeed - PreviousState.OutAngularVelocity * ModelData.Gears[Gear].Ratio) / 2; + var torqueInertia = EngineInertia * deltaEngineSpeed / dt; + var averageEngineSpeed = (DataBus.EngineSpeed + outAngularVelocity * ModelData.Gears[Gear].Ratio) / 2; + var torqueLoss = (torqueGbxIn + torqueInertia) * deltaClutchSpeed / averageEngineSpeed; + + return torqueLoss.Abs(); + } } public class GearboxState : SimpleComponentState