Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

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

fix: writing pto consumer only if not already set by idel controller

parent c3850ad9
No related branches found
No related tags found
No related merge requests found
......@@ -198,7 +198,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
}
}
container[Constants.Auxiliaries.IDs.PTOConsumer] = ptoConsumer;
if (container[Constants.Auxiliaries.IDs.PTOConsumer] == null ||
container[Constants.Auxiliaries.IDs.PTOConsumer] == DBNull.Value) {
container[Constants.Auxiliaries.IDs.PTOConsumer] = ptoConsumer;
}
}
}
......
......@@ -29,85 +29,85 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.OutputData;
namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
public class IdleControllerSwitcher : IIdleController
{
private readonly IIdleController _idleController;
private readonly PTOCycleController _ptoController;
private IIdleController _currentController;
public IdleControllerSwitcher(IIdleController idleController, PTOCycleController ptoController)
{
_idleController = idleController;
_ptoController = ptoController;
// default state is idleController
_currentController = _idleController;
}
public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
bool dryRun = false)
{
return _currentController.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
}
public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
{
throw new InvalidOperationException(string.Format("{0} cannot initialize.", GetType().FullName));
}
public ITnOutPort RequestPort
{
set {
_idleController.RequestPort = value;
_ptoController.RequestPort = value;
}
}
public void Reset()
{
_idleController.Reset();
_ptoController.Reset();
_currentController = _idleController;
}
public void ActivatePTO()
{
_currentController = _ptoController;
}
public void ActivateIdle()
{
_currentController = _idleController;
}
public Second GetNextCycleTime()
{
return _ptoController.GetNextCycleTime();
}
public void CommitSimulationStep(IModalDataContainer container)
{
if (_currentController == _ptoController) {
_ptoController.CommitSimulationStep(container);
}
}
public Second Duration
{
get {
if (_ptoController != null) {
return _ptoController.Duration;
}
return 0.SI<Second>();
}
}
}
using System;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.OutputData;
namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
public class IdleControllerSwitcher : IIdleController
{
private readonly IIdleController _idleController;
private readonly PTOCycleController _ptoController;
private IIdleController _currentController;
public IdleControllerSwitcher(IIdleController idleController, PTOCycleController ptoController)
{
_idleController = idleController;
_ptoController = ptoController;
// default state is idleController
_currentController = _idleController;
}
public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
bool dryRun = false)
{
return _currentController.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
}
public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
{
throw new InvalidOperationException(string.Format("{0} cannot initialize.", GetType().FullName));
}
public ITnOutPort RequestPort
{
set {
_idleController.RequestPort = value;
_ptoController.RequestPort = value;
}
}
public void Reset()
{
_idleController.Reset();
_ptoController.Reset();
_currentController = _idleController;
}
public void ActivatePTO()
{
_currentController = _ptoController;
}
public void ActivateIdle()
{
_currentController = _idleController;
}
public Second GetNextCycleTime()
{
return _ptoController.GetNextCycleTime();
}
public void CommitSimulationStep(IModalDataContainer container)
{
if (_currentController == _ptoController) {
_ptoController.CommitSimulationStep(container);
}
}
public Second Duration
{
get {
if (_ptoController != null) {
return _ptoController.Duration;
}
return 0.SI<Second>();
}
}
}
}
\ No newline at end of file
......@@ -29,82 +29,82 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System;
using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.Connector.Ports.Impl;
using TUGraz.VectoCore.Models.Simulation;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.OutputData;
namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
public class PTOCycleController : PowertrainDrivingCycle, IIdleController
{
public ITnOutPort RequestPort
{
set { NextComponent = value; }
}
public readonly Second Duration;
protected Second IdleStart;
public PTOCycleController(IVehicleContainer container, IDrivingCycleData cycle)
: base(null, cycle)
{
DataBus = container;
Duration = Data.Entries.Last().Time - Data.Entries.First().Time;
}
public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
bool dryRun = false)
{
if (outAngularVelocity != null) {
throw new VectoException("{0} can only handle idle requests: AngularVelocity has to be null!",
GetType().ToString());
}
if (!outTorque.IsEqual(0)) {
throw new VectoException("{0} can only handle idle requests: Torque has to be 0!", GetType().ToString());
}
if (IdleStart == null) {
IdleStart = absTime;
PreviousState.InAngularVelocity = DataBus.EngineSpeed;
}
return base.Request(absTime - IdleStart, dt);
}
public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
{
return new ResponseSuccess { Source = this };
}
public void Reset()
{
CycleIterator.Reset();
IdleStart = null;
}
public Second GetNextCycleTime()
{
if (CycleIterator.LastEntry && AbsTime.IsEqual(Duration)) {
return null;
}
return CycleIterator.RightSample.Time - CycleIterator.LeftSample.Time;
}
protected override void DoWriteModalResults(IModalDataContainer container)
{
base.DoWriteModalResults(container);
container[Constants.Auxiliaries.IDs.PTOConsumer] = CurrentState.InTorque *
(PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2;
container[ModalResultField.P_eng_out] = 0.SI<Watt>();
}
}
using System;
using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Models.Connector.Ports.Impl;
using TUGraz.VectoCore.Models.Simulation;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.OutputData;
namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
{
public class PTOCycleController : PowertrainDrivingCycle, IIdleController
{
public ITnOutPort RequestPort
{
set { NextComponent = value; }
}
public readonly Second Duration;
protected Second IdleStart;
public PTOCycleController(IVehicleContainer container, IDrivingCycleData cycle)
: base(null, cycle)
{
DataBus = container;
Duration = Data.Entries.Last().Time - Data.Entries.First().Time;
}
public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
bool dryRun = false)
{
if (outAngularVelocity != null) {
throw new VectoException("{0} can only handle idle requests: AngularVelocity has to be null!",
GetType().ToString());
}
if (!outTorque.IsEqual(0)) {
throw new VectoException("{0} can only handle idle requests: Torque has to be 0!", GetType().ToString());
}
if (IdleStart == null) {
IdleStart = absTime;
PreviousState.InAngularVelocity = DataBus.EngineSpeed;
}
return base.Request(absTime - IdleStart, dt);
}
public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
{
return new ResponseSuccess { Source = this };
}
public void Reset()
{
CycleIterator.Reset();
IdleStart = null;
}
public Second GetNextCycleTime()
{
if (CycleIterator.LastEntry && AbsTime.IsEqual(Duration)) {
return null;
}
return CycleIterator.RightSample.Time - CycleIterator.LeftSample.Time;
}
protected override void DoWriteModalResults(IModalDataContainer container)
{
base.DoWriteModalResults(container);
container[Constants.Auxiliaries.IDs.PTOConsumer] = CurrentState.InTorque *
(PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2;
container[ModalResultField.P_eng_out] = 0.SI<Watt>();
}
}
}
\ No newline at end of file
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