Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 3109b72d authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

merge with current development branch. adapted use of SI Units.

parent 5959fd1d
No related branches found
No related tags found
No related merge requests found
...@@ -113,9 +113,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -113,9 +113,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
/// </summary> /// </summary>
public SI WHTCMotorway public SI WHTCMotorway
{ {
get { return _data.Body.WHTCMotorway.SI().Gramm.Per.Kilo.Watt.Hour.To().Kilo.Gramm.Per.Watt.Second.Value(); } get { return _data.Body.WHTCMotorway.SI().Gramm.Per.Kilo.Watt.Hour.ConvertTo().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; } protected set { _data.Body.WHTCMotorway = (double) value.ConvertTo().Gramm.Per.Kilo.Watt.Hour; }
} }
......
...@@ -275,10 +275,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine ...@@ -275,10 +275,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
#endregion #endregion
private Tuple<RadianPerSecond, Watt> FindMaxPower(FullLoadCurveEntry p1, FullLoadCurveEntry p2) private Tuple<PerSecond, Watt> FindMaxPower(FullLoadCurveEntry p1, FullLoadCurveEntry p2)
{ {
if (p1.EngineSpeed == p2.EngineSpeed) { 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) { if (p2.EngineSpeed < p1.EngineSpeed) {
var tmp = p1; var tmp = p1;
...@@ -289,24 +289,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine ...@@ -289,24 +289,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
var k = (p2.TorqueFullLoad - p1.TorqueFullLoad) / (p2.EngineSpeed - p1.EngineSpeed); var k = (p2.TorqueFullLoad - p1.TorqueFullLoad) / (p2.EngineSpeed - p1.EngineSpeed);
var d = p2.TorqueFullLoad - k * p2.EngineSpeed; var d = p2.TorqueFullLoad - k * p2.EngineSpeed;
if (k == 0.0.SI()) { 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 (engineSpeedMaxPower < p1.EngineSpeed || engineSpeedMaxPower > p2.EngineSpeed) {
if (k > 0) { 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; //return null;
var engineTorqueMaxPower = FullLoadStationaryTorque(engineSpeedMaxPower); var engineTorqueMaxPower = FullLoadStationaryTorque(engineSpeedMaxPower);
return new Tuple<RadianPerSecond, Watt>(engineSpeedMaxPower, return new Tuple<PerSecond, Watt>(engineSpeedMaxPower,
Formulas.TorqueToPower(engineTorqueMaxPower, 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++) { for (var idx = 1; idx < _entries.Count; idx++) {
var currentMax = FindMaxPower(_entries[idx - 1], _entries[idx]); var currentMax = FindMaxPower(_entries[idx - 1], _entries[idx]);
if (currentMax.Item2 > max.Item2) { if (currentMax.Item2 > max.Item2) {
......
...@@ -9,8 +9,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -9,8 +9,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{ {
public class Clutch : VectoSimulationComponent, IClutch, ITnOutPort, ITnInPort public class Clutch : VectoSimulationComponent, IClutch, ITnOutPort, ITnInPort
{ {
private readonly RadianPerSecond _idleSpeed; private readonly PerSecond _idleSpeed;
private readonly RadianPerSecond _ratedSpeed; private readonly PerSecond _ratedSpeed;
private ITnOutPort _nextComponent; private ITnOutPort _nextComponent;
private const double ClutchEff = 1; private const double ClutchEff = 1;
private const double CluchNormSpeed = 0.03; private const double CluchNormSpeed = 0.03;
...@@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
return this; 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 torqueIn = torque;
var engineSpeedIn = angularVelocity; var engineSpeedIn = angularVelocity;
...@@ -66,12 +66,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl ...@@ -66,12 +66,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
if (engineSpeedNorm < CluchNormSpeed) { if (engineSpeedNorm < CluchNormSpeed) {
_clutchState = ClutchState.ClutchSlipping; _clutchState = ClutchState.ClutchSlipping;
var engineSpeed0 = new RadianPerSecond(Math.Max((double) _idleSpeed, (double) angularVelocity)); var engineSpeed0 = VectoMath.Max(_idleSpeed, angularVelocity);
var clutchSpeedNorm = CluchNormSpeed / var clutchSpeedNorm = CluchNormSpeed /
((_idleSpeed + CluchNormSpeed * (_ratedSpeed - _idleSpeed)) / _ratedSpeed); ((_idleSpeed + CluchNormSpeed * (_ratedSpeed - _idleSpeed)) / _ratedSpeed);
engineSpeedIn = engineSpeedIn =
((clutchSpeedNorm * engineSpeed0 / _ratedSpeed) * (_ratedSpeed - _idleSpeed) + _idleSpeed).Radian ((clutchSpeedNorm * engineSpeed0 / _ratedSpeed) * (_ratedSpeed - _idleSpeed) + _idleSpeed).Radian
.To<RadianPerSecond>(); .Cast<PerSecond>();
torqueIn = Formulas.PowerToTorque(Formulas.TorqueToPower(torque, angularVelocity) / ClutchEff, engineSpeedIn); torqueIn = Formulas.PowerToTorque(Formulas.TorqueToPower(torque, angularVelocity) / ClutchEff, engineSpeedIn);
} else { } else {
......
...@@ -23,35 +23,33 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent ...@@ -23,35 +23,33 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var clutch = new Clutch(vehicle, engineData); var clutch = new Clutch(vehicle, engineData);
ITnInPort inPort = clutch.InShaft(); var inPort = clutch.InShaft();
var outPort = new MockTnOutPort(); var outPort = new MockTnOutPort();
inPort.Connect(outPort); inPort.Connect(outPort);
ITnOutPort clutchOutPort = clutch.OutShaft(); var clutchOutPort = clutch.OutShaft();
//Test - Clutch slipping //Test - Clutch slipping
gearbox.CurrentGear = 1; gearbox.CurrentGear = 1;
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(48.293649, (double) outPort.Torque, 0.001); Assert.AreEqual(48.293649, (double) outPort.Torque, 0.001);
Assert.AreEqual(62.119969, (double)outPort.AngularFrequency, 0.001); Assert.AreEqual(62.119969, (double) outPort.AngularVelocity, 0.001);
//Test - Clutch opened //Test - Clutch opened
gearbox.CurrentGear = 0; 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(0, (double) outPort.Torque, 0.001);
Assert.AreEqual((double)engineData.IdleSpeed, (double)outPort.AngularFrequency, 0.001); Assert.AreEqual((double) engineData.IdleSpeed, (double) outPort.AngularVelocity, 0.001);
//Test - Clutch closed //Test - Clutch closed
gearbox.CurrentGear = 1; gearbox.CurrentGear = 1;
clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), new RadianPerSecond(80.0)); clutchOutPort.Request(new TimeSpan(), new TimeSpan(), 100.SI<NewtonMeter>(), 80.SI<PerSecond>());
Assert.AreEqual(100.0, (double) outPort.Torque, 0.001); Assert.AreEqual(100.0, (double) outPort.Torque, 0.001);
Assert.AreEqual(80.0, (double)outPort.AngularFrequency, 0.001); Assert.AreEqual(80.0, (double) outPort.AngularVelocity, 0.001);
} }
} }
} }
\ No newline at end of file
...@@ -36,7 +36,7 @@ namespace TUGraz.VectoCore.Tests.Utils ...@@ -36,7 +36,7 @@ namespace TUGraz.VectoCore.Tests.Utils
_outPort = other; _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(); throw new NotImplementedException();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment