mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 13:59:19 +02:00
Merge remote-tracking branch 'tmj/master' into sim
This commit is contained in:
@@ -1044,7 +1044,7 @@ public:
|
||||
start_t BatteryStart = start_t::manual;
|
||||
bool EpFuse = true; /*Czy sa zalavzone baterie*/
|
||||
bool Signalling = false; /*Czy jest zalaczona sygnalizacja hamowania ostatniego wagonu*/
|
||||
bool Radio = true; /*Czy jest zalaczony radiotelefon*/
|
||||
bool Radio = false; /*Czy jest zalaczony radiotelefon*/
|
||||
float NominalBatteryVoltage = 0.f; /*Winger - baterie w elektrykach*/
|
||||
TDimension Dim; /*wymiary*/
|
||||
double Cx = 0.0; /*wsp. op. aerodyn.*/
|
||||
@@ -1130,6 +1130,7 @@ public:
|
||||
double LockPipeOn = -1.0;
|
||||
double LockPipeOff = -1.0;
|
||||
double HandleUnlock = -3.0;
|
||||
bool EmergencyCutsOffHandle = false;
|
||||
int CompressorListPosNo = 0;
|
||||
int CompressorListDefPos = 1;
|
||||
bool CompressorListWrap = false;
|
||||
@@ -1321,6 +1322,7 @@ public:
|
||||
int PlatformOpenMethod { 2 }; /*sposob animacji stopnia*/
|
||||
#endif
|
||||
double MirrorMaxShift { 90.0 };
|
||||
double MirrorVelClose { 5.0 };
|
||||
bool ScndS = false; /*Czy jest bocznikowanie na szeregowej*/
|
||||
bool SpeedCtrl = false; /*czy jest tempomat*/
|
||||
speed_control SpeedCtrlUnit; /*parametry tempomatu*/
|
||||
@@ -1559,6 +1561,7 @@ public:
|
||||
bool SpeedCtrlTypeTime = false; /*czy tempomat sterowany czasowo*/
|
||||
int SpeedCtrlAutoTurnOffFlag = 0; /*czy tempomat sam się wyłącza*/
|
||||
bool EIMCtrlAdditionalZeros = false; /*czy ma dodatkowe zero jazdy i zero hamowania */
|
||||
bool EIMCtrlEmergency = false; /*czy ma dodatkowe zero jazdy i zero hamowania */
|
||||
double eimv_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/
|
||||
double eimv[21];
|
||||
static std::vector<std::string> const eimv_labels;
|
||||
|
||||
@@ -2279,7 +2279,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed)
|
||||
else {
|
||||
++MainCtrlPos;
|
||||
OK = true;
|
||||
if ((EIMCtrlType == 0) && (SpeedCtrlAutoTurnOffFlag == 1) && (MainCtrlActualPos != MainCtrlPos))
|
||||
if ((EIMCtrlType == 0) && (SpeedCtrlAutoTurnOffFlag & 1 == 1) && (MainCtrlActualPos != MainCtrlPos))
|
||||
{
|
||||
DecScndCtrl(2);
|
||||
SpeedCtrlUnit.IsActive = false;
|
||||
@@ -2448,7 +2448,7 @@ bool TMoverParameters::DecMainCtrl(int CtrlSpeed)
|
||||
{
|
||||
MainCtrlPos--;
|
||||
OK = true;
|
||||
if ((EIMCtrlType == 0) && (SpeedCtrlAutoTurnOffFlag == 1) && (MainCtrlActualPos != MainCtrlPos)) {
|
||||
if ((EIMCtrlType == 0) && (SpeedCtrlAutoTurnOffFlag & 1 == 1) && (MainCtrlActualPos != MainCtrlPos)) {
|
||||
DecScndCtrl(2);
|
||||
SpeedCtrlUnit.IsActive = false;
|
||||
}
|
||||
@@ -2612,7 +2612,7 @@ bool TMoverParameters::IncScndCtrl(int CtrlSpeed)
|
||||
if ((OK) && (EngineType == TEngineType::ElectricInductionMotor) && (ScndCtrlPosNo == 1) && (MainCtrlPos>0))
|
||||
{
|
||||
SpeedCtrlValue = Vel;
|
||||
if ((EIMCtrlType == 0)&&(SpeedCtrlAutoTurnOffFlag == 1))
|
||||
if ((EIMCtrlType == 0)&&(SpeedCtrlAutoTurnOffFlag & 1 == 1))
|
||||
{
|
||||
MainCtrlActualPos = MainCtrlPos;
|
||||
}
|
||||
@@ -2841,7 +2841,7 @@ bool TMoverParameters::Sandbox( bool const State, range_t const Notify )
|
||||
if( SandDose != State ) {
|
||||
if( SandDose == false ) {
|
||||
// switch on
|
||||
if( Sand > 0 ) {
|
||||
if(( Sand > 0 ) && ( DirActive != 0 )) {
|
||||
SandDose = true;
|
||||
result = true;
|
||||
}
|
||||
@@ -4214,7 +4214,8 @@ void TMoverParameters::UpdatePipePressure(double dt)
|
||||
dpLocalValve = LocHandle->GetPF(LocalBrakePosAEIM, Hamulec->GetBCP(), ScndPipePress, dt, 0);
|
||||
|
||||
LockPipe = PipePress < (LockPipe ? LockPipeOff : LockPipeOn);
|
||||
bool lock_new = (LockPipe && !UnlockPipe && (BrakeCtrlPosR > HandleUnlock)); //new simple codition based on .fiz
|
||||
bool lock_new = (LockPipe && !UnlockPipe && (BrakeCtrlPosR > HandleUnlock))
|
||||
|| ((EmergencyCutsOffHandle) && (EmergencyValveFlow > 0)); //new simple codition based on .fiz
|
||||
bool lock_old = ((BrakeHandle == TBrakeHandle::FV4a) //old complex condition based on assumptions
|
||||
&& ((PipePress < 2.75)
|
||||
&& ((Hamulec->GetStatus() & b_rls) == 0))
|
||||
@@ -4252,6 +4253,10 @@ void TMoverParameters::UpdatePipePressure(double dt)
|
||||
dpMainValve = Handle->GetPF( 0, PipePress, temp, dt, EqvtPipePress );
|
||||
}
|
||||
}
|
||||
else if (BrakeCtrlPos == Handle->GetPos(bh_EB))
|
||||
{
|
||||
dpMainValve = Handle->GetPF(BrakeCtrlPosR, PipePress, temp, dt, EqvtPipePress);
|
||||
}
|
||||
|
||||
if (dpMainValve < 0) // && (PipePressureVal > 0.01) //50
|
||||
if (Compressor > ScndPipePress)
|
||||
@@ -4270,6 +4275,8 @@ void TMoverParameters::UpdatePipePressure(double dt)
|
||||
|
||||
if( ( true == RadioStopFlag )
|
||||
|| ( true == AlarmChainFlag )
|
||||
|| (( true == EIMCtrlEmergency)
|
||||
&& (LocalBrakePosA >= 1.0))
|
||||
|| SecuritySystem.is_braking() )
|
||||
/*
|
||||
// NOTE: disabled because 32 is 'load destroyed' flag, what does this have to do with emergency brake?
|
||||
@@ -6915,17 +6922,21 @@ bool TMoverParameters::DropAllPantographs( bool const State, range_t const Notif
|
||||
|
||||
void TMoverParameters::CheckEIMIC(double dt)
|
||||
{
|
||||
double offset = EIMCtrlAdditionalZeros ? 1.0 : 0.0;
|
||||
double multiplier = (EIMCtrlEmergency ? 1.0 : 0.0) + offset;
|
||||
switch (EIMCtrlType)
|
||||
{
|
||||
case 0:
|
||||
eimic = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : (double)MainCtrlPos / (double)MainCtrlPosNo);
|
||||
if (EIMCtrlAdditionalZeros)
|
||||
if (EIMCtrlAdditionalZeros || EIMCtrlEmergency)
|
||||
{
|
||||
if (eimic > 0.001)
|
||||
eimic = std::max(0.002, eimic * (double)MainCtrlPosNo / ((double)MainCtrlPosNo - 1.0) - 1.0 / ((double)MainCtrlPosNo - 1.0));
|
||||
eimic = std::max(0.002, eimic * (double)MainCtrlPosNo / ((double)MainCtrlPosNo - offset) - offset / ((double)MainCtrlPosNo - offset));
|
||||
if ((eimic < -0.001) && (BrakeHandle != TBrakeHandle::MHZ_EN57))
|
||||
eimic = std::min(-0.002, eimic * (double)LocalBrakePosNo / ((double)LocalBrakePosNo - 1.0) + 1.0 / ((double)LocalBrakePosNo - 1.0));
|
||||
eimic = std::min(-0.002, eimic * (double)LocalBrakePosNo / ((double)LocalBrakePosNo - multiplier) + offset / ((double)LocalBrakePosNo - multiplier));
|
||||
}
|
||||
if ((eimic > 0.001) && (SpeedCtrlUnit.IsActive))
|
||||
eimic = std::max(eimic, SpeedCtrlUnit.MinPower);
|
||||
break;
|
||||
case 1:
|
||||
switch (MainCtrlPos)
|
||||
@@ -7054,6 +7065,10 @@ void TMoverParameters::CheckEIMIC(double dt)
|
||||
|
||||
void TMoverParameters::CheckSpeedCtrl(double dt)
|
||||
{
|
||||
if (EIMCtrlType == 0)
|
||||
{
|
||||
SpeedCtrlUnit.DesiredPower = std::max(eimic, 0.0);
|
||||
}
|
||||
double accfactor = SpeedCtrlUnit.DesiredPower;
|
||||
if (EIMCtrlType >= 2) {
|
||||
if (MainCtrlPos < MainCtrlPosNo - 2) {
|
||||
@@ -7075,7 +7090,7 @@ void TMoverParameters::CheckSpeedCtrl(double dt)
|
||||
if (true) {
|
||||
if ((!SpeedCtrlUnit.Standby)) {
|
||||
if (SpeedCtrlUnit.ManualStateOverride) {
|
||||
if (eimic > 0.009) eimic = 1.0;
|
||||
if (eimic > 0.0009) eimic = 1.0;
|
||||
}
|
||||
double error = (std::max(SpeedCtrlValue + SpeedCtrlUnit.Offset, 0.0) - Vel);
|
||||
double factorP = error > 0 ? SpeedCtrlUnit.FactorPpos : SpeedCtrlUnit.FactorPneg;
|
||||
@@ -7123,6 +7138,11 @@ void TMoverParameters::CheckSpeedCtrl(double dt)
|
||||
else
|
||||
eimicSpeedCtrl = clamp(0.5 * (SpeedCtrlValue * 2 - Vel), -1.0, 1.0);
|
||||
}
|
||||
if (((SpeedCtrlAutoTurnOffFlag & 2) == 2) && (Hamulec->GetEDBCP() > 0.25))
|
||||
{
|
||||
DecScndCtrl(2);
|
||||
SpeedCtrlUnit.IsActive = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
eimicSpeedCtrl = 1;
|
||||
@@ -9726,6 +9746,7 @@ void TMoverParameters::LoadFIZ_Brake( std::string const &line ) {
|
||||
extract_value( LockPipeOn, "LPOn", line, "-1");
|
||||
extract_value( LockPipeOff, "LPOff", line, "-1");
|
||||
extract_value( HandleUnlock, "HandlePipeUnlockPos", line, "-3");
|
||||
extract_value( EmergencyCutsOffHandle, "EmergencyCutsOffHandle", line, "");
|
||||
{
|
||||
std::map<std::string, int> compressorpowers{
|
||||
{ "Main", 0 },
|
||||
@@ -9841,6 +9862,8 @@ void TMoverParameters::LoadFIZ_Doors( std::string const &line ) {
|
||||
if( platformopenmethod == "Shift" ) { Doors.step_type = 1; } // przesuw
|
||||
|
||||
extract_value( MirrorMaxShift, "MirrorMaxShift", line, "" );
|
||||
extract_value( MirrorVelClose, "MirrorVelClose", line, "");
|
||||
|
||||
}
|
||||
|
||||
void TMoverParameters::LoadFIZ_BuffCoupl( std::string const &line, int const Index ) {
|
||||
@@ -10099,6 +10122,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
||||
EIMCtrlType = clamp( EIMCtrlType, 0, 3 );
|
||||
extract_value( LocHandleTimeTraxx, "LocalBrakeTraxx", line, "" );
|
||||
extract_value( EIMCtrlAdditionalZeros, "EIMCtrlAddZeros", line, "" );
|
||||
extract_value( EIMCtrlEmergency, "EIMCtrlEmergency", line, "");
|
||||
|
||||
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
||||
|
||||
|
||||
Reference in New Issue
Block a user