Adressregister konsistenz

FinalMistery

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen,
ich habe eine Frage, die ein wenig SPS-S7-Systemkenntnisse voraussetzt und ich mir selbst aus diesem Grund nicht zu 100% beantworten kann.

Wenn ich mit den Adressregistern arbeite (AR1,AR2) in einem Funktionsbaustein der in OB1 aufgerufen wird, können mir diese Register während eines Durchlaufes des genannten FBs von höher priorisierten OBs/FBs mit anderen Werten überschrieben werden.
Also kann ich davon ausgehen, dass wenn ich am Anfang des FBs AR1 setzte, dass der gesetzte Wert auch am Ende des FBs immer noch im Register steht?

Wenn ja wie kann ich das verhindern, gibt es eine z.B. eine Möglichkeit eine "Interruptfreie-Zone" zu schaffen?

Oder besitzt jeder FB/OB seinen eigenen Adressregister?

Ich hoffe ich konnte meine Frage einigermaßen deutlich formulieren und bin auf eure Meinung oder Wissen sehr gespannt.

Beste Grüße
FinalMistery
 
Du könntest doch AR1 und AR2 retten
und am Ende wieder zurück

z.B.

Code:
TAR1 #RETTEAR1 (DWORD)
TAR2 #RETTEAR2 (DWORD)
 . 
 . 
 .
 .
LAR1  #RETTEAR1
LAR2  #RETTEAR2
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist natürlich eine Möglichkeit, doch kann mir auch dort wo du die Punkte gemacht hast (also zwischen Retten und Zurückschreiben) durch einen anderen FB oder DB dazwischen geschossen werden?
Mein FB wird nach Fertigstellung in ein großes System integriert in dem ich nicht weiß, wie mit den Adressregistern umgegangen wird.
 
Damit man Interrupts (Alarme) überhaupt sinnvoll einsetzen kann, muss das Betriebssystem der S7 alle zentralen Register (AKKUs, ARs) und Flags retten und nach Bearbeitung des Interrupt-Handlers (OB) wiederherstellen. Auch wenn diese Behauptung zwingend ist, habe ich keine passende Stelle in einem Siemens-Handbuch gefunden, die das belegt. Mit SFC41 und SFC42 kann die Alarmbearbeitung verzögert und wieder freigegeben werden (Interrupt-freie Zone). Auch wenn Du Dich nicht um die CPU-internen Register kümmern musst - gemeinsame Speicherbereiche wie Merker, DBs, etc. könnten sich nach dem Interrupt schon geändert haben.

Viele Grüße,
Jens
 
Damit man Interrupts (Alarme) überhaupt sinnvoll einsetzen kann, muss das Betriebssystem der S7 alle zentralen Register (AKKUs, ARs) und Flags retten und nach Bearbeitung des Interrupt-Handlers (OB) wiederherstellen. Auch wenn diese Behauptung zwingend ist, habe ich keine passende Stelle in einem Siemens-Handbuch gefunden, die das belegt. Mit SFC41 und SFC42 kann die Alarmbearbeitung verzögert und wieder freigegeben werden (Interrupt-freie Zone). Auch wenn Du Dich nicht um die CPU-internen Register kümmern musst - gemeinsame Speicherbereiche wie Merker, DBs, etc. könnten sich nach dem Interrupt schon geändert haben.

Viele Grüße,
Jens

Eine Unterbrechung einer Prioritätsebene (z.B. OB1) durch eine andere führt NICHT zum Verlust der Register. Es werden alle Restauriert.

Der Aufruf eines FBs oder FCs innerhalb einer Prioritätsebene sichert aber nur die DB Register/DI Register/ Local-Stack-Pointer/V-Stack-Pointer und noch ein paar Kleinigkeiten.
NICHT die ARs.
Das Statusregister wird bei der Rückkehr aus dem Baustein auf einen fixen Wert gesetzt, geht also auch verloren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Unterbrechung einer Prioritätsebene (z.B. OB1) durch eine andere führt NICHT zum Verlust der Register. Es werden alle Restauriert.

Der Aufruf eines FBs oder FCs innerhalb einer Prioritätsebene sichert aber nur die DB Register/DI Register/ Local-Stack-Pointer/V-Stack-Pointer und noch ein paar Kleinigkeiten.
NICHT die ARs.
Das Statusregister wird bei der Rückkehr aus dem Baustein auf einen fixen Wert gesetzt, geht also auch verloren.

Das ist so ziemlich die Antwort die ich hören wollte, auch wenn es nicht unbedingt der Inhalt ist, den ich hören wollte.

Also mit anderen Worten bin ich einfach darauf angewiesen, dass der Rest des Programms (andere OBs) so programmiert ist, dass die ARs nicht verloren gehen?
 
Das ist so ziemlich die Antwort die ich hören wollte, auch wenn es nicht unbedingt der Inhalt ist, den ich hören wollte.

Also mit anderen Worten bin ich einfach darauf angewiesen, dass der Rest des Programms (andere OBs) so programmiert ist, dass die ARs nicht verloren gehen?

Die OBs managed das S7-Betriebssystem (also keine Änderung an den ARs), aber die FBs und FCs die man zwischen den beiden Zugriffen auf die ARs benutzt sichern entweder selbständig die ARs oder lassen die Finger davon (oder Ändern sie eben bleibend).
 
Hat Nordischerjung nicht die Antwort schon gegeben ?
Ein Interrupt-OB würde ja auch bei Aufruf die AR's sichern und kurz vor Ende wieder zurückschreiben können ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hat Nordischerjung nicht die Antwort schon gegeben ?
Ein Interrupt-OB würde ja auch bei Aufruf die AR's sichern und kurz vor Ende wieder zurückschreiben können ...

Ja da hast Du recht. Nur habe ich die Interrupt-OBs ja nicht programmiert und wollte wissen wie sicher man gegenüber einem Interrupt ist wenn er ausgelöst wird. :)
Aber ich glaube ich habe mittlerweile ein paar gute Antworten bekommen
 
Hat Nordischerjung nicht die Antwort schon gegeben ?
Ein Interrupt-OB würde ja auch bei Aufruf die AR's sichern und kurz vor Ende wieder zurückschreiben können ...

OBs und FBs/FCs verhalten sich beim Sichern der Register unterschiedlich, dass kam aus den anderen Posts nicht so deutlich raus. IMHO
 
Eine Unterbrechung einer Prioritätsebene (z.B. OB1) durch eine andere führt NICHT zum Verlust der Register. Es werden alle Restauriert.

Der Aufruf eines FBs oder FCs innerhalb einer Prioritätsebene sichert aber nur die DB Register/DI Register/ Local-Stack-Pointer/V-Stack-Pointer und noch ein paar Kleinigkeiten. NICHT die ARs. Das Statusregister wird bei der Rückkehr aus dem Baustein auf einen fixen Wert gesetzt, geht also auch verloren.
Dann waren meine Annahmen ja offenbar richtig. Bliebe noch die Frage nach einem Beleg, um etwas mehr Gewissheit zu haben.

@Longbow: Beruhen Deine Aussagen auf reiner Praxiserfahrung oder kannst Du uns eine Handbuchstelle benennen, wo Siemens das Verhalten beschreibt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann waren meine Annahmen ja offenbar richtig. Bliebe noch die Frage nach einem Beleg, um etwas mehr Gewissheit zu haben.

@Longbow: Beruhen Deine Aussagen auf reiner Praxiserfahrung oder kannst Du uns eine Handbuchstelle benennen, wo Siemens das Verhalten beschreibt?

Sie beruhen auf dem Source-Code des Speed7. ;-)

SIEMENS Simatic Manager Hilfe: Stichwort Baustein-Stack und Unterbrechungs-Stack
 
Zurück
Oben