TIA Wie reagieren Bausteine auf OB-Unterbrechung?

Mephisto

Level-1
Beiträge
242
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Angenommen ich habe in meiner Steuerung (S7-1500 mit TIA V14.1) zwei OBs laufen und der höherpriore OB unterbricht den niederprioren bei seiner Bearbeitung.
Im Niederprioren OB wird gerade ein SCL-Baustein (oder sonst irgendeiner) bearbeitet. Was passiert?
Wird der Baustein zu Ende bearbeitet und erst danach mit dem ersten Bautein des höherprioren OBs weitergemacht oder wird die Bearbeitung des Bausteins angehalten/abgebrochen.
Der Grund für meine Frage:
Ich lese und schreibe in meinem SCL-Code mehrmals den selben Ausgang.
z.B.:
Code:
1  x := 5;
2  x := x + 7;
3  X := -4;
Zu Beginn der Zeile 2 wird plötzlich der OB, der den SCL-Baustein aufruft, von einem anderen OB unterbrochen. Dieser andere OB wiederum hat einen Baustein, der auf meinen Ausgang x zugreift.
Welchen Wert hat x ?
Mir würden jetzt 3 Möglichkeiten einfallen:
1.) Der Baustein wird zu Ende gerechnet --> X = -4
2.) Der Baustein wird angehalten --> X = 5.
3.) Der Baustein wird angehalten und es wird der Wert des letzten vollständigen Durchlaufs angegeben --> X = -4.

Ich hoffe, irgenjemand konnte meinem geistigen Wirrwar bisher folgen und kann mich erleuchten.
Danke!

mfg mephisto
 
Aus der TIA Hilfe:


Die S7-1500-CPUs unterstützen die Prioritäten 1 (niedrigste Priorität) bis 26 (höchste Priorität). Ein OB erhält die Priorität seines Startereignisses.

Die OBs werden rein prioritätsgesteuert bearbeitet. Das heißt, dass bei gleichzeitigem Vorliegen mehrerer OB-Anforderungen der OB mit der höchsten Priorität zuerst bearbeitet wird. Wenn ein Ereignis mit höherer Priorität als der des momentan aktiven OB auftritt, wird dieser OB unterbrochen. Ereignisse gleicher Priorität werden in der Reihenfolge ihres Auftretens bearbeitet.


Daraus würde ich auf Lösung 2 Tippen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der gerade laufende Baustein wird unterbrochen, der unterbrechende Baustein sieht die letzte Zuweisung - hier also die 5.

Genau deswegen dürfen Variablen, auf die aus mehreren Task (OB) zugegriffen wird, in jeder Task nur ein einziges mal gelesen und nur ein einziges mal beschrieben werden (Interprozesskommunikation!)

Sehr interessant wird das Thema, wenn die zweite Task auf eine Variable zugreift, die an einen IN_OUT eines Bausteins angeschlossen ist, während der Baustein gerade bearbeitet wird:
* wird die Variable "per value" übergeben
- dann liest die Task den Wert vom Bausteinaufruf
- schreibt die Task in die Variable, dann wird der Wert nach Fortsetzung des Bausteins wieder überschrieben
* wird die Variable "per reference" übergeben
- dann liest die Task schon den Wert von zwischenzeitlich im Baustein vorgenommenen Zuweisungen
- schreibt die Task in die Variable und der Baustein nimmt keine weitere Zuweisung vor, dann bleibt der geschriebene Wert erhalten
Daher:
- OUT/IN_OUT-Ausgänge im Baustein ebenfalls nur ein einziges mal zuweisen!
- von anderen Task nicht auf Variablen schreiben, die an Baustein-OUT/IN_OUT angeschlossen sind!

Noch interessanter wird das Thema S7-1500 und HMI-Kommunikation, weil die HMI-Kommunikation das SPS-Programm jederzeit unterbrechen kann (das kann m.W. nicht verhindert werden). Darüber gibt es hier im Forum schon einige Diskussionen (suche: Zykluskontrollpunkt).

Harald
 
Wow!

Das ging ja schnell!
Danke für eure Antworten. Das mit Lösung 2 hab ich befürchtet. Aber gut, wenn ich's weiß, kann ich mein Programm ja anpassen.

Danke!
 
Zurück
Oben