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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Automatische Reglereinmessung

  1. #1
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute, ich möchte eine Routine schreiben, die in der Lage ist, die Parameter für einen PID-Regler über das Wendetangentenverfahren zu ermittelen.

    Ich möchte das Programm anweisen, einen Stellwertsprung auszugeben.
    Dann möchte ich die Zeit messen, bis die Antwort der Strecke beginnt, sich zu ändern.

    Das sollte soweit machbar sein.

    Jetzt kommts aber...ich muss jetzt den Zeitpunkt der maximalen Steigung der Sprungantwort finden. Es gibt in der Oscat.lib einen Differenzier-Baustein, den ich dazu nehmen könnte.

    Meine Frage: Wie kann ich den Wert finden, an dem diese Differentiation maximal wird? Gibt es eine Funktion, die einen Werteverlauf überwacht und ein lokales maximum finden kann?

    Hoffe ihr habt einen Tipp für mich, Danke schonmal im Voraus.
    Zitieren Zitieren Automatische Reglereinmessung  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Majestic_1987 Beitrag anzeigen
    Meine Frage: Wie kann ich den Wert finden, an dem diese Differentiation maximal wird? Gibt es eine Funktion, die einen Werteverlauf überwacht und ein lokales maximum finden kann?
    Die gute alte Kurvendiskussion:
    1) f''(x) bilden (also deinen differenzierten Wert nochmal durch den Diff.Baustein jagen)
    2) Nullstellen von f''(x) bestimmen, hier sind die möglichen Wendepunkte
    3) f'''(x) berechnen, wenn !=0 dann ist hier ein Wendepunkt

    In deinem Fall reicht es bis 2) vorzugehen und dann abzubrechen (ggf. so etwas wie eine Statemachine aufbauen).

    Mehrfaches differenzieren an realen Messwerten ist aber oft schwierig.
    Wichtig ist dabei vor den Differenzierer einen Tiefpass zu schalten dessen Grenzfrequenz so liegt, dass dein zu erwartender Messwertverlauf noch sicher erfasst wird.

    Gruß
    Thomas

  3. #3
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Also, wie ich das auf dem Papier mach wenn ich eine gegebene Funktion habe ist mir soweit ja klar.

    ABER: Wenn ich einen Messwert ableite bekomme ich eine Steigung zum Zeitpunkt der Ableitung.

    Wenn ich das jetzt nochmal mache, habe ich ja wieder einen festen Wert...Finde ich da kritische Punkte, wenn ich diesen Wert auf 0 überwache?

    Das mit dem Tiefpass musst du mir erklären.

    Ich kämpfe ohnehin noch mit dem Oscat-PID-Baustein...dahinter muss eine Schwingungspaketsteuerung (Also quasi PWM mit sehr geringer Frequenz...und ich hab keine Ahnung welchen Wertebereich mein PID ausspuckt, sodass ich diesen auf 0...1 skalieren kann...). Mal sehen wie ich das dann noch löse.

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Also ich schreibe mal in Pseudocode wie ich das meine:
    Code:
    // In
    Messwert : Real
    // out
    Wendepunkt : Bool;
    // Var
    Messwert_alt : Real;
    dx_dt : Real;
    dx_dt_alt : Real;
    d2x_dt2 : Real;
    d2x_dt2_alt : Real;
    state : int;
    
    // Differenzieren
    dx_dt = Messwert - Messwert_alt;
    d2x_dt2 = dx_dt - dx_dt_alt;
    
    Messwert_alt = Messwert;
    dx_dt_alt = dx_dt;
    d2x_dt2_alt = d2x_dt2;
    
    switch (state) {
    case 0: 
      if (dx_dt > 0 and d2x_dt2 > 0)
        state = 1;
    case 1:
      if (dx_dt > 0 and d2x_dt2 <= 0)
        state = 2;
    }
    
    if (state == 2) then wendepunkt := true;
    Dieser Code sollte in einem festen Zeitraster aufgerufen werden.

    Mit dem Tiefpass meine ich folgendes:
    Da ein realer Messwert oft stark schwankt, muss dieser erst soweit geglättet werden damit nicht jede kleine Schwankung als Wendepunkt erkannt wird.
    Dazu gibt es in der Oscat Lib auch einen Baustein (glaube P_T1 heißt der dort).
    Die Zeitkonstante an diesem Baustein muss dann so angepasst werden, dass ungewollte Messwertschwankungen herausgefiltert, aber der eigentliche (zu erwartende) Messwertverlauf nicht zu stark gedämpft und somit verzögert wird.

    Grob gesagt: Ändert sich der Messwert bei einer Sprungantwort in einer Sekunde, liegt man mit einer Grenzfrequenz von 1 Hz auf jeden Fall zu niedrig.

  5. #5
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Fakt ist aber, dass ich den Wendepunkt ja garnicht suche!

    Was ich suche ist die maximale Steigung des rückgeführten Wertes!

    Also wenn der Messwert der Funktionswert f(x) ist...

    Dann ist f'(f(x)) die Steigung in diesem Punkt.

    Deren Maximum benötige ich, ich setze also f'(f(x)) als neue Funktion g(x) voraus.

    Deren Maximum finde ich durch 2-Fache Differentiation:

    g'(x) == 0 -> kritischer Punkt

    WENN das der Fall ist bilde ich g''(x)

    Ist g''(x) < 0 -> lokales Maximum.

    Dann kann ich den zu diesem Zeitpunkt aktuellen Steigungswert des Messwertes als maximale Steigung der Sprungantwort meiner Regelstrecke ansehen.

    hier mein vorzeitiger Code...ich weiß nur nicht, ob er wirklich mein Problem lösen kann:

    Variablen:

    FUNCTION_BLOCK PID_Param

    VAR_INPUT

    Actual: REAL; (*Aktualwert*)
    Tol_Max: REAL; (*Toleranzband oben*)
    Tol_Min: REAL; (*Toleranzband unten*)

    END_VAR

    VAR_OUTPUT
    Kp_Out: REAL; (*KP-Anteil*)
    Tn_Out: TIME; (*Nachstellzeit*)
    Tv_Out: TIME; (*Vorhaltezeit*)
    END_VAR

    VAR
    Flanke1: BOOL; (*Flanke für Zeitmessung*)
    VZ_Zeit: TIME; (*Verzugszeit Messung*)
    Deriv1_Run: BOOL; (*Start Differentiation 1*)
    Deriv2_Run: BOOL; (*Start Differentiation 1*)
    Deriv3_Run: BOOL; (*Start Differentiation 1*)

    Deriv1_Out: REAL;
    Deriv2_Out: REAL;
    Deriv3_Out: REAL;


    Deriv1: FT_DERIV;
    Deriv2: FT_DERIV;
    Deriv3: FT_DERIV;
    END_VAR

    VAR RETAIN PERSISTENT
    VZ_Zeit_Neu: TIME; (*Speicher aktuelle Verzugszeit*)
    N_Neu: REAL; (*Steigung der Wendetangente*)
    END_VAR

    ST-Code:

    IF Actual<Tol_Max AND Actual>Tol_Min THEN

    Flanke1 := TRUE;
    M_T(In:=Flanke1, PT:=VZ_Zeit); (*Diese Funktion misst die Zeit zwischen einer pos. Flanke an In und einer negativen Flanke an In*)

    ELSIF Actual>Tol_Max OR Actual<Tol_Min THEN
    Flanke1:=FALSE;

    VZ_Zeit_Neu := VZ_Zeit;

    Deriv1_Run := TRUE;
    Deriv2_Run := TRUE;

    Deriv1.in:=Actual;
    Deriv1.K:=1;
    Deriv1.run:=Deriv1_Run;

    Deriv1();

    Deriv1.out:=Deriv1_Out;

    Deriv2.in := Deriv1_Out;
    Deriv2.K := 1;
    Deriv2.run := Deriv2_Run;

    Deriv2();

    Deriv2.out := Deriv2_Out;

    IF Deriv2_Out = 0 THEN

    Deriv3_Run := TRUE;

    Deriv3.in := Deriv2_Out;
    Deriv3.K := 1;
    Deriv3.run := Deriv3_Run;

    Deriv3();

    Deriv3.out := Deriv3_Out;

    IF Deriv3_Out < 0 THEN

    N_Neu := Deriv1_Out;

    END_IF

    Kp_Out := 1.2 / (TIME_TO_REAL(VZ_Zeit_Neu)*N_Neu);
    Tn_Out := MULTIME(VZ_Zeit_Neu, 2);
    Tv_Out := MULTIME(VZ_Zeit_Neu, 0.5);

    END_IF

    END_IF

  6. #6
    Registriert seit
    19.09.2008
    Beiträge
    24
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hat jemand von euch zufällig ein paar Online-Dokumente oder eine Web-Adresse mit einer Beschreibung zu diesem Auto-Tuning-Verfahren?

  7. #7
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Habe ein Word-Dokument dazu im Web gefunden....

    ich habs dir mal auf meinen Webserver gestellt:

    http://www.sven-haan.com/IMS2006-030.doc

  8. Folgende 2 Benutzer sagen Danke zu Majestic_1987 für den nützlichen Beitrag:

    suud (14.12.2008),Thomas_v2.1 (14.12.2008)

  9. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Falls ihr Step7 installiert habt, steht in der Dokumentation zum FB58 auch einges dazu. Dieser hat auch die Option die Regelstrecke auszumessen.

    Fakt ist aber, dass ich den Wendepunkt ja garnicht suche!

    Was ich suche ist die maximale Steigung des rückgeführten Wertes!
    Also der Wendepunkt ist doch der Punkt an dem die Steigung wieder abnimmt, also der Punkt der maximalen Steigung.

    Wenn bei deiner Strecke zwei Wendepunkte vorliegen sollten ist das natürlich was anderes. Dann ist aber auch die Frage, ob die errechneten Streckendaten überhaupt aussagekräftig sind.
    Dieser Siemens FB fährt zum ausmessen der Strecke auch nur bis an den Wendepunkt, und geht dann in den Regelbetrieb über.

  10. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Hier mal der Link zur Siemens Dokumentation:

    http://support.automation.siemens.co...652438&lang=de

  11. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    nach Durchlesen dieses Beitrages fällt mir dazu spontan ein :
    Warum zeichnest du nicht die Antwort-Kurve auf und wertest die dann aus ?

    Mein Vorschlag hier wäre :
    Für die Dauer der Antwortzeit mit festen Zeitraster die Kurve (x- und y-Werte) aufzeichnen. Nach Ende der Aufzeichnung die aufgezeichneten Daten glätten. Auf Basis der nun vorhandenen Kurve die max-Steigung (zwischen 2 Punkten oder ggf. auch über einen größeren Bereich) ermitteln. Vielleicht ist hier auch die mittlere Steigung hilfreich. Auch ein Trägheits-Verhalten ist so zu ermitteln.
    Ich selber erstelle für Prüf-Aufgaben häufiger Kraft-Weg-Messungen nach diesem Schema. Hier ist die Betrachtung von 2 banchbarenden Werten nicht hilfreich.

    Vielleicht ist dies als Anregung dienlich.
    Gruß und schönen Sonntag
    LL

Ähnliche Themen

  1. Automatische Adressierung
    Von Majestic_1987 im Forum CODESYS und IEC61131
    Antworten: 24
    Letzter Beitrag: 13.10.2009, 15:12
  2. Automatische Umwandlung von Kop in AWL
    Von Mario_1 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 13.06.2006, 12:04
  3. Automatische Richtungswahl
    Von Jim Knopf im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 21.02.2006, 09:06
  4. Automatische Bildumschaltung
    Von chivas im Forum HMI
    Antworten: 3
    Letzter Beitrag: 06.10.2004, 10:17
  5. Automatische Programmänderung S5
    Von Balou im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 25.04.2004, 18:46

Lesezeichen

Berechtigungen

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