mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 13:59:19 +02:00
Fix for MHZ_K5P - no sudden overload in middle posistion
This commit is contained in:
committed by
tmj-fstate
parent
ea5f3ae27a
commit
fb36c1348b
@@ -894,6 +894,8 @@ public:
|
|||||||
double P2FTrans = 0.0;
|
double P2FTrans = 0.0;
|
||||||
double TrackBrakeForce = 0.0; /*sila nacisku hamulca szynowego*/
|
double TrackBrakeForce = 0.0; /*sila nacisku hamulca szynowego*/
|
||||||
int BrakeMethod = 0; /*flaga rodzaju hamulca*/
|
int BrakeMethod = 0; /*flaga rodzaju hamulca*/
|
||||||
|
bool Handle_AutomaticOverload = false;
|
||||||
|
bool Handle_ManualOverload = false;
|
||||||
/*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/
|
/*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/
|
||||||
double HighPipePress = 0.0;
|
double HighPipePress = 0.0;
|
||||||
double LowPipePress = 0.0;
|
double LowPipePress = 0.0;
|
||||||
|
|||||||
@@ -8426,6 +8426,8 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
lookup->second :
|
lookup->second :
|
||||||
TBrakeHandle::NoHandle;
|
TBrakeHandle::NoHandle;
|
||||||
}
|
}
|
||||||
|
Handle_AutomaticOverload = (extract_value("HAO", line) == "Yes");
|
||||||
|
Handle_ManualOverload = (extract_value("HMO", line) == "Yes");
|
||||||
// brakelochandle
|
// brakelochandle
|
||||||
{
|
{
|
||||||
std::map<std::string, TBrakeHandle> locbrakehandles{
|
std::map<std::string, TBrakeHandle> locbrakehandles{
|
||||||
@@ -9258,6 +9260,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
|
|||||||
default:
|
default:
|
||||||
Handle = std::make_shared<TDriverHandle>();
|
Handle = std::make_shared<TDriverHandle>();
|
||||||
}
|
}
|
||||||
|
Handle->SetParams(Handle_AutomaticOverload, Handle_ManualOverload, 0.0, 0.0);
|
||||||
|
|
||||||
switch( BrakeLocHandle ) {
|
switch( BrakeLocHandle ) {
|
||||||
case TBrakeHandle::FD1:
|
case TBrakeHandle::FD1:
|
||||||
|
|||||||
@@ -2274,6 +2274,11 @@ double TDriverHandle::GetEP(double pos)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TDriverHandle::OvrldButton(bool Active)
|
||||||
|
{
|
||||||
|
ManualOvrldActive = Active;
|
||||||
|
}
|
||||||
//---FV4a---
|
//---FV4a---
|
||||||
|
|
||||||
double TFV4a::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
|
double TFV4a::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
|
||||||
@@ -2683,7 +2688,7 @@ bool TMHZ_EN57::EQ(double pos, double i_pos)
|
|||||||
double TMHZ_K5P::GetPF(double i_bcp, double PP, double HP, double dt, double ep) {
|
double TMHZ_K5P::GetPF(double i_bcp, double PP, double HP, double dt, double ep) {
|
||||||
static int const LBDelay = 100;
|
static int const LBDelay = 100;
|
||||||
|
|
||||||
double LimPP;
|
double LimCP;
|
||||||
double dpPipe;
|
double dpPipe;
|
||||||
double dpMainValve;
|
double dpMainValve;
|
||||||
double ActFlowSpeed;
|
double ActFlowSpeed;
|
||||||
@@ -2710,29 +2715,28 @@ double TMHZ_K5P::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (EQ(i_bcp, 1)) //odcięcie - nie rób nic
|
if (EQ(i_bcp, 1)) //odcięcie - nie rób nic
|
||||||
LimPP = CP;
|
LimCP = CP;
|
||||||
else if (i_bcp > 1) //hamowanie
|
else if (i_bcp > 1) //hamowanie
|
||||||
LimPP = 3.4;
|
LimCP = 3.4;
|
||||||
else //luzowanie
|
else //luzowanie
|
||||||
LimPP = 5.0;
|
LimCP = 5.0;
|
||||||
pom = CP;
|
pom = CP;
|
||||||
LimPP = Min0R(LimPP + TP + RedAdj, HP); // pozycja + czasowy lub zasilanie
|
LimCP = Min0R(LimCP, HP); // pozycja + czasowy lub zasilanie
|
||||||
ActFlowSpeed = 4;
|
ActFlowSpeed = 4;
|
||||||
|
|
||||||
if ((LimPP > CP)) // podwyzszanie szybkie
|
if ((LimCP > CP)) // podwyzszanie szybkie
|
||||||
CP = CP + 9 * Min0R(abs(LimPP - CP), 0.05) * PR(CP, LimPP) * dt; // zbiornik sterujacy;
|
CP = CP + 9 * Min0R(abs(LimCP - CP), 0.05) * PR(CP, LimCP) * dt; // zbiornik sterujacy;
|
||||||
else
|
else
|
||||||
CP = CP + 9 * Min0R(abs(LimPP - CP), 0.05) * PR(CP, LimPP) * dt; // zbiornik sterujacy
|
CP = CP + 9 * Min0R(abs(LimCP - CP), 0.05) * PR(CP, LimCP) * dt; // zbiornik sterujacy
|
||||||
|
|
||||||
LimPP = pom; // cp
|
dpPipe = Min0R(HP, CP + TP + RedAdj);
|
||||||
dpPipe = Min0R(HP, LimPP);
|
|
||||||
|
|
||||||
if (dpPipe > PP)
|
if (dpPipe > PP)
|
||||||
dpMainValve = -PFVa(HP, PP, ActFlowSpeed / LBDelay, dpPipe, 0.4);
|
dpMainValve = -PFVa(HP, PP, ActFlowSpeed / LBDelay, dpPipe, 0.4);
|
||||||
else
|
else
|
||||||
dpMainValve = PFVd(PP, 0, ActFlowSpeed / LBDelay, dpPipe, 0.4);
|
dpMainValve = PFVd(PP, 0, ActFlowSpeed / LBDelay, dpPipe, 0.4);
|
||||||
|
|
||||||
if (EQ(i_bcp, -1))
|
if ((EQ(i_bcp, -1)&&(AutoOvrld))||(ManualOvrld && ManualOvrldActive))
|
||||||
{
|
{
|
||||||
if ((TP < 1))
|
if ((TP < 1))
|
||||||
TP = TP + 0.03 * dt;
|
TP = TP + 0.03 * dt;
|
||||||
@@ -2786,6 +2790,12 @@ double TMHZ_K5P::GetCP()
|
|||||||
return RP;
|
return RP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TMHZ_K5P::SetParams(bool AO, bool MO, double, double)
|
||||||
|
{
|
||||||
|
AutoOvrld = AO;
|
||||||
|
ManualOvrld = MO;
|
||||||
|
}
|
||||||
|
|
||||||
bool TMHZ_K5P::EQ(double pos, double i_pos)
|
bool TMHZ_K5P::EQ(double pos, double i_pos)
|
||||||
{
|
{
|
||||||
return (pos <= i_pos + 0.5) && (pos > i_pos - 0.5);
|
return (pos <= i_pos + 0.5) && (pos > i_pos - 0.5);
|
||||||
|
|||||||
@@ -513,9 +513,11 @@ class TKE : public TBrake { //Knorr Einheitsbauart — jeden do wszystkiego
|
|||||||
//klasa obejmujaca krany
|
//klasa obejmujaca krany
|
||||||
class TDriverHandle {
|
class TDriverHandle {
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
// BCP: integer;
|
// BCP: integer;
|
||||||
|
bool AutoOvrld = false; //czy jest asymilacja automatyczna na pozycji -1
|
||||||
|
bool ManualOvrld = false; //czy jest asymilacja reczna przyciskiem
|
||||||
|
bool ManualOvrldActive = false; //czy jest wcisniety przycisk asymilacji
|
||||||
public:
|
public:
|
||||||
bool Time = false;
|
bool Time = false;
|
||||||
bool TimeEP = false;
|
bool TimeEP = false;
|
||||||
@@ -524,10 +526,12 @@ class TDriverHandle {
|
|||||||
virtual double GetPF(double i_bcp, double PP, double HP, double dt, double ep);
|
virtual double GetPF(double i_bcp, double PP, double HP, double dt, double ep);
|
||||||
virtual void Init(double Press);
|
virtual void Init(double Press);
|
||||||
virtual double GetCP();
|
virtual double GetCP();
|
||||||
virtual void SetReductor(double nAdj);
|
virtual void SetReductor(double nAdj); //korekcja pozycji reduktora cisnienia
|
||||||
virtual double GetSound(int i);
|
virtual double GetSound(int i); //pobranie glosnosci wybranego dzwieku
|
||||||
virtual double GetPos(int i);
|
virtual double GetPos(int i); //pobranie numeru pozycji o zadanym kodzie (funkcji)
|
||||||
virtual double GetEP(double pos);
|
virtual double GetEP(double pos); //pobranie sily hamulca ep
|
||||||
|
virtual void SetParams(bool AO, bool MO, double, double) {}; //ustawianie jakichs parametrów dla zaworu
|
||||||
|
virtual void OvrldButton(bool Active); //przycisk recznego przeladowania/asymilacji
|
||||||
|
|
||||||
inline TDriverHandle() { memset( Sounds, 0, sizeof( Sounds ) ); }
|
inline TDriverHandle() { memset( Sounds, 0, sizeof( Sounds ) ); }
|
||||||
};
|
};
|
||||||
@@ -609,7 +613,7 @@ private:
|
|||||||
double TP = 0.0; //zbiornik czasowy
|
double TP = 0.0; //zbiornik czasowy
|
||||||
double RP = 0.0; //zbiornik redukcyjny
|
double RP = 0.0; //zbiornik redukcyjny
|
||||||
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||||
bool Fala = false;
|
bool Fala = false; //czy jest napelnianie uderzeniowe
|
||||||
static double const pos_table[11]; //= { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 };
|
static double const pos_table[11]; //= { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 };
|
||||||
|
|
||||||
bool EQ(double pos, double i_pos);
|
bool EQ(double pos, double i_pos);
|
||||||
@@ -621,6 +625,7 @@ public:
|
|||||||
double GetSound(int i)/*override*/;
|
double GetSound(int i)/*override*/;
|
||||||
double GetPos(int i)/*override*/;
|
double GetPos(int i)/*override*/;
|
||||||
double GetCP()/*override*/;
|
double GetCP()/*override*/;
|
||||||
|
void SetParams(bool AO, bool MO, double, double); /*ovveride*/
|
||||||
|
|
||||||
inline TMHZ_K5P(void) :
|
inline TMHZ_K5P(void) :
|
||||||
TDriverHandle()
|
TDriverHandle()
|
||||||
|
|||||||
Reference in New Issue
Block a user