Added SpeedCtrl for TRAXX

This commit is contained in:
Królik Uszasty
2019-03-23 11:51:24 +01:00
parent 8fddbadbaf
commit 511d1c57d9
3 changed files with 44 additions and 1 deletions

View File

@@ -1306,6 +1306,7 @@ public:
double eimic = 0; /*aktualna pozycja zintegrowanego sterowania jazda i hamowaniem*/
double eimic_real = 0; /*faktycznie uzywana pozycja zintegrowanego sterowania jazda i hamowaniem*/
int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/
bool SpeedCtrlTypeTime = false; /*czy tempomat sterowany czasowo*/
double eimv_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/
double eimv[21];
static std::vector<std::string> const eimv_labels;

View File

@@ -5011,7 +5011,44 @@ double TMoverParameters::TractionForce( double dt ) {
{
if( true == Mains ) {
//tempomat
if (ScndCtrlPosNo > 1)
if (ScndCtrlPosNo == 4 && SpeedCtrlTypeTime)
{
switch (ScndCtrlPos) {
case 0:
NewSpeed = 0;
ScndCtrlActualPos = 0;
SpeedCtrlTimer = 10;
break;
case 1:
if (SpeedCtrlTimer > SpeedCtrlDelay) {
SpeedCtrlTimer = 0;
NewSpeed -= 10;
if (NewSpeed < 0) NewSpeed = 0;
}
else
SpeedCtrlTimer += dt;
break;
case 2:
SpeedCtrlTimer = 10;
ScndCtrlActualPos = NewSpeed;
break;
case 3:
if (SpeedCtrlTimer > SpeedCtrlDelay) {
SpeedCtrlTimer = 0;
NewSpeed += 10;
if (NewSpeed > Vmax) NewSpeed = Vmax;
}
else
SpeedCtrlTimer += dt;
break;
case 4:
NewSpeed = Vmax;
ScndCtrlActualPos = Vmax;
SpeedCtrlTimer = 10;
break;
}
}
else if (ScndCtrlPosNo > 1)
{
if (ScndCtrlPos != NewSpeed)
{
@@ -8604,6 +8641,10 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
// speed control
extract_value( SpeedCtrlDelay, "SpeedCtrlDelay", line, "" );
SpeedCtrlTypeTime =
(extract_value("SpeedCtrlType", line) == "Time") ?
true :
false;
// converter
{

View File

@@ -453,6 +453,7 @@ dictionary_source *TTrain::GetTrainState() {
dict->insert( "main_ctrl_actual_pos", mover->MainCtrlActualPos );
dict->insert( "scndctrl_pos", mover->ScndCtrlPos );
dict->insert( "scnd_ctrl_actual_pos", mover->ScndCtrlActualPos );
dict->insert( "new_speed", mover->NewSpeed);
// brakes
dict->insert( "manual_brake", ( mvOccupied->ManualBrakePos > 0 ) );
bool const bEP = ( mvControlled->LocHandle->GetCP() > 0.2 ) || ( fEIMParams[ 0 ][ 2 ] > 0.01 );