diff --git a/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs b/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs index 9d01541e3a768124825432a29ae3d904560d5e66..7776f65385695791817291001d96432eb6140a5f 100644 --- a/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs +++ b/VectoCore/Models/SimulationComponent/Data/CombustionEngineData.cs @@ -68,17 +68,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public SI Displacement { - get { return _data.Body.Displacement.SI().Cubic.Centi.Meter.ConvertTo().Cubic.Meter.Value(); } - protected set { _data.Body.Displacement = (double) value.ConvertTo().Cubic.Centi.Meter; } + get { return _data.Body.Displacement.SI().Cubic.Centi.Meter.ConvertTo().Cubic.Meter.Value(); } + protected set { _data.Body.Displacement = (double) value.ConvertTo().Cubic.Centi.Meter; } } /// <summary> /// [rad/s] /// </summary> - public PerSecond IdleSpeed + public PerSecond IdleSpeed { - get { return _data.Body.IdleSpeed.RPMtoRad(); } - protected set { _data.Body.IdleSpeed = (double) value.ConvertTo().Rounds.Per.Minute; } + get { return _data.Body.IdleSpeed.RPMtoRad(); } + protected set { _data.Body.IdleSpeed = (double) value.ConvertTo().Rounds.Per.Minute; } } /// <summary> @@ -87,7 +87,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public SI Inertia { get { return _data.Body.Inertia.SI().Kilo.Gramm.Square.Meter; } - protected set { _data.Body.Inertia = (double) value.ConvertTo().Kilo.Gramm.Square.Meter; } + protected set { _data.Body.Inertia = (double) value.ConvertTo().Kilo.Gramm.Square.Meter; } } /// <summary> @@ -95,8 +95,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public SI WHTCUrban { - get { return _data.Body.WHTCUrban.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second.Value(); } - protected set { _data.Body.WHTCUrban = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; } + get { return _data.Body.WHTCUrban.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second.Value(); } + protected set { _data.Body.WHTCUrban = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; } } /// <summary> @@ -104,8 +104,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public SI WHTCRural { - get { return _data.Body.WHTCRural.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second.Value(); } - protected set { _data.Body.WHTCRural = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; } + get { return _data.Body.WHTCRural.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second.Value(); } + protected set { _data.Body.WHTCRural = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; } } /// <summary> @@ -113,10 +113,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public SI WHTCMotorway { - get { return _data.Body.WHTCMotorway.SI().Gramm.Per.Kilo.Watt.Hour.To().Kilo.Gramm.Per.Watt.Second.Value(); } - return - _data.Body.WHTCMotorway.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second.Value(); - protected set { _data.Body.WHTCMotorway = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; } + get { return _data.Body.WHTCMotorway.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().Kilo.Gramm.Per.Watt.Second.Value(); } + protected set { _data.Body.WHTCMotorway = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; } } [DataMember] diff --git a/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs b/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs index f27ff9bb425571e519bda435e38f7e250bef9977..acbcdf1f4e762ed500a13644d4e45cb9e8ffc928 100644 --- a/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs +++ b/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs @@ -275,10 +275,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine #endregion - private Tuple<RadianPerSecond, Watt> FindMaxPower(FullLoadCurveEntry p1, FullLoadCurveEntry p2) + private Tuple<PerSecond, Watt> FindMaxPower(FullLoadCurveEntry p1, FullLoadCurveEntry p2) { if (p1.EngineSpeed == p2.EngineSpeed) { - return new Tuple<RadianPerSecond, Watt>(p1.EngineSpeed, Formulas.TorqueToPower(p1.TorqueFullLoad, p1.EngineSpeed)); + return new Tuple<PerSecond, Watt>(p1.EngineSpeed, Formulas.TorqueToPower(p1.TorqueFullLoad, p1.EngineSpeed)); } if (p2.EngineSpeed < p1.EngineSpeed) { var tmp = p1; @@ -289,24 +289,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine var k = (p2.TorqueFullLoad - p1.TorqueFullLoad) / (p2.EngineSpeed - p1.EngineSpeed); var d = p2.TorqueFullLoad - k * p2.EngineSpeed; if (k == 0.0.SI()) { - return new Tuple<RadianPerSecond, Watt>(p2.EngineSpeed, Formulas.TorqueToPower(p2.TorqueFullLoad, p2.EngineSpeed)); + return new Tuple<PerSecond, Watt>(p2.EngineSpeed, Formulas.TorqueToPower(p2.TorqueFullLoad, p2.EngineSpeed)); } - var engineSpeedMaxPower = (-1 * d / (2 * k)).Radian.To<RadianPerSecond>(); + var engineSpeedMaxPower = (-1 * d / (2 * k)).Cast<PerSecond>(); if (engineSpeedMaxPower < p1.EngineSpeed || engineSpeedMaxPower > p2.EngineSpeed) { if (k > 0) { - return new Tuple<RadianPerSecond, Watt>(p2.EngineSpeed, Formulas.TorqueToPower(p2.TorqueFullLoad, p2.EngineSpeed)); + return new Tuple<PerSecond, Watt>(p2.EngineSpeed, Formulas.TorqueToPower(p2.TorqueFullLoad, p2.EngineSpeed)); } - return new Tuple<RadianPerSecond, Watt>(p1.EngineSpeed, Formulas.TorqueToPower(p1.TorqueFullLoad, p1.EngineSpeed)); + return new Tuple<PerSecond, Watt>(p1.EngineSpeed, Formulas.TorqueToPower(p1.TorqueFullLoad, p1.EngineSpeed)); } //return null; var engineTorqueMaxPower = FullLoadStationaryTorque(engineSpeedMaxPower); - return new Tuple<RadianPerSecond, Watt>(engineSpeedMaxPower, + return new Tuple<PerSecond, Watt>(engineSpeedMaxPower, Formulas.TorqueToPower(engineTorqueMaxPower, engineSpeedMaxPower)); } - public RadianPerSecond RatedSpeed() + public PerSecond RatedSpeed() { - var max = new Tuple<RadianPerSecond, Watt>(new RadianPerSecond(), new Watt()); + var max = new Tuple<PerSecond, Watt>(new PerSecond(), new Watt()); for (var idx = 1; idx < _entries.Count; idx++) { var currentMax = FindMaxPower(_entries[idx - 1], _entries[idx]); if (currentMax.Item2 > max.Item2) { diff --git a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs index b53dccb76436b512c42e00e23bc9a09e8b92832a..0d28e8892a52ecc8bac7663765bce0e21e509180 100644 --- a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs +++ b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs @@ -9,8 +9,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { public class Clutch : VectoSimulationComponent, IClutch, ITnOutPort, ITnInPort { - private readonly RadianPerSecond _idleSpeed; - private readonly RadianPerSecond _ratedSpeed; + private readonly PerSecond _idleSpeed; + private readonly PerSecond _ratedSpeed; private ITnOutPort _nextComponent; private const double ClutchEff = 1; private const double CluchNormSpeed = 0.03; @@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return this; } - public IResponse Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, RadianPerSecond angularVelocity) + public IResponse Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, PerSecond angularVelocity) { var torqueIn = torque; var engineSpeedIn = angularVelocity; @@ -66,12 +66,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (engineSpeedNorm < CluchNormSpeed) { _clutchState = ClutchState.ClutchSlipping; - var engineSpeed0 = new RadianPerSecond(Math.Max((double) _idleSpeed, (double) angularVelocity)); + var engineSpeed0 = VectoMath.Max(_idleSpeed, angularVelocity); var clutchSpeedNorm = CluchNormSpeed / ((_idleSpeed + CluchNormSpeed * (_ratedSpeed - _idleSpeed)) / _ratedSpeed); engineSpeedIn = ((clutchSpeedNorm * engineSpeed0 / _ratedSpeed) * (_ratedSpeed - _idleSpeed) + _idleSpeed).Radian - .To<RadianPerSecond>(); + .Cast<PerSecond>(); torqueIn = Formulas.PowerToTorque(Formulas.TorqueToPower(torque, angularVelocity) / ClutchEff, engineSpeedIn); } else { diff --git a/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs b/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs index 20c9d845432a6dd180e3c77eee6e5d8608ded0d8..948f42e378784a6f39477f2690410d2e328aab5f 100644 --- a/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs @@ -9,49 +9,47 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Tests.Models.SimulationComponent { - [TestClass] - public class ClutchTest - { - private const string CoachEngine = @"TestData\Components\24t Coach.veng"; - - [TestMethod] - public void TestClutch() - { - var vehicle = new VehicleContainer(); - var engineData = CombustionEngineData.ReadFromFile(CoachEngine); + [TestClass] + public class ClutchTest + { + private const string CoachEngine = @"TestData\Components\24t Coach.veng"; + + [TestMethod] + public void TestClutch() + { + var vehicle = new VehicleContainer(); + var engineData = CombustionEngineData.ReadFromFile(CoachEngine); var gearbox = new DummyGearbox(vehicle); - var clutch = new Clutch(vehicle, engineData); + var clutch = new Clutch(vehicle, engineData); - ITnInPort inPort = clutch.InShaft(); - var outPort = new MockTnOutPort(); + var inPort = clutch.InShaft(); + var outPort = new MockTnOutPort(); - inPort.Connect(outPort); + inPort.Connect(outPort); - ITnOutPort clutchOutPort = clutch.OutShaft(); + var clutchOutPort = clutch.OutShaft(); //Test - Clutch slipping - gearbox.CurrentGear = 1; - clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), new RadianPerSecond(30.0)); + gearbox.CurrentGear = 1; + clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 30.SI<PerSecond>()); - Assert.AreEqual(48.293649, (double)outPort.Torque, 0.001); - Assert.AreEqual(62.119969, (double)outPort.AngularFrequency, 0.001); + Assert.AreEqual(48.293649, (double) outPort.Torque, 0.001); + Assert.AreEqual(62.119969, (double) outPort.AngularVelocity, 0.001); //Test - Clutch opened gearbox.CurrentGear = 0; - clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), new RadianPerSecond(30.0)); + clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 30.SI<PerSecond>()); - Assert.AreEqual(0, (double)outPort.Torque, 0.001); - Assert.AreEqual((double)engineData.IdleSpeed, (double)outPort.AngularFrequency, 0.001); + Assert.AreEqual(0, (double) outPort.Torque, 0.001); + Assert.AreEqual((double) engineData.IdleSpeed, (double) outPort.AngularVelocity, 0.001); //Test - Clutch closed gearbox.CurrentGear = 1; - clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), new RadianPerSecond(80.0)); - - Assert.AreEqual(100.0, (double)outPort.Torque, 0.001); - Assert.AreEqual(80.0, (double)outPort.AngularFrequency, 0.001); - + clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 80.SI<PerSecond>()); - } - } -} + Assert.AreEqual(100.0, (double) outPort.Torque, 0.001); + Assert.AreEqual(80.0, (double) outPort.AngularVelocity, 0.001); + } + } +} \ No newline at end of file diff --git a/VectoCoreTest/Utils/DummyGearbox.cs b/VectoCoreTest/Utils/DummyGearbox.cs index c40b8f055c8744ebda41b7aab05aee057a788fc1..fd22e802a5d16901885b302aa53e7a6fbb0ff039 100644 --- a/VectoCoreTest/Utils/DummyGearbox.cs +++ b/VectoCoreTest/Utils/DummyGearbox.cs @@ -36,7 +36,7 @@ namespace TUGraz.VectoCore.Tests.Utils _outPort = other; } - public IResponse Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, RadianPerSecond engineSpeed) + public IResponse Request(TimeSpan absTime, TimeSpan dt, NewtonMeter torque, PerSecond engineSpeed) { throw new NotImplementedException(); }