mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-21 22:59:19 +02:00
Fix for epfuse bug with pnbrake dynamic test; lower acc threshold for pnbrake in epbrake emus
This commit is contained in:
59
Driver.cpp
59
Driver.cpp
@@ -2161,6 +2161,32 @@ void TController::AutoRewident()
|
|||||||
fNominalAccThreshold = fAccThreshold;
|
fNominalAccThreshold = fAccThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fullep = false;
|
||||||
|
BrakeSystem = mvOccupied->BrakeSystem;
|
||||||
|
if (BrakeSystem == TBrakeSystem::ElectroPneumatic)
|
||||||
|
{
|
||||||
|
fullep = true;
|
||||||
|
if (pVehicles[end::front] != pVehicles[end::rear]) {
|
||||||
|
// more detailed version, will use manual braking also for coupled sets of controlled vehicles
|
||||||
|
auto *vehicle = pVehicles[end::front]; // start from first
|
||||||
|
while ((true == fullep)
|
||||||
|
&& (vehicle != nullptr)) {
|
||||||
|
// NOTE: we could simplify this by doing only check of the rear coupler, but this can be quite tricky in itself
|
||||||
|
// TODO: add easier ways to access front/rear coupler taking into account vehicle's direction
|
||||||
|
fullep =
|
||||||
|
(((vehicle->MoverParameters->Couplers[end::front].Connected == nullptr)
|
||||||
|
|| ((vehicle->MoverParameters->Couplers[end::front].CouplingFlag & coupling::control)
|
||||||
|
&& (vehicle->MoverParameters->Couplers[end::front].Connected->Power > -1)))
|
||||||
|
&& ((vehicle->MoverParameters->Couplers[end::rear].Connected == nullptr)
|
||||||
|
|| ((vehicle->MoverParameters->Couplers[end::rear].CouplingFlag & coupling::control)
|
||||||
|
&& (vehicle->MoverParameters->Couplers[end::rear].Connected->Power > -1))));
|
||||||
|
vehicle = vehicle->Next(); // kolejny pojazd, podłączony od tyłu (licząc od czoła)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!fullep) BrakeSystem = TBrakeSystem::Pneumatic;
|
||||||
|
mvOccupied->EpFuseSwitch(fullep);
|
||||||
|
}
|
||||||
|
|
||||||
if( OrderCurrentGet() & ( Obey_train | Bank ) ) {
|
if( OrderCurrentGet() & ( Obey_train | Bank ) ) {
|
||||||
// 4. Przeliczanie siły hamowania
|
// 4. Przeliczanie siły hamowania
|
||||||
double const velstep = ( mvOccupied->Vmax*0.5 ) / BrakeAccTableSize;
|
double const velstep = ( mvOccupied->Vmax*0.5 ) / BrakeAccTableSize;
|
||||||
@@ -2195,12 +2221,13 @@ void TController::AutoRewident()
|
|||||||
0.25 );
|
0.25 );
|
||||||
|
|
||||||
if( mvOccupied->TrainType == dt_EZT ) {
|
if( mvOccupied->TrainType == dt_EZT ) {
|
||||||
|
int ep_factor = fullep ? 8 : 4;
|
||||||
if( mvControlling->EngineType == TEngineType::ElectricInductionMotor ) {
|
if( mvControlling->EngineType == TEngineType::ElectricInductionMotor ) {
|
||||||
// HACK: emu with induction motors need to start their braking a bit sooner than the ones with series motors
|
// HACK: emu with induction motors need to start their braking a bit sooner than the ones with series motors
|
||||||
fNominalAccThreshold = std::max( -0.60, -fBrake_a0[ BrakeAccTableSize ] - 8 * fBrake_a1[ BrakeAccTableSize ] );
|
fNominalAccThreshold = std::max( -0.60, -fBrake_a0[ BrakeAccTableSize ] - ep_factor * fBrake_a1[ BrakeAccTableSize ] );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fNominalAccThreshold = std::max( -0.75, -fBrake_a0[ BrakeAccTableSize ] - 8 * fBrake_a1[ BrakeAccTableSize ] );
|
fNominalAccThreshold = std::max( -0.75, -fBrake_a0[ BrakeAccTableSize ] - ep_factor * fBrake_a1[ BrakeAccTableSize ] );
|
||||||
}
|
}
|
||||||
fBrakeReaction = 0.25;
|
fBrakeReaction = 0.25;
|
||||||
}
|
}
|
||||||
@@ -2219,30 +2246,6 @@ void TController::AutoRewident()
|
|||||||
fAccThreshold = fNominalAccThreshold;
|
fAccThreshold = fNominalAccThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
BrakeSystem = mvOccupied->BrakeSystem;
|
|
||||||
if (BrakeSystem == TBrakeSystem::ElectroPneumatic)
|
|
||||||
{
|
|
||||||
bool fullep = true;
|
|
||||||
if (pVehicles[end::front] != pVehicles[end::rear]) {
|
|
||||||
// more detailed version, will use manual braking also for coupled sets of controlled vehicles
|
|
||||||
auto *vehicle = pVehicles[end::front]; // start from first
|
|
||||||
while ((true == fullep)
|
|
||||||
&& (vehicle != nullptr)) {
|
|
||||||
// NOTE: we could simplify this by doing only check of the rear coupler, but this can be quite tricky in itself
|
|
||||||
// TODO: add easier ways to access front/rear coupler taking into account vehicle's direction
|
|
||||||
fullep =
|
|
||||||
(((vehicle->MoverParameters->Couplers[end::front].Connected == nullptr)
|
|
||||||
|| ((vehicle->MoverParameters->Couplers[end::front].CouplingFlag & coupling::control)
|
|
||||||
&& (vehicle->MoverParameters->Couplers[end::front].Connected->Power > -1)))
|
|
||||||
&& ((vehicle->MoverParameters->Couplers[end::rear].Connected == nullptr)
|
|
||||||
|| ((vehicle->MoverParameters->Couplers[end::rear].CouplingFlag & coupling::control)
|
|
||||||
&& (vehicle->MoverParameters->Couplers[end::rear].Connected->Power > -1))));
|
|
||||||
vehicle = vehicle->Next(); // kolejny pojazd, podłączony od tyłu (licząc od czoła)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!fullep) BrakeSystem = TBrakeSystem::Pneumatic;
|
|
||||||
mvOccupied->EpFuseSwitch( fullep );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double TController::ESMVelocity(bool Main)
|
double TController::ESMVelocity(bool Main)
|
||||||
@@ -6525,7 +6528,9 @@ TController::UpdateSituation(double dt) {
|
|||||||
case 2:
|
case 2:
|
||||||
if (fReady < 0.5)
|
if (fReady < 0.5)
|
||||||
{
|
{
|
||||||
mvOccupied->EpFuseSwitch(true);
|
if (BrakeSystem == TBrakeSystem::ElectroPneumatic) {
|
||||||
|
mvOccupied->EpFuseSwitch(true);
|
||||||
|
}
|
||||||
ForcePNBrake = false;
|
ForcePNBrake = false;
|
||||||
DynamicBrakeTest = 3;
|
DynamicBrakeTest = 3;
|
||||||
DBT_ReleasingTime = ElapsedTime - DBT_ReleasingTime;
|
DBT_ReleasingTime = ElapsedTime - DBT_ReleasingTime;
|
||||||
|
|||||||
Reference in New Issue
Block a user