no message
This commit is contained in:
@@ -667,8 +667,56 @@ private function CalculateBatteryDistribution(float $pEvW, float $pSdlW): array
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
$this->SetValue("Aktuelle_Leistung_SDL", $pSdlW);
|
|
||||||
$this->SetValue("Aktuelle_Leistung_EV", $totalPower_ist + $pSdlW);
|
$eps = 0.01;
|
||||||
|
|
||||||
|
$aktEV = 0.0;
|
||||||
|
$aktSDL = 0.0;
|
||||||
|
|
||||||
|
// Optional: Wenn einer 0 ist -> aktiver Kanal bekommt totalPower_ist
|
||||||
|
if (abs($pEvW) < $eps && abs($pSdlW) < $eps) {
|
||||||
|
|
||||||
|
$aktEV = 0.0;
|
||||||
|
$aktSDL = 0.0;
|
||||||
|
|
||||||
|
} elseif (abs($pEvW) < $eps) {
|
||||||
|
|
||||||
|
$aktEV = 0.0;
|
||||||
|
$aktSDL = $totalPower_ist;
|
||||||
|
|
||||||
|
} elseif (abs($pSdlW) < $eps) {
|
||||||
|
|
||||||
|
$aktEV = $totalPower_ist;
|
||||||
|
$aktSDL = 0.0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Beide aktiv
|
||||||
|
$sameDirection = (($pEvW > 0 && $pSdlW > 0) || ($pEvW < 0 && $pSdlW < 0));
|
||||||
|
|
||||||
|
if ($sameDirection) {
|
||||||
|
// Regel A: gleiche Richtung -> Ist proportional nach |Soll| aufteilen
|
||||||
|
$sumAbs = abs($pEvW) + abs($pSdlW);
|
||||||
|
|
||||||
|
if ($sumAbs < $eps) {
|
||||||
|
// Fallback
|
||||||
|
$aktEV = $totalPower_ist / 2.0;
|
||||||
|
$aktSDL = $totalPower_ist / 2.0;
|
||||||
|
} else {
|
||||||
|
$aktEV = $totalPower_ist * (abs($pEvW) / $sumAbs);
|
||||||
|
$aktSDL = $totalPower_ist - $aktEV; // Summe bleibt exakt totalPower_ist
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Regel B: gegensätzliche Richtung -> Sollwerte anzeigen
|
||||||
|
$aktEV = $pEvW;
|
||||||
|
$aktSDL = $pSdlW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->SetValue("Aktuelle_Leistung_EV", (float)$aktEV);
|
||||||
|
$this->SetValue("Aktuelle_Leistung_SDL", (float)$aktSDL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user