mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 19:49:19 +02:00
Add power smoothing for inverter based vehicles
This commit is contained in:
@@ -1715,6 +1715,9 @@ class TMoverParameters
|
|||||||
|
|
||||||
/*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/
|
/*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/
|
||||||
double eimic = 0; /*aktualna pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
double eimic = 0; /*aktualna pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
||||||
|
double eimtcp = 0; /* target controller position - docelowa pozycja nastawnika */
|
||||||
|
double eimic_last = 0; /* ostatnia pozycja eimtcp przy obliczeniach */
|
||||||
|
double eimtcptau = 0.0; /* stała czasowa układu bezwladnosci falownika */
|
||||||
double eimic_analog = 0; /*pozycja zadajnika analogowa*/
|
double eimic_analog = 0; /*pozycja zadajnika analogowa*/
|
||||||
double eimic_real = 0; /*faktycznie uzywana pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
double eimic_real = 0; /*faktycznie uzywana pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
||||||
double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/
|
double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/
|
||||||
|
|||||||
@@ -7328,7 +7328,20 @@ void TMoverParameters::CheckEIMIC(double dt)
|
|||||||
{
|
{
|
||||||
eimic = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : eimic);
|
eimic = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : eimic);
|
||||||
}
|
}
|
||||||
|
case 4: // vectron
|
||||||
|
// TARGET
|
||||||
|
eimtcp = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : (eimic_analog > 0.01 ? eimic_analog : (double)MainCtrlPos / (double)MainCtrlPosNo));
|
||||||
|
|
||||||
|
if ((eimtcp > 0.001) && SpeedCtrlUnit.IsActive)
|
||||||
|
eimtcp = std::max(eimtcp, SpeedCtrlUnit.MinPower);
|
||||||
|
|
||||||
|
// smoothing
|
||||||
|
double alpha = std::clamp(dt / eimtcptau, 0.0, 1.0);
|
||||||
|
double newValue = eimic_last + (eimtcp - eimic_last) * alpha;
|
||||||
|
if (std::abs(newValue) < 0.05 && eimtcp == 0.0)
|
||||||
|
newValue = 0.0;
|
||||||
|
eimic = newValue;
|
||||||
|
eimic_last = newValue;
|
||||||
}
|
}
|
||||||
if (LocHandleTimeTraxx)
|
if (LocHandleTimeTraxx)
|
||||||
{
|
{
|
||||||
@@ -10719,7 +10732,9 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
EIMCtrlType = clamp( EIMCtrlType, 0, 3 );
|
EIMCtrlType = clamp( EIMCtrlType, 0, 3 );
|
||||||
extract_value( LocHandleTimeTraxx, "LocalBrakeTraxx", line, "" );
|
extract_value( LocHandleTimeTraxx, "LocalBrakeTraxx", line, "" );
|
||||||
extract_value( EIMCtrlAdditionalZeros, "EIMCtrlAddZeros", line, "" );
|
extract_value( EIMCtrlAdditionalZeros, "EIMCtrlAddZeros", line, "" );
|
||||||
extract_value( EIMCtrlEmergency, "EIMCtrlEmergency", line, "");
|
extract_value( EIMCtrlEmergency, "EIMCtrlEmergency", line, "");
|
||||||
|
extract_value( eimtcptau, "EIMTau", line, "");
|
||||||
|
|
||||||
|
|
||||||
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user