Step 7 CONT_C im OB1 Zyklus

Markus

Administrator
Teammitglied
Beiträge
6.323
Reaktionspunkte
2.341
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

hat schon jemand Erfahrungen mit dem CONT_C Regler Baustein FB41 von SIEMENS im OB1 Zyklus?
Ich würde dann halt die OB1 Zykluszeit (schwankend) an parametrieren.

Eigentlich sollte er doch dann richtig rechnen, oder?
Es wäre einfach strukturell schöner so... :)

Problematisch wird die Auflösung von 1ms sein, wenn ich im mittel von 10ms ausgehe, dann gibt das einen maximal möglichen Fehler von 10%.
Es geht hier um Temperaturregelungen und Druckregelungen an Pumpen.
Alles nicht besonders schnell.

Mein Gefühl sagt es geht, was sagt ihr? :)
 
Hi!

Also ich hab das schon gemacht, eben weil wie du sagst, es strukturell besser zu handhaben ist.
Die Zykluszeit bewegt sich bei meiner S7-317-2PN/DP bei maximal 10ms.
Leider hab ich die Regelstrecke noch nicht in Betrieb genommen. :)
Aber ich gehe ebenso davon aus, dass es wenn überhaupt nur im Grenzfall von 1ms ein Problem geben würde.


Gruß,

Ottmar
 
Hi

Habe mehrere Regle an unterschiedlichen Anlagen laufen.

Den FB41 rufe ich mit dem OB35 aus (100ms)

Bei Aufruf im OB1 muß der Parameter "SELECT" angepaßt werden.

Test nur mit OB1 habe ich noch NICHT gemacht.
 
Ich mache das auch schon mal wenn es die Regelstrecke erlaubt. Ich mache es dann aber mit einem bedingten Aufruf des FBs über eine Flanke die aus einem System-Taktmerker generiert wird.
Mit der Zykluszeit aus dem OB1 gibt es nämlich das Problem, dass dieser bei schnellen CPUs auch bei gleichbleibenden Zykluszeiten immer um +/-1ms schwankt, damit in Summe über einen längeren Zeitraum eine korrekte Zeit aufsummiert werden kann. Übergibt man diese Zykluszeit an den Regler-FB bekommt man immer ein leichtes zittern.

Nachteil mit der Taktflanke ist, dass man den Baustein nur schlecht online beobachten kann. Ich hatte auch schonmal einen Kunden der sich über diese Programmierung beschwert hat, und dass das ja der totale Murks wäre so zu programmieren. Ich habe ihm dann gesagt, wenn er mir vorrechnet dass die Ungenauigkeit die ich durch die Sekunden-Flanke in seine Regelstrecke mit einer Zeitkonstante von ca. 1 Minute bringe relevant ist, programmiere ich das um. Dann war Ruhe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Markus,

Hab schon in Programmen der CONT_C in eine OB1 Cyclus gesehen.
Da war dann als Festparameter auf CYCLE der OB1 Cycluszeit angegeben. War auf jeden fall nicht im 1mS Bereich.

Das heißt, geht schon im OB1. Aber sauber rechnen macht die dann nicht. Weiß auch nicht warum die den da reingemacht haben. So schnelle Regelung brauchen wir auch nicht.

So wie Helmutt sagt und es auch in die Hilfe steht gehört die in eine 30er Weckalarm OB.
In dein fall ( Langsame Regelung) passt es auch wenn man die in eine 30er macht.

Bram

xxxxxxxxxxxxx

Mit eine aufruf in OB1 funktioniert auch bestimmt das optimierungs-Tool / Baustein nicht sauber
 
Zuletzt bearbeitet:
Das Ganze geht, wenn das SPS-Programm dazu passt und du eine konstante Zykluszeit hast.
Bei Programmen mit stark schwankenden Zykluszeiten (viele bedingte Bearbeitungen) kannst du - wie Thomas auch vorschlägt - Taktmerker mit 200ms oder noch höher verwenden.
Für Temperatur-Regelungen reicht das in den meisten Fällen auch. Bei Pumpen kommt es halt auf die Applikation an.

Gruß
Dieter
 
Also ich habe eine Druck- und Saugluftanlage mit Regelung im OB1 programmiert und die läuft seit einigen Jahren.
Bei solchen langsamen Regelstrecken, wie du beschreibst, was macht den Unterschied, ob der nach 5 oder nach 10ms einen neuen Sollwert zum Verarbeiten bekommt?
Wegen reproduzieren des Regelungsverhalten würde ich schreiben:
Was ist wenn ein neuer Sollwert erst 5 ms später ausgegeben wird?

Ich würde die Reaktion der Komponenten mir anschauen und versuchen und messen wie schnell diese reagieren, dann kannst du, so denke ich, dir selbst die Antwort geben.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Markus,

ich würde da nicht lange herumexperimentieren. Was stört dich denn an dem OB35?

Die Regleranteil werden üblicherweise wie folgt berechnet. Ich gehe davon aus dass es im FB41 nicht grundlegend anders ist.

P := GAIN * e
I := I + GAIN * TA/TI * (e + e1) / 2
D := GAIN * TD/TA * e2

e : aktuelle Regelabweichung (SP-PV)
e1: Regelabweichungt vom vorherigem Zyklus
e2: Differenz bzw. Änderung der Regelabweichung (e-e1)
TA: Abtastzeit bzw. Aufrufintervall
TI: Integrationszeit
TD: Differenzierzeit


Dem P-Anteil ist es egal.

Beim I-Anteil wirkt TA als Faktor auf den neu zu berechnenden Anteil. Wenn TA nicht konstant ist, dann hast du mehr oder weniger ein "selbsterzeugtes" Schwingen. Die Regelstrecke kommt dadurch chancenlos nie zur Ruhe. Betroffen sind natürlich auch die Stellglieder und auch deren Lebensdauer, falls diese mechanisch arbeiten. Bei Regelungen die aufgrund starker Störgrößen ohnehin nicht stabil werden, fällt es nicht großartig auf, ist jedoch in jedem Fall suboptimal.

Beim D-Anteil, falls man ihn braucht, wird ein schwankendes TA noch kritischer.

Wenn du den Regler unbedingt im OB1-Zyklus aufrufen möchtest, dann dennoch in einem konstanten Intervall. Ich habe auch schon mal irgendwo gesehen dass man den OB1-Zyklus durch eine Schleife verlängert hat. Die Schleife wurde erst dann verlassen, wenn im OB35 ein Merker gesetzt wurde. Weitere Möglichkeiten wurden ja schon genannt.

Plan B wäre, die Regler-Bausteine im OB35 (je nach belieben nur mit TA als Parameter) aufzurufen und die weitere Verarbeitung im OB1 über die Instanzdaten zu erledigen. Das ist problemlos möglich, jedoch Ansichtssache. In diesem Fall würde ich es zugunsten einer stabilen Regelung akzeptieren. Zwei Sätze im Bausteinkommentar, und jeder kapiert es.


Gruß, Onkel
 
Hi!

Also ich gehe jetzt schon davon aus, dass man die Zeit seit dem letzten Aufruf misst und entsprechend an den Regler als "TA" parametriert.
So hat der TE das auch gemeint...
Und rein mathematisch, was spricht dann dagegen, bei jedem Aufruf (also bei jeder Neuberechnung) wird mit der passenden TA gerechnet...


Gruß,

Ottmar
 
Hallo zusammen,

@Onkel Dagobert
Grundsätzlich hast du schon recht - deshalb auch meine Frage.
Aber :)
Wenn ich an den Regler die aktuelle OB1 Zykluszeit an parametriere, dann sollte das theoretisch* gehen.

*theoretisch weil die Zykluszeit nur auf 1ms auflöst.
Also kann die tatsächliche Zeit bei rund 10ms OB1 Zyklus +-5% daneben liegen.
Je größer die Zykluszeit, desto kleiner wird der Fehler.

Bei einer schnellen 319er die immer zwischen 0 und 1 schwankt geht das natürlich in die Hose...


Die Lösung mit dem bedingten Aufruf über den Taktmerker habe ich jetzt mal umgesetzt, das klappt bisher sehr gut mit einer Druckregelung.
Eigentlich müsste es so ja schlechter sein, da ich im schlimmsten Fall einen Fehler von bis zu einem SPS Zyklus haben kann.
Bei z.B. 100ms Taktmerker und 10ms Zykluszeit wären das dann bis zu +10% (nicht +-!) Fehler bzw. Jitter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Plan B wäre, die Regler-Bausteine im OB35 (je nach belieben nur mit TA als Parameter) aufzurufen und die weitere Verarbeitung im OB1 über die Instanzdaten zu erledigen. Das ist problemlos möglich, jedoch Ansichtssache.
Die Idee gefällt mir ganz gut.
Man könnte so wie Onkel vorschlagen hat einfach den FB41 OB35-abhängig programmieren und dann irgendwo im Programm (wo es strukturell am schönsten ist) einen Art Wrapper-FC/FB verwenden der dann die Instanzdaten von FB41 beschreibt.

Man könnte zum Beispiel für diesen FC/FB die Schnittstelle des FB41 (ohne CYCLE) nachbauen und ihm die Instanz des FB41 als Parameter übergeben. Diesen FC/FB kann man dann überall im Programm (auch mehrmals) aufrufen.
Auch zum beobachten hätte man einen Block der nach außen hin gleich wie FB41 aussieht.

Wäre auch vom Projektierungsaufwand OK. Zuerst eine unbeschaltete FB41-Instanz erstellen, dann den FC/FB reinziehen und beschalten wie man den FB41 beschalten würde.

Das würde mir eigentlich ganz gut gefallen...
 
Zuletzt bearbeitet:
Mir hat das auch nie gefallen, daß das Programm in OB1 und die Regler in OB35 stehen.

Die Regler in OB1 zu nehmen ist eine Möglichkeit. Aber spricht denn eigentlich was dagegen, das gesamte Programm in OB35 zu schreiben?
 
Mir hat das auch nie gefallen, daß das Programm in OB1 und die Regler in OB35 stehen.

Die Regler in OB1 zu nehmen ist eine Möglichkeit. Aber spricht denn eigentlich was dagegen, das gesamte Programm in OB35 zu schreiben?

Je nach eingestellter Zykluszeit kann es für den Rest des Programmes kritisch werden.
100ms tun bei einer Reaktion auf eine Position weh. Selbst wenn alles funktioniert wird die Taktzeit ggf. ein Desaster, 10 Schritte die jeweils unnötig 100ms auf Enslagen warten, dann hast du schon die erste Sekunde verschenkt...
 
Zurück
Oben