FB41 im OB1 aufrufen

S7_Mich

Level-2
Beiträge
214
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte den FB41 im normalen Zyklus aufrufen. Ich möchte dazu die letzte Zykluszeit an den FB41 anhängen. Die letzte Zykluszeit kann ich abfragen in den OB1 Tempvariablen. Diese wird in ms ausgegeben.

Der FB41 verlangt aber die Abtastzeit im TIME-Format. Wie kann ich diese Zeit, die der OB1 ausgibt in das TIME-Format umwandeln?

Bisher wird der FB41 mittels OB35 aufgerufen. Ich habe aber die Vermutung, das die Lokalvariablen verfälscht werden. Ich finde leider in der Dokumentation nichts darüber, wie sich die Lokalvariablen verhalten. Angenommen der Zyklus befindet sich in einem FC, der temporäre Lokalvariablen verwendet. Dieser wird aber durch den Aufruf des OB35 unterbrochen. Der OB35 verwendet wiederum temporäre Lokalvariablen. Nach Abarbeitung des OB35 wird wieder zurück in den FC gesprungen. Werden denn die Lokalvariablen wiederhergestellt? Ich kanns mir nicht vorstellen.

Ich hatte mal ein Beispiel gesehen, indem der Reglerbaustein FB41 im normalen Zyklus aufgerufen worden ist, eben mit der im OB1 temporären Variable "letzte Zykluszeit". Ich finde dieses Beispiel aber nicht mehr.

Hat jemand von euch einen Tipp?

Vielen Dank
 
solange deine zykluszeit nicht über 999ms dauert, wovon ich mal ganz stark ausgehe:

L OB1_PREV_CYCLE //INT ms letzter zyklus
T TIMEMerker //TEMP vom typ Time
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Lokaldaten die für den OB1-Zyklus gelten,
werden nicht durch den OB35-Aufruf verändert.

Jede Prioritätsklasse, vereinfacht gesagt jeder OB, hat sein eigenes Stück vom großen L-Stack Kuchen.

Nachzulesen in der Step7 Onlinehilfe unter "Lokaldaten-Stack" ...

Mfg
Manuel
 
Hat jemand erfahrungen gesammelt mit dieser Art den FB41 aufzurufen?

Also in meinen Fall wären das PI Regler zur Drehzalregelung von Pumpen bzw. Durchflussmengenregelung.

Bisher läuft das mit einem OB35 Zyklus von 100ms sehr gut.

Ich würde die Regler aber gerne im OB1-Zyklus aufrufen, wegen der Programmstruktur.

Die Zykluszeit wird sicher deutlich unter 50ms liegen, aber sie wird sicher nicht stabil sein.

Kann der FB41 das ab wenn er in jedem Zyklus einen anderen Wert von LETZTEN(!) Zyklus bekommt?

Danke!
 
Ja habe ich getan, und konnte kein problem feststellen. ich hatte allerdings auch die zykluszeit stabil gehalten (mindest-zykluszeit).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hmm also ich habe das eigentlich nicht vor.

ich bin mir halt nicht sicher wie dieser regelalgorythmus funktioniert, ich habe hier im forum einige beiträge gefunden, dort ist immer davon die rede das die abtastzeit konstant sein muss.

warum?

also meine logic sagt:

der istwert hat sich bei dem aktuellen stellwert um x verschoben, seit dem ist y zeit vergangen (letzter ob1 zyklus) --> also ändere entsprechend den stellwert.

muss die abtastzeit wirklich konstant sein?
reicht es nicht dem regler immer die letzte zu übergeben?
 
hmm also ich habe das eigentlich nicht vor.

ich bin mir halt nicht sicher wie dieser regelalgorythmus funktioniert, ich habe hier im forum einige beiträge gefunden, dort ist immer davon die rede das die abtastzeit konstant sein muss.

warum?

also meine logic sagt:

der istwert hat sich bei dem aktuellen stellwert um x verschoben, seit dem ist y zeit vergangen (letzter ob1 zyklus) --> also ändere entsprechend den stellwert.

muss die abtastzeit wirklich konstant sein?
reicht es nicht dem regler immer die letzte zu übergeben?

die Abtastzeit muss nicht konstant sein...
Such mal nach Trapezregel. Wird für nen digitalen PID-Regler normalerweise verwendet.
Die Formel für P,I und D-Anteil ist in jedem Fachbuch nachzulesen.

Gruß Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die Abtastzeit muss nicht konstant sein...
Such mal nach Trapezregel. Wird für nen digitalen PID-Regler normalerweise verwendet.
Die Formel für P,I und D-Anteil ist in jedem Fachbuch nachzulesen.

Gruß Micha

naja... die große preisfrage war ist halt ob wer erfahrungen damit hat.
wie die allgemeingültige formel für pid ist und was aber siemens programmiert hat muss nicht zwingend übereinstimmen... :ROFLMAO:
 
kurzum: je genauer die abtastzeit ist, desto genauer kann das verhalten des reglers vorhergesagt werden. ich würds einfach probieren.
 
Der Wert wird umso wichtiger um so schneller und genauer deine Anlage laufen muss, wenn du alles an der Anlage einstellst bis es läuft stellt man nach meiner Erfahrung kaum unterschiede fest.
Die ersten Anlagen habe ich alle aus Unwissenheit im OB1 mit 100ms Angabe des Zyklus aufgerufen. Dann hab ich die Anlagen später geändert und keine (bzw kaum) Unterschiede festgestellt.
Der Regler nimmt den Wert für die interne Berechnungen.
Wenn man z.B. die Änderungsgeschwindigkeit für Sollwert oder Stellgradänderungen vorgibt z.B. 10%/s so rechnet der Regler intern um , wieviel er pro Aufruf ändern kann.
Diese Sachen und die I und D Berechnungen werden dann nicht mehr ganz sauber laufen, aber sonst würde ich es ausprobieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

beim S7-Regler wird das Stellsignal über den Stellungsalgorithmus berechnet, das Stellsignal setzt sich aus dem letzten y + delta(y) zusammen somit sollte es kein Problem sein den Regler im OB1 Aufzurufen da bei jedem Aufruf das delta neu berechnet wird. Ich selbst mache das auch immer so allerdings nicht mit dem gigantisch großem Siemens-Regler.

Gruss Daniel
 
Der Regler nimmt den Wert für die interne Berechnungen.
Wenn man z.B. die Änderungsgeschwindigkeit für Sollwert oder Stellgradänderungen vorgibt z.B. 10%/s so rechnet der Regler intern um , wieviel er pro Aufruf ändern kann.

ich würde dem regler ja nicht die 100ms oder irgendeinen anderen statischen wert übergeben, sondern die tatsächliche zeit vom letzten OB1 Zyklus - aus dem lokaldatenstack vom ob1

Diese Sachen und die I und D Berechnungen werden dann nicht mehr ganz sauber laufen, aber sonst würde ich es ausprobieren.


wenn ich das wie oben beschrieben mache, dann sollte - nach meiner logic - die regelung doch genauso exakt sein wie in einem ob35 aufruf - bzw. wie in einem langnsameren ob35 aufruf.

wenn ich natürlich eine schnelle regelung brauche die einen reglertakt von 10ms vom ob35 abverlangt, und mein ob1 nur 35ms durschnittszyklus hat, dann geht das natürlich nicht mehr.

aber wenn die selbe applikation mit den 100ms defaultwert vom ob35 sauber läuft, dann sollte es doch mit einen ob1 zyklus der deutlich darunter liegt genauso funktionieren, solange eben immer der letzte wert der zykluszeit beim aufruf übergeben wird.

soweit die theorie... :)
 
Hallo,

beim S7-Regler wird das Stellsignal über den Stellungsalgorithmus berechnet, das Stellsignal setzt sich aus dem letzten y + delta(y) zusammen somit sollte es kein Problem sein den Regler im OB1 Aufzurufen da bei jedem Aufruf das delta neu berechnet wird. Ich selbst mache das auch immer so allerdings nicht mit dem gigantisch großem Siemens-Regler.

Gruss Daniel

was verwendest du denn dann?
was für applikationen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was verwendest du denn dann?
was für applikationen?

Selbst geschrieben. Funktioniert genau so wie der Siemensregler nur in abgespeckter Version.

Der I- u. D-Anteil wird auch beim Siemensregler bei Aufruf im OB1 richtig berechnet. Das auch wenn der Aufrufzyklus nicht immer exakt gleich ist da wie bereits geschrieben immer nur das Delta auf CYCLE bezogen berechnet wird.

Gruss Daniel
 
Selbst geschrieben. Funktioniert genau so wie der Siemensregler nur in abgespeckter Version.

Der I- u. D-Anteil wird auch beim Siemensregler bei Aufruf im OB1 richtig berechnet. Das auch wenn der Aufrufzyklus nicht immer exakt gleich ist da wie bereits geschrieben immer nur das Delta auf CYCLE bezogen berechnet wird.

Gruss Daniel

DAS wollte ich bestätigt haben - DANKE!

in was für applikationen und auf welchen cpu hast du den regler im einsatz? wie groß ist der und was frisst der zykluszeit?

fb41 will auf einer 315er ja stolze 1,5ms haben...
 
Letzte Anlage war eine 317 PN/DP ca. 80 Regler drin. Wobei ich hier die Zykluszeit verteilt habe, sprich im OB35 ein Merkerbyte alle 100ms nach links geschoben und die einzelnen Merker auf die Anlagenteile verteilt bei HLK ist es nicht so kritisch wenn es ein wenig länger dauert. Die größe ist etwa die Hälfte vom FB41.

Inspiration hierzu waren folgende Seiten:

http://www.proconsol.de/ und http://www.control-technology.de/ct/pid01.html

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Halt noch was vergessen. Die Zykluszeit bei oben genannten Projekt liegt bei ca. 15ms trotz PN Kommunikation zu Peripherie und anderer CPU ach ja ein DP-DP-Koppler am Profibus ist auch noch dran.

Gruss Daniel
 
Zurück
Oben