Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Einfache Pitch-Regelung mit CoDeSys

  1. #1
    Registriert seit
    31.07.2014
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe SPS-Freunde,

    nun habe ich in meinem Elektrotechnik-Studium zum ersten Mal mit SPS-Programmierung zu tun und hänge direkt fest.
    Es geht in Rahmen eines studentischen Projekts darum, eine technische Betriebsführung für eine etwas ältere 50-kW-Windenergieanlage auf eine FESTO CECX, also mit CoDeSys, zu programmieren. Dabei ist mir vorgegeben, nur FUP und AWL zu nutzen.

    Ich bin mit der Programmierung nun schon ziemlich weit, hänge jedoch an einer Sache fest: Die Anlage besitzt die Möglichkeit, über einen Hydraulik-Zylinder den Rotorblatt-Winkel zu verstellen. Ich muss also eine Pitch-Regelung implementieren, das bekomme ich jedoch leider überhaupt nicht hin.

    Ich habe mir gedacht, dass die Rotorblätter bei einer bestimmten Rotordrehzahl in den Wind gedreht werden (bspw. 15 U/min), dann bis zur Nenndrehzahl konstant im Wind bleiben und dann im Nennbetrieb (bspw. 65-75U/min Rotordrehzahl) der Rotorblattwinkel geregelt wird, um die Rotordrehzahl einigermaßen konstant zu halten. Beim Überschreiten einer bestimmten Drehzahl werden sie dann aus dem Wind gedreht.

    Das einfache in- und aus dem Wind drehen ist überhaupt kein Problem. Das, was mir Probleme bereitet, weil ich überhaupt nicht weiß wie ich es mit CoDeSys umsetzen könnte, ist die Regelung im Nennbetrieb. Als Eingänge an der SPS habe ich dafür u.a. die Rotordrehzahl, den aktuellen Rotorblattwinkel und die Windgeschwindigkeit, als Ausgänge einmal "Blätter in den Wind" und einmal "Blätter aus dem Wind". Die Rotorbeschleunigung steht als Eingang nicht zur Verfügung. Wie ließe sich denn damit nun eine einfache Pitch-Regelung programmieren? Ich komme einfach nicht weiter.

    Ich würde mich freuen, wenn hier vielleicht jemand ein paar Ideen oder Anregungen für die Implementierung hat. Das soll auch keine hochkomplexe Regelung werden, sondern lediglich eine einfache Umsetzung, die das Prinzip einer Pitch-Regelung aufgreift und veranschaulicht.

    Vielen Dank und viele Grüße,
    Nils
    Zitieren Zitieren Einfache Pitch-Regelung mit CoDeSys  

  2. #2
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Hast du wirklich eine Pitch-Regelung? Also kannst du die Blätter von 0° bis 90° auf beliebige Position verstellen?
    Deinen Angaben nach ist es eine Stall-Anlage, so dass du die Blätter nur auf zwei feste Positionen eingestellt werden können!

    Der Begriff Pitch-Regelung wird vielfach in Artikeln und Veröffentlichungen im Internet besprochen. Ein einfacher Ansatz wäre die Verwendung eines PI-Reglers. Der Eingang wäre dann Nenndrehzahl minus Istdrehzahl, als Ausgang dann z.B. den Verstellwinkel. Such einfach mal mit einer der üblichen Suchmaschinen nach "Wind Turbine Pitch Control" und/oder "VSPR" was für Variable Speed Pitch Regulated steht. Natürlich unter der Bedingung das du wirklich eine Pitch-Regelung benötigst.
    Geändert von Neals (02.08.2014 um 19:49 Uhr)

  3. Folgender Benutzer sagt Danke zu Neals für den nützlichen Beitrag:

    Dr_Heisenberg (03.08.2014)

  4. #3
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Zitat Zitat von Dr_Heisenberg Beitrag anzeigen
    ...Dabei ist mir vorgegeben, nur FUP und AWL zu nutzen. ...
    Meiner Meinung nach ist diese Vorgabe, AWL zu nutzen, reichlich antiquiert. Diese Programmiersprache wird aussterben. ST wäre die sinnvollere Variante, erst recht im Studium.

  5. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    zotos (03.08.2014)

  6. #4
    Dr_Heisenberg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2014
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Neals Beitrag anzeigen
    Hast du wirklich eine Pitch-Regelung? Also kannst du die Blätter von 0° bis 90° auf beliebige Position verstellen?
    Deinen Angaben nach ist es eine Stall-Anlage, so dass du die Blätter nur auf zwei feste Positionen eingestellt werden können!
    Hallo Neals,

    ja, ich habe die Möglichkeit, jeden beliebigen Winkel einzustellen (und dieser steht mir auch als analoger Eingang zur Verfügung). Die Verstellung erfolgt hydraulisch, indem ich über die SPS die Hydraulikventile für jeweils eine Drehrichtung ansteuere.
    Setze ich also bspw. den Ausgang "Flügel in den Wind", wird das entsprechende Hydraulikventil geöffnet und die Flügel eben für eine bestimmte Zeit oder bis zu einem bestimmten Ereignis o.ä. in den Wind gedreht.

    Vielen Dank schon einmal für deine Antwort, ich werde mich mal auf die Suche begeben.

    Zitat Zitat von trinitaucher Beitrag anzeigen
    Meiner Meinung nach ist diese Vorgabe, AWL zu nutzen, reichlich antiquiert. Diese Programmiersprache wird aussterben. ST wäre die sinnvollere Variante, erst recht im Studium.
    Das sehe ich ganz genauso. Es ist allerdings auch keine muss- sondern eher eine sollte-besser-Vorgabe. Für Umsetzungsmöglichkeiten in ST bin ich also ebenso dankbar! Hätte ich erwähnen sollen, sorry.


    Viele Grüße,
    Nils
    Geändert von Dr_Heisenberg (03.08.2014 um 11:31 Uhr)

  7. #5
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Zitat Zitat von Dr_Heisenberg Beitrag anzeigen
    Hallo Neals,

    ja, ich habe die Möglichkeit, jeden beliebigen Winkel einzustellen (und dieser steht mir auch als analoger Eingang zur Verfügung). Die Verstellung erfolgt hydraulisch, indem ich über die SPS die Hydraulikventile für jeweils eine Drehrichtung ansteuere.
    Setze ich also bspw. den Ausgang "Flügel in den Wind", wird das entsprechende Hydraulikventil geöffnet und die Flügel eben für eine bestimmte Zeit oder bis zu einem bestimmten Ereignis o.ä. in den Wind gedreht.

    Vielen Dank schon einmal für deine Antwort, ich werde mich mal auf die Suche begeben.
    Hier findest du ein paar Grundlagen erklärt: www.intechopen.com/books/wind-turbines/control-system-design

    Soweit ich das verstehe, hast du also zwei digitale Ausgänge:
    Code:
    bPitchFeather AT %Q* : BOOL; // pitch to feather position (90°)
    bPitchZero AT %Q*: BOOL; // pitch to zero position (0°)
    Als Feedback erhältst du mehrere analoge Signale:
    Code:
    fRotorSpeed AT %I* : REAL; // [r/m] rotor speed actual
    fPitchPosition AT %I*: REAL; // [°] pitch position actual (0..90°)
    fWindSpeed AT %I* : REAL; // [m/s] wind speed actual
    Als Parameter wären folgende Variablen nötig:
    Code:
    fPitchPositionZero : REAL := 0.0; // [°] minimum pitch position at zero position
    fPitchPositionFeather : REAL := 90.0; // [°] maximum pitch position at feather position
    fRotorSpeedNominal : REAL := 16.0; // [r/m] nominal rotor speed
    Die Verwendung eines PD-Reglers wäre möglich. Ein Integraler-Anteil ist nicht notwendig, da das Pitch-System ein Integrator darstellt.
    Code:
    VAR
       fbPID : FB_PID;
    END_VAR
    
    fbPID(
      fError := fRotorSpeedNominal - fRotorSpeed,
      fKp := 1.0,  // proportional gain
      fTn := 0.0, // integral part ignored
      fTv := 0.1, // derivative gain
      fTd := 1.0); // derivative damping
    Hier müssten die Parameter natürlich an die dynamik des Rotors angepasst werden. Auf Basis des Ausgang könnten nun die Ventile geschaltet werden. Ich verwende +/- 1.0 als Hysterese um den Reglerausgang zum Schalten.
    Code:
    bPitchZero := fbPID.fCtrlOutput > +1.0; // actual speed below nominal => pitch zero (into the wind)
    bPitchFeather := fbPID.fCtrlOutput < -1.0; // actual speed above nominal => pitch feather (out of wind)
    Natürlich müssen die Endlagen vom Pitch-System überprüft werden und dementsprechend die Ausgänge blockiert:
    Code:
    IF fPitchPosition <= fPitchPositionZero THEN
       bPitchZero := FALSE;
    ELSE
      bPitchZero := fbPID.fCtrlOutput > +1.0; // actual speed below nominal => pitch zero (into the wind)
    END_IF
    
    IF fPitchPosition >= fPitchPositionFeather THEN
      bPitchFeater := FALSE;
    ELSE
      bPitchFeather := fbPID.fCtrlOutput < -1.0; // actual speed above nominal => pitch feather (out of wind)
    END_IF
    Der gesamte Code diehnt als Sample und wurde nicht getestet!

    Bedenke außerdem, das du bei irgendeinem Fehler der Anlage, sei es elektrisch oder mechanisch, die Anlage abgeschaltet werden muss. Das Abschalten und Stoppen der Anlage passiert hauptsächlich über den Pitch, da dieser die Rotordrehzahl beeinflusst. Somit muss bei Fehler immer das Pitch-System in die Endlage fahren um den Rotor zu stoppen. Dies wird häufig Emergency Feather o.ä. genannt.
    Code:
    IF bFault AND fPitchPosition >= fPitchPositionFeather THEN
      bPitchFeather := TRUE;
      bPitchZero := FALSE;
    END_IF

  8. Folgender Benutzer sagt Danke zu Neals für den nützlichen Beitrag:

    Dr_Heisenberg (03.08.2014)

  9. #6
    Dr_Heisenberg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2014
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wow - vielen Dank! Das sieht sehr gut aus. Ich werde mal versuchen, dieses Konzept in FUP zu implementieren, auch wenn das wohl nicht besönders schön ist.

    Ein Abschalten der Anlage habe ich bedacht und auch schon teilweise implementiert, sodass die Flügel bei Störungen aus dem Wind gedreht werden. Die Anlage verfügt aber auch über eine Rotorbremse, die beim Durchgehen des Generators oder hohen Schwingungen in der Gondel über eine Feder ausgelöst wird und den Rotor in wenigen Sekunden zum stehen bringen sollte.

    Ganz vielen Dank und viele Grüße,
    Nils

  10. #7
    Registriert seit
    23.10.2009
    Beiträge
    22
    Danke
    0
    Erhielt 7 Danke für 5 Beiträge

    Standard

    Um den Kommentar von trinitaucher zu unterstreichen: Mach' Dich nicht unglücklich mit KOP/FUP/AWL. Ich habe selbst jahrelang S7 programmiert und war selbst eingefleischter AWL-Verfechter. Aber in der Codesys-Welt sind ST und CFC die Sprachen der Wahl. Die Editoren sind deutlich besser umgesetzt als die für die vorgenannten Sprachen.

    Wer für eine Codesys-basierte Steuerung die Vorgabe FUP oder AWL macht, hat möglicherweise zu wenig Erfahrung mit der Programmierumgebung.

    Insofern - ich würde das ausführliche Beispiel von Neals oben so als Basis nehmen und in ST damit weiterarbeiten.

    Grüße,
    mattsches

  11. #8
    Registriert seit
    07.06.2007
    Beiträge
    143
    Danke
    2
    Erhielt 24 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    einfachste Möglichkeit das Thema "AWL, FUP, CFC" vom Tisch zu bekommen die Kernfunktionen in einer Bibliothek zu verstecken. Keiner fragt mit welcher Sprache diese erstellt wurden. Dann die Lib einbinden und in CFC oder was auch immer verwenden.

    Thema vom Tisch.

    Grüße
    excelite

Ähnliche Themen

  1. Einfache Pitch-Regelung mit CoDeSys
    Von Dr_Heisenberg im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 31.07.2014, 10:28
  2. Codesys HMI Zugriff Regelung
    Von ebert im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 20.07.2011, 15:30
  3. CP 343-1 Lean einfache Kommunikation mit PC???
    Von service@ia-lautenschlager im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.11.2010, 20:29
  4. Regelung eines Ventils (mit codesys V2.3):
    Von crubel im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 27.11.2008, 08:35

Lesezeichen

Berechtigungen

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