diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index a759363b83c16d472ef524f1941d43d46c5426f3..e6716a6f60ad29c4025df33483f8bf6199ce98fe 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -428,6 +428,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl //} var vehicle = new Vehicle(container, data.VehicleData, data.AirdragData); + //var dummyDriver = new Driver(container, data.DriverData, new DefaultDriverStrategy(container)); var powertrain = vehicle .AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia)) .AddComponent(new Brakes(container)) @@ -592,6 +593,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return new Gearbox(container, strategy, runData); case GearboxType.ATPowerSplit: case GearboxType.ATSerial: + new ATClutchInfo(container); return new ATGearbox(container, strategy, runData); default: throw new ArgumentOutOfRangeException("Unknown Gearbox Type", runData.GearboxData.Type.ToString()); @@ -640,9 +642,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private static IGearbox GetSimpleGearbox(IVehicleContainer container, VectoRunData runData) { - return runData.GearboxData.Type.AutomaticTransmission() - ? (IGearbox)new ATGearbox(container, null, runData) - : new Gearbox(container, null, runData); + if (runData.GearboxData.Type.AutomaticTransmission()) { + new ATClutchInfo(container); + return new ATGearbox(container, null, runData); + } + return new Gearbox(container, null, runData); } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index 8a90391b03a8339b15d9167c2e4003dbdca16ea0..0979903a5d7dfa03e06cf025d67fdf08fc608339 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -55,22 +55,22 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private List<Tuple<int, VectoSimulationComponent>> _components = new List<Tuple<int, VectoSimulationComponent>>(); - public IEngineInfo EngineInfo { get; protected internal set; } - public IEngineControl EngineCtl { get; protected set; } - public IGearboxInfo GearboxInfo { get; protected set; } - public IGearboxControl GearboxCtl { get; protected set; } - public IAxlegearInfo AxlegearInfo { get; protected set; } - public IVehicleInfo VehicleInfo { get; protected set; } - public IBrakes Brakes { get; protected set; } - public IWheelsInfo WheelsInfo { get; protected set; } - public IDriverInfo DriverInfo { get; protected set; } - public IHybridController HybridController { get; protected set; } + public virtual IEngineInfo EngineInfo { get; protected internal set; } + public virtual IEngineControl EngineCtl { get; protected set; } + public virtual IGearboxInfo GearboxInfo { get; protected set; } + public virtual IGearboxControl GearboxCtl { get; protected set; } + public virtual IAxlegearInfo AxlegearInfo { get; protected set; } + public virtual IVehicleInfo VehicleInfo { get; protected set; } + public virtual IBrakes Brakes { get; protected set; } + public virtual IWheelsInfo WheelsInfo { get; protected set; } + public virtual IDriverInfo DriverInfo { get; protected set; } + public virtual IHybridController HybridController { get; protected set; } - public IMileageCounter MileageCounter { get; protected set; } + public virtual IMileageCounter MileageCounter { get; protected set; } - public IClutchInfo ClutchInfo { get; protected set; } + public virtual IClutchInfo ClutchInfo { get; protected set; } - public IDrivingCycleInfo DrivingCycleInfo { get; protected set; } + public virtual IDrivingCycleInfo DrivingCycleInfo { get; protected set; } internal ISimulationOutPort Cycle; @@ -94,12 +94,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl #region IVehicleContainer - public IModalDataContainer ModalData + public virtual IModalDataContainer ModalData { get { return ModData; } } - public ISimulationOutPort GetCycleOutPort() + public virtual ISimulationOutPort GetCycleOutPort() { return Cycle; } @@ -111,9 +111,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return ElectricMotors[pos]; } - public ITorqueConverterControl TorqueConverterCtl { get; private set; } + public virtual ITorqueConverterControl TorqueConverterCtl { get; private set; } - public void AddComponent(VectoSimulationComponent component) + public virtual void AddComponent(VectoSimulationComponent component) { var commitPriority = 0; @@ -168,7 +168,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } - public void CommitSimulationStep(Second time, Second simulationInterval) + public virtual void CommitSimulationStep(Second time, Second simulationInterval) { Log.Info("VehicleContainer committing simulation. time: {0}, dist: {1}, speed: {2}", time, MileageCounter.Distance, VehicleInfo?.VehicleSpeed ?? 0.KMPHtoMeterPerSecond()); @@ -186,7 +186,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } } - public void FinishSimulationRun(Exception e = null) + public virtual void FinishSimulationRun(Exception e = null) { Log.Info("VehicleContainer finishing simulation."); ModData?.Finish(RunStatus, e); @@ -197,22 +197,22 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl DrivingCycleInfo?.FinishSimulation(); } - public IEnumerable<ISimulationPreprocessor> GetPreprocessingRuns + public virtual IEnumerable<ISimulationPreprocessor> GetPreprocessingRuns { get { return new ReadOnlyCollection<ISimulationPreprocessor>(Preprocessors); } } - public void AddPreprocessor(ISimulationPreprocessor simulationPreprocessor) + public virtual void AddPreprocessor(ISimulationPreprocessor simulationPreprocessor) { Preprocessors.Add(simulationPreprocessor); } - public void StartSimulationRun() + public virtual void StartSimulationRun() { ModData?.Reset(); } - public VectoRun.Status RunStatus { get; set; } + public virtual VectoRun.Status RunStatus { get; set; } #endregion @@ -221,15 +221,15 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return new ReadOnlyCollection<VectoSimulationComponent>(_components.Select(x => x.Item2).ToList()); } - public bool HasElectricMotor { get; private set; } + public virtual bool HasElectricMotor { get; private set; } - public bool HasCombustionEngine { get; private set; } + public virtual bool HasCombustionEngine { get; private set; } - public bool HasGearbox { get; private set; } + public virtual bool HasGearbox { get; private set; } - public VectoRunData RunData { get; set; } - public ExecutionMode ExecutionMode { get; } + public virtual VectoRunData RunData { get; set; } + public virtual ExecutionMode ExecutionMode { get; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATClutchInfo.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATClutchInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..5134dd322550c12552c4946f31aa12b364ddd319 --- /dev/null +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATClutchInfo.cs @@ -0,0 +1,36 @@ +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Simulation; +using TUGraz.VectoCore.Models.Simulation.DataBus; +using TUGraz.VectoCore.OutputData; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { + internal class ATClutchInfo : VectoSimulationComponent, IClutchInfo + { + public ATClutchInfo(IVehicleContainer container) : base(container) + { + } + + #region Overrides of VectoSimulationComponent + + protected override void DoWriteModalResults(Second time, Second simulationInterval, IModalDataContainer container) + { + + } + + protected override void DoCommitSimulationStep() + { + + } + + #endregion + + #region Implementation of IClutchInfo + + public bool ClutchClosed(Second absTime) + { + return true; + } + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 59bf83c3dfaff933a9aab70adcb6dcf5dac88b2b..c2e2068410e211d00c65e390d58ba165eb00a7da 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -290,10 +290,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl switch (ADAS.EcoRoll) { case EcoRollType.None: break; case EcoRollType.WithoutEngineStop: - (dataBus as IGearboxControl).DisengageGearbox = true; + dataBus.GearboxCtl.DisengageGearbox = true; break; case EcoRollType.WithEngineStop: - (dataBus as IGearboxControl).DisengageGearbox = true; + dataBus.GearboxCtl.DisengageGearbox = true; dataBus.EngineCtl.CombustionEngineOn = false; break; default: throw new ArgumentOutOfRangeException(); @@ -303,7 +303,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl case PCCStates.OutsideSegment: case PCCStates.WithinSegment: case PCCStates.PCCinterrupt: - (dataBus as IGearboxControl).DisengageGearbox = false; + dataBus.GearboxCtl.DisengageGearbox = false; dataBus.EngineCtl.CombustionEngineOn = true; break; default: throw new ArgumentOutOfRangeException(); @@ -466,13 +466,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl switch (EcoRollState.State) { case EcoRollStates.EcoRollOn: - (dBus as IGearboxControl).DisengageGearbox = true; + dBus.GearboxCtl.DisengageGearbox = true; if (ADAS.EcoRoll == EcoRollType.WithEngineStop) { dBus.EngineCtl.CombustionEngineOn = false; } return; case EcoRollStates.EcoRollOff: - (dBus as IGearboxControl).DisengageGearbox = false; + dBus.GearboxCtl.DisengageGearbox = false; if (ADAS.EcoRoll == EcoRollType.WithEngineStop) { dBus.EngineCtl.CombustionEngineOn = true; } @@ -1000,7 +1000,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl debug.Add(new { action = "Coast:(Success & Acc<0) -> Accelerate", first }); } } else { - if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && (DataBus as IGearboxInfo).DisengageGearbox) { + if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && DataBus.GearboxInfo.DisengageGearbox) { first = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient); } else { first = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs index 307d8453059c23522c3575edb3e3b5543d4ff620..fbf944e98258295de3bdb43ef0a28217223caeb5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs @@ -726,7 +726,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return retVal; } - var engaged = (DataBus as IGearboxInfo).DisengageGearbox; + var engaged = DataBus.GearboxInfo.DisengageGearbox; try { operatingPoint = SearchBrakingPower( absTime, operatingPoint.SimulationDistance, gradient, @@ -829,8 +829,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl retVal.SimulationDistance = ds; retVal.Driver.OperatingPoint = operatingPoint; - if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && engaged != (DataBus as IGearboxInfo).DisengageGearbox) { - (DataBus as IGearboxControl).DisengageGearbox = engaged; + if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && engaged != DataBus.GearboxInfo.DisengageGearbox) { + DataBus.GearboxCtl.DisengageGearbox = engaged; } return retVal; } @@ -856,7 +856,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (!tcOp.Item2.IsBetween(dragTorque - inertiaTq - auxTqDemand, maxTorque - inertiaTq - auxTqDemand)) { - (DataBus as IGearboxControl).DisengageGearbox = true; + DataBus.GearboxCtl.DisengageGearbox = true; operatingPoint = SearchBrakingPower( absTime, operatingPoint.SimulationDistance, gradient, operatingPoint.Acceleration, response); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimplePowertrainContainer.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimplePowertrainContainer.cs index e8225c417908b6b16f72b9e0a88246857bd29c68..c7b1285f75d07a12b70f7f9f8661bed1cca9b50a 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimplePowertrainContainer.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/SimplePowertrainContainer.cs @@ -1,11 +1,12 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.DataBus; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.OutputData; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { - public class SimplePowertrainContainer : VehicleContainer + public class SimplePowertrainContainer : VehicleContainer, IDriverInfo { public SimplePowertrainContainer(VectoRunData runData, IModalDataContainer modData = null) : base(runData.ExecutionMode, modData) { @@ -28,5 +29,26 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { } public override Second AbsTime { get { return 0.SI<Second>(); } } + + public override IDriverInfo DriverInfo { get { return base.DriverInfo ?? this; } } + + #region Implementation of IDriverInfo + + public DrivingBehavior DriverBehavior + { + get { return DrivingBehavior.Driving; } + } + + public DrivingAction DrivingAction + { + get { return DrivingAction.Accelerate; } + } + + public MeterPerSquareSecond DriverAcceleration + { + get { return 0.SI<MeterPerSquareSecond>(); } + } + + #endregion } } \ No newline at end of file diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index eb09125b63a445f5c63b70ece554e2addcbb76f7..b1a93e8021a53ad765b51f0ad1ef83dd1012e642 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -408,6 +408,7 @@ <Compile Include="Models\Simulation\DataBus\IElectricMotorInfo.cs" /> <Compile Include="Models\Simulation\DataBus\IEngineControl.cs" /> <Compile Include="InputData\Reader\Impl\DeclarationModeSingleBusVectoRunDataFactory.cs" /> + <Compile Include="Models\SimulationComponent\Impl\ATClutchInfo.cs" /> <Compile Include="Models\Simulation\Impl\PCCEcoRollEngineStopPreprocessor.cs" /> <Compile Include="Models\Simulation\Impl\PCCSegmentPreprocessor.cs" /> <Compile Include="Models\Simulation\ISimulationPreprocessor.cs" /> diff --git a/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs index 624f093d780fa262468ebac0e5cc765477c25e68..f7e3d6ad46d007d902691a70e041dc101d6fa0ce 100644 --- a/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs @@ -120,6 +120,7 @@ namespace TUGraz.VectoCore.Tests.Integration .AddComponent(new DummyRetarder(container)) .AddComponent(new ATGearbox(container, new ATShiftStrategy(runData, container), runData)) .AddComponent(engine); + new ATClutchInfo(container); var aux = new EngineAuxiliary(container); aux.AddConstant("ZERO", 0.SI<Watt>()); diff --git a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs index e85ef0b76469e4e8e95ac50dabd42b91a3f35748..a10360ffa809a4257a130663cc490b3c54ec4914 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs @@ -115,7 +115,7 @@ namespace TUGraz.VectoCore.Tests.Integration .AddComponent(new Gearbox(container, new AMTShiftStrategy(runData, container), runData)) .AddComponent(clutch) .AddComponent(engine); - + var aux = new EngineAuxiliary(container); aux.AddConstant("ZERO", 0.SI<Watt>()); container.ModalData.AddAuxiliary("ZERO"); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxPowertrainTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxPowertrainTest.cs index 48536307476bae851ae474364ee3ff99218d72ec..71a68b27ee732f16db1007d58817c137f89725fc 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxPowertrainTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxPowertrainTest.cs @@ -66,6 +66,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var absTime = 0.SI<Second>(); var ds = 1.SI<Meter>(); + container.AbsTime = absTime; retVal = container.Cycle.Request(absTime, ds); container.CommitSimulationStep(absTime, retVal.SimulationInterval); @@ -75,7 +76,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent container.Cycle.Request(absTime, ds); container.CommitSimulationStep(absTime, retVal.SimulationInterval); - Assert.AreEqual(4u, container.GearboxInfo); + Assert.AreEqual(4u, container.GearboxInfo.Gear); AssertHelper.AreRelativeEqual(65.6890, container.EngineInfo.EngineSpeed); } @@ -90,13 +91,14 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var container = Truck40tPowerTrain.CreatePowerTrain(cycle, "Gearbox_Initialize", 7500.0.SI<Kilogram>(), 19300.SI<Kilogram>()); var retVal = container.Cycle.Initialize(); - Assert.AreEqual(4u, container.GearboxInfo); + Assert.AreEqual(4u, container.GearboxInfo.Gear); Assert.IsInstanceOf<ResponseSuccess>(retVal); AssertHelper.AreRelativeEqual(560.RPMtoRad(), container.EngineInfo.EngineSpeed); var absTime = 0.SI<Second>(); var ds = 1.SI<Meter>(); + container.AbsTime = absTime; retVal = container.Cycle.Request(absTime, ds); container.CommitSimulationStep(absTime, retVal.SimulationInterval); @@ -121,13 +123,14 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var container = Truck40tPowerTrain.CreatePowerTrain(cycle, "Gearbox_Initialize", 7500.0.SI<Kilogram>(), 19300.SI<Kilogram>()); var retVal = container.Cycle.Initialize(); - Assert.AreEqual(12u, container.GearboxInfo); + Assert.AreEqual(12u, container.GearboxInfo.Gear); Assert.IsInstanceOf<ResponseSuccess>(retVal); AssertHelper.AreRelativeEqual(1195.996.RPMtoRad(), container.EngineInfo.EngineSpeed, toleranceFactor: 1e-3); var absTime = 0.SI<Second>(); var ds = 1.SI<Meter>(); + container.AbsTime = absTime; retVal = container.Cycle.Request(absTime, ds); container.CommitSimulationStep(absTime, retVal.SimulationInterval); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs index 7dc576a73800a13562c2dff7dc880796042f82a6..9f136e9e191c72c1d68d0fec20061588f40799bd 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs @@ -227,6 +227,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var dt = 2.SI<Second>(); var tq = torque.SI<NewtonMeter>(); var n = inAngularSpeed.RPMtoRad(); + container.AbsTime = absTime; var response = (ResponseSuccess)gearbox.OutPort().Request(absTime, dt, tq * ratio, n / ratio); Assert.IsFalse(gearbox.CurrentState.TorqueLossResult.Extrapolated); @@ -306,6 +307,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var dt = 2.SI<Second>(); var tq = torque.SI<NewtonMeter>(); var n = inAngularSpeed.RPMtoRad(); + container.AbsTime = absTime; var response = (ResponseSuccess)gearbox.OutPort().Request(absTime, dt, tq * ratio, n / ratio); Assert.IsTrue( gearbox.CurrentState.TorqueLossResult.Extrapolated); @@ -341,6 +343,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var dt = 2.SI<Second>(); var t = torque.SI<NewtonMeter>(); var n = inAngularSpeed.RPMtoRad(); + container.AbsTime = absTime; + var response = (ResponseSuccess)gearbox.OutPort().Request(absTime, dt, t * ratio, n / ratio); Assert.IsTrue(gearbox.CurrentState.TorqueLossResult.Extrapolated); @@ -379,6 +383,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var dt = 2.SI<Second>(); var t = torque.SI<NewtonMeter>(); var n = inAngularSpeed.RPMtoRad(); + container.AbsTime = absTime; var response = (ResponseSuccess)gearbox.OutPort().Request(absTime, dt, t * ratio, n / ratio); Assert.AreEqual(absTime, port.AbsTime); @@ -483,6 +488,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(gear, gearbox.Gear); gearbox.Gear = (uint)gear; + container.AbsTime = absTime; var response = gearbox.OutPort().Request(absTime, dt, outTorque, angularVelocity); Assert.IsTrue(response.GetType() == responseType); @@ -532,6 +538,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent gearbox.Gear = (uint)gear; + container.AbsTime = absTime; var gearShiftResponse = gearbox.OutPort().Request(absTime, dt, torque, angularVelocity); Assert.IsTrue(gearShiftResponse.GetType() == responseType); @@ -588,6 +595,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent gearbox.Gear = (uint)gear; + container.AbsTime = absTime; var response = gearbox.OutPort().Request(absTime, dt, torque, angularVelocity); Assert.IsTrue(response.GetType() == responseType);