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

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

Thema: Regelalgorithmus - VBA

  1. #1
    Registriert seit
    29.10.2011
    Beiträge
    5
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!
    ich bin frisch angemeldet und habe direkt eine große frage

    ich habe vor einiger Zeit begonnen einen PID Regler in Excel mit VBA zu progammieren. Aber ich komme momentan einfach nicht weiter. Nachdem ich vergebns versucht habe P, D und I Anteil direkt mit einzuprogrammieren, versuche ich zur Zeit nur den P-Anteil in den Griff zu bekommen, aber dies haut irgendwie nicht hin.

    zuerst einmal der Quellcode:
    [/CODE]Im Prinzip eine Herdplatte mit Q=m*cp*deltaT

    Mein Problem ist nun, wenn ich ein xp von 10 °C angebe
    und yh=1000 W ist (maximale Leistung)
    Ergibt sich ja für Kp=yh/xp=1000W/10°C=100W/°C

    und eine xp Bereich von 10, also muss doch der P-Regler, bei einer Soll-Temp von 100°C, bis 90°C volle 1000W fahren und danach die Leistung proportional zurücknehmen um dann irgendwann bei 0W zulanden (optimaler Fall)? Richtig?

    Bei mir sieht das ganze jedoch leider so aus


    (Für dieses Beispiel habe ich die Bergenzung, dass Q maximal 1000W sein darf rausgenommen)
    Der Heizwert liegt jenseits der 1000W und der Heizwert nimmt schon bei einer Differenz von 20°C ab. Ich komme gerade nicht mehr weiter, hat evtl. jemand eine Idee, oder sieht wo mein Fehler ist? Ich habe mal alles Fett makiert, was meiner Meinung nach mit dem P-Antei zu tun hat.

    Falls jemand einen Tipp hat, wäre ich sehr sehr Dankbar!

    gruß!
    Geändert von phetzaaa (31.10.2011 um 14:00 Uhr)
    Zitieren Zitieren Regelalgorithmus - VBA  

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

    Standard

    Woher kommt denn yh?
    Der Variablenwert wird zumindest in dem von dir gezeigten Code nicht beschrieben.

  3. #3
    phetzaaa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2011
    Beiträge
    5
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo!

    ja, entschuldigung. yh habe ich als globale variabel und als konstante deklariert

    Const yh As Integer = 1000

    Das ist meine maximale Heizleistung in [W]

    Gruß!

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

    Standard

    Mir ist nicht ganz klar was du mit dieser Zeile bezwecken willst:
    Code:
    Q = m_stellwert * (i - 6) 'Q=Y*delta_t [W]
    Du hast hier einen digitalen zeitdiskreten Regler programmiert, also ist die Zeitdifferenz immer gleich (1).

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

    phetzaaa (29.10.2011)

  6. #5
    phetzaaa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2011
    Beiträge
    5
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hm,
    also ich habe mir über die eingebrachte Wärmemenge gedanken gemacht.
    Diese ändert sich ja mit der Zeit, also

    dQ/dt = m*cp*delta_T/dt

    und die Anderung von Q hängt vom Stellwert ab =>
    Q = m_stellwert * delta_t
    bei dem delta_t dachte ich nun, dass das die Differenz vom Anfang, bis zum Zeitpunkt t ist. (Wie beim I-Anteil, da Summiere ich ja auch von t=0 bis t=t auf) Aber ich glaube das war ein Denkfehler.

    auf jeden Fall bekomme ich dann für die Temperaturänderung
    delta_T = Q/(m*cp)


    Hm, aber du hast recht. Iich betrache meine System ja eh nur an bestimmten Punkten.
    Wenn ich als zeitschritt immer 1 annehme erhalte ich folgendes Bild.
    xp=10. Irgendwie scheint es, dass er diesen Proportionalbereich überhaupt nicht annehmen will.

    4

    MfG!
    Geändert von phetzaaa (29.10.2011 um 18:56 Uhr)

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

    Standard

    Also bei mir funktioniert es wie es soll.
    Ich habe aber deine If-Abfrage für mit "If m_istwert + 0.00005..." und das "Exit For" auskommentiert. Ansonsten würde die Schleife nur einmal durchlaufen.

    Falls du damit vorhattest einen Totbereich für den Regler umzusetzen, programmiert man das besser etwas anders.

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

    Standard

    Was hast du denn in deinem Diagramm hinter der Variable für Heizleistung liegen? Da müsste dann der Wert von Q angezeigt werden (Cells(i, 6)) und nicht die Stellgröße. Denn die wird begrenzt bis du in den Proportionalbereich hineinkommst.

  9. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    phetzaaa (29.10.2011)

  10. #8
    phetzaaa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2011
    Beiträge
    5
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Uff, jetzt bin ich verwirrt. hm, also meine Heizleistung ist der Wert Q in cells(i,6). Diese gebe ich auch als "Heizleistung" im Diagramm aus. Ahh, ok.. ich hatte die Begrenzung für das Q nicht drin, darum waren die Werte so extrem hoch. Dann war es der Fehler mit der Zeit. Aber warum hast du die If-Abfrage weggenommen nund hast du ja 1500 volle Durchläufe, auch wenn du schon den Soll-Wert von 100°C erreicht hast. Die If-Abfrage sollte eigentlich nur abbrechen, wenn der Soll-Wert erreicht ist. Da der reine P-Regler ja nie den Soll-Wert erreicht und später sich nur noch irgendwas im 1^(-14) Bereich ändert, habe ich einfach zum Test die 0,00005 aufaddiert, damit er irgendwann mal nah genug an 100°C abbricht. Ich glaube da wäre auch eine "Do-until"-Schleife besser gewesen Ist das in der Praxis auch üblich, dass die Stellgröße dann begrenzt wird? VIEEEELEN DANK SOWEIT! Dann schau ich gleich mal nach dem I und D Anteil, aber die müssten ja eigl. laufen! //Mist zu früh gefreut, wenn ich die anderen Dazu nehme, schwingt er gnadenlos über und bricht auch nicht bei 90°C ab zu heizen.
    Geändert von phetzaaa (29.10.2011 um 16:35 Uhr)

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

    Standard

    Eben. Wenn du ein schwingungsfähiges System hast, fallen dir falsche Reglerparameter gar nicht auf wenn du immer mit der Darstellung bei Erreichen des Sollwertes abbrichst.

    Wenn du mit Excel und Reglern mehr rumprobieren willst, würde ich die Programmstruktur auch etwas ändern.
    Momentan hast du ja Regler und Regelstrecke in einer Funktion zusammengeworfen. Sinnvoller wäre es den PID-Regler in eine eigene Funktion mit entsprechenden Parametern und Rückgabewerten zu packen. Gleiches gilt für deine Regelstrecke.
    Wenn du das so getrennt hast, kannst du später einfacher deinen Regler an eine andere Regelstrecke "anschließen" und das Verhalten beobachten. Um die für den I- und D-Anteil notwendigen Daten aus dem vorigen Aufruf zu behalten, kannst du z.B. statische Variablen verwenden, oder machst dir gleich aus allem ein Klassenmodul.

  12. #10
    phetzaaa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2011
    Beiträge
    5
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Stimmt! Das habe ich gar nicht bedacht, dass ich die Überschwinge gnadenlos abschneide.



    Eine Frage hätte ich noch:

    Begrenzt man in der Praxis auch den Stellwert?


    Danke dir nochmals sehr!
    Geändert von phetzaaa (29.10.2011 um 18:49 Uhr)

Ähnliche Themen

  1. Literatur zum Regelalgorithmus unter S5
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 28.03.2005, 20:40
  2. Literatur zum Regelalgorithmus unter S5
    Von Anonymous im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 28.03.2005, 12:54

Lesezeichen

Berechtigungen

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