mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 00:49:19 +02:00
Additionl 0 position for EIM EMUs, configurable Elf controller, first try of speedcontrol for EN57A
This commit is contained in:
committed by
tmj-fstate
parent
9185030b4b
commit
2db964ea40
24
Driver.cpp
24
Driver.cpp
@@ -2844,20 +2844,20 @@ bool TController::IncBrake()
|
||||
bool TController::IncBrakeEIM()
|
||||
{ // zwiększenie hamowania
|
||||
bool OK = false;
|
||||
switch (mvControlling->EIMCtrlType)
|
||||
switch (mvOccupied->EIMCtrlType)
|
||||
{
|
||||
case 0:
|
||||
OK = mvControlling->IncLocalBrakeLevel(1);
|
||||
OK = mvOccupied->IncLocalBrakeLevel(1);
|
||||
break;
|
||||
case 1:
|
||||
OK = mvControlling->MainCtrlPos > 0;
|
||||
OK = mvOccupied->MainCtrlPos > 0;
|
||||
if (OK)
|
||||
mvControlling->MainCtrlPos = 0;
|
||||
mvOccupied->MainCtrlPos = 0;
|
||||
break;
|
||||
case 2:
|
||||
OK = mvControlling->MainCtrlPos > 1;
|
||||
OK = mvOccupied->MainCtrlPos > 1;
|
||||
if (OK)
|
||||
mvControlling->MainCtrlPos = 1;
|
||||
mvOccupied->MainCtrlPos = 1;
|
||||
break;
|
||||
}
|
||||
return OK;
|
||||
@@ -2936,20 +2936,20 @@ bool TController::DecBrake()
|
||||
bool TController::DecBrakeEIM()
|
||||
{ // zmniejszenie siły hamowania
|
||||
bool OK = false;
|
||||
switch (mvControlling->EIMCtrlType)
|
||||
switch (mvOccupied->EIMCtrlType)
|
||||
{
|
||||
case 0:
|
||||
OK = mvControlling->DecLocalBrakeLevel(1);
|
||||
OK = mvOccupied->DecLocalBrakeLevel(1);
|
||||
break;
|
||||
case 1:
|
||||
OK = mvControlling->MainCtrlPos < 2;
|
||||
OK = mvOccupied->MainCtrlPos < 2;
|
||||
if (OK)
|
||||
mvControlling->MainCtrlPos = 2;
|
||||
mvOccupied->MainCtrlPos = 2;
|
||||
break;
|
||||
case 2:
|
||||
OK = mvControlling->MainCtrlPos < 3;
|
||||
OK = mvOccupied->MainCtrlPos < 3;
|
||||
if (OK)
|
||||
mvControlling->MainCtrlPos = 3;
|
||||
mvOccupied->MainCtrlPos = 3;
|
||||
break;
|
||||
}
|
||||
return OK;
|
||||
|
||||
@@ -1312,6 +1312,8 @@ public:
|
||||
double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/
|
||||
int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/
|
||||
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 */
|
||||
double eimv_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/
|
||||
double eimv[21];
|
||||
static std::vector<std::string> const eimv_labels;
|
||||
|
||||
@@ -2001,6 +2001,10 @@ bool TMoverParameters::IncScndCtrl(int CtrlSpeed)
|
||||
ScndCtrlActualPos = Round(Vel);
|
||||
else
|
||||
ScndCtrlActualPos = Round(Vel * 0.5);
|
||||
if ((EIMCtrlType == 0)&&(SpeedCtrlAutoTurnOffFlag == 1))
|
||||
{
|
||||
MainCtrlActualPos = MainCtrlPos;
|
||||
}
|
||||
SendCtrlToNext("SpeedCntrl", ScndCtrlActualPos, CabNo);
|
||||
}
|
||||
|
||||
@@ -6018,6 +6022,13 @@ void TMoverParameters::CheckEIMIC(double dt)
|
||||
{
|
||||
case 0:
|
||||
eimic = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : (double)MainCtrlPos / (double)MainCtrlPosNo);
|
||||
if (EIMCtrlAdditionalZeros)
|
||||
{
|
||||
if (eimic > 0.001)
|
||||
eimic = std::max(0.002, eimic * (double)MainCtrlPosNo / ((double)MainCtrlPosNo - 1.0) - 1.0 / ((double)MainCtrlPosNo - 1.0));
|
||||
if (eimic < -0.001)
|
||||
eimic = std::min(-0.002, eimic * (double)LocalBrakePosNo / ((double)LocalBrakePosNo - 1.0) + 1.0 / ((double)LocalBrakePosNo - 1.0));
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
switch (MainCtrlPos)
|
||||
@@ -6068,23 +6079,34 @@ void TMoverParameters::CheckEIMIC(double dt)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
switch (MainCtrlPos)
|
||||
if ((MainCtrlActualPos != MainCtrlPos) || (LastRelayTime>InitialCtrlDelay))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
eimic -= clamp(1.0 + eimic, 0.0, dt*0.15); //odejmuj do -1
|
||||
if (eimic > 0) eimic = 0;
|
||||
break;
|
||||
case 2:
|
||||
eimic -= clamp(0.0 + eimic, 0.0, dt*0.15); //odejmuj do 0
|
||||
break;
|
||||
case 3:
|
||||
eimic += clamp(0.0 - eimic, 0.0, dt*0.15); //dodawaj do 0
|
||||
break;
|
||||
case 4:
|
||||
eimic += clamp(1.0 - eimic, 0.0, dt*0.15); //dodawaj do 1
|
||||
if (eimic < 0) eimic = 0;
|
||||
break;
|
||||
double delta = (MainCtrlActualPos == MainCtrlPos ? dt*CtrlDelay : 0.01);
|
||||
switch (MainCtrlPos)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
eimic -= clamp(1.0 + eimic, 0.0, delta); //odejmuj do -1
|
||||
if (eimic > 0) eimic = 0;
|
||||
break;
|
||||
case 2:
|
||||
eimic -= clamp(0.0 + eimic, 0.0, delta); //odejmuj do 0
|
||||
break;
|
||||
case 3:
|
||||
eimic += clamp(0.0 - eimic, 0.0, delta); //dodawaj do 0
|
||||
break;
|
||||
case 4:
|
||||
eimic += clamp(1.0 - eimic, 0.0, delta); //dodawaj do 1
|
||||
if (eimic < 0) eimic = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (MainCtrlActualPos == MainCtrlPos)
|
||||
LastRelayTime += dt;
|
||||
else
|
||||
{
|
||||
LastRelayTime = 0;
|
||||
MainCtrlActualPos = MainCtrlPos;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
@@ -6108,6 +6130,15 @@ void TMoverParameters::CheckSpeedCtrl()
|
||||
eimicSpeedCtrl = clamp(0.5 * (ScndCtrlActualPos * 2 - Vel), -1.0, 1.0);
|
||||
else
|
||||
eimicSpeedCtrl = 1;
|
||||
if ((EIMCtrlType == 0) && (SpeedCtrlAutoTurnOffFlag == 1) && (MainCtrlActualPos != MainCtrlPos))
|
||||
{
|
||||
DecScndCtrl(1);
|
||||
if (CabNo == 0)
|
||||
{
|
||||
SendCtrlToNext("ScndCtrl", ScndCtrlPos, 1);
|
||||
SendCtrlToNext("ScndCtrl", ScndCtrlPos, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// *************************************************************************************************
|
||||
@@ -8708,6 +8739,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
||||
extract_value( EIMCtrlType, "EIMCtrlType", line, "" );
|
||||
clamp( EIMCtrlType, 0, 3 );
|
||||
LocHandleTimeTraxx = (extract_value("LocalBrakeTraxx", line) == "Yes");
|
||||
EIMCtrlAdditionalZeros = (extract_value("EIMCtrlAddZeros", line) == "Yes");
|
||||
|
||||
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
||||
|
||||
@@ -8730,6 +8762,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
||||
(extract_value("SpeedCtrlType", line) == "Time") ?
|
||||
true :
|
||||
false;
|
||||
extract_value(SpeedCtrlAutoTurnOffFlag, "SpeedCtrlATOF", line, "");
|
||||
|
||||
// converter
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user