From a7859a856ca77fac5ea0af9bff61443f39ad5455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3lik=20Uszasty?= Date: Mon, 9 Nov 2020 21:33:18 +0100 Subject: [PATCH] ReleaseParkingBySpringBrakeWhenDoorIsOpen for Impuls EMU --- DynObj.cpp | 4 ++-- McZapkie/Mover.cpp | 24 ++++++++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index 19e996eb..30dbba0e 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -3157,7 +3157,7 @@ bool TDynamicObject::Update(double dt, double dt1) || ( MoverParameters->Doors.permit_needed && ( MoverParameters->Doors.instances[ side::left ].open_permit || MoverParameters->Doors.instances[ side::right ].open_permit ) ) }; - //doorisopen &= !(MoverParameters->ReleaseParkingBySpringBrakeWhenDoorIsOpen && MoverParameters->SpringBrake.IsActive); + doorisopen &= !(MoverParameters->ReleaseParkingBySpringBrakeWhenDoorIsOpen && MoverParameters->SpringBrake.IsActive); if ((MoverParameters->Vel < 0.5) && (eimic < 0 || doorisopen || MoverParameters->Hamulec->GetEDBCP())) { @@ -3184,7 +3184,7 @@ bool TDynamicObject::Update(double dt, double dt1) { Fzad = std::min(LBR * FmaxED, FfulED); } - if (((MoverParameters->ShuntMode) && (eimic <= 0)) /*|| + if (((MoverParameters->ShuntMode) && (eimic <= 0) || (doorisopen)) /*|| (MoverParameters->V * MoverParameters->DirAbsolute < -0.2)*/) { auto const sbd { ( ( MoverParameters->SpringBrake.IsActive && MoverParameters->ReleaseParkingBySpringBrake ) ? 0.0 : MoverParameters->StopBrakeDecc ) }; diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index f70e4df8..c0ddf804 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -7115,11 +7115,27 @@ void TMoverParameters::CheckEIMIC(double dt) auto const eimicpowerenabled { ( ( true == Mains ) || ( Power == 0.0 ) ) - && ( ( Doors.instances[ side::left ].open_permit == false ) - && ( Doors.instances[ side::right ].open_permit == false ) ) && ( !SpringBrake.IsActive || !SpringBrakeCutsOffDrive ) && ( !LockPipe ) }; - eimic = clamp(eimic, -1.0, eimicpowerenabled ? 1.0 : 0.0); + auto const eimicdoorenabled { + (SpringBrake.IsActive && ReleaseParkingBySpringBrakeWhenDoorIsOpen) + }; + double eimic_max = 0.0; + if ((Doors.instances[side::left].open_permit == false) + && (Doors.instances[side::right].open_permit == false)) { + if (eimicpowerenabled) { + eimic_max = 1.0; + } + else { + eimic_max = 0.001; + } + } + else { + if (eimicdoorenabled) { + eimic_max = 0.001; + } + } + eimic = clamp(eimic, -1.0, eimicpowerenabled ? eimic_max : 0.0); } void TMoverParameters::CheckSpeedCtrl(double dt) @@ -10212,7 +10228,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) { extract_value( StopBrakeDecc, "SBD", line, "" ); extract_value( ReleaseParkingBySpringBrake, "ReleaseParkingBySpringBrake", line, "" ); - extract_value(ReleaseParkingBySpringBrakeWhenDoorIsOpen, "ReleaseParkingBySpringBrakeWhenDoorIsOpen", line, ""); + extract_value( ReleaseParkingBySpringBrakeWhenDoorIsOpen, "ReleaseParkingBySpringBrakeWhenDoorIsOpen", line, "" ); extract_value( SpringBrakeCutsOffDrive, "SpringBrakeCutsOffDrive", line, ""); extract_value( SpringBrakeDriveEmergencyVel, "SpringBrakeDriveEmergencyVel", line, "");