Preisfrage OB35

sailor

Level-1
Beiträge
641
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,
was passiert, wenn man im OB35 z.B. U DB200.DBX0.0 hat und der Interrupt an einer Stelle im Programm passiert, wo steht:
AUF DB100
....
U DBX0.0
...
Welches Bit wird abgefragt? Muss man bei AUF DB.. vorher Interrupt(Alarme) sperren?
Gruß
Sailor
 
Hi Leute,
was passiert, wenn man im OB35 z.B. U DB200.DBX0.0 hat und der Interrupt an einer Stelle im Programm passiert, wo steht:
AUF DB100
....
U DBX0.0
...
Welches Bit wird abgefragt? Muss man bei AUF DB.. vorher Interrupt(Alarme) sperren?
Gruß
Sailor

Da du im OB35 stehen hast U DB200.DBX0.0 wird das Bit aus dem DB200 gelesen. Anders würde es sein wenn du im OB35 nur U DBX0.0 stehen hättest....


Oder ??????
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Interruptbaustein mus selbstverständlich die Register einschließlich Bausteinregister retten und am Ende wieder herstellen. Alles andere wäre ein Chaos ohne Ende. Und die nicht nachvollziehberen SPS-Programmfehler einschließlich SPS-Stops würden sich häufen.
 
nun lautet ja die Preisfrage (soweit ich das verstanden habe):
Rettet das Betriebssystem die Register - oder muss sich der Programmierer drum kümmern?
 
Ich denk da an S5-Zeiten. Da mußte man ja aufpassen, welcher DB geöffnet war. @Rainer H: Du meinst:Es wird beim Interrupt durch OB35 auch die im unterbrochenen Zyklus geöffnete DB Nummer gesichert und nach OB35 BE automatisch wieder geöffnet, oder ??
 
Zuletzt bearbeitet:
Hier der passende Beitrag aus der Siemens FAQ

Wie werden die Adressregister 1/2 bei Unterbrechung der zyklischen Bearbeitung durch einen Alarm-OB gesichert?
Anleitung:
Wird die Programmbearbeitung durch einen OB mit höherer Priorität unterbrochen (z.B. Unterbrechung des zyklischen OB1 durch den Weckalarm OB35), dann speichert das Betriebssystem die aktuellen Inhalte der Akkumulatoren / Adressregister sowie die Nummer / Größe der geöffneten Datenbausteine im Unterbrechungs-Stack.
Ist die Bearbeitung des neuen OB beendet, lädt das Betriebssystem die Informationen aus dem Unterbrechungs-Stack und nimmt die Bearbeitung des unterbrochenen Bausteins an der Stelle erneut auf, an der die Unterbrechung auftrat. Weitere Informationen zu diesem Thema finden Sie im Handbuch "Programmieren mit STEP 7 V5.3" (A.2.3.4), das Ihnen unter Beitrags-ID 18652056 zur Verfügung steht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denk da an S5-Zeiten. Da mußte man ja aufpassen, welcher DB geöffnet war. @Rainer H: Du meinst:Es wird beim Interrupt durch OB35 auch die im unterbrochenen Zyklus geöffnete DB Nummer gesichert und nach OB35 BE automatisch wieder geöffnet, oder ??

Auch die S5 hat die geöffneten DBs gesichert und anschliessend zurückgeschrieben
Alarm- und Zeitbearbeitung, Retten des Datenbausteinregisters
FRAGE:
Im STEP5-Programm wird ein Datenbaustein DBx aufgeschlagen (z.B. ADB x). Jetzt kommt ein Alarm. Der entsprechende Alarm-OB wird vom Betriebssystem der CPU aufgerufen. Im Alarm-OB wird der Datenbaustein DBy aufgeschlagen (z.B: ADB y). Der Alarm-OB wird beendet (z.B. BE) und damit erfolgt automatisch die Rückkehr in das vorher unterbrochene STEP5-Programm.
Welcher Datenbaustein ist jetzt aufgeschlagen ?
ANTWORT:
Es ist der Datenbaustein aufgeschlagen, der vor der Alarmbearbeitung an der Unterbrechungsstelle aufgeschlagen war, also DBx!
Bei Alarmen wird das an der Unterbrechungsstelle aktuell gültige Datenbausteinregister (enthält die aktuell gültige DB-Nummer) vom Betriebssystem der CPU gerettet. Nach Alarmbearbeitung wird dieser Wert wieder in das Datenbausteinregister zurückgeladen und an die Unterbrechungsstelle des STEP5-Programmes zurückgekehrt.
Dies gilt für alle S5 CPUs
 
Hier gilt die gleiche Info wie für die geöffneten DBs:

Jede Prioritätsebene hat ihre eigenen Lokaldaten. Wird eine neue Prioebene aufgemacht, so erhält diese einen eigenen Lokaldatenbereich. Aus diesem kann sie auch nicht herausgreifen, jedweder Versuch hier z.B. aus einem OB35 in die Lokaldaten des OB1 zu greifen ist nicht möglich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch was.
Werden auch Lokaldaten gerettet?
Dann gibts auch den Preis.

Für jeden Baustein werden auf dem L-Stack Bytes reserviert. diese werden wieder freigegeben wenn der Baustein beendet ist
Bei zu grosser Schachtelungstiefe der Bausteine kann der L-Stack überlaufen. Die Grösse des L-Stack ist CPU-abhängig.
 
Hier gilt die gleiche Info wie für die geöffneten DBs:

Jede Prioritätsebene hat ihre eigenen Lokaldaten. Wird eine neue Prioebene aufgemacht, so erhält diese einen eigenen Lokaldatenbereich. Aus diesem kann sie auch nicht herausgreifen, jedweder Versuch hier z.B. aus einem OB35 in die Lokaldaten des OB1 zu greifen ist nicht möglich.
Nicht ganz richtig. Beim Any-Pointer gibt es die Möglichkeit, auf die Vorgängerlokaldaten zuzugreifen. Die Frage ist nur, von wo am aufgerufen wird, d.h. wen man unterbrochen hat und was das für Vorgängerlokaldaten dann sind.
 
Zurück
Oben