16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-23 00:29:19 +02:00

voltage relays, additional light cab controls, minor cab control fixes

This commit is contained in:
tmj-fstate
2018-09-12 21:33:40 +02:00
parent 450b60d7bd
commit e881092ca0
11 changed files with 189 additions and 81 deletions

View File

@@ -25,7 +25,7 @@ public:
void Turn( bool const State ); void Turn( bool const State );
inline inline
bool GetValue() const { bool GetValue() const {
return ( m_state ? 1 : 0 ); } return m_state; }
inline inline
bool Active() { bool Active() {
return ( ( pModelOn != nullptr ) return ( ( pModelOn != nullptr )

View File

@@ -410,14 +410,14 @@ struct TBoilerType {
}; };
/*rodzaj odbieraka pradu*/ /*rodzaj odbieraka pradu*/
struct TCurrentCollector { struct TCurrentCollector {
long CollectorsNo; //musi być tu, bo inaczej się kopie long CollectorsNo{0}; //musi być tu, bo inaczej się kopie
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany double MinH{ 0.0 }; double MaxH{ 0.0 }; //zakres ruchu pantografu, nigdzie nie używany
double CSW; //szerokość części roboczej (styku) ślizgacza double CSW{ 0.0 }; //szerokość części roboczej (styku) ślizgacza
double MinV; double MaxV; //minimalne i maksymalne akceptowane napięcie double MinV{ 0.0 }; double MaxV{ 0.0 }; //minimalne i maksymalne akceptowane napięcie
double OVP; //czy jest przekaznik nadnapieciowy bool OVP{ false }; //czy jest przekaznik nadnapieciowy
double InsetV; //minimalne napięcie wymagane do załączenia double InsetV{ 0.0 }; //minimalne napięcie wymagane do załączenia
double MinPress; //minimalne ciśnienie do załączenia WS double MinPress{ 0.0 }; //minimalne ciśnienie do załączenia WS
double MaxPress; //maksymalne ciśnienie za reduktorem double MaxPress{ 0.0 }; //maksymalne ciśnienie za reduktorem
//inline TCurrentCollector() { //inline TCurrentCollector() {
// CollectorsNo = 0; // CollectorsNo = 0;
// MinH, MaxH, CSW, MinV, MaxV = 0.0; // MinH, MaxH, CSW, MinV, MaxV = 0.0;
@@ -1119,6 +1119,8 @@ public:
double PantPress = 0.0; /*Cisnienie w zbiornikach pantografow*/ double PantPress = 0.0; /*Cisnienie w zbiornikach pantografow*/
bool PantPressSwitchActive{ false }; // state of the pantograph pressure switch. gets primed at defined pressure level in pantograph air system bool PantPressSwitchActive{ false }; // state of the pantograph pressure switch. gets primed at defined pressure level in pantograph air system
bool PantPressLockActive{ false }; // pwr system state flag. fires when pressure switch activates by pantograph pressure dropping below defined level bool PantPressLockActive{ false }; // pwr system state flag. fires when pressure switch activates by pantograph pressure dropping below defined level
bool NoVoltRelay{ true }; // switches off if the power level drops below threshold
bool OvervoltageRelay{ true }; // switches off if the power level goes above threshold
bool s_CAtestebrake = false; //hunter-091012: zmienna dla testu ca bool s_CAtestebrake = false; //hunter-091012: zmienna dla testu ca
/*-zmienne dla lokomotywy spalinowej z przekladnia mechaniczna*/ /*-zmienne dla lokomotywy spalinowej z przekladnia mechaniczna*/
@@ -1337,7 +1339,7 @@ public:
void FuelPumpCheck( double const Timestep ); void FuelPumpCheck( double const Timestep );
void OilPumpCheck( double const Timestep ); void OilPumpCheck( double const Timestep );
bool FuseOn(void); //bezpiecznik nadamiary bool FuseOn(void); //bezpiecznik nadamiary
bool FuseFlagCheck(void); // sprawdzanie flagi nadmiarowego bool FuseFlagCheck(void) const; // sprawdzanie flagi nadmiarowego
void FuseOff(void); // wylaczenie nadmiarowego void FuseOff(void); // wylaczenie nadmiarowego
double ShowCurrent( int AmpN ) const; //pokazuje bezwgl. wartosc pradu na wybranym amperomierzu double ShowCurrent( int AmpN ) const; //pokazuje bezwgl. wartosc pradu na wybranym amperomierzu
double ShowCurrentP(int AmpN) const; //pokazuje bezwgl. wartosc pradu w wybranym pojezdzie //Q 20160722 double ShowCurrentP(int AmpN) const; //pokazuje bezwgl. wartosc pradu w wybranym pojezdzie //Q 20160722
@@ -1357,7 +1359,7 @@ public:
bool AutoRelaySwitch(bool State); //przelacznik automatycznego rozruchu bool AutoRelaySwitch(bool State); //przelacznik automatycznego rozruchu
bool AutoRelayCheck(void);//symulacja automatycznego rozruchu bool AutoRelayCheck(void);//symulacja automatycznego rozruchu
bool ResistorsFlagCheck(void); //sprawdzenie kontrolki oporow rozruchowych NBMX bool ResistorsFlagCheck(void) const; //sprawdzenie kontrolki oporow rozruchowych NBMX
bool PantFront( bool const State, range_t const Notify = range_t::consist ); //obsluga pantografou przedniego bool PantFront( bool const State, range_t const Notify = range_t::consist ); //obsluga pantografou przedniego
bool PantRear( bool const State, range_t const Notify = range_t::consist ); //obsluga pantografu tylnego bool PantRear( bool const State, range_t const Notify = range_t::consist ); //obsluga pantografu tylnego

View File

@@ -2582,6 +2582,8 @@ bool TMoverParameters::MainSwitch( bool const State, range_t const Notify )
if( ( false == State ) if( ( false == State )
|| ( ( ( ScndCtrlPos == 0 ) || ( EngineType == TEngineType::ElectricInductionMotor ) ) || ( ( ( ScndCtrlPos == 0 ) || ( EngineType == TEngineType::ElectricInductionMotor ) )
&& ( ( ConvOvldFlag == false ) || ( TrainType == dt_EZT ) ) && ( ( ConvOvldFlag == false ) || ( TrainType == dt_EZT ) )
&& ( true == NoVoltRelay )
&& ( true == OvervoltageRelay )
&& ( LastSwitchingTime > CtrlDelay ) && ( LastSwitchingTime > CtrlDelay )
&& ( false == TestFlag( DamageFlag, dtrain_out ) ) && ( false == TestFlag( DamageFlag, dtrain_out ) )
&& ( false == TestFlag( EngDmgFlag, 1 ) ) ) ) { && ( false == TestFlag( EngDmgFlag, 1 ) ) ) ) {
@@ -4452,6 +4454,32 @@ double TMoverParameters::TractionForce( double dt ) {
} }
} }
switch( EngineType ) {
case TEngineType::ElectricSeriesMotor: {
/*
if ((Mains)) // nie wchodzić w funkcję bez potrzeby
if ( (std::max(GetTrainsetVoltage(), std::abs(Voltage)) < EnginePowerSource.CollectorParameters.MinV) ||
(std::max(GetTrainsetVoltage(), std::abs(Voltage)) * EnginePowerSource.CollectorParameters.OVP >
EnginePowerSource.CollectorParameters.MaxV))
if( MainSwitch( false, ( TrainType == dt_EZT ? range_t::unit : range_t::local ) ) ) // TODO: check whether we need to send this EMU-wide
EventFlag = true; // wywalanie szybkiego z powodu niewłaściwego napięcia
*/
// update the state of voltage relays
auto const voltage { std::max( GetTrainsetVoltage(), std::abs( RunningTraction.TractionVoltage ) ) };
NoVoltRelay = ( voltage >= EnginePowerSource.CollectorParameters.MinV );
OvervoltageRelay = ( voltage <= EnginePowerSource.CollectorParameters.MaxV ) || ( false == EnginePowerSource.CollectorParameters.OVP );
// wywalanie szybkiego z powodu niewłaściwego napięcia
EventFlag |= ( ( true == Mains )
&& ( ( false == NoVoltRelay ) || ( false == OvervoltageRelay ) )
&& ( MainSwitch( false, ( TrainType == dt_EZT ? range_t::unit : range_t::local ) ) ) ); // TODO: check whether we need to send this EMU-wide
break;
}
default: {
break;
}
}
if (ActiveDir != 0) if (ActiveDir != 0)
switch (EngineType) switch (EngineType)
{ {
@@ -4532,13 +4560,6 @@ double TMoverParameters::TractionForce( double dt ) {
if (Vhyp > CtrlDelay / 2) // jesli czas oddzialywania przekroczony if (Vhyp > CtrlDelay / 2) // jesli czas oddzialywania przekroczony
FuseOff(); // wywalanie bezpiecznika z powodu przetezenia silnikow FuseOff(); // wywalanie bezpiecznika z powodu przetezenia silnikow
if ((Mains)) // nie wchodzić w funkcję bez potrzeby
if ( (std::max(GetTrainsetVoltage(), std::abs(Voltage)) < EnginePowerSource.CollectorParameters.MinV) ||
(std::max(GetTrainsetVoltage(), std::abs(Voltage)) * EnginePowerSource.CollectorParameters.OVP >
EnginePowerSource.CollectorParameters.MaxV))
if( MainSwitch( false, ( TrainType == dt_EZT ? range_t::unit : range_t::local ) ) ) // TODO: check whether we need to send this EMU-wide
EventFlag = true; // wywalanie szybkiego z powodu niewłaściwego napięcia
if (((DynamicBrakeType == dbrake_automatic) || (DynamicBrakeType == dbrake_switch)) && (DynamicBrakeFlag)) if (((DynamicBrakeType == dbrake_automatic) || (DynamicBrakeType == dbrake_switch)) && (DynamicBrakeFlag))
Itot = Im * 2; // 2x2 silniki w EP09 Itot = Im * 2; // 2x2 silniki w EP09
else if ((TrainType == dt_EZT) && (Imin == IminLo) && (ScndS)) // yBARC - boczniki na szeregu poprawnie else if ((TrainType == dt_EZT) && (Imin == IminLo) && (ScndS)) // yBARC - boczniki na szeregu poprawnie
@@ -5161,7 +5182,7 @@ double TMoverParameters::ComputeRotatingWheel(double WForce, double dt, double n
// Q: 20160713 // Q: 20160713
// Sprawdzenie bezpiecznika nadmiarowego // Sprawdzenie bezpiecznika nadmiarowego
// ************************************************************************************************* // *************************************************************************************************
bool TMoverParameters::FuseFlagCheck(void) bool TMoverParameters::FuseFlagCheck(void) const
{ {
bool FFC; bool FFC;
@@ -5353,7 +5374,7 @@ bool TMoverParameters::MinCurrentSwitch(bool State)
// Q: 20160713 // Q: 20160713
// Sprawdzenie wskaźnika jazdy na oporach // Sprawdzenie wskaźnika jazdy na oporach
// ************************************************************************************************* // *************************************************************************************************
bool TMoverParameters::ResistorsFlagCheck(void) bool TMoverParameters::ResistorsFlagCheck(void) const
{ {
bool RFC = false; bool RFC = false;
@@ -8500,15 +8521,14 @@ void TMoverParameters::LoadFIZ_PowerParamsDecode( TPowerParameters &Powerparamet
auto &collectorparameters = Powerparameters.CollectorParameters; auto &collectorparameters = Powerparameters.CollectorParameters;
collectorparameters = TCurrentCollector();
extract_value( collectorparameters.CollectorsNo, "CollectorsNo", Line, "" ); extract_value( collectorparameters.CollectorsNo, "CollectorsNo", Line, "" );
extract_value( collectorparameters.MinH, "MinH", Line, "" ); extract_value( collectorparameters.MinH, "MinH", Line, "" );
extract_value( collectorparameters.MaxH, "MaxH", Line, "" ); extract_value( collectorparameters.MaxH, "MaxH", Line, "" );
extract_value( collectorparameters.CSW, "CSW", Line, "" ); //szerokość części roboczej extract_value( collectorparameters.CSW, "CSW", Line, "" ); //szerokość części roboczej
extract_value( collectorparameters.MaxV, "MaxVoltage", Line, "" ); extract_value( collectorparameters.MaxV, "MaxVoltage", Line, "" );
collectorparameters.OVP = //przekaźnik nadnapięciowy extract_value( collectorparameters.OVP, "OverVoltProt", Line, "" ); //przekaźnik nadnapięciowy
extract_value( "OverVoltProt", Line ) == "Yes" ?
1 :
0;
//napięcie rozłączające WS //napięcie rozłączające WS
collectorparameters.MinV = 0.5 * collectorparameters.MaxV; //gdyby parametr nie podany collectorparameters.MinV = 0.5 * collectorparameters.MaxV; //gdyby parametr nie podany
extract_value( collectorparameters.MinV, "MinV", Line, "" ); extract_value( collectorparameters.MinV, "MinV", Line, "" );

157
Train.cpp
View File

@@ -311,6 +311,8 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::instrumentlighttoggle, &TTrain::OnCommand_instrumentlighttoggle }, { user_command::instrumentlighttoggle, &TTrain::OnCommand_instrumentlighttoggle },
{ user_command::instrumentlightenable, &TTrain::OnCommand_instrumentlightenable }, { user_command::instrumentlightenable, &TTrain::OnCommand_instrumentlightenable },
{ user_command::instrumentlightdisable, &TTrain::OnCommand_instrumentlightdisable }, { user_command::instrumentlightdisable, &TTrain::OnCommand_instrumentlightdisable },
{ user_command::dashboardlighttoggle, &TTrain::OnCommand_dashboardlighttoggle },
{ user_command::timetablelighttoggle, &TTrain::OnCommand_timetablelighttoggle },
{ user_command::doorlocktoggle, &TTrain::OnCommand_doorlocktoggle }, { user_command::doorlocktoggle, &TTrain::OnCommand_doorlocktoggle },
{ user_command::doortoggleleft, &TTrain::OnCommand_doortoggleleft }, { user_command::doortoggleleft, &TTrain::OnCommand_doortoggleleft },
{ user_command::doortoggleright, &TTrain::OnCommand_doortoggleright }, { user_command::doortoggleright, &TTrain::OnCommand_doortoggleright },
@@ -370,7 +372,6 @@ TTrain::TTrain() {
bCabLightDim = false; bCabLightDim = false;
//----- //-----
pMechSittingPosition = Math3D::vector3(0, 0, 0); // ABu: 180404 pMechSittingPosition = Math3D::vector3(0, 0, 0); // ABu: 180404
InstrumentLightActive = false; // ABu: 030405
fTachoTimer = 0.0; // włączenie skoków wskazań prędkościomierza fTachoTimer = 0.0; // włączenie skoków wskazań prędkościomierza
// //
@@ -3619,6 +3620,54 @@ void TTrain::OnCommand_instrumentlightdisable( TTrain *Train, command_data const
} }
} }
void TTrain::OnCommand_dashboardlighttoggle( TTrain *Train, command_data const &Command ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( Command.action != GLFW_PRESS ) { return; }
if( Train->ggDashboardLightButton.SubModel == nullptr ) {
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
WriteLog( "Dashboard Light switch is missing, or wasn't defined" );
return;
}
if( false == Train->DashboardLightActive ) {
// turn on
Train->DashboardLightActive = true;
// visual feedback
Train->ggDashboardLightButton.UpdateValue( 1.0, Train->dsbSwitch );
}
else {
//turn off
Train->DashboardLightActive = false;
// visual feedback
Train->ggDashboardLightButton.UpdateValue( 0.0, Train->dsbSwitch );
}
}
void TTrain::OnCommand_timetablelighttoggle( TTrain *Train, command_data const &Command ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( Command.action != GLFW_PRESS ) { return; }
if( Train->ggTimetableLightButton.SubModel == nullptr ) {
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
WriteLog( "Timetable Light switch is missing, or wasn't defined" );
return;
}
if( false == Train->TimetableLightActive ) {
// turn on
Train->TimetableLightActive = true;
// visual feedback
Train->ggTimetableLightButton.UpdateValue( 1.0, Train->dsbSwitch );
}
else {
//turn off
Train->TimetableLightActive = false;
// visual feedback
Train->ggTimetableLightButton.UpdateValue( 0.0, Train->dsbSwitch );
}
}
void TTrain::OnCommand_heatingtoggle( TTrain *Train, command_data const &Command ) { void TTrain::OnCommand_heatingtoggle( TTrain *Train, command_data const &Command ) {
if( Train->ggTrainHeatingButton.SubModel == nullptr ) { if( Train->ggTrainHeatingButton.SubModel == nullptr ) {
@@ -4830,18 +4879,6 @@ bool TTrain::Update( double const Deltatime )
Console::ValueSet(6, fTachoVelocity); Console::ValueSet(6, fTachoVelocity);
} }
#endif #endif
// hunter-080812: wyrzucanie szybkiego na elektrykach gdy nie ma napiecia przy dowolnym ustawieniu kierunkowego
// Ra: to już jest w T_MoverParameters::TractionForce(), ale zależy od kierunku
if( ( mvControlled->Mains )
&& ( mvControlled->EnginePowerSource.SourceType == TPowerSource::CurrentCollector ) ) {
if( std::max( mvControlled->GetTrainsetVoltage(), std::abs( mvControlled->RunningTraction.TractionVoltage ) ) < 0.5 * mvControlled->EnginePowerSource.MaxVoltage ) {
// TODO: check whether it should affect entire consist for EMU
// TODO: check whether it should happen if there's power supplied alternatively through hvcouplers
// TODO: potentially move this to the mover module, as there isn't much reason to have this dependent on the operator presence
mvControlled->MainSwitch( false, ( mvControlled->TrainType == dt_EZT ? range_t::unit : range_t::local ) );
}
}
// hunter-091012: swiatlo // hunter-091012: swiatlo
if (bCabLight == true) if (bCabLight == true)
{ {
@@ -5290,42 +5327,49 @@ bool TTrain::Update( double const Deltatime )
if (tmp) if (tmp)
if ( mvControlled->Battery || mvControlled->ConverterFlag ) { if ( mvControlled->Battery || mvControlled->ConverterFlag ) {
btLampkaWylSzybkiB.Turn( tmp->MoverParameters->Mains ); auto const *mover { tmp->MoverParameters };
btLampkaWylSzybkiBOff.Turn( false == tmp->MoverParameters->Mains );
btLampkaOporyB.Turn(tmp->MoverParameters->ResistorsFlagCheck()); btLampkaWylSzybkiB.Turn( mover->Mains );
btLampkaWylSzybkiBOff.Turn( false == mover->Mains );
btLampkaOporyB.Turn(mover->ResistorsFlagCheck());
btLampkaBezoporowaB.Turn( btLampkaBezoporowaB.Turn(
( true == tmp->MoverParameters->ResistorsFlagCheck() ) ( true == mover->ResistorsFlagCheck() )
|| ( tmp->MoverParameters->MainCtrlActualPos == 0 ) ); // do EU04 || ( mover->MainCtrlActualPos == 0 ) ); // do EU04
if( ( tmp->MoverParameters->StLinFlag ) if( ( mover->StLinFlag )
|| ( tmp->MoverParameters->BrakePress > 2.0 ) || ( mover->BrakePress > 2.0 )
|| ( tmp->MoverParameters->PipePress < 0.36 ) ) { || ( mover->PipePress < 0.36 ) ) {
btLampkaStycznB.Turn( false ); btLampkaStycznB.Turn( false );
} }
else if( tmp->MoverParameters->BrakePress < 1.0 ) { else if( mover->BrakePress < 1.0 ) {
btLampkaStycznB.Turn( true ); // mozna prowadzic rozruch btLampkaStycznB.Turn( true ); // mozna prowadzic rozruch
} }
// hunter-271211: sygnalizacja poslizgu w pierwszym pojezdzie, gdy wystapi w drugim // hunter-271211: sygnalizacja poslizgu w pierwszym pojezdzie, gdy wystapi w drugim
btLampkaPoslizg.Turn(tmp->MoverParameters->SlippingWheels); btLampkaPoslizg.Turn(mover->SlippingWheels);
btLampkaSprezarkaB.Turn( tmp->MoverParameters->CompressorFlag ); // mutopsitka dziala btLampkaSprezarkaB.Turn( mover->CompressorFlag ); // mutopsitka dziala
btLampkaSprezarkaBOff.Turn( false == tmp->MoverParameters->CompressorFlag ); btLampkaSprezarkaBOff.Turn( false == mover->CompressorFlag );
if( mvControlled->Signalling == true ) { if( mvControlled->Signalling == true ) {
if( tmp->MoverParameters->BrakePress >= 1.45f ) { if( mover->BrakePress >= 1.45f ) {
btLampkaHamowanie2zes.Turn( true ); btLampkaHamowanie2zes.Turn( true );
} }
if( tmp->MoverParameters->BrakePress < 0.75f ) { if( mover->BrakePress < 0.75f ) {
btLampkaHamowanie2zes.Turn( false ); btLampkaHamowanie2zes.Turn( false );
} }
} }
else { else {
btLampkaHamowanie2zes.Turn( false ); btLampkaHamowanie2zes.Turn( false );
} }
btLampkaNadmPrzetwB.Turn( tmp->MoverParameters->ConvOvldFlag ); // nadmiarowy przetwornicy? btLampkaNadmPrzetwB.Turn( mover->ConvOvldFlag ); // nadmiarowy przetwornicy?
btLampkaPrzetwB.Turn( tmp->MoverParameters->ConverterFlag ); // zalaczenie przetwornicy btLampkaPrzetwB.Turn( mover->ConverterFlag ); // zalaczenie przetwornicy
btLampkaPrzetwBOff.Turn( false == tmp->MoverParameters->ConverterFlag ); btLampkaPrzetwBOff.Turn( false == mover->ConverterFlag );
btLampkaMalfunctionB.Turn( tmp->MoverParameters->dizel_heat.PA ); btLampkaHVoltageB.Turn( mover->NoVoltRelay && mover->OvervoltageRelay );
btLampkaMalfunctionB.Turn( mover->dizel_heat.PA );
// motor fuse indicator turns on if the fuse was blown in any unit under control
if( mover->Mains ) {
btLampkaNadmSil.Turn( btLampkaNadmSil.GetValue() || mover->FuseFlagCheck() );
}
} }
else // wylaczone else // wylaczone
{ {
@@ -5340,6 +5384,7 @@ bool TTrain::Update( double const Deltatime )
btLampkaNadmPrzetwB.Turn( false ); btLampkaNadmPrzetwB.Turn( false );
btLampkaPrzetwB.Turn( false ); btLampkaPrzetwB.Turn( false );
btLampkaPrzetwBOff.Turn( false ); btLampkaPrzetwBOff.Turn( false );
btLampkaHVoltageB.Turn( false );
btLampkaMalfunctionB.Turn( false ); btLampkaMalfunctionB.Turn( false );
} }
} }
@@ -5488,25 +5533,15 @@ bool TTrain::Update( double const Deltatime )
//---------- //----------
// przelaczniki // lights
// ABu030405 obsluga lampki uniwersalnej: auto const lightpower { (
if( btInstrumentLight.Active() ) // w ogóle jest InstrumentLightType == 0 ? mvControlled->Battery || mvControlled->ConverterFlag :
if( InstrumentLightActive ) // załączona InstrumentLightType == 1 ? mvControlled->Mains :
switch( InstrumentLightType ) { InstrumentLightType == 2 ? mvControlled->ConverterFlag :
case 0: false ) };
btInstrumentLight.Turn( mvControlled->Battery || mvControlled->ConverterFlag ); btInstrumentLight.Turn( InstrumentLightActive && lightpower );
break; btDashboardLight.Turn( DashboardLightActive && lightpower );
case 1: btTimetableLight.Turn( TimetableLightActive && lightpower );
btInstrumentLight.Turn( mvControlled->Mains );
break;
case 2:
btInstrumentLight.Turn( mvControlled->ConverterFlag );
break;
default:
btInstrumentLight.Turn( false );
}
else
btInstrumentLight.Turn( false );
// guziki: // guziki:
ggMainOffButton.Update(); ggMainOffButton.Update();
@@ -5566,6 +5601,8 @@ bool TTrain::Update( double const Deltatime )
} }
// hunter-091012 // hunter-091012
ggInstrumentLightButton.Update(); ggInstrumentLightButton.Update();
ggDashboardLightButton.Update();
ggTimetableLightButton.Update();
ggCabLightButton.Update(); ggCabLightButton.Update();
ggCabLightDimButton.Update(); ggCabLightDimButton.Update();
ggBatteryButton.Update(); ggBatteryButton.Update();
@@ -6698,6 +6735,8 @@ void TTrain::clear_cab_controls()
universal.Clear(); universal.Clear();
} }
ggInstrumentLightButton.Clear(); ggInstrumentLightButton.Clear();
ggDashboardLightButton.Clear();
ggTimetableLightButton.Clear();
// hunter-091012 // hunter-091012
ggCabLightButton.Clear(); ggCabLightButton.Clear();
ggCabLightDimButton.Clear(); ggCabLightDimButton.Clear();
@@ -6781,6 +6820,8 @@ void TTrain::clear_cab_controls()
btLampkaHamulecReczny.Clear(); btLampkaHamulecReczny.Clear();
btLampkaBlokadaDrzwi.Clear(); btLampkaBlokadaDrzwi.Clear();
btInstrumentLight.Clear(); btInstrumentLight.Clear();
btDashboardLight.Clear();
btTimetableLight.Clear();
btLampkaWentZaluzje.Clear(); btLampkaWentZaluzje.Clear();
btLampkaDoorLeft.Clear(); btLampkaDoorLeft.Clear();
btLampkaDoorRight.Clear(); btLampkaDoorRight.Clear();
@@ -6794,6 +6835,7 @@ void TTrain::clear_cab_controls()
btLampkaRadiotelefon.Clear(); btLampkaRadiotelefon.Clear();
btLampkaHamienie.Clear(); btLampkaHamienie.Clear();
btLampkaBrakingOff.Clear(); btLampkaBrakingOff.Clear();
btLampkaED.Clear();
btLampkaBrakeProfileG.Clear(); btLampkaBrakeProfileG.Clear();
btLampkaBrakeProfileP.Clear(); btLampkaBrakeProfileP.Clear();
btLampkaBrakeProfileR.Clear(); btLampkaBrakeProfileR.Clear();
@@ -6803,10 +6845,12 @@ void TTrain::clear_cab_controls()
btLampkaSprezarkaBOff.Clear(); btLampkaSprezarkaBOff.Clear();
btLampkaFuelPumpOff.Clear(); btLampkaFuelPumpOff.Clear();
btLampkaNapNastHam.Clear(); btLampkaNapNastHam.Clear();
btLampkaOporyB.Clear();
btLampkaStycznB.Clear(); btLampkaStycznB.Clear();
btLampkaHamowanie1zes.Clear(); btLampkaHamowanie1zes.Clear();
btLampkaHamowanie2zes.Clear(); btLampkaHamowanie2zes.Clear();
btLampkaNadmPrzetwB.Clear(); btLampkaNadmPrzetwB.Clear();
btLampkaHVoltageB.Clear();
btLampkaForward.Clear(); btLampkaForward.Clear();
btLampkaBackward.Clear(); btLampkaBackward.Clear();
// light indicators // light indicators
@@ -7001,6 +7045,14 @@ void TTrain::set_cab_controls() {
InstrumentLightActive ? InstrumentLightActive ?
1.0 : 1.0 :
0.0 ) ); 0.0 ) );
ggDashboardLightButton.PutValue( (
DashboardLightActive ?
1.0 :
0.0 ) );
ggTimetableLightButton.PutValue( (
TimetableLightActive ?
1.0 :
0.0 ) );
// doors // doors
// NOTE: we're relying on the cab models to have switches reversed for the rear cab(?) // NOTE: we're relying on the cab models to have switches reversed for the rear cab(?)
ggDoorLeftButton.PutValue( mvOccupied->DoorLeftOpened ? 1.0 : 0.0 ); ggDoorLeftButton.PutValue( mvOccupied->DoorLeftOpened ? 1.0 : 0.0 );
@@ -7149,6 +7201,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
{ "i-resistorsb:", btLampkaOporyB }, { "i-resistorsb:", btLampkaOporyB },
{ "i-contactorsb:", btLampkaStycznB }, { "i-contactorsb:", btLampkaStycznB },
{ "i-conv_ovldb:", btLampkaNadmPrzetwB }, { "i-conv_ovldb:", btLampkaNadmPrzetwB },
{ "i-hvoltageb:", btLampkaHVoltageB },
{ "i-malfunction:", btLampkaMalfunction }, { "i-malfunction:", btLampkaMalfunction },
{ "i-malfunctionb:", btLampkaMalfunctionB }, { "i-malfunctionb:", btLampkaMalfunctionB },
{ "i-forward:", btLampkaForward }, { "i-forward:", btLampkaForward },
@@ -7163,6 +7216,8 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
{ "i-rearrightlight:", btLampkaRearRightLight }, { "i-rearrightlight:", btLampkaRearRightLight },
{ "i-rearleftend:", btLampkaRearLeftEndLight }, { "i-rearleftend:", btLampkaRearLeftEndLight },
{ "i-rearrightend:", btLampkaRearRightEndLight }, { "i-rearrightend:", btLampkaRearRightEndLight },
{ "i-dashboardlight:", btDashboardLight },
{ "i-timetablelight:", btTimetableLight },
{ "i-cablight:", btCabLight } { "i-cablight:", btCabLight }
}; };
auto lookup = lights.find( Label ); auto lookup = lights.find( Label );
@@ -7290,6 +7345,8 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
{ "door_signalling_sw:", ggDoorSignallingButton }, { "door_signalling_sw:", ggDoorSignallingButton },
{ "nextcurrent_sw:", ggNextCurrentButton }, { "nextcurrent_sw:", ggNextCurrentButton },
{ "instrumentlight_sw:", ggInstrumentLightButton }, { "instrumentlight_sw:", ggInstrumentLightButton },
{ "dashboardlight_sw:", ggDashboardLightButton },
{ "timetablelight_sw:", ggTimetableLightButton },
{ "cablight_sw:", ggCabLightButton }, { "cablight_sw:", ggCabLightButton },
{ "cablightdim_sw:", ggCabLightDimButton }, { "cablightdim_sw:", ggCabLightDimButton },
{ "battery_sw:", ggBatteryButton }, { "battery_sw:", ggBatteryButton },

23
Train.h
View File

@@ -296,6 +296,8 @@ class TTrain
static void OnCommand_instrumentlighttoggle( TTrain *Train, command_data const &Command ); static void OnCommand_instrumentlighttoggle( TTrain *Train, command_data const &Command );
static void OnCommand_instrumentlightenable( TTrain *Train, command_data const &Command ); static void OnCommand_instrumentlightenable( TTrain *Train, command_data const &Command );
static void OnCommand_instrumentlightdisable( TTrain *Train, command_data const &Command ); static void OnCommand_instrumentlightdisable( TTrain *Train, command_data const &Command );
static void OnCommand_dashboardlighttoggle( TTrain *Train, command_data const &Command );
static void OnCommand_timetablelighttoggle( TTrain *Train, command_data const &Command );
static void OnCommand_doorlocktoggle( TTrain *Train, command_data const &Command ); static void OnCommand_doorlocktoggle( TTrain *Train, command_data const &Command );
static void OnCommand_doortoggleleft( TTrain *Train, command_data const &Command ); static void OnCommand_doortoggleleft( TTrain *Train, command_data const &Command );
static void OnCommand_doortoggleright( TTrain *Train, command_data const &Command ); static void OnCommand_doortoggleright( TTrain *Train, command_data const &Command );
@@ -415,6 +417,8 @@ public: // reszta może by?publiczna
std::array<TGauge, 10> ggUniversals; // NOTE: temporary arrangement until we have dynamically built control table std::array<TGauge, 10> ggUniversals; // NOTE: temporary arrangement until we have dynamically built control table
TGauge ggInstrumentLightButton; TGauge ggInstrumentLightButton;
TGauge ggDashboardLightButton;
TGauge ggTimetableLightButton;
TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny
TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia
TGauge ggBatteryButton; // Stele 161228 hebelek baterii TGauge ggBatteryButton; // Stele 161228 hebelek baterii
@@ -458,13 +462,13 @@ public: // reszta może by?publiczna
TButton btLampkaNadmPrzetw; TButton btLampkaNadmPrzetw;
TButton btLampkaPrzetw; TButton btLampkaPrzetw;
TButton btLampkaPrzetwOff; TButton btLampkaPrzetwOff;
TButton btLampkaPrzekRozn; TButton btLampkaPrzekRozn; // TODO: implement
TButton btLampkaPrzekRoznPom; TButton btLampkaPrzekRoznPom; // TODO: implement
TButton btLampkaNadmSil; TButton btLampkaNadmSil;
TButton btLampkaWylSzybki; TButton btLampkaWylSzybki;
TButton btLampkaWylSzybkiOff; TButton btLampkaWylSzybkiOff;
TButton btLampkaNadmWent; TButton btLampkaNadmWent;
TButton btLampkaNadmSpr; TButton btLampkaNadmSpr; // TODO: implement
// yB: drugie lampki dla EP05 i ET42 // yB: drugie lampki dla EP05 i ET42
TButton btLampkaOporyB; TButton btLampkaOporyB;
TButton btLampkaStycznB; TButton btLampkaStycznB;
@@ -473,6 +477,7 @@ public: // reszta może by?publiczna
TButton btLampkaNadmPrzetwB; TButton btLampkaNadmPrzetwB;
TButton btLampkaPrzetwB; TButton btLampkaPrzetwB;
TButton btLampkaPrzetwBOff; TButton btLampkaPrzetwBOff;
TButton btLampkaHVoltageB; // TODO: implement
// KURS90 lampki jazdy bezoporowej dla EU04 // KURS90 lampki jazdy bezoporowej dla EU04
TButton btLampkaBezoporowaB; TButton btLampkaBezoporowaB;
TButton btLampkaBezoporowa; TButton btLampkaBezoporowa;
@@ -485,9 +490,13 @@ public: // reszta może by?publiczna
TButton btLampkaOpory; TButton btLampkaOpory;
TButton btLampkaWysRozr; TButton btLampkaWysRozr;
TButton btInstrumentLight; TButton btInstrumentLight;
int InstrumentLightType; // ABu 030405 - swiecenie uzaleznione od: 0-nic, 1-obw.gl, 2-przetw. TButton btDashboardLight;
bool InstrumentLightActive; TButton btTimetableLight;
TButton btLampkaWentZaluzje; // ET22 int InstrumentLightType{ 0 }; // ABu 030405 - swiecenie uzaleznione od: 0-nic, 1-obw.gl, 2-przetw.
bool InstrumentLightActive{ false };
bool DashboardLightActive{ false };
bool TimetableLightActive{ false };
TButton btLampkaWentZaluzje; // ET22 // TODO: implement
TButton btLampkaOgrzewanieSkladu; TButton btLampkaOgrzewanieSkladu;
TButton btLampkaSHP; TButton btLampkaSHP;
TButton btLampkaCzuwaka; // McZapkie-141102 TButton btLampkaCzuwaka; // McZapkie-141102
@@ -503,7 +512,7 @@ public: // reszta może by?publiczna
TButton btLampkaBocznik2; TButton btLampkaBocznik2;
TButton btLampkaBocznik3; TButton btLampkaBocznik3;
TButton btLampkaBocznik4; TButton btLampkaBocznik4;
TButton btLampkaRadiotelefon; TButton btLampkaRadiotelefon; // TODO: implement
TButton btLampkaHamienie; TButton btLampkaHamienie;
TButton btLampkaBrakingOff; TButton btLampkaBrakingOff;
TButton btLampkaED; // Stele 161228 hamowanie elektrodynamiczne TButton btLampkaED; // Stele 161228 hamowanie elektrodynamiczne

View File

@@ -200,6 +200,8 @@ commanddescription_sequence Commands_descriptions = {
{ "instrumentlighttoggle", command_target::vehicle }, { "instrumentlighttoggle", command_target::vehicle },
{ "instrumentlightenable", command_target::vehicle }, { "instrumentlightenable", command_target::vehicle },
{ "instrumentlightdisable", command_target::vehicle }, { "instrumentlightdisable", command_target::vehicle },
{ "dshboardlighttoggle", command_target::vehicle },
{ "timetablelighttoggle", command_target::vehicle },
{ "generictoggle0", command_target::vehicle }, { "generictoggle0", command_target::vehicle },
{ "generictoggle1", command_target::vehicle }, { "generictoggle1", command_target::vehicle },
{ "generictoggle2", command_target::vehicle }, { "generictoggle2", command_target::vehicle },

View File

@@ -193,6 +193,8 @@ enum class user_command {
instrumentlighttoggle, instrumentlighttoggle,
instrumentlightenable, instrumentlightenable,
instrumentlightdisable, instrumentlightdisable,
dashboardlighttoggle,
timetablelighttoggle,
generictoggle0, generictoggle0,
generictoggle1, generictoggle1,
generictoggle2, generictoggle2,

View File

@@ -202,6 +202,8 @@ driverkeyboard_input::default_bindings() {
{ user_command::instrumentlighttoggle, GLFW_KEY_SEMICOLON }, { user_command::instrumentlighttoggle, GLFW_KEY_SEMICOLON },
// instrumentlightenable, // instrumentlightenable,
// instrumentlightdisable, // instrumentlightdisable,
// dashboardlighttoggle,
// timetablelighttoggle,
{ user_command::generictoggle0, GLFW_KEY_0 }, { user_command::generictoggle0, GLFW_KEY_0 },
{ user_command::generictoggle1, GLFW_KEY_1 }, { user_command::generictoggle1, GLFW_KEY_1 },
{ user_command::generictoggle2, GLFW_KEY_2 }, { user_command::generictoggle2, GLFW_KEY_2 },

View File

@@ -676,6 +676,12 @@ drivermouse_input::default_bindings() {
{ "instrumentlight_sw:", { { "instrumentlight_sw:", {
user_command::instrumentlighttoggle, user_command::instrumentlighttoggle,
user_command::none } }, user_command::none } },
{ "dashboardlight_sw:", {
user_command::dashboardlighttoggle,
user_command::none } },
{ "timetablelight_sw:", {
user_command::timetablelighttoggle,
user_command::none } },
{ "cablight_sw:", { { "cablight_sw:", {
user_command::interiorlighttoggle, user_command::interiorlighttoggle,
user_command::none } }, user_command::none } },

View File

@@ -139,6 +139,8 @@ init() {
"door locking", "door locking",
"current indicator source", "current indicator source",
"instrument light", "instrument light",
"dashboard light",
"timetable light",
"interior light", "interior light",
"interior light dimmer", "interior light dimmer",
"battery", "battery",
@@ -271,6 +273,8 @@ init() {
"sygnalizacja blokady drzwi", "sygnalizacja blokady drzwi",
"prady drugiego czlonu", "prady drugiego czlonu",
"oswietlenie przyrzadow", "oswietlenie przyrzadow",
"oswietlenie pulpitu",
"oswietlenie rozkladu jazdy",
"oswietlenie kabiny", "oswietlenie kabiny",
"przyciemnienie oswietlenia kabiny", "przyciemnienie oswietlenia kabiny",
"bateria", "bateria",
@@ -375,6 +379,8 @@ init() {
"door_signalling_sw:", "door_signalling_sw:",
"nextcurrent_sw:", "nextcurrent_sw:",
"instrumentlight_sw:", "instrumentlight_sw:",
"dashboardlight_sw:",
"timetablelight_sw:",
"cablight_sw:", "cablight_sw:",
"cablightdim_sw:", "cablightdim_sw:",
"battery_sw:", "battery_sw:",

View File

@@ -128,6 +128,8 @@ enum string {
cab_door_signalling_sw, cab_door_signalling_sw,
cab_nextcurrent_sw, cab_nextcurrent_sw,
cab_instrumentlight_sw, cab_instrumentlight_sw,
cab_dashboardlight_sw,
cab_timetablelight_sw,
cab_cablight_sw, cab_cablight_sw,
cab_cablightdim_sw, cab_cablightdim_sw,
cab_battery_sw, cab_battery_sw,