mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 13:59:19 +02:00
Additionl 0 position for EIM EMUs, configurable Elf controller, first try of speedcontrol for EN57A
This commit is contained in:
24
Driver.cpp
24
Driver.cpp
@@ -2841,20 +2841,20 @@ bool TController::IncBrake()
|
|||||||
bool TController::IncBrakeEIM()
|
bool TController::IncBrakeEIM()
|
||||||
{ // zwiększenie hamowania
|
{ // zwiększenie hamowania
|
||||||
bool OK = false;
|
bool OK = false;
|
||||||
switch (mvControlling->EIMCtrlType)
|
switch (mvOccupied->EIMCtrlType)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
OK = mvControlling->IncLocalBrakeLevel(1);
|
OK = mvOccupied->IncLocalBrakeLevel(1);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
OK = mvControlling->MainCtrlPos > 0;
|
OK = mvOccupied->MainCtrlPos > 0;
|
||||||
if (OK)
|
if (OK)
|
||||||
mvControlling->MainCtrlPos = 0;
|
mvOccupied->MainCtrlPos = 0;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
OK = mvControlling->MainCtrlPos > 1;
|
OK = mvOccupied->MainCtrlPos > 1;
|
||||||
if (OK)
|
if (OK)
|
||||||
mvControlling->MainCtrlPos = 1;
|
mvOccupied->MainCtrlPos = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
@@ -2927,20 +2927,20 @@ bool TController::DecBrake()
|
|||||||
bool TController::DecBrakeEIM()
|
bool TController::DecBrakeEIM()
|
||||||
{ // zmniejszenie siły hamowania
|
{ // zmniejszenie siły hamowania
|
||||||
bool OK = false;
|
bool OK = false;
|
||||||
switch (mvControlling->EIMCtrlType)
|
switch (mvOccupied->EIMCtrlType)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
OK = mvControlling->DecLocalBrakeLevel(1);
|
OK = mvOccupied->DecLocalBrakeLevel(1);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
OK = mvControlling->MainCtrlPos < 2;
|
OK = mvOccupied->MainCtrlPos < 2;
|
||||||
if (OK)
|
if (OK)
|
||||||
mvControlling->MainCtrlPos = 2;
|
mvOccupied->MainCtrlPos = 2;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
OK = mvControlling->MainCtrlPos < 3;
|
OK = mvOccupied->MainCtrlPos < 3;
|
||||||
if (OK)
|
if (OK)
|
||||||
mvControlling->MainCtrlPos = 3;
|
mvOccupied->MainCtrlPos = 3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
|
|||||||
@@ -1310,6 +1310,8 @@ public:
|
|||||||
double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/
|
double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/
|
||||||
int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/
|
int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/
|
||||||
bool SpeedCtrlTypeTime = false; /*czy tempomat sterowany czasowo*/
|
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_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/
|
||||||
double eimv[21];
|
double eimv[21];
|
||||||
static std::vector<std::string> const eimv_labels;
|
static std::vector<std::string> const eimv_labels;
|
||||||
|
|||||||
@@ -1994,6 +1994,10 @@ bool TMoverParameters::IncScndCtrl(int CtrlSpeed)
|
|||||||
ScndCtrlActualPos = Round(Vel);
|
ScndCtrlActualPos = Round(Vel);
|
||||||
else
|
else
|
||||||
ScndCtrlActualPos = Round(Vel * 0.5);
|
ScndCtrlActualPos = Round(Vel * 0.5);
|
||||||
|
if ((EIMCtrlType == 0)&&(SpeedCtrlAutoTurnOffFlag == 1))
|
||||||
|
{
|
||||||
|
MainCtrlActualPos = MainCtrlPos;
|
||||||
|
}
|
||||||
SendCtrlToNext("SpeedCntrl", ScndCtrlActualPos, CabNo);
|
SendCtrlToNext("SpeedCntrl", ScndCtrlActualPos, CabNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6015,6 +6019,13 @@ void TMoverParameters::CheckEIMIC(double dt)
|
|||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
eimic = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : (double)MainCtrlPos / (double)MainCtrlPosNo);
|
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;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
switch (MainCtrlPos)
|
switch (MainCtrlPos)
|
||||||
@@ -6065,24 +6076,35 @@ void TMoverParameters::CheckEIMIC(double dt)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
if ((MainCtrlActualPos != MainCtrlPos) || (LastRelayTime>InitialCtrlDelay))
|
||||||
|
{
|
||||||
|
double delta = (MainCtrlActualPos == MainCtrlPos ? dt*CtrlDelay : 0.01);
|
||||||
switch (MainCtrlPos)
|
switch (MainCtrlPos)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
eimic -= clamp(1.0 + eimic, 0.0, dt*0.15); //odejmuj do -1
|
eimic -= clamp(1.0 + eimic, 0.0, delta); //odejmuj do -1
|
||||||
if (eimic > 0) eimic = 0;
|
if (eimic > 0) eimic = 0;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
eimic -= clamp(0.0 + eimic, 0.0, dt*0.15); //odejmuj do 0
|
eimic -= clamp(0.0 + eimic, 0.0, delta); //odejmuj do 0
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
eimic += clamp(0.0 - eimic, 0.0, dt*0.15); //dodawaj do 0
|
eimic += clamp(0.0 - eimic, 0.0, delta); //dodawaj do 0
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
eimic += clamp(1.0 - eimic, 0.0, dt*0.15); //dodawaj do 1
|
eimic += clamp(1.0 - eimic, 0.0, delta); //dodawaj do 1
|
||||||
if (eimic < 0) eimic = 0;
|
if (eimic < 0) eimic = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (MainCtrlActualPos == MainCtrlPos)
|
||||||
|
LastRelayTime += dt;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LastRelayTime = 0;
|
||||||
|
MainCtrlActualPos = MainCtrlPos;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
eimic -= clamp(-UniCtrlList[MainCtrlPos].SetCtrlVal + eimic, 0.0, dt * UniCtrlList[MainCtrlPos].SpeedDown); //odejmuj do X
|
eimic -= clamp(-UniCtrlList[MainCtrlPos].SetCtrlVal + eimic, 0.0, dt * UniCtrlList[MainCtrlPos].SpeedDown); //odejmuj do X
|
||||||
@@ -6105,6 +6127,15 @@ void TMoverParameters::CheckSpeedCtrl()
|
|||||||
eimicSpeedCtrl = clamp(0.5 * (ScndCtrlActualPos * 2 - Vel), -1.0, 1.0);
|
eimicSpeedCtrl = clamp(0.5 * (ScndCtrlActualPos * 2 - Vel), -1.0, 1.0);
|
||||||
else
|
else
|
||||||
eimicSpeedCtrl = 1;
|
eimicSpeedCtrl = 1;
|
||||||
|
if ((EIMCtrlType == 0) && (SpeedCtrlAutoTurnOffFlag == 1) && (MainCtrlActualPos != MainCtrlPos))
|
||||||
|
{
|
||||||
|
DecScndCtrl(1);
|
||||||
|
if (CabNo == 0)
|
||||||
|
{
|
||||||
|
SendCtrlToNext("ScndCtrl", ScndCtrlPos, 1);
|
||||||
|
SendCtrlToNext("ScndCtrl", ScndCtrlPos, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// *************************************************************************************************
|
// *************************************************************************************************
|
||||||
@@ -8680,6 +8711,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
extract_value( EIMCtrlType, "EIMCtrlType", line, "" );
|
extract_value( EIMCtrlType, "EIMCtrlType", line, "" );
|
||||||
clamp( EIMCtrlType, 0, 3 );
|
clamp( EIMCtrlType, 0, 3 );
|
||||||
LocHandleTimeTraxx = (extract_value("LocalBrakeTraxx", line) == "Yes");
|
LocHandleTimeTraxx = (extract_value("LocalBrakeTraxx", line) == "Yes");
|
||||||
|
EIMCtrlAdditionalZeros = (extract_value("EIMCtrlAddZeros", line) == "Yes");
|
||||||
|
|
||||||
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
||||||
|
|
||||||
@@ -8702,6 +8734,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
(extract_value("SpeedCtrlType", line) == "Time") ?
|
(extract_value("SpeedCtrlType", line) == "Time") ?
|
||||||
true :
|
true :
|
||||||
false;
|
false;
|
||||||
|
extract_value(SpeedCtrlAutoTurnOffFlag, "SpeedCtrlATOF", line, "");
|
||||||
|
|
||||||
// converter
|
// converter
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user