16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-20 22:59:18 +02:00

basic diesel engine temperature calculations heating/cooling subsystem devices

This commit is contained in:
tmj-fstate
2018-04-16 20:08:30 +02:00
parent 03d4720b3e
commit aac16c55be
13 changed files with 1105 additions and 105 deletions

302
Train.cpp
View File

@@ -228,6 +228,21 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::oilpumptoggle, &TTrain::OnCommand_oilpumptoggle },
{ user_command::oilpumpenable, &TTrain::OnCommand_oilpumpenable },
{ user_command::oilpumpdisable, &TTrain::OnCommand_oilpumpdisable },
{ user_command::waterheaterbreakertoggle, &TTrain::OnCommand_waterheaterbreakertoggle },
{ user_command::waterheaterbreakerclose, &TTrain::OnCommand_waterheaterbreakerclose },
{ user_command::waterheaterbreakeropen, &TTrain::OnCommand_waterheaterbreakeropen },
{ user_command::waterheatertoggle, &TTrain::OnCommand_waterheatertoggle },
{ user_command::waterheaterenable, &TTrain::OnCommand_waterheaterenable },
{ user_command::waterheaterdisable, &TTrain::OnCommand_waterheaterdisable },
{ user_command::waterpumpbreakertoggle, &TTrain::OnCommand_waterpumpbreakertoggle },
{ user_command::waterpumpbreakerclose, &TTrain::OnCommand_waterpumpbreakerclose },
{ user_command::waterpumpbreakeropen, &TTrain::OnCommand_waterpumpbreakeropen },
{ user_command::waterpumptoggle, &TTrain::OnCommand_waterpumptoggle },
{ user_command::waterpumpenable, &TTrain::OnCommand_waterpumpenable },
{ user_command::waterpumpdisable, &TTrain::OnCommand_waterpumpdisable },
{ user_command::watercircuitslinktoggle, &TTrain::OnCommand_watercircuitslinktoggle },
{ user_command::watercircuitslinkenable, &TTrain::OnCommand_watercircuitslinkenable },
{ user_command::watercircuitslinkdisable, &TTrain::OnCommand_watercircuitslinkdisable },
{ user_command::convertertoggle, &TTrain::OnCommand_convertertoggle },
{ user_command::converterenable, &TTrain::OnCommand_converterenable },
{ user_command::converterdisable, &TTrain::OnCommand_converterdisable },
@@ -2078,6 +2093,201 @@ void TTrain::OnCommand_oilpumpdisable( TTrain *Train, command_data const &Comman
}
}
void TTrain::OnCommand_waterheaterbreakertoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->mvControlled->WaterHeater.breaker ) {
// turn on
OnCommand_waterheaterbreakerclose( Train, Command );
}
else {
//turn off
OnCommand_waterheaterbreakeropen( Train, Command );
}
}
}
void TTrain::OnCommand_waterheaterbreakerclose( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterHeaterBreakerButton.UpdateValue( 1.0, Train->dsbSwitch );
if( true == Train->mvControlled->WaterHeater.breaker ) { return; } // already enabled
Train->mvControlled->WaterHeaterBreakerSwitch( true );
}
}
void TTrain::OnCommand_waterheaterbreakeropen( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterHeaterBreakerButton.UpdateValue( 0.0, Train->dsbSwitch );
if( false == Train->mvControlled->WaterHeater.breaker ) { return; } // already enabled
Train->mvControlled->WaterHeaterBreakerSwitch( false );
}
}
void TTrain::OnCommand_waterheatertoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->mvControlled->WaterHeater.is_enabled ) {
// turn on
OnCommand_waterheaterenable( Train, Command );
}
else {
//turn off
OnCommand_waterheaterdisable( Train, Command );
}
}
}
void TTrain::OnCommand_waterheaterenable( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterHeaterButton.UpdateValue( 1.0, Train->dsbSwitch );
if( true == Train->mvControlled->WaterHeater.is_enabled ) { return; } // already enabled
Train->mvControlled->WaterHeaterSwitch( true );
}
}
void TTrain::OnCommand_waterheaterdisable( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterHeaterButton.UpdateValue( 0.0, Train->dsbSwitch );
if( false == Train->mvControlled->WaterHeater.is_enabled ) { return; } // already disabled
Train->mvControlled->WaterHeaterSwitch( false );
}
}
void TTrain::OnCommand_waterpumpbreakertoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->mvControlled->WaterPump.breaker ) {
// turn on
OnCommand_waterpumpbreakerclose( Train, Command );
}
else {
//turn off
OnCommand_waterpumpbreakeropen( Train, Command );
}
}
}
void TTrain::OnCommand_waterpumpbreakerclose( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterPumpBreakerButton.UpdateValue( 1.0, Train->dsbSwitch );
if( true == Train->mvControlled->WaterPump.breaker ) { return; } // already enabled
Train->mvControlled->WaterPumpBreakerSwitch( true );
}
}
void TTrain::OnCommand_waterpumpbreakeropen( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterPumpBreakerButton.UpdateValue( 0.0, Train->dsbSwitch );
if( false == Train->mvControlled->WaterPump.breaker ) { return; } // already enabled
Train->mvControlled->WaterPumpBreakerSwitch( false );
}
}
void TTrain::OnCommand_waterpumptoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->mvControlled->WaterPump.is_enabled ) {
// turn on
OnCommand_waterpumpenable( Train, Command );
}
else {
//turn off
OnCommand_waterpumpdisable( Train, Command );
}
}
}
void TTrain::OnCommand_waterpumpenable( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterPumpButton.UpdateValue( 1.0, Train->dsbSwitch );
if( true == Train->mvControlled->WaterPump.is_enabled ) { return; } // already enabled
Train->mvControlled->WaterPumpSwitch( true );
}
}
void TTrain::OnCommand_waterpumpdisable( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterPumpButton.UpdateValue( 0.0, Train->dsbSwitch );
if( false == Train->mvControlled->WaterPump.is_enabled ) { return; } // already disabled
Train->mvControlled->WaterPumpSwitch( false );
}
}
void TTrain::OnCommand_watercircuitslinktoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->mvControlled->WaterCircuitsLink ) {
// turn on
OnCommand_watercircuitslinkenable( Train, Command );
}
else {
//turn off
OnCommand_watercircuitslinkdisable( Train, Command );
}
}
}
void TTrain::OnCommand_watercircuitslinkenable( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterCircuitsLinkButton.UpdateValue( 1.0, Train->dsbSwitch );
if( true == Train->mvControlled->WaterCircuitsLink ) { return; } // already enabled
Train->mvControlled->WaterCircuitsLinkSwitch( true );
}
}
void TTrain::OnCommand_watercircuitslinkdisable( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
// visual feedback
Train->ggWaterCircuitsLinkButton.UpdateValue( 0.0, Train->dsbSwitch );
if( false == Train->mvControlled->WaterCircuitsLink ) { return; } // already disabled
Train->mvControlled->WaterCircuitsLinkSwitch( false );
}
}
void TTrain::OnCommand_convertertoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) {
@@ -3938,8 +4148,8 @@ bool TTrain::Update( double const Deltatime )
}
}
if( m_linebreakerstate == 1 ) {
if( false == mvControlled->Mains ) {
// crude way to catch cases where the main was knocked out and the user is trying to restart it
if( false == ( mvControlled->Mains || mvControlled->dizel_startup ) ) {
// crude way to catch cases where the main was knocked out
// because the state of the line breaker isn't changed to match, we need to do it here manually
m_linebreakerstate = 0;
}
@@ -4481,8 +4691,11 @@ bool TTrain::Update( double const Deltatime )
mvControlled->ResistorsFlagCheck() :
false );
btLampkaBezoporowa.Turn( mvControlled->ResistorsFlagCheck() || ( mvControlled->MainCtrlActualPos == 0 ) ); // do EU04
if( ( mvControlled->Itot != 0 )
btLampkaBezoporowa.Turn(
( true == mvControlled->ResistorsFlagCheck() )
|| ( mvControlled->MainCtrlActualPos == 0 ) ); // do EU04
if( ( mvControlled->Im != 0 )
|| ( mvOccupied->BrakePress > 2 )
|| ( mvOccupied->PipePress < 3.6 ) ) {
// Ra: czy to jest udawanie działania styczników liniowych?
@@ -4721,6 +4934,9 @@ bool TTrain::Update( double const Deltatime )
btLampkaRearRightLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::headlight_right ) != 0 );
btLampkaRearLeftEndLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::redmarker_left ) != 0 );
btLampkaRearRightEndLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::redmarker_right ) != 0 );
// others
btLampkaMalfunction.Turn( mvControlled->dizel_heat.PA );
btLampkaMotorBlowers.Turn( mvControlled->RventRot > 0.1 );
}
else
{ // gdy bateria wyłączona
@@ -4752,6 +4968,9 @@ bool TTrain::Update( double const Deltatime )
btLampkaRearRightLight.Turn( false );
btLampkaRearLeftEndLight.Turn( false );
btLampkaRearRightEndLight.Turn( false );
// others
btLampkaMalfunction.Turn( false );
btLampkaMotorBlowers.Turn( false );
}
// McZapkie-080602: obroty (albo translacje) regulatorow
@@ -4967,6 +5186,11 @@ bool TTrain::Update( double const Deltatime )
ggCabLightDimButton.Update();
ggBatteryButton.Update();
ggWaterPumpBreakerButton.Update();
ggWaterPumpButton.Update();
ggWaterHeaterBreakerButton.Update();
ggWaterHeaterButton.Update();
ggWaterCircuitsLinkButton.Update();
ggFuelPumpButton.Update();
ggOilPumpButton.Update();
//------
@@ -6013,6 +6237,11 @@ void TTrain::clear_cab_controls()
ggMainGearStatus.Clear();
ggIgnitionKey.Clear();
ggWaterPumpBreakerButton.Clear();
ggWaterPumpButton.Clear();
ggWaterHeaterBreakerButton.Clear();
ggWaterHeaterButton.Clear();
ggWaterCircuitsLinkButton.Clear();
ggFuelPumpButton.Clear();
ggOilPumpButton.Clear();
@@ -6075,6 +6304,10 @@ void TTrain::clear_cab_controls()
btLampkaRearLeftEndLight.Clear();
btLampkaRearRightEndLight.Clear();
btCabLight.Clear(); // hunter-171012
// others
btLampkaMalfunction.Clear();
btLampkaMotorBlowers.Clear();
ggLeftLightButton.Clear();
ggRightLightButton.Clear();
ggUpperLightButton.Clear();
@@ -6280,14 +6513,36 @@ void TTrain::set_cab_controls() {
ShowNextCurrent ?
1.0 :
0.0 );
// water pump
ggWaterPumpBreakerButton.PutValue(
mvControlled->WaterPump.breaker ?
1.0 :
0.0 );
ggWaterPumpButton.PutValue(
mvControlled->WaterPump.is_enabled ?
1.0 :
0.0 );
// water heater
ggWaterHeaterBreakerButton.PutValue(
mvControlled->WaterHeater.breaker ?
1.0 :
0.0 );
ggWaterHeaterButton.PutValue(
mvControlled->WaterHeater.is_enabled ?
1.0 :
0.0 );
ggWaterCircuitsLinkButton.PutValue(
mvControlled->WaterCircuitsLink ?
1.0 :
0.0 );
// fuel pump
ggFuelPumpButton.PutValue(
mvOccupied->FuelPump.is_enabled ?
mvControlled->FuelPump.is_enabled ?
1.0 :
0.0 );
// oil pump
ggOilPumpButton.PutValue(
mvOccupied->OilPump.is_enabled ?
mvControlled->OilPump.is_enabled ?
1.0 :
0.0 );
@@ -6329,6 +6584,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
{ "i-no_resistors_b:", btLampkaBezoporowaB },
{ "i-highcurrent:", btLampkaWysRozr },
{ "i-vent_trim:", btLampkaWentZaluzje },
{ "i-motorblowers:", btLampkaMotorBlowers },
{ "i-trainheating:", btLampkaOgrzewanieSkladu },
{ "i-security_aware:", btLampkaCzuwaka },
{ "i-security_cabsignal:", btLampkaSHP },
@@ -6358,6 +6614,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
{ "i-resistorsb:", btLampkaOporyB },
{ "i-contactorsb:", btLampkaStycznB },
{ "i-conv_ovldb:", btLampkaNadmPrzetwB },
{ "i-malfunction:", btLampkaMalfunction },
{ "i-forward:", btLampkaForward },
{ "i-backward:", btLampkaBackward },
{ "i-upperlight:", btLampkaUpperLight },
@@ -6396,6 +6653,14 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
button.Load(Parser, DynamicObject, DynamicObject->mdKabina);
button.AssignBool(bDoors[0] + 3 * i);
}
/*
else if( Label == "i-malfunction:" ) {
// generic malfunction indicator
auto &button = Cabine[ Cabindex ].Button( -1 ); // pierwsza wolna gałka
button.Load( Parser, DynamicObject, DynamicObject->mdKabina );
button.AssignBool( &mvOccupied->dizel_heat.PA );
}
*/
else
{
// failed to match the label
@@ -6454,6 +6719,11 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
{ "converterlocal_sw:", ggConverterLocalButton },
{ "converteroff_sw:", ggConverterOffButton },
{ "main_sw:", ggMainButton },
{ "waterpumpbreaker_sw:", ggWaterPumpBreakerButton },
{ "waterpump_sw:", ggWaterPumpButton },
{ "waterheaterbreaker_sw:", ggWaterHeaterBreakerButton },
{ "waterheater_sw:", ggWaterHeaterButton },
{ "watercircuitslink_sw:", ggWaterCircuitsLinkButton },
{ "fuelpump_sw:", ggFuelPumpButton },
{ "oilpump_sw:", ggOilPumpButton },
{ "radio_sw:", ggRadioButton },
@@ -6619,7 +6889,25 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
// oil pressure
auto &gauge = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka
gauge.Load( Parser, DynamicObject, DynamicObject->mdKabina, nullptr );
gauge.AssignFloat( &mvOccupied->OilPump.pressure_present );
gauge.AssignFloat( &mvControlled->OilPump.pressure_present );
}
else if( Label == "oiltemp:" ) {
// oil temperature
auto &gauge = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka
gauge.Load( Parser, DynamicObject, DynamicObject->mdKabina, nullptr );
gauge.AssignFloat( &mvControlled->dizel_heat.To );
}
else if( Label == "water1temp:" ) {
// main circuit water temperature
auto &gauge = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka
gauge.Load( Parser, DynamicObject, DynamicObject->mdKabina, nullptr );
gauge.AssignFloat( &mvControlled->dizel_heat.temperatura1 );
}
else if( Label == "water2temp:" ) {
// auxiliary circuit water temperature
auto &gauge = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka
gauge.Load( Parser, DynamicObject, DynamicObject->mdKabina, nullptr );
gauge.AssignFloat( &mvControlled->dizel_heat.temperatura2 );
}
// yB - dla drugiej sekcji
else if (Label == "hvbcurrent1:")