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

compressor start method, minor ai vehicle preparation logic tweaks, minor refactoring

This commit is contained in:
tmj-fstate
2018-04-18 22:14:16 +02:00
parent fc1f57a5d4
commit 430ab99f8e
9 changed files with 86 additions and 72 deletions

View File

@@ -860,7 +860,7 @@ public:
double RVentCutOff = 0.0; /*rezystancja wylaczania wentylatorow dla RVentType=2*/
double RVentSpeed { 0.5 }; //rozpedzanie sie wentylatora obr/s^2}
double RVentMinI { 50.0 }; //przy jakim pradzie sie wylaczaja}
int CompressorPower = 1; /*0: bezp. z obwodow silnika, 1: z przetwornicy, reczne, 2: w przetwornicy, stale, 5: z silnikowego*/
int CompressorPower = 1; // 0: main circuit, 1: z przetwornicy, reczne, 2: w przetwornicy, stale, 3: diesel engine, 4: converter of unit in front, 5: converter of unit behind
int SmallCompressorPower = 0; /*Winger ZROBIC*/
bool Trafo = false; /*pojazd wyposażony w transformator*/
@@ -993,6 +993,7 @@ public:
bool CompressorAllow = false; /*! zezwolenie na uruchomienie sprezarki NBMX*/
bool CompressorAllowLocal{ true }; // local device state override (most units don't have this fitted so it's set to true not to intefere)
bool CompressorGovernorLock{ false }; // indicates whether compressor pressure switch was activated due to reaching cut-out pressure
start CompressorStart{ start::manual }; // whether the compressor is started manually, or another way
// TODO converter parameters, for when we start cleaning up mover parameters
start ConverterStart{ start::manual }; // whether converter is started manually, or by other means
float ConverterStartDelay{ 0.0f }; // delay (in seconds) before the converter is started, once its activation conditions are met
@@ -1269,7 +1270,7 @@ public:
bool IncBrakePress(double &brake, double PressLimit, double dp);
bool DecBrakePress(double &brake, double PressLimit, double dp);
bool BrakeDelaySwitch(int BDS);/*! przelaczanie nastawy opoznienia*/
bool IncBrakeMult(void);/*przelaczanie prozny/ladowny*/
bool IncBrakeMult(void);/*przelaczanie prozny/ladowny*/
bool DecBrakeMult(void);
/*pomocnicze funkcje dla ukladow pneumatycznych*/
void UpdateBrakePressure(double dt);

View File

@@ -2679,7 +2679,7 @@ bool TMoverParameters::ConverterSwitch( bool State, int const Notify )
// *************************************************************************************************
bool TMoverParameters::CompressorSwitch( bool State, int const Notify )
{
if( CompressorPower > 1 ) {
if( CompressorStart != start::manual ) {
// only pay attention if the compressor can be controlled manually
return false;
}
@@ -3323,35 +3323,38 @@ void TMoverParameters::CompressorCheck(double dt)
else {
if( CompressorPower == 3 ) {
// experimental: make sure compressor coupled with diesel engine is always ready for work
CompressorAllow = true;
CompressorStart = start::automatic;
}
if (CompressorFlag) // jeśli sprężarka załączona
{ // sprawdzić możliwe warunki wyłączenia sprężarki
if (CompressorPower == 5) // jeśli zasilanie z sąsiedniego członu
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
if (Couplers[1].Connected != NULL)
CompressorFlag =
( Couplers[ 1 ].Connected->CompressorAllow
&& Couplers[ 1 ].Connected->CompressorAllowLocal
&& Couplers[ 1 ].Connected->Mains
&& Couplers[ 1 ].Connected->ConverterFlag );
else
CompressorFlag = false; // bez tamtego członu nie zadziała
if( Couplers[ side::rear ].Connected != NULL ) {
CompressorFlag = (
( ( CompressorAllow ) || ( CompressorStart == start::automatic ) )
&& ( CompressorAllowLocal )
&& ( Couplers[ side::rear ].Connected->ConverterFlag ) );
}
else {
// bez tamtego członu nie zadziała
CompressorFlag = false;
}
}
else if (CompressorPower == 4) // jeśli zasilanie z poprzedniego członu
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
if (Couplers[0].Connected != NULL)
CompressorFlag =
( Couplers[ 0 ].Connected->CompressorAllow
&& Couplers[ 0 ].Connected->CompressorAllowLocal
&& Couplers[ 0 ].Connected->Mains
&& Couplers[ 0 ].Connected->ConverterFlag );
else
if( Couplers[ side::front ].Connected != NULL ) {
CompressorFlag = (
( ( CompressorAllow ) || ( CompressorStart == start::automatic ) )
&& ( CompressorAllowLocal )
&& ( Couplers[ side::front ].Connected->ConverterFlag ) );
}
else {
CompressorFlag = false; // bez tamtego członu nie zadziała
}
}
else
CompressorFlag =
( ( CompressorAllow )
CompressorFlag = (
( ( CompressorAllow ) || ( CompressorStart == start::automatic ) )
&& ( CompressorAllowLocal )
&& ( Mains )
&& ( ( ConverterFlag )
@@ -3402,38 +3405,37 @@ void TMoverParameters::CompressorCheck(double dt)
// or if the switch is on and the pressure isn't maxed
if( CompressorPower == 5 ) // jeśli zasilanie z następnego członu
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
if( Couplers[ 1 ].Connected != nullptr ) {
CompressorFlag =
( Couplers[ 1 ].Connected->CompressorAllow
&& Couplers[ 1 ].Connected->CompressorAllowLocal
&& Couplers[ 1 ].Connected->Mains
&& Couplers[ 1 ].Connected->ConverterFlag );
}
if( Couplers[ side::rear ].Connected != NULL ) {
CompressorFlag = (
( ( CompressorAllow ) || ( CompressorStart == start::automatic ) )
&& ( CompressorAllowLocal )
&& ( Couplers[ side::rear ].Connected->ConverterFlag ) );
}
else {
CompressorFlag = false; // bez tamtego członu nie zadziała
// bez tamtego członu nie zadziała
CompressorFlag = false;
}
}
else if( CompressorPower == 4 ) // jeśli zasilanie z poprzedniego członu
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
if( Couplers[ 0 ].Connected != nullptr ) {
CompressorFlag =
( Couplers[ 0 ].Connected->CompressorAllow
&& Couplers[ 0 ].Connected->CompressorAllowLocal
&& Couplers[ 0 ].Connected->Mains
&& Couplers[ 0 ].Connected->ConverterFlag );
if( Couplers[ side::front ].Connected != NULL ) {
CompressorFlag = (
( ( CompressorAllow ) || ( CompressorStart == start::automatic ) )
&& ( CompressorAllowLocal )
&& ( Couplers[ side::front ].Connected->ConverterFlag ) );
}
else {
CompressorFlag = false; // bez tamtego członu nie zadziała
}
}
else {
CompressorFlag =
( ( CompressorAllow )
&& ( CompressorAllowLocal )
&& ( Mains )
&& ( ( ConverterFlag )
|| ( CompressorPower == 0 )
|| ( CompressorPower == 3 ) ) );
CompressorFlag = (
( ( CompressorAllow ) || ( CompressorStart == start::automatic ) )
&& ( CompressorAllowLocal )
&& ( Mains )
&& ( ( ConverterFlag )
|| ( CompressorPower == 0 )
|| ( CompressorPower == 3 ) ) );
}
// NOTE: crude way to enforce simultaneous activation of compressors in multi-unit setups
@@ -8143,6 +8145,19 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
}
extract_value( ConverterStartDelay, "ConverterStartDelay", line, "" );
// compressor
{
std::map<std::string, start> starts {
{ "Manual", start::manual },
{ "Automatic", start::automatic }
};
auto lookup = starts.find( extract_value( "CompressorStart", line ) );
CompressorStart =
lookup != starts.end() ?
lookup->second :
start::manual;
}
// fuel pump
{
std::map<std::string, start> starts {
@@ -9256,7 +9271,7 @@ bool TMoverParameters::RunCommand( std::string Command, double CValue1, double C
// end
else if (Command == "CompressorSwitch") /*NBMX*/
{
if( CompressorPower < 2 ) {
if( CompressorStart == start::manual ) {
CompressorAllow = ( CValue1 == 1 );
}
OK = SendCtrlToNext( Command, CValue1, CValue2, Couplertype );