Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 37b0e754 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

refactored GearboxData

parent 6e363997
No related branches found
No related tags found
No related merge requests found
Showing with 96 additions and 93 deletions
......@@ -195,7 +195,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
: null;
var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(fullLoad, engine);
retVal._gearData.Add(i, new GearData() {
retVal.Gears.Add(i, new GearData() {
LossMap = lossMap,
ShiftPolygon = shiftPolygon,
Ratio = gearSettings.Ratio,
......
......@@ -185,7 +185,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
if (i == 0) {
retVal.AxleGearData = gear;
} else {
retVal._gearData.Add(i, gear);
retVal.Gears.Add(i, gear);
}
}
return retVal;
......
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using Common.Logging;
using TUGraz.VectoCore.Exceptions;
using TUGraz.VectoCore.Utils;
......@@ -12,8 +10,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
{
public class ShiftPolygon : SimulationComponentData
{
private List<ShiftPolygonEntry> _upshiftPolygon;
private List<ShiftPolygonEntry> _downshifPolygon;
private readonly List<ShiftPolygonEntry> _upshiftPolygon;
private readonly List<ShiftPolygonEntry> _downshifPolygon;
internal ShiftPolygon(List<ShiftPolygonEntry> downshift, List<ShiftPolygonEntry> upshift)
{
......
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using TUGraz.VectoCore.Exceptions;
using TUGraz.VectoCore.FileIO;
using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data
{
/// <summary>
/// Class for Gearbox Data. Gears can be accessed via Gears-Dictionary and range from 1 upwards.
/// </summary>
/// <remarks>The Axle Gear has its own Property "AxleGearData" and is *not included* in the Gears-Dictionary.</remarks>
[DataContract]
public class GearboxData : SimulationComponentData
{
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum GearboxType
{
MT, // Manual Transmission
......@@ -26,29 +26,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
public GearData AxleGearData { get; internal set; }
internal readonly Dictionary<uint, GearData> _gearData = new Dictionary<uint, GearData>();
public int GearsCount()
{
return _gearData.Count;
}
public GearData this[uint i]
{
get { return _gearData[i]; }
}
public readonly Dictionary<uint, GearData> Gears = new Dictionary<uint, GearData>();
public GearboxType Type { get; internal set; }
/// <summary>
/// kgm^2
/// </summary>
public KilogramSquareMeter Inertia { get; internal set; }
/// <summary>
/// [s]
/// </summary>
public Second TractionInterruption { get; internal set; }
/// <summary>
......@@ -61,9 +44,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
/// </summary>
public bool SkipGears { get; internal set; }
/// <summary>
/// [s]
/// </summary>
public Second ShiftTime { get; internal set; }
public bool EarlyShiftUp { get; internal set; }
......@@ -73,15 +53,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
/// </summary>
public double StartTorqueReserve { get; internal set; }
/// <summary>
/// [m/s]
/// </summary>
public MeterPerSecond StartSpeed { get; internal set; }
/// <summary>
/// [m/s^2]
/// </summary>
public SI StartAcceleration { get; internal set; }
public MeterPerSquareSecond StartAcceleration { get; internal set; }
public bool HasTorqueConverter { get; internal set; }
}
......
using System;
using System.Runtime.InteropServices;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.Simulation;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.Simulation.DataBus;
......@@ -20,7 +18,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
public Gearbox(IVehicleContainer container, GearboxData gearboxData) : base(container)
{
Data = gearboxData;
_gear = 0;
_gear = 1;
}
#region ITnInProvider
......@@ -54,7 +52,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
private GearData CurrentGear
{
get { return Data[_gear]; }
get { return Data.Gears[_gear]; }
}
......@@ -74,7 +72,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
public IResponse Initialize(NewtonMeter torque, PerSecond engineSpeed)
{
_gear = 0;
_gear = 1;
return Next.Initialize(torque, engineSpeed);
}
......
using System;
using System.IO;
using System.IO;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TUGraz.VectoCore.FileIO.Reader.Impl;
......@@ -59,24 +58,24 @@ namespace TUGraz.VectoCore.Tests.FileIO
Assert.AreEqual(3.7890, runData.EngineData.Inertia.Value());
var downshiftSpeeds = new double[] { 600, 600, 1310.6673 };
var downshiftTorque = new double[] { 0, 266.85346, 899 };
var downshiftSpeeds = new[] { 600, 600, 1310.6673 };
var downshiftTorque = new[] { 0, 266.85346, 899 };
Assert.AreEqual(downshiftSpeeds.Length, runData.GearboxData[1].ShiftPolygon.Downshift.Count);
Assert.AreEqual(downshiftSpeeds.Length, runData.GearboxData.Gears[1].ShiftPolygon.Downshift.Count);
for (var i = 0; i < downshiftSpeeds.Length; i++) {
Assert.AreEqual(downshiftSpeeds[i].RPMtoRad().Value(),
runData.GearboxData[1].ShiftPolygon.Downshift[i].AngularSpeed.Value(), Tolerance);
Assert.AreEqual(downshiftTorque[i], runData.GearboxData[1].ShiftPolygon.Downshift[i].Torque.Value(), Tolerance);
runData.GearboxData.Gears[1].ShiftPolygon.Downshift[i].AngularSpeed.Value(), Tolerance);
Assert.AreEqual(downshiftTorque[i], runData.GearboxData.Gears[1].ShiftPolygon.Downshift[i].Torque.Value(), Tolerance);
}
var upshiftSpeed = new double[] { 1531.230044, 1531.230044, 2420.505793661 };
var upshiftTorque = new double[] { 0, 459.8588, 899 };
var upshiftSpeed = new[] { 1531.230044, 1531.230044, 2420.505793661 };
var upshiftTorque = new[] { 0, 459.8588, 899 };
Assert.AreEqual(upshiftSpeed.Length, runData.GearboxData[1].ShiftPolygon.Downshift.Count);
Assert.AreEqual(upshiftSpeed.Length, runData.GearboxData.Gears[1].ShiftPolygon.Downshift.Count);
for (var i = 0; i < downshiftSpeeds.Length; i++) {
Assert.AreEqual(upshiftSpeed[i].RPMtoRad().Value(),
runData.GearboxData[1].ShiftPolygon.Upshift[i].AngularSpeed.Value(), Tolerance);
Assert.AreEqual(upshiftTorque[i], runData.GearboxData[1].ShiftPolygon.Upshift[i].Torque.Value(), Tolerance);
runData.GearboxData.Gears[1].ShiftPolygon.Upshift[i].AngularSpeed.Value(), Tolerance);
Assert.AreEqual(upshiftTorque[i], runData.GearboxData.Gears[1].ShiftPolygon.Upshift[i].Torque.Value(), Tolerance);
}
//Assert.AreEqual();
......
......@@ -2,7 +2,6 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TUGraz.VectoCore.FileIO.Reader.Impl;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
using TUGraz.VectoCore.Tests.Utils;
using TUGraz.VectoCore.Utils;
......@@ -21,7 +20,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
{
var vehicle = new VehicleContainer();
var gbxData = EngineeringModeSimulationDataReader.CreateGearboxDataFromFile(GearboxDataFile);
//GearData gearData = new GearData();
//Gears gearData = new Gears();
var axleGear = new AxleGear(vehicle, gbxData.AxleGearData);
var mockPort = new MockTnOutPort();
......@@ -46,9 +45,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
var loss = 9401.44062.SI<Watt>();
Assert.AreEqual(Formulas.PowerToTorque(PvD + loss, angSpeed * gbxData.AxleGearData.Ratio).Value(),
mockPort.Torque.Value(), 0.01,
"Torque Engine Side")
;
mockPort.Torque.Value(), 0.01, "Torque Engine Side");
Assert.AreEqual((angSpeed * gbxData.AxleGearData.Ratio).Value(), mockPort.AngularVelocity.Value(), 0.01,
"Torque Engine Side");
}
......@@ -57,5 +54,54 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
{
return ((60 * v) / (2 * r * Math.PI / 1000)).RPMtoRad();
}
[TestMethod]
public void Gearbox_Request()
{
var container = new VehicleContainer();
var gearboxData = EngineeringModeSimulationDataReader.CreateGearboxDataFromFile(GearboxDataFile);
var gearbox = new Gearbox(container, gearboxData);
var port = new MockTnOutPort();
gearbox.InPort().Connect(port);
var absTime = 0.SI<Second>();
var dt = 0.5.SI<Second>();
var torque = 500.SI<NewtonMeter>();
var angularVelocity = 1400.RPMtoRad();
var ratio = 1; // todo: set correct ratio
var expectedN = angularVelocity * ratio;
var expectedT = 500.SI<NewtonMeter>(); //todo: set correct value
gearbox.OutPort().Request(absTime, dt, torque, angularVelocity);
AssertHelper.AreRelativeEqual(absTime, port.AbsTime);
AssertHelper.AreRelativeEqual(dt, port.Dt);
AssertHelper.AreRelativeEqual(expectedN, port.AngularVelocity);
AssertHelper.AreRelativeEqual(expectedT, port.Torque);
// todo check for different ranges and gears
// todo set initial gear
Assert.Inconclusive();
}
[TestMethod]
public void Gearbox_ShiftUp()
{
Assert.Inconclusive();
}
[TestMethod]
public void Gearbox_ShiftDown()
{
Assert.Inconclusive();
}
[TestMethod]
public void Gearbox_Overload()
{
Assert.Inconclusive();
}
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Tests.Utils;
namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
{
......@@ -11,25 +12,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
[TestMethod]
public void TestParseAuxiliaryType()
{
var aux1 = AuxiliaryTypeHelper.Parse("Fan");
Assert.AreEqual(AuxiliaryType.Fan, aux1);
var aux2 = AuxiliaryTypeHelper.Parse("Steering pump");
Assert.AreEqual(AuxiliaryType.SteeringPump, aux2);
var aux3 = AuxiliaryTypeHelper.Parse("Electric System");
Assert.AreEqual(AuxiliaryType.ElectricSystem, aux3);
var aux4 = AuxiliaryTypeHelper.Parse("HVAC");
Assert.AreEqual(AuxiliaryType.HeatingVentilationAirCondition, aux4);
var aux5 = AuxiliaryTypeHelper.Parse("Pneumatic System");
Assert.AreEqual(AuxiliaryType.PneumaticSystem, aux5);
try {
var aux6 = AuxiliaryTypeHelper.Parse("Foo Bar Blupp");
Assert.Fail();
} catch (ArgumentOutOfRangeException e) {}
Assert.AreEqual(AuxiliaryType.Fan, AuxiliaryTypeHelper.Parse("Fan"));
Assert.AreEqual(AuxiliaryType.SteeringPump, AuxiliaryTypeHelper.Parse("Steering pump"));
Assert.AreEqual(AuxiliaryType.ElectricSystem, AuxiliaryTypeHelper.Parse("Electric System"));
Assert.AreEqual(AuxiliaryType.HeatingVentilationAirCondition, AuxiliaryTypeHelper.Parse("HVAC"));
Assert.AreEqual(AuxiliaryType.PneumaticSystem, AuxiliaryTypeHelper.Parse("Pneumatic System"));
AssertHelper.Exception<ArgumentOutOfRangeException>(() => { AuxiliaryTypeHelper.Parse("Foo Bar Blupp"); });
}
[TestMethod]
......
......@@ -22,18 +22,18 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
Assert.AreEqual(GearboxData.GearboxType.AMT, gbxData.Type);
Assert.AreEqual(1.0, gbxData.TractionInterruption.Value(), 0.0001);
Assert.AreEqual(8, gbxData.GearsCount());
Assert.AreEqual(8, gbxData.Gears.Count);
Assert.AreEqual(3.240355, gbxData.AxleGearData.Ratio, 0.0001);
Assert.AreEqual(1.0, gbxData[7].Ratio, 0.0001);
Assert.AreEqual(1.0, gbxData.Gears[7].Ratio, 0.0001);
Assert.AreEqual(-400, gbxData[1].ShiftPolygon.Downshift[0].Torque.Value(), 0.0001);
Assert.AreEqual(560.RPMtoRad().Value(), gbxData[1].ShiftPolygon.Downshift[0].AngularSpeed.Value(), 0.0001);
Assert.AreEqual(1289.RPMtoRad().Value(), gbxData[1].ShiftPolygon.Upshift[0].AngularSpeed.Value(), 0.0001);
Assert.AreEqual(-400, gbxData.Gears[1].ShiftPolygon.Downshift[0].Torque.Value(), 0.0001);
Assert.AreEqual(560.RPMtoRad().Value(), gbxData.Gears[1].ShiftPolygon.Downshift[0].AngularSpeed.Value(), 0.0001);
Assert.AreEqual(1289.RPMtoRad().Value(), gbxData.Gears[1].ShiftPolygon.Upshift[0].AngularSpeed.Value(), 0.0001);
Assert.AreEqual(200.RPMtoRad().Value(), gbxData[1].LossMap[15].InputSpeed.Value(), 0.0001);
Assert.AreEqual(-350, gbxData[1].LossMap[15].InputTorque.Value(), 0.0001);
Assert.AreEqual(13.072, gbxData[1].LossMap[15].TorqueLoss.Value(), 0.0001);
Assert.AreEqual(200.RPMtoRad().Value(), gbxData.Gears[1].LossMap[15].InputSpeed.Value(), 0.0001);
Assert.AreEqual(-350, gbxData.Gears[1].LossMap[15].InputTorque.Value(), 0.0001);
Assert.AreEqual(13.072, gbxData.Gears[1].LossMap[15].TorqueLoss.Value(), 0.0001);
}
[TestMethod]
......
......@@ -31,7 +31,7 @@
<rules>
<logger name="TUGraz.VectoCore.Models.SimulationComponent.Impl.Vehicle" minlevel="Info" writeTo="ConsoleLogger" />
<logger name="TUGraz.VectoCore.Models.SimulationComponent.Impl.Clutch" minlevel="Info" writeTo="ConsoleLogger" />
<logger name="TUGraz.VectoCore.Models.SimulationComponent.Impl.AxleGear" minlevel="Info" writeTo="ConsoleLogger" />
<logger name="TUGraz.VectoCore.Models.SimulationComponent.Impl.AxleGearData" minlevel="Info" writeTo="ConsoleLogger" />
<logger name="TUGraz.VectoCore.Models.SimulationComponent.Impl.Driver" minlevel="Debug" writeTo="ConsoleLogger" />
</rules>
</nlog>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment