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ß!
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.
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
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ß!
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.
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.
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ß!
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.