Zykluszeit beim FB41 Regler

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!
Also ich soll eine Füllstandsregelung entwerfen und dazu hab ich mir jetzt ein Streckenmodell programmiert.
Ich benutze den PID-Regler im OB35 Baustein, der ja alle 100ms aufgerufen wird.
Jetzt hab ich nur das Problem, dass ich nicht weiß, was ich bei der Zykluszeit, die direkt am Regler angeschlossen ist einstellen muß?
Ist das die Zeit, die verstreichen muß, bis der Regler das nächste mal eingreift, oder arbeitet der Regler sobald er einmal vom OB35 aufgerufen wurde selbstständig weiter mit der eingestellten Zykluszeit?

Gruß Christoph
 
Hallo Christoph
ich trage an Parameter "CYCLE" immer das Aufrufintervall des OB 35 ein.
Meines Erachtens benötigt der Regler diesen Wert zur Berechnung der I- bzw. D-Anteile.

MfG. Rayk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja danke erstmal für die Antwort?

Bist du dir sicher, daß das so ist? Wieso muss man dann die Cycle-Time explizit angeben? Könnte der sich doch automatisch ziehen oder nicht?

Was hast du denn bis jetzt für Regelungen damit gemacht?
Bei mir ist es so, dass ich dir simulierten Prozessdaten in einem FB berechnen lasse. Dieser Baustein wird vom OB35 aufgerufen bevor der Regler aufgerufen wird. So hatte ich mir das überlegt. Es ist doch richtig, dass der Regler vom OB35 erst dann aufgerufen wird, wenn der vorangestellte Baustein abgearbeitet ist,oder?

Vielleicht kann ja sonst auch noch jemand was zu dem Thema sagen. Wäre echt nett.

Chruß Christoph
 
Hallo Christoph,

Ich denke, es ist so wie Rayk es beschrieben hat. Wenn die Zykluszeit nicht dem Abtastintervall entspricht, arbeit der Regler zwar, aber die Zeitkonstanten entsprechen dann nicht der Realität. Das gilt für die Standardregler FB41/FB42. Bei den speziellen Temperaturreglern FB58/FB59 darf der Parameter (glaube ich) einem Vielfachen des Aufrufintervalls entsprechen.

Muffi schrieb:
...Wieso muss man dann die Cycle-Time explizit angeben? Könnte der sich doch automatisch ziehen oder nicht?...

Das könnte er z.Bsp. über die Systemzeit, tut es aber nicht. Ich verwende die "OB35_EXC_FREQ" aus den Lokaldaten des OB35. Meist verwende ich noch einen Aufrufverteiler, multiliziere "OB35_EXC_FREQ" mit der Anzahl der Aufrufe und gebe das Ergebnis in verschiedenen Formaten aus.

Ob beim Simulieren der Regelstrecke zuerst der Regler oder die Regelstrecke berechnet wird, dürfte unerheblich sein. Dem Regler ist es egal ob die Prozessgrösse kurz vorher oder kurz nachher berechnet wird. Das Ergebnis zum Zeitpunkt des Regleraufrufs ist das gleiche, oder?


Gruss, Onkel


Nachtrag:
Macht man eine Füllstandsregelung nicht mit einem reinen P-Regler?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ok, beim P-Regler muss man im stationären Betrieb eine bleibende Regelabweichung in Kauf nehmen. Wenn man das nicht kann oder will, bleibt wohl nur ein PI-Regler. Dann muss man jedoch nach schlagartigem Entnahmestopp mit einer Überfüllung des Behälters rechnen! Ggf. kann man bei einem Füllstand >> 100% den I-Anteil abschalten oder auf „0“ initialisieren, ist ja mit dem FB41/FB42 kein Problem. Mit einem P-Regler wäre in diesem Fall bei 100% Schluss, die Ventillaufzeit mal nicht berücksichtigt, sofern sie überhaupt ins Gewicht fällt.


Gruss, Onkel
 
Vielen lieben Dank

Ich habt mir auf jeden Fall sehr geholfen. Werde das ganze direkt mal morgen ausprobieren.

Die Regelstrecke habe ich soweit fertig. Aber ich soll versuchen, noch ein PTn-Glied zu programmieren, das später die Strecke ersetzen soll. Davon hab ich leider überhaupt keine Ahnung. Hat jemand von euch sowas schonmal gemacht und hat zufällig den Code oder ein paar Denkanstöße übrig?

Das wäre echt super

Also vielen Dank nochmal

Gruß Christoph
 
Soll das ein allgemeines Streckenmodell einer PTn Strecke werden ?
Oder möchtest du das physikalisch vorhandene mit der nachgebildeten Strecke simulieren ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nee, das soll ein allgemeines sein.
Mein Betreuer will einfach wissen ob das geht. ER hatte die Studienarbeit letztes Semester schonmal vergeben. Aber dabei war wohl nichts rausgekommen. Er selbst konnte mir leider auch keine Tipps geben, da er sich mit Siemens nicht auskennt (Arbeitet bei ABB) und meinte ich solls einfach versuchen.

Gruß Christoph
 
So, habe jetzt alles im OB35 programmiert.

Jetzt hab ich aber ein neues Problem.

Im Zulauf zum Tank ist ein Ventil, welches durch den Regler gesteuert wird.
Mein Programm läuft folgendermaßen ab:
Zuerst berechne ich den Niveauzuwachs in Abhängigkeit der Ventilöffnung.
Danach berechne ich den Niveauverlust in Abhängigkeit der Öffnung des Auslassventils und des Niveaustandes vom letzten Zyklus.
Aus den Werten wird dann der aktuelle Niveaustand bestimmt.

Jetzt greift der Regler ein und berechnet den Stellwert.
Nach dem Regler übergebe ich den aktuellen Niveaustand an den Merker für den alten Niveaustand.

Jetzt mein Problem: Wenn die Füllhöhe zu klein ist, steigt der Stellwert an(Soll er ja auch) Aber im Programmteil wo ich den Zufluss berechne wird nicht der selbe Wert angezeigt, obwohl es der selbe Merker ist.

Reglerausgang: 100 MD17
Weiter oben: Eingang in Mul_R MD17= -4.30318e-37

Hatte zuerst gedacht, daß es an unterschiedlichen Datentypen liegt, aber die Sind beide Real.

Hat vielleicht einer ne Ahnung, woran das liegen könnte?
So funktioniert die ganze Simulation nicht. :-(

Gruß

Christoph
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort!
Was meinst du genau damit? Ich soll den Reglerausgang nicht direkt auf den MD17 geben?

Ich hab eben mal probiert den Regler auf den MD50 zulegen. Hab dann mit nem Move-Baustein auf den MD17 verschoben. Hat aber leider auch nicht funktioniert.
 
Mit Bytes (MB), kannst Du jedes Byte adressieren. Mit WORD und DWORD, sollte die Adresse auf eine gerade Byte-Adresse liegen.

Ich kann dies nirgendwo explizit finden und es stimmt, dass man im Symbol Editor ein Symbol auf MW17 legen kannst. Aber versuch es in ein DB und es geht nicht. Gibst Du in DBB0 ein Byte als Data ein, wird der Anfang der nächste Adresse trotzdem auf DBB2 gelegt.

Versuch es einfach mal mit MD 16 oder MD20.
 
Wenn du den Reglerausgang mit Move von MD50 auf MD17 geschoben hast und wieder "Unsinn" im MD17 stand, beschreibst du MD17 evtl. woanders in deinem Programm. Man kann auf MD17 zugreifen, i.d.R. werden aber gerade Adressen verwendet. Du solltest also, wie RMA schon schrieb, besser MD 16 nehmen. Außerdem kontrollieren, ob du irgendein Bit, Byte, Word oder das DWord schon woanders verwendest. (!!Schreibfehler??) --> Referenzliste
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Muffi schrieb:
..Nach dem Regler übergebe ich den aktuellen Niveaustand an den Merker für den alten Niveaustand...

Verschrieben? Denkfehler? Oder ich hab's falsch verstanden. Nach dem Regler übergibst du doch das neue Stellsignal an das Ventil, wie du es eingangs erwähnt hast, oder? Der Niveaustand wird durch die simulierte Regelstrecke berechnet, nicht durch den Regler. Wollte nur darauf hinweisen, könnte ja sein...

Bedenke auch dass ein Doppelwort 4 Byte belegt. In deinem Fall dürfen also alle Merker 17/18/19/20 nicht anderweilig verwendet werden! Im Gefecht passiert das schnell einmal :wink: .


Gruss, Onkel
 
Hey danke für eure Tipps

Ich hab jetzt im Verlaufe des Tages einfach mal was anderesprobiert.
Hab mir nen global DB erstellt wo ich die Werte reinschreibe. Und siehe da, es funktioniert.

Jetzt ist nur noch das Problem, dass irgendwie nicht alle Startwerte, die ich im DB angegeben habe übernommen werden.
Macht aber nichts. Hab die entsprechenden Werte dann direkt am FC eingegeben. Jetzt läuft soweit alles zufriedenstellend.

Also nochmal vielen Dank, daß ihr euch so eifrig Gedanken gemacht habt. Ist echt ein super Forum hier. Da wird man als Novice nicht mit flappsigen Kommentaren abgespeist.

Werde mich bestimmt nochmal an euch wenden, wenn ich die meiner Meinung nach unmögliche Aufgabe das PTn-Glied zu programmieren angehen werde.

Also schonmal vielen Dank im Vorraus :)

Gruß Christoph
 
wieso "Novice"?

Hallo Christoph,

wieso "Novice"? Wer hier Regelstrecken simuliert gehört doch quasi schon zur Elite :wink: . Als "richtiger" SPS-Programmierer hättest du allerdings den Ehrgeiz haben müssen, den Feher mit dem Merkerdoppelwort zu finden. Bei der Datenablage im DB schliesst sich der Fehler der Doppelbelegung von Speicheradressen aus (bei symb. Zugriff), ich hätte es dir vorhin fast schon vorgeschlagen.

Zum Verändern der Aktualwerte im DB verwendest du am besten eine Variablentabelle.

Wie man ein PTn-Glied programmiert weiss ich auch (noch) nicht. Fang doch mal mit einem PT1-Glied an, oder hast du dafür schon eine Lösung? Die S7 kann ganz gut mit real rechnen und die e-Funktion kennt sie auch. Die zeitgesteuerte Bearbeitung im OB35 kennst du ja schon. Nur mal so als Tipp :wink: .


Gruss, Onkel
 
Zurück
Oben