- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Verständnisprobleme mit Regler und Kaskadenregler

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2004
    Beiträge
    18
    Anzeige

    Powerstation Test
    Also, der innere DC Regler funktioniert. Es gibt Arbeitspunkte für einen reinen P Regler wo der Fehler im Vorzeichen hin und herschwingt. Bei größeren Leistungen ist das Schwingen vom Nullpunkt weiter weg. Also habe ich noch einen I Anteil hinzugefügt. Das regelt schon mal lustig hin und her und ich kann mit Kp und Ki rumspielen.

    Ein Problem dabei hat sich schon rausgestellt. Die Stromaufnahme des WR folgt der Vorgabe in verschiedenen Fahrsituationen unterschiedlich schnell. D.h. die Regelstrecke hat keine konstanten Eigenschaften. Das ist aber wohl eher eine klassische Optimierungsaufgabe aus der Regelungstechnik.

    Hier ist mein Javascript für NodeRed, abgeschrieben hier aus dem Regler Wiki. Für C und Assembler Programmierer etwas gewöhnungsbedürftig. Soll und Istwert werden in globalen Variablen übergeben. Zum Zugriff braucht man dann die Methoden flow.get und flow.set. Das msg Objekt wird in einer Rückkopplungsschleife mit einer Zykluszeit von derzeit 1 sek wieder hinten eingespeist bzw. msg.out vorne als Stellgröße an den Wechselrichter ausgekoppelt.

    Code:
    //flow.sv = Setpoint Value, Sollwert ist gewuenschter SOC Batterie Ladezustand
    //flow.pv = Process Value, Ist wert ist der aktuelle SOC Batterie Ladezustand
    
    const Kp = 0.5;                                    // proportional parameter
    const Ki = 0.1;                                       // integraion parameter
    const Kd = 0;                                       // differential parameter
    
    let error = (flow.get("pv2") - flow.get("sv2"));    // difference between setpoint value and process value
    msg.errsum += error;                                // integral difference
    
    msg.out =   (Kp * error)+ (Ki * msg.errsum);
    
    // + Kd * (error - msg.errold); // PID Regulator
    
    msg.errold = error;                             // save Error for next cycle
    msg.out = Math.round(msg.out)*-1 ;              // negative Einspeisung, positive Akkulast
    
    if (msg.out < -33000) msg.out = -33000;         // top saturation
    if (msg.out >   -333) msg.out =   -333;         // bottom saturation
    
    return msg;
    Edit: Die Kommentare im Code sind natürlich noch falsch bzw. stammen von einer älteren Version wo ich ohne Kaskade probiert habe. Soll und Istwert sind nicht der SOC sondern die Batterie-Leistungen.
    Geändert von Janvi (Gestern um 08:06 Uhr)

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    907
    Bei Sonnenaufgang soll ja möglichst früh losgefahren werden um tagsüber maximal viel abspeichern zu können.
    Hmmm,
    dazu müsstest Du dann aber auch wissen, was wann an Ladeleistung im Tagesverlauf zur Verfügung stehen wird.

    Weist Du das, wenn Du um 9:00 Uhr noch 20% SOC hast und zum Sonnenuntergang 30% Reserve haben willst?
    Hast Du eine Wetter-Api?

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2004
    Beiträge
    18
    Die Wettervorhersage ist zur Einspeisung später möglich und auch vorgesehen. Erst mal sollte aber der Regler vernünftig funktionieren weil es sonst keinen Sinn macht die Parameter aufgrund von Wetterdaten zu optimieren. Mit Kp=0,5 und Ki=0,1 geht es schon ganz ordentlich bei Überschwingern <5%. Unabhängig von der Stromerzeugung kann ich den Akku jetzt gezielt mit einer bestimmten Leistung laden oder entladen. Laden geht natürlich nur wenn die Erzeugung größer als der Mindestverbrauch im Standby ist.

    Typischerweise ist 9 Uhr die Zeit, wo die Produktion der Solarzelle den möglichen Verbrauch übersteigt, bzw. dann der Ladebetrieb des Akkus anfängt. Das hängt natürlich stark von den Jahreszeiten und vom Wetter ab. Aber genau diesen Punkt möchte ich wegen der Unsicherheiten regelungstechnisch treffen. D.h. der Regler fängt bei Sonnenaufgang an zu arbeiten, geht dann irgendwann in die Sättigung. Umgekehrt könnte er auch bis Sonnenuntergang mit anderen Parametern regeln. Dort ist der SOC aber recht hoch und muß nicht so genau zum Zeitpunkt des Sonnenuntergangs getroffen werden. Dazu gibt es ja dann die voraussichtlichen Nachtstunden dividiert durch Akkubestand. Auch das braucht nur in etwa getroffen zu werden.

    Aber die minimal mögliche Akkufüllung soll genau zu dem Zeitpunkt erreicht werden, wo die Produktion den möglichen Verbrauch übersteigt. Das geht natürlich nur mit einem automatischen Regler irgenwie sinnvoll zu machen. Beim Fahren von Hand macht man da viel zu viel Fehler und es ist nervig solange davorzusitzen und den passenden Zeitpunkt dann doch zu verpassen.

    Es ist eine Freude zwischenzeitlich zuzschauen wie die Messwerte und Zeiger in der Visualisierung zappeln. Durch hohe Fahrleistung wird der Ladestand nach Sonnenaufgang bzw. heute rasch wechselnde Bewölkung auch noch nach 9 Uhr mit konstanter Entladung automatisch niedrig gehalten. Die raschen Wolkenzüge sind mitunter schneller als mein Regler mit 1 sek Zykluszeit. Vielleicht mach ich das noch etwas schneller. Jetzt nur noch den äusseren Regler der Kaskade damit der Ladezustand nicht doch wieder mal versehentlich zu niedrig wird.
    Geändert von Janvi (Gestern um 09:28 Uhr)

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2004
    Beiträge
    18
    Nachdem ich dem Regler jetzt eine Zeit lang zugeschaut habe, wird in obenstendem Code (aus dem Wiki hier abgeschrieben) ein Problem klar: Der Regler läuft lange Zeit am "Anschlag". Deshalb habe ich eine Begrenzung des Ausgangssignals von -333 auf -33000 eingstellt was sinnvollen Vorgabewerten für den Fahrmotor entspricht.

    Befindet sich der Regler länger in der Sättigung, so nimme die Fehlersumme für den I -Anteil errsum = errsum+error mitunter riesige Werte an die viel größer sind als der Ausgangsbereich des Reglers. NodeRed arbeitet hier mit langen Integers praktisch ohne Begrenzung. Bei einer Vorzeichenumkehr des Fehlers nimmt die Fehlersumme zwar wieder ab, aber das kann viel zu lange dauern. Macht es deshalb Sinn, errsum ähnlich dem Ausgangssignal zu begrenzen? Falls ja auf das wievielfache des Ausgangswertes?

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    907
    Macht es deshalb Sinn, errsum ähnlich dem Ausgangssignal zu begrenzen?
    Ja, macht Sinn. Im analogen Original ist der I-Anteil ein Tiefpass und kann damit nicht gegen Unendlich verschwinden.

    Probier mal mit 4*maximalen Fehler. Und pass dabei auch die kI-Konstante an.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 13.05.2013, 12:47
  2. I2C Verständnisprobleme
    Von Ezalo im Forum Robby RP6
    Antworten: 24
    Letzter Beitrag: 01.05.2011, 17:06
  3. Verständnisprobleme -> Drehmomentrechner
    Von selan im Forum Motoren
    Antworten: 9
    Letzter Beitrag: 13.11.2006, 14:25
  4. Syntax - Verständnisprobleme
    Von R2D3212 im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 05.07.2006, 01:41
  5. Serielle Verständnisprobleme
    Von steffenvogel im Forum Software, Algorithmen und KI
    Antworten: 6
    Letzter Beitrag: 09.04.2006, 13:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test