Step 7 Systemtakte.

sps_klassik

Level-2
Beiträge
795
Reaktionspunkte
98
Zuviel Werbung?
-> Hier kostenlos registrieren
Sind eigentlich diese Systemtakte synchron, wenn ich Vielfache in einem OB35(mit 100ms) aufrufe.
Ich legte diese auf ein Merkerbyte und nehme den Takt 200ms.Wenn ich dann im OB 35 mit Weckzeit 100ms habe, bekomme ich dann genau 2 Impulse?
Kann ich elegant zusätzliche Taktimpulse mit anderen Zeiten erzeugen und wenn ja wie?
 
Sind eigentlich diese Systemtakte synchron, wenn ich Vielfache in einem OB35(mit 100ms) aufrufe.
Vielfache von was? Wenn die Frequenz des SystemTaktes ein Vielfaches der Frequenz ist, mit der der OB aufgerufen wird, dann kannst Du nicht einmal zählen, wieviele Impulse Du zwischen 2 Aufrufen des OB verpasst hast.
Deine Frage bezüglich Synchronität zielt wahrscheinlich darauf ab, ob die Frequenzen von SystemTakt und Häufigkeit der OB-Aufrufe "auseinander laufen" können. Davon sollte man ausgehen.
Ich legte diese auf ein Merkerbyte und nehme den Takt 200ms.Wenn ich dann im OB 35 mit Weckzeit 100ms habe, bekomme ich dann genau 2 Impulse?
Nein. Wo willst Du die denn bekommen? Wer soll den nach dem 2. Impuls den Spuk beenden?
Kann ich elegant zusätzliche Taktimpulse mit anderen Zeiten erzeugen und wenn ja wie?
Sichwort: FrequenzTeilung. Bevorzugt durch 2 bzw. ZweierPotenzen.
Die vorhandenen SystemTakte sind im Prinzip auch "nur" Halbe, Viertel, u.s.w. von zwei Basis-Frequenzen, die ein Verhältnis von 1:5 aufweisen.
 
Zuletzt bearbeitet:
Nochmals.Ich habe mich falsch ausgedrückt.
Ich habe im OB 35 einen Takt von 100ms.Mit dem Takt rufe ich einen Regler auf.
jetzt möchte ich im OB35 synchron dazu alle Sekunde einen selbstgeschriebenen Baustein aufrufen.
Am besten wäre es wenn man ganzzahlige Vielfache darin ableiten kann.Über einen Zähler z.Bsp.
 
Ich habe im OB 35 einen Takt von 100ms.Mit dem Takt rufe ich einen Regler auf.
jetzt möchte ich im OB35 synchron dazu alle Sekunde einen selbstgeschriebenen Baustein aufrufen.
Am besten wäre es wenn man ganzzahlige Vielfache darin ableiten kann.Über einen Zähler z.Bsp.
Der OB35 wird also alle 100 ms aufgerufen.
Jedes 10. Mal, wenn der OB35 aufgerufen wird, soll im OB35 Dein selbstgeschriebener Baustein (bedingt) aufgerufen werden.
Habe ich das jetzt richtig verstanden?
Die SystemTaktMerker haben damit gar nichts zu tun, denn die benötigst Du dafür nicht. Synchronität oder nicht ist also irrelevant.

PS:
Willst Du Deinen selbstgeschriebenen Baustein evtl. im OB1 "bei Bedarf" (= alle 1000 ms) aufrufen, dann könntest Du einen entsprechenden HandShake zwischen jedem 10. Aufruf von OB35 und der WeiterVerarbeitung in OB1 schaffen.
Ich vermute mal, dass die exakte Einhaltung der 1000 ms nicht so wichtig ist, wie die Reihenfolge der entsprechenden "VorbereitungsSchritte".
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Eigentlich gehts mir nur darum das ich im OB35 eine Regler aufrufe.Standardmässig macht man das ja so.
Nun möchte ich dazu einen Rampengenerator hintendranhängen.
Ich möchte aber den Programmcode hinter den Regler setzen, weil es systemisch zusammengehört.
Technisch würde es auch funktionieren wenn ich den Rampengenerator im OB1 asynchron aufrufe.
Also einfach den Programmcode hintereinander weg und beide Bausteine mit unterschiedlichen Zeiten aufrufen.
Der Rampengerator ist ein Gapbaustein der den Grobregler verfährt wenn der Feinregler seine Grenzen verlässt.
Die Sache mit 2 Analogwertreglern ist zu kompliziert und unnötig.Da hatten einige Kollegen schon recht.
Jetzt gehe ich nur noch hin und zähle mit einer Schrittweite im Grobregler hoch und runter wenn der Feinregler seine Grenze verlässt.
Ist der Feinregler in seinen Grenzen bleibt der Rampengerator stehen.Der Ausgang geht dann auf das Grobventil.
Ich habe somit eine einfache Möglichkeit den Arbeitspunkt vom Grobregler mit Schrittweite und Taktzeit zu modifizieren wenn ich von aussen Taktzeit und Schrittweite vorgeben kann.Ich könnte dann von aussen auch noch eine andere Taktzeit vorgeben wenn die Abweichung zu gross wird.(u.s.w.)Es gibt auch keine Rückmeldung für den Grobregler.Er zählt hoch oder unter oder bleibt stehen.
Das ist der ganze Spuk.
 
Warum machst du nicht einen weiteren OB mit dem von dir gewünschten Takt ?
Falls dein Baustein einen längeren Zyklus hat als dein OB35 als Intervall dann bekommst du hier dann Probleme.
 
Nun möchte ich dazu einen Rampengenerator hintendranhängen.
Ich möchte aber den Programmcode hinter den Regler setzen, weil es systemisch zusammengehört.
Technisch würde es auch funktionieren wenn ich den Rampengenerator im OB1 asynchron aufrufe.
Also einfach den Programmcode hintereinander weg und beide Bausteine mit unterschiedlichen Zeiten aufrufen.
Du möchtest das Ergebnis des Reglers in eine Rampe wandeln, damit die StellGrösse "sanft" (in kleineren Abstufungen) ansteigen und abfallen kann?
Dann verstehe ich überhaupt nicht, dass Du den RampenBaustein sooo selten aufrufen willst. Nur jedes 10. Mal, wenn der Regler aufgerufen wird? Wie soll die feine Abstufung zustande kommen, wenn der RampenBaustein nur alle JubelJahre aufgerufen wird?

Ja, RampenGenerator im OB1 wäre eine Möglichkeit, die beiden unterschiedlichen Zyklen (OB1 und OB35) "lose" miteinander zu "koppeln".
Aber der RampenBaustein müsste auch in einem festen Raster aufgerufen werden ... oder er müsste bei jedem Aufruf ermitteln, wieviel Zeit seit dem vorherigen Aufruf vergangen ist.

Der Rampengerator ist ein Gapbaustein der den Grobregler verfährt wenn der Feinregler seine Grenzen verlässt.
Die Sache mit 2 Analogwertreglern ist zu kompliziert und unnötig.
Eigentlich gehts mir nur darum, dass ich im OB35 einen Regler aufrufe.
:unsure: Kann es sein, dass Du das Wort Regler - je nach Bedarf - in verschiedenen Bedeutungen verwendest? Auch schon mal in der Bedeutung StellGlied?

PS:
Was ist ein GapBaustein? Ich möchte hier gar nicht darauf eingehen, was mein Versuch, im WWW eine sinnvolle Antwort zu finden, für merkwürdige Ergebnisse geliefert hat.

 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Kann es sein, dass er Themenstarter lediglich Wissen will ob und wenn ja zu welchem OB die Systemtakte synchron sind?!
Als Kaufmann würde ich doch auch denken, dass ein 10Hz Systemtakt und ein OB35 mit 100ms quasi identisch laufen oder?!

Grüße
 
Als Kaufmann würde ich doch auch denken, dass ein 10Hz Systemtakt und ein OB35 mit 100ms quasi identisch laufen oder?!
Das wird unterm Strich sicher so sein - das eine Mal ist es aber ein Interupt, der genau dann aufgerufen wird und das ander Mal ist es eine Variable, die gesetzt wird. Hast du eine recht kurze Zykluszeit dann wird das kaum einen Unterschied machen - in jedem Fall aber wird dein Versatz eben genau diese betragen ...
 
Ein Gap-Regler ist ein Regler mit einer Totzone bzgl. seines Vorgängers dem Freinregler.Innerhalb einer Totzone setzt der Regler intern des Sollwert = dem Istwert.Die Rückmeldungen Stellgrad max oder min erreicht vom Feinregler werden im Gap-Regler Sollwert und Istwert auftrennen und die Integration damit freisetzen.Das ist ein normaler Analogwertregler.Das gleichsetzen von Istwert und Sollwert nennt man Nachführen.
Bei PCS7 Reglern habe ich das schon gesehen.
Es entsteht keine Regelabweichung.Der Ausgang(Stellgrad) bleibt stehen.Wenn die Grenzen vom Feinregler über bzw. unterschritten werden
integriert der Regler und schiebt den Arbeitspunkt hoch oder runter sodaß der Feinregler wieder arbeiten kann.
Der Gap-Regler der mir vorschwebt wäre eigentlich nur ein Rampengerator der immer hoch und runterfährt wenn die Grenzen des Feinreglers verlassen werden.Aufrufzeit und Schrittweite könnte man von aussen vorgeben.Man könnte auch in Abhängigkeit von der Regelabweichung unterschiedliche Zeiten,Schrittweiten übergeben.(Schnell/langsam).Im Grunde ein reiner Integrierer.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann musst du das Rad nicht neu erfinden. Nimm doch für den "Grobregler" einfach einen gewöhnlichen PI(D)-Regler und force ihn, so lange der "Feinregler" im Regelbereich ist. Du benötigst hierfür keine zweite Abtastzeit. Was für einen PID-Regler und was für eine CPU verwendest du denn?

Ansonsten suche mal nach dem Begriff "Aufrufverteiler". So nannte man es früher (wie auch heute), wenn man in einer Task verschiedene Sequenzen ausführen wollte. Die Abtastzeit jeder einzelnen dieser Sequenzen ist ein Vielfaches der Taskzeit. Im einfachsten Fall bildet man über einen Umlaufzähler einen Wert von z.Bsp. 0..9 und springt mit einer Case-Anweisung zu dieser "Unter-Task". Beim genannten Beispiel von 0..9 würde sich die Task-Zeit der Sequenzen quasi verzehnfachen.
 
Zuletzt bearbeitet:
Wenn ich die Nachführfunktion hätte mit speichern des I-Anteils, würde ich das ja machen.
S7 Klassik.Egal 300 er oder 400 er Steuerung.Ich habe alle Bibliothekregler.
Diese Funktion habe ich nicht gefunden.
 
Gestern habe ich das jetzt fertig gemacht.
Ich nehme jetzt als Grobregler einen Integrator mit 2 Geschwindigkeiten und 2 Schrittweiten.
Den rufe ich hinter dem Feinregler auf.Er arbeitet dann intern mit dem Aufrufzyklus(100ms) im OB35.
In Abhängigkeit von der Soll-Istabweichung in % berechne ich den Integration langsam/schnell.
Die Schrittweite/Geschwindigkeit kann ich am Integrator selbst vorgeben.Für die Aufbereitung der Signale habe ich noch einen kleinen Baustein gemacht, der mir Integration schnell/langsam berechnet.Alles ist in Prozent normiert.Bin ich im Stellgradbereich des Feinreglers bleibt der Integrator stehen.
Der Ausgang geht auf das Grobglied.(Regelventil)
 
Zurück
Oben