Forum: PC-Programmierung PID Regler - Stellwert-Problem - VBA


von Frank K. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

ich habe mal versucht einen PID-Regler in Excel nachzubauen, natürlich 
per VBA. Leider will das ganze nur so halb funktionieren und ich habe 
nur eine indirekte Ahnung woran das liegen könnte, aber ersteinmal die 
Fakten:

Die Tabelle in Excel sieht so aus:


       A          B           C                D
1  Ü-Schrift   Ü-Schrift  Ü-Schrift        Anzeige des
   Soll-wert   Ist-Wert   Abweichung   benutzen Stellwertes
2    Wert        Wert        Wert            Wert
3    Wert        Wert        Wert            Wert
4    Wert        Wert        Wert            Wert
5    Wert        Wert        Wert            Wert

Der Programmcode ist folgender (angelehnt an auch bereits hier 
diskutierte Regel-Probleme):

[code]Sub pid_berechnung_()
Dim abweichung, sollwert, abweichung_summe, istwert, abweichung_alt As 
Double

kp = Range("o2").Value
tn = Range("o3").Value
tv = Range("o4").Value

Call löschen 'Löscht nur Ist-Wert Zellen, für neue Berechnung
'Initialisieren (evtl. falsch?!)
abweichung = 0
abweichung_summe = 0
abweichung_alt = 0
stellwert = 0

'Soll-Wert festlegen immer fix
sollwert = Range("A2").Value

For i = 2 To 25
    istwert = Cells(i, 2).Value
    abweichung = sollwert - istwert
    Cells(i, 3).Value = abweichung
        If istwert <= Cells(2, 1).Value Then 'Wenn der Ist-Wert kleiner 
'als Soll ist, dann mach das; Ansonsten Schleife beenden

            abweichung_summe = abweichung_summe + abweichung
            stellwert = kp * abweichung
            stellwert = stellwert + (1 / tn) * abweichung_summe
            stellwert = stellwert + tv * (abweichung_alt - abweichung)
            Cells(i, 4) = stellwert
            abweichung_alt = abweichung
            Cells(i + 1, 2).Value = stellwert + istwert
        Else
            Exit For
        End If
Next

End Sub[\code]

Nun das Problem (als Bild dabei)
Ich habe einen Soll-Wert von 100 und einen Ist-Wert von 30 => 
abweichung=70
Nun wird mein Stellwert aber, wie man sieht, immer größer?! Das ist doch 
nicht richtig, oder? Und nach 2 Schritten ist er direkt fertig.
Ich glaube, dass kommt daher, da das bei dem D-Anteil ja
(abweichung_alt-abweichung) genommen wird. Beim ersten mal, ist 
abweichung_alt=0 und daher wird genommen (0-70)*Tv => ergibt einen 
negativen Wert, der von der aktuellen Regelabweichung abgezogen wird. 
Daher ist der erste Wert schön "klein", bzw. "gering" bei der nächsten 
Runde habe ich aber z.b. dann (70-56) => 26*tn, der wert ist wieder groß 
und die Stellgröße wird daraufhin wieder so groß.

Wenn ich an Kp, Tv, Tn drehe, wird alles nur noch schlimmer :-)

Kann mir jemand helfen? Einen Tip geben, oder mir sagen, was ich falsch 
mache?

Vielen Dank! Gruß!

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich blicke zwar nicht ganz genau bei deiner Formel durch, aber du musst 
zunächst die P, I und D-Werte getrennt ermitteln, dann mit je einem 
Faktor versehen (der meist kleiner 1 ist), alle drei Ergebnisse addieren 
und nun endlich zur Anwendung (Stellgröße) bringen ... Vorzeichen 
beachten.

von Frank K. (Gast)


Lesenswert?

Hallo!

Danke für deine Antwort.
Also meine Formel habe ich von Wikipedia:
http://de.wikipedia.org/wiki/Regler#PID-Regler

Mein Problem ist, wie man oben auf dem Bild sieht, dass der Stellwert 
immer größer wird, obwohl die Regelabweichung kleiner wird. Das ist ja 
nicht richtig, oder?

MfG

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Vorzeichen-Fehler?

von Frank K. (Gast)


Lesenswert?

Hallo,

habe gerade nochmal drüber geschaut und habe den D-Anteil geändert:
von abweichung_alt-abweichung auf abweichung-abweichung_alt..

aber das hat auch keine verbesserung gegeben, der erste stellwert ist 
nun immer EXTREM groß, sodass ich direkt auf den Ist-Wert springe und 
eigentlich in einem schritt fertig bin :-) Ist ja auch logisch, denn 
abweichung_alt=0 und abweichung z.b. =50

dann habe ich tv*(50-0) => ziemlich groß

Ich habe irgendwie das Gefühl, dass der D-Anteil beim ersten Durchlauf 
das Problem ist, da da abweichung_alt=0 ist darum fällt der erste Wert 
immer so aus der Reihe.

Einen anderen Vorzeichenfehler gibt es doch nicht, oder?

Danke für die Idee!

Gruß!

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Du willst doch eine Simulation machen, oder? Hast du bedacht, dass eine 
reale Regelstrecke nicht sofort und genau auf die Stellgröße reagiert - 
im Gegensatz zu den Zahlenwerten in einer Excel-Tabelle. Wenn das nicht 
so wäre, würde immer ein simpler P-Regler genügen ...

Welchen Stellwert du rausschickst und was die Regelstrecke davon annimmt 
sind schliesslich zwei verschiedene Dinge.

von slow (Gast)


Lesenswert?

Reale Stellglieder habe immer eine Begrenzung der Stellgröße:
z.B. ein Verstärker kann nur eine bestimmte Leistung abgeben

In Deiner Simulation fehlt das. Du baust einen Dead-Beat-Regler, in der 
Theorie ist der klasse in der Praxis nicht vorhanden.

Wie sieht eigentlich Deine Regelstrecke aus? Hab die Zeilen nicht 
durchschaut.

von Frank K. (Gast)


Lesenswert?

Hallo!


Danke für die Antworten! Ja ich wollte so eine Art Simulation machen. Es 
ist irgendwie alles so theoretisch was man hört.

@Frank
ok, das stimmt. Aber nimmt die Regelstrecke nicht den Stellwert als 
Vorgabe? Also nimmt sie ihn doch schon "irgendwie" an.

Danke für Deine Antwort, aber so ganz verstehe ich noch nicht worauf du 
hinaus möchtest! ;)

@slow
Ok, das wusste ich nicht, dass die begrenzt werden. Da schaue ich gleich 
mal nach, wie ich sowas sinnvoll lösen könnte.

Hm, Dead-Beat-Regler? Davon habe ich noch nie etwas gehört.

Regelstrecke, nunja. Die Idee dahinter war eigl. nur folgende:
Ich habe einen Soll-Wert und einen Ist-Wert (beide von mir vorgegeben). 
Dann lasse ich den Regler den Ist-Wert auf den Soll-Wert anpassen (als 
PID-Regler)

Wenn man aber so möchte, quasi ein Becherglas mit T_ist in das anderes 
Wasser hineingekippt wird. Dann hat die Mischung eine andere Temp und 
die soll auf T_soll geregelt werden.

Meinst du das?


Danke für die Antworten!

Gruß!

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Frank K. schrieb:
> ok, das stimmt. Aber nimmt die Regelstrecke nicht den Stellwert als
> Vorgabe? Also nimmt sie ihn doch schon "irgendwie" an.

Ja klar, eine reale Regelstrecke braucht Zeit, um sich dem Wirken der 
Stellgröße zu beugen - um das zu optimieren gibt es schliesslich die 
zeitabhängigen I- und D-Anteile.
Deine Simulation nimmt die Werte dagegen sofort in voller Höhe an und 
verhält sich damit absolut atypisch, deshalb wohl auch die unerwarteten 
Ergebnisse. Du musst irgendwie ereichen, dass deine simulierte 
Regelstrecke träge und mit Überschwingen reagiert, dann passen auch die 
Formeln wieder.

Evtl. hilf dir da Excel nicht weiter, versuche es mal mit VB oder VBA. 
In der Simulation musst du einen Zeittakt einführen, in dem die 
Regelstrecke jeweils nur zum Teil der Stellgröße nachgibt. Will man auch 
das Überschwingen simulieren (nichtlinear!), muss man schon ganz schön 
tief in die Mathe- und Programmierekiste greifen.

Richtig mit grafischer Oberfläche und einstellbaren Parametern wäre das 
sicher en begehrtes Lerntool ...

von Frank K. (Gast)


Lesenswert?

Ok, Danke für die Antwort.
So heftige habe ich das Problem, mit dem Stellwert, nicht gesehen.

Dann muss ich mich wohl nach alternativen umschauen, oder tiefer in die 
Programmierung einsteigen ;)

Danke für die Antwort!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.