diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index d0c2b331..645b4ea9 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -609,6 +609,13 @@ struct TDEScheme double Umax = 0.0; /*napiecie maksymalne*/ double Imax = 0.0; /*prad maksymalny*/ }; +typedef TDEScheme TDESchemeTable[33]; /*tablica WWList dla silnikow spalinowych*/ +struct TFFScheme +{ + double v = 0.0; // parametr wejsciowy + double freq = 0.0; // wyjscie: czestotliwosc falownika +}; +typedef TFFScheme TFFSchemeTable[33]; struct TWiperScheme { @@ -619,8 +626,6 @@ struct TWiperScheme }; typedef TWiperScheme TWiperSchemeTable[16]; - -typedef TDEScheme TDESchemeTable[33]; /*tablica rezystorow rozr.*/ struct TShuntScheme { double Umin = 0.0; @@ -1373,6 +1378,10 @@ class TMoverParameters bool Flat = false; double Vhyp = 1.0; TDESchemeTable DElist; + TFFSchemeTable FFlist; + int FFListSize = 0; + TFFSchemeTable FFEDlist; + int FFEDListSize = 0; TWiperSchemeTable WiperList; int WiperListSize; @@ -2063,6 +2072,7 @@ private: void LoadFIZ_UCList(std::string const &Input); void LoadFIZ_DList( std::string const &Input ); void LoadFIZ_FFList( std::string const &Input ); + void LoadFIZ_FFEDList( std::string const &Input ); void LoadFIZ_WiperList(std::string const &Input); void LoadFIZ_LightsList( std::string const &Input ); void LoadFIZ_CompressorList(std::string const &Input); @@ -2084,6 +2094,7 @@ private: bool readHTCList(std::string const &line); bool readPmaxList(std::string const &line); bool readFFList( std::string const &line ); + bool readFFEDList( std::string const &line ); bool readWWList( std::string const &line ); bool readWiperList( std::string const &line ); bool readLightsList( std::string const &Input ); diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 41544942..dc0405b9 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -6432,21 +6432,24 @@ double TMoverParameters::TractionForce( double dt ) { EnginePower = abs(eimv[eimv_Ic] * eimv[eimv_U] * NPoweredAxles) / 1000; // power inverters auto const tmpV { std::abs( eimv[ eimv_fp ] ) }; + auto const useFFEDList = FFEDListSize > 0 && DynamicBrakeFlag; + auto const list = useFFEDList ? FFEDlist : FFlist; + auto const listSize = useFFEDList ? FFEDListSize : FFListSize; - if( ( RlistSize > 0 ) + if( ( listSize > 0 ) && ( ( std::abs( eimv[ eimv_If ] ) > 1.0 ) && ( tmpV > 0.0001 ) ) ) { int i = 0; - while( ( i < RlistSize - 1 ) - && ( DElist[ i + 1 ].RPM < tmpV ) ) { + while( ( i < listSize - 1 ) + && ( list[ i + 1 ].v < tmpV ) ) { ++i; } InverterFrequency = - ( tmpV - DElist[ i ].RPM ) - / std::max( 1.0, ( DElist[ i + 1 ].RPM - DElist[ i ].RPM ) ) - * ( DElist[ i + 1 ].GenPower - DElist[ i ].GenPower ) - + DElist[ i ].GenPower; + ( tmpV - list[ i ].v ) + / std::max( 1.0, ( list[ i + 1 ].v - list[ i ].v ) ) + * ( list[ i + 1 ].freq - list[ i ].freq ) + + list[ i ].freq; } else { InverterFrequency = 0.0; @@ -8928,7 +8931,7 @@ bool startBPT; bool startMPT, startMPT0; bool startRLIST, startUCLIST; bool startDIZELMOMENTUMLIST, startDIZELV2NMAXLIST, startHYDROTCLIST, startPMAXLIST; -bool startDLIST, startFFLIST, startWWLIST, startWiperList; +bool startDLIST, startFFLIST, startFFEDLIST, startWWLIST, startWiperList; bool startLIGHTSLIST; bool startCOMPRESSORLIST; int LISTLINE; @@ -9263,21 +9266,40 @@ bool TMoverParameters::readPmaxList(std::string const &line) { bool TMoverParameters::readFFList( std::string const &line ) { - cParser parser( line ); - if( false == parser.getTokens( 2, false ) ) { - WriteLog( "Read FList: arguments missing in line " + std::to_string( LISTLINE + 1 ) ); - return false; - } - int idx = LISTLINE++; - if( idx >= sizeof( DElist ) / sizeof( TDEScheme ) ) { - WriteLog( "Read FList: number of entries exceeded capacity of the data table" ); - return false; - } - parser - >> DElist[ idx ].RPM - >> DElist[ idx ].GenPower; + cParser parser( line ); + if( false == parser.getTokens( 2, false ) ) { + WriteLog( "Read FList: arguments missing in line " + std::to_string( LISTLINE + 1 ) ); + return false; + } + int idx = LISTLINE++; + if( idx >= sizeof( FFlist ) / sizeof( TFFScheme ) ) { + WriteLog( "Read FList: number of entries exceeded capacity of the data table" ); + return false; + } + parser + >> FFlist[ idx ].v + >> FFlist[ idx ].freq; - return true; + return true; +} + +bool TMoverParameters::readFFEDList( std::string const &line ) { + + cParser parser( line ); + if( false == parser.getTokens( 2, false ) ) { + WriteLog( "Read FList: arguments missing in line " + std::to_string( LISTLINE + 1 ) ); + return false; + } + int idx = LISTLINE++; + if( idx >= sizeof( FFEDlist ) / sizeof( TFFScheme ) ) { + WriteLog( "Read FList: number of entries exceeded capacity of the data table" ); + return false; + } + parser + >> FFEDlist[ idx ].v + >> FFEDlist[ idx ].freq; + + return true; } // parsowanie wiperList @@ -9481,6 +9503,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) startHYDROTCLIST = false; startPMAXLIST = false; startFFLIST = false; + startFFEDLIST = false; startWWLIST = false; startWiperList = false; startLIGHTSLIST = false; @@ -9581,6 +9604,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) if( issection( "endff", inputline ) ) { startBPT = false; startFFLIST = false; + startFFEDLIST = false; continue; } if (issection("endwl", inputline)) @@ -9870,12 +9894,19 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) continue; } - if( issection( "ffList:", inputline ) ) { - startBPT = false; - startFFLIST = true; LISTLINE = 0; - LoadFIZ_FFList( inputline ); - continue; - } + if( issection( "ffList:", inputline ) ) { + startBPT = false; + startFFLIST = true; LISTLINE = 0; + LoadFIZ_FFList( inputline ); + continue; + } + + if( issection( "ffBrakeList:", inputline ) ) { + startBPT = false; + startFFEDLIST = true; LISTLINE = 0; + LoadFIZ_FFEDList( inputline ); + continue; + } if( issection( "WWList:", inputline ) ) { @@ -9955,10 +9986,14 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) readPmaxList(inputline); continue; } - if( true == startFFLIST ) { - readFFList( inputline ); - continue; - } + if( true == startFFLIST ) { + readFFList( inputline ); + continue; + } + if( true == startFFEDLIST ) { + readFFEDList( inputline ); + continue; + } if( true == startWWLIST ) { readWWList( inputline ); continue; @@ -11315,8 +11350,11 @@ void TMoverParameters::LoadFIZ_DList( std::string const &Input ) { } void TMoverParameters::LoadFIZ_FFList( std::string const &Input ) { + extract_value( FFListSize, "Size", Input, "" ); +} - extract_value( RlistSize, "Size", Input, "" ); +void TMoverParameters::LoadFIZ_FFEDList( std::string const &Input ) { + extract_value( FFEDListSize, "Size", Input, "" ); }