mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 20:59:19 +02:00
New Handle type MHZ_6P for Traxx
This commit is contained in:
@@ -369,7 +369,7 @@ enum class TBrakeSystem { Individual, Pneumatic, ElectroPneumatic };
|
|||||||
/*podtypy hamulcow zespolonych*/
|
/*podtypy hamulcow zespolonych*/
|
||||||
enum class TBrakeSubSystem { ss_None, ss_W, ss_K, ss_KK, ss_Hik, ss_ESt, ss_KE, ss_LSt, ss_MT, ss_Dako };
|
enum class TBrakeSubSystem { ss_None, ss_W, ss_K, ss_KK, ss_Hik, ss_ESt, ss_KE, ss_LSt, ss_MT, ss_Dako };
|
||||||
enum class TBrakeValve { NoValve, W, W_Lu_VI, W_Lu_L, W_Lu_XR, K, Kg, Kp, Kss, Kkg, Kkp, Kks, Hikg1, Hikss, Hikp1, KE, SW, EStED, NESt3, ESt3, LSt, ESt4, ESt3AL2, EP1, EP2, M483, CV1_L_TR, CV1, CV1_R, Other };
|
enum class TBrakeValve { NoValve, W, W_Lu_VI, W_Lu_L, W_Lu_XR, K, Kg, Kp, Kss, Kkg, Kkp, Kks, Hikg1, Hikss, Hikp1, KE, SW, EStED, NESt3, ESt3, LSt, ESt4, ESt3AL2, EP1, EP2, M483, CV1_L_TR, CV1, CV1_R, Other };
|
||||||
enum class TBrakeHandle { NoHandle, West, FV4a, M394, M254, FVE408, FVel6, D2, Knorr, FD1, BS2, testH, St113, MHZ_P, MHZ_T, MHZ_EN57, MHZ_K5P, MHZ_K8P };
|
enum class TBrakeHandle { NoHandle, West, FV4a, M394, M254, FVE408, FVel6, D2, Knorr, FD1, BS2, testH, St113, MHZ_P, MHZ_T, MHZ_EN57, MHZ_K5P, MHZ_K8P, MHZ_6P };
|
||||||
/*typy hamulcow indywidualnych*/
|
/*typy hamulcow indywidualnych*/
|
||||||
enum class TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake };
|
enum class TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake };
|
||||||
/*dla osob/towar: opoznienie hamowania/odhamowania*/
|
/*dla osob/towar: opoznienie hamowania/odhamowania*/
|
||||||
@@ -896,6 +896,8 @@ public:
|
|||||||
int BrakeMethod = 0; /*flaga rodzaju hamulca*/
|
int BrakeMethod = 0; /*flaga rodzaju hamulca*/
|
||||||
bool Handle_AutomaticOverload = false;
|
bool Handle_AutomaticOverload = false;
|
||||||
bool Handle_ManualOverload = false;
|
bool Handle_ManualOverload = false;
|
||||||
|
double Handle_GenericDoubleParameter1 = 0.0;
|
||||||
|
double Handle_GenericDoubleParameter2 = 0.0;
|
||||||
/*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;
|
||||||
|
|||||||
@@ -8408,6 +8408,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
{ "MHZ_EN57", TBrakeHandle::MHZ_EN57 },
|
{ "MHZ_EN57", TBrakeHandle::MHZ_EN57 },
|
||||||
{ "MHZ_K5P", TBrakeHandle::MHZ_K5P },
|
{ "MHZ_K5P", TBrakeHandle::MHZ_K5P },
|
||||||
{ "MHZ_K8P", TBrakeHandle::MHZ_K8P },
|
{ "MHZ_K8P", TBrakeHandle::MHZ_K8P },
|
||||||
|
{ "MHZ_6P", TBrakeHandle::MHZ_6P },
|
||||||
{ "M394", TBrakeHandle::M394 },
|
{ "M394", TBrakeHandle::M394 },
|
||||||
{ "Knorr", TBrakeHandle::Knorr },
|
{ "Knorr", TBrakeHandle::Knorr },
|
||||||
{ "Westinghouse", TBrakeHandle::West },
|
{ "Westinghouse", TBrakeHandle::West },
|
||||||
@@ -8423,6 +8424,8 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
}
|
}
|
||||||
Handle_AutomaticOverload = (extract_value("HAO", line) == "Yes");
|
Handle_AutomaticOverload = (extract_value("HAO", line) == "Yes");
|
||||||
Handle_ManualOverload = (extract_value("HMO", line) == "Yes");
|
Handle_ManualOverload = (extract_value("HMO", line) == "Yes");
|
||||||
|
extract_value(Handle_GenericDoubleParameter1, "HGDP1", line, "");
|
||||||
|
extract_value(Handle_GenericDoubleParameter2, "HGDP2", line, "");
|
||||||
// brakelochandle
|
// brakelochandle
|
||||||
{
|
{
|
||||||
std::map<std::string, TBrakeHandle> locbrakehandles{
|
std::map<std::string, TBrakeHandle> locbrakehandles{
|
||||||
@@ -9252,10 +9255,13 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
|
|||||||
case TBrakeHandle::MHZ_K5P:
|
case TBrakeHandle::MHZ_K5P:
|
||||||
Handle = std::make_shared<TMHZ_K5P>();
|
Handle = std::make_shared<TMHZ_K5P>();
|
||||||
break;
|
break;
|
||||||
|
case TBrakeHandle::MHZ_6P:
|
||||||
|
Handle = std::make_shared<TMHZ_6P>();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Handle = std::make_shared<TDriverHandle>();
|
Handle = std::make_shared<TDriverHandle>();
|
||||||
}
|
}
|
||||||
Handle->SetParams(Handle_AutomaticOverload, Handle_ManualOverload, 0.0, 0.0);
|
Handle->SetParams(Handle_AutomaticOverload, Handle_ManualOverload, Handle_GenericDoubleParameter1, Handle_GenericDoubleParameter2);
|
||||||
|
|
||||||
switch( BrakeLocHandle ) {
|
switch( BrakeLocHandle ) {
|
||||||
case TBrakeHandle::FD1:
|
case TBrakeHandle::FD1:
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ static double const DPL = 0.25;
|
|||||||
double const TFV4aM::pos_table[11] = {-2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0};
|
double const TFV4aM::pos_table[11] = {-2, 6, -1, 0, -2, 1, 4, 6, 0, 0, 0};
|
||||||
double const TMHZ_EN57::pos_table[11] = {-1, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0};
|
double const TMHZ_EN57::pos_table[11] = {-1, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0};
|
||||||
double const TMHZ_K5P::pos_table[11] = { -1, 3, -1, 0, 1, 1, 2, 3, 0, 0, 0 };
|
double const TMHZ_K5P::pos_table[11] = { -1, 3, -1, 0, 1, 1, 2, 3, 0, 0, 0 };
|
||||||
|
double const TMHZ_6P::pos_table[11] = { -1, 4, -1, 0, 2, 2, 3, 4, 0, 0, 0 };
|
||||||
double const TM394::pos_table[11] = {-1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0};
|
double const TM394::pos_table[11] = {-1, 5, -1, 0, 1, 2, 4, 5, 0, 0, 0};
|
||||||
double const TH14K1::BPT_K[6][2] = {{10, 0}, {4, 1}, {0, 1}, {4, 0}, {4, -1}, {15, -1}};
|
double const TH14K1::BPT_K[6][2] = {{10, 0}, {4, 1}, {0, 1}, {4, 0}, {4, -1}, {15, -1}};
|
||||||
double const TH14K1::pos_table[11] = {-1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0};
|
double const TH14K1::pos_table[11] = {-1, 4, -1, 0, 1, 2, 3, 4, 0, 0, 0};
|
||||||
@@ -2801,6 +2802,133 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---MHZ_6P--- manipulator hamulca zespolonego 6-ciopozycyjny
|
||||||
|
|
||||||
|
double TMHZ_6P::GetPF(double i_bcp, double PP, double HP, double dt, double ep) {
|
||||||
|
static int const LBDelay = 100;
|
||||||
|
|
||||||
|
double LimCP;
|
||||||
|
double dpPipe;
|
||||||
|
double dpMainValve;
|
||||||
|
double ActFlowSpeed;
|
||||||
|
double DP;
|
||||||
|
double pom;
|
||||||
|
|
||||||
|
for (int idx = 0; idx < 5; ++idx) {
|
||||||
|
Sounds[idx] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DP = 0;
|
||||||
|
|
||||||
|
i_bcp = Max0R(Min0R(i_bcp, 3.999), -0.999); // na wszelki wypadek, zeby nie wyszlo poza zakres
|
||||||
|
|
||||||
|
if ((TP > 0))
|
||||||
|
{
|
||||||
|
DP = 0.004;
|
||||||
|
TP = TP - DP * dt;
|
||||||
|
Sounds[s_fv4a_t] = DP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TP = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EQ(i_bcp, 2)) //odcięcie - nie rób nic
|
||||||
|
LimCP = CP;
|
||||||
|
else if (i_bcp > 2.5) //hamowanie
|
||||||
|
LimCP = 3.4;
|
||||||
|
else //luzowanie
|
||||||
|
LimCP = 5.0;
|
||||||
|
pom = CP;
|
||||||
|
LimCP = Min0R(LimCP, HP); // pozycja + czasowy lub zasilanie
|
||||||
|
ActFlowSpeed = 4;
|
||||||
|
|
||||||
|
if ((LimCP > CP)) // podwyzszanie szybkie
|
||||||
|
CP = CP + 9 * Min0R(abs(LimCP - CP), 0.05) * PR(CP, LimCP) * dt; // zbiornik sterujacy;
|
||||||
|
else
|
||||||
|
CP = CP + 9 * Min0R(abs(LimCP - CP), 0.05) * PR(CP, LimCP) * dt; // zbiornik sterujacy
|
||||||
|
|
||||||
|
dpPipe = Min0R(HP, CP + TP + RedAdj);
|
||||||
|
|
||||||
|
if (Fala && EQ(i_bcp, -1))
|
||||||
|
{
|
||||||
|
dpPipe = 5.0 + TP + RedAdj + UnbrakeOverPressure;
|
||||||
|
ActFlowSpeed = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dpPipe > PP)
|
||||||
|
dpMainValve = -PFVa(HP, PP, ActFlowSpeed / LBDelay, dpPipe, 0.4);
|
||||||
|
else
|
||||||
|
dpMainValve = PFVd(PP, 0, ActFlowSpeed / LBDelay, dpPipe, 0.4);
|
||||||
|
|
||||||
|
if ((EQ(i_bcp, -1) && (AutoOvrld)) || (ManualOvrld && ManualOvrldActive))
|
||||||
|
{
|
||||||
|
if ((TP < 1))
|
||||||
|
TP = TP + 0.03 * dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EQ(i_bcp, 4))
|
||||||
|
{
|
||||||
|
DP = PF(0, PP, 2 * ActFlowSpeed / LBDelay);
|
||||||
|
dpMainValve = DP;
|
||||||
|
Sounds[s_fv4a_e] = DP;
|
||||||
|
Sounds[s_fv4a_u] = 0;
|
||||||
|
Sounds[s_fv4a_b] = 0;
|
||||||
|
Sounds[s_fv4a_x] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dpMainValve > 0)
|
||||||
|
Sounds[s_fv4a_b] = dpMainValve;
|
||||||
|
else
|
||||||
|
Sounds[s_fv4a_u] = -dpMainValve;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dpMainValve * dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMHZ_6P::Init(double Press)
|
||||||
|
{
|
||||||
|
CP = Press;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMHZ_6P::SetReductor(double nAdj)
|
||||||
|
{
|
||||||
|
RedAdj = nAdj;
|
||||||
|
}
|
||||||
|
|
||||||
|
double TMHZ_6P::GetSound(int i)
|
||||||
|
{
|
||||||
|
if (i > 4)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return Sounds[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
double TMHZ_6P::GetPos(int i)
|
||||||
|
{
|
||||||
|
return pos_table[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
double TMHZ_6P::GetCP()
|
||||||
|
{
|
||||||
|
return RP;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMHZ_6P::SetParams(bool AO, bool MO, double OverP, double)
|
||||||
|
{
|
||||||
|
AutoOvrld = AO;
|
||||||
|
ManualOvrld = MO;
|
||||||
|
UnbrakeOverPressure = std::max(0.0, OverP);
|
||||||
|
Fala = (OverP > 0.01);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TMHZ_6P::EQ(double pos, double i_pos)
|
||||||
|
{
|
||||||
|
return (pos <= i_pos + 0.5) && (pos > i_pos - 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
//---M394--- Matrosow
|
//---M394--- Matrosow
|
||||||
|
|
||||||
double TM394::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
|
double TM394::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
|
||||||
|
|||||||
@@ -632,6 +632,33 @@ public:
|
|||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TMHZ_6P : public TDriverHandle {
|
||||||
|
|
||||||
|
private:
|
||||||
|
double CP = 0.0; //zbiornik sterujący
|
||||||
|
double TP = 0.0; //zbiornik czasowy
|
||||||
|
double RP = 0.0; //zbiornik redukcyjny
|
||||||
|
double RedAdj = 0.0; //dostosowanie reduktora cisnienia (krecenie kapturkiem)
|
||||||
|
bool Fala = false; //czy jest napelnianie uderzeniowe
|
||||||
|
double UnbrakeOverPressure = 0.0; //wartosc napelniania uderzeniowego
|
||||||
|
static double const pos_table[11]; //= { -2, 10, -1, 0, 0, 2, 9, 10, 0, 0, 0 };
|
||||||
|
|
||||||
|
bool EQ(double pos, double i_pos);
|
||||||
|
|
||||||
|
public:
|
||||||
|
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
|
||||||
|
void Init(double Press)/*override*/;
|
||||||
|
void SetReductor(double nAdj)/*override*/;
|
||||||
|
double GetSound(int i)/*override*/;
|
||||||
|
double GetPos(int i)/*override*/;
|
||||||
|
double GetCP()/*override*/;
|
||||||
|
void SetParams(bool AO, bool MO, double, double); /*ovveride*/
|
||||||
|
|
||||||
|
inline TMHZ_6P(void) :
|
||||||
|
TDriverHandle()
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/* FBS2= class(TTDriverHandle)
|
/* FBS2= class(TTDriverHandle)
|
||||||
private
|
private
|
||||||
CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny
|
CP, TP, RP: real; //zbiornik sterujący, czasowy, redukcyjny
|
||||||
|
|||||||
Reference in New Issue
Block a user