Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Das Adressregister - tolle Sache, aber was gibt es zu beachten

  1. #1
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Erst mal einen guten Morgen!

    Ich habe schon öfter gelesen, dass es bei der Verwendung der Adressregister notwendig ist, zuvor ihren Inhalt zu sichern und nach der Verwendung den Inhalt wieder herzustellen.
    Nur wann sollte man dies machen? Nur bei der Verwendung in Multiinstanzen?
    Weiters, bei der indirekten Adressierung in Multiinstanzen muss man ja einen Versatz, welcher im AR2 steht, mit einbeziehen, oder?

    Was gibt es denn generell und bei spezielleren Anwendungen (z.B. Multiinstanz) der Adressregister zu beachten?

    Schon mal vielen Dank für die Info!
    Flo
    Zitieren Zitieren Das Adressregister - tolle Sache, aber was gibt es zu beachten  

  2. #2
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Nur wann sollte man dies machen? Nur bei der Verwendung in Multiinstanzen?
    Zuerst einmal muss man unterscheiden: Die S7 hat zwei Adressregister, sinnigerweise Adressregister 1 (AR1) und Adressregister 2 (AR2) genannt.
    AR1 wird vom System nicht verwendet und kann vom Benutzer immer frei verwendet werden, auch in FBs und sogar in Multiinstanzen. Wenn man AR1 verwendet, muss man den Inhalt vorher nicht sichern.
    Bei AR2 ist das anders und damit zu Deiner zweiten Frage:
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Weiters, bei der indirekten Adressierung in Multiinstanzen muss man ja einen Versatz, welcher im AR2 steht, mit einbeziehen, oder?
    In einem FB steht in AR2 der Versatz, ab welcher Adresse die Daten für den aktuellen Aufruf im IDB stehen. Wenn es sich nicht um einen Multiinstanz-Aufruf handelt und der FB seinen eigenen IDB hat, steht hier also P#0.0. Bei einem Multiinstanz-Aufruf ändert sich das entsprechend.
    Bei jedem symbolischen Zugriff auf den IDB (also jeder Zugriff auf IN, OUT INOUT oder STAT) wird das AR2 zur Adresse im Variablendeklarationsteil des Bausteins dazugezählt, auch bei nicht-Multiinstanz-Aufrufen. Wenn man also mit dem AR2 in einem FB arbeitet (was man vermeiden sollte), dann muss man vorher den Inhalt sichern und vor dem nächsten symbolischen Zugriff auf den IDB wieder zurückschreiben, da sonst die Zugriffe verschoben sind.
    Gruß
    Michael

  3. Folgende 2 Benutzer sagen Danke zu M-Ott für den nützlichen Beitrag:

    hopp (20.10.2014),pasnos (13.05.2014)

  4. #3
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von M-Ott Beitrag anzeigen
    In einem FB steht in AR2 der Versatz, ab welcher Adresse die Daten für den aktuellen Aufruf im IDB stehen. Wenn es sich nicht um einen Multiinstanz-Aufruf handelt und der FB seinen eigenen IDB hat, steht hier also P#0.0. Bei einem Multiinstanz-Aufruf ändert sich das entsprechend.
    Bei jedem symbolischen Zugriff auf den IDB (also jeder Zugriff auf IN, OUT INOUT oder STAT) wird das AR2 zur Adresse im Variablendeklarationsteil des Bausteins dazugezählt, auch bei nicht-Multiinstanz-Aufrufen. Wenn man also mit dem AR2 in einem FB arbeitet (was man vermeiden sollte), dann muss man vorher den Inhalt sichern und vor dem nächsten symbolischen Zugriff auf den IDB wieder zurückschreiben, da sonst die Zugriffe verschoben sind.
    Damit ich das jetzt richtig verstehe:
    Also wenn ich in einem FB (egal ob Multi oder nicht) symbolisch auf den IDB zugreife, wird IMMER AR2 zur Adresse hinzugezählt. Soweit mal richtig?

    Dies ändert nur in einem NICHT Multi-FB nichts an der Adresse, da AR2 NULL ist.
    Wenn ich aber in einem Multiinstanzaufruf größer als dem ersten Aufruf bin, so steht im AR2 der Versatz bis zum jeweiligen Datenbereich im IDB, welcher beim symbolischen Zugriff auf den IDB mit eingerechnet wird.

    Das Hinzurechnen geschieht allerdings automatisch von der Steuerung. In welchen Fällen muss dieser Versatz dann von mir aktiv berücksichtigt werden? Wenn ich z.B. mit LB auf den Lokal-Datenbereich zugrefen möchte?

    Wenn ich also nicht direkt den Inhalt des AR2 überschreibe (z.B. mit LAR2) dann brauche ich es auch nicht zu sicher? oder kann ich es auch anderwertig überschreiben?
    Und das AR1 kann ich auch immer ändern ohne es zu sichern?

  5. #4
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Damit ich das jetzt richtig verstehe:
    Also wenn ich in einem FB (egal ob Multi oder nicht) symbolisch auf den
    IDB zugreife, wird IMMER AR2 zur Adresse hinzugezählt. Soweit mal richtig?
    Ja.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Dies ändert nur in einem NICHT Multi-FB nichts an der Adresse, da AR2
    NULL ist.
    Wenn es nicht geändert wurde.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Wenn ich aber in einem Multiinstanzaufruf größer als dem ersten Aufruf bin,
    so steht im AR2 der Versatz bis zum jeweiligen Datenbereich im IDB,
    welcher beim symbolischen Zugriff auf den IDB mit eingerechnet wird.
    Fast richtig. Wenn der aufrufende FB eigene Variable mitbringt, beginnt der erste Aufruf nicht bei Adresse 0.0.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Das Hinzurechnen geschieht allerdings automatisch von der Steuerung.
    Ja.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    In welchen Fällen muss dieser Versatz dann von mir aktiv berücksichtigt werden? Wenn ich z.B. mit LB auf den Lokal-Datenbereich zugrefen möchte?
    Nein. Mit LB greifst Du immer auf die temporären Lokaldaten zu. Aber wenn Du z.B. mit L DIW xx auf die jeweilige Instanz zugreifen möchtest, musst Du den Versatz berücksichtigen.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Wenn ich also nicht direkt den Inhalt des AR2 überschreibe (z.B. mit LAR2) dann brauche ich es auch nicht zu sicher? oder kann ich es auch anderwertig überschreiben?
    Wenn Du das AR2 nicht veränderst, musst Du es auch nicht sichern.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Und das AR1 kann ich auch immer ändern ohne es zu sichern?
    Ja.
    Gruß
    Michael

  6. Folgender Benutzer sagt Danke zu M-Ott für den nützlichen Beitrag:

    LittleJack86 (21.01.2011)

  7. #5
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    O.K. jetzt habe ich's verstanden.

    VIELEN DANK für die Info!

  8. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.188
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Alle Register (AR1, AR2, DB- und DI-Register, Akkus) werden je nach Situation systemseitig verwendet!
    Das kann man sehr leicht in der Step7-Hilfe und den diversen Step7-Programmierhandbüchern nachlesen.

    Die Step7-Hilfe > Hilfethemen... > Index: Adressregister ergibt folgenden informativen Beitrag:
    Hinweise zur Änderung von Register-Inhalten

    Wenn Sie die im Anschluss beschriebenen Programmiermöglichkeiten und gleichzeitig die genannten Register/Akkus nutzen, müssen Sie selbst für eine Wiederherstellung der Register- bzw. Akku-Inhalte sorgen, da es sonst zu einem Fehlverhalten kommen kann.

    Die Verwendung der folgenden höheren Sprachkonstrukte kann dazu führen, dass die Inhalte von DB-Register und Adressregister AR1 verändert werden:
    • vollqualifizierter DB-Zugriff (z.B. DB20.DBW10) als Aktualparameter für FC
    • FB- und Multiinstanz-CALL
    • Strukturkomponente eines Formalparameters als Operand innerhalb eines FC oder FB
    • Strukturkomponente eines Formalparameters als Aktualparameter für FC oder FB

    Beim FB-, FC-, Multiinstanz-CALL dürfen VKE oder AKKU1 und AKKU2 nicht als zusätzliche (implizite) Parameter verwendet werden.

    Das DI-Register und das Adressregister AR2 werden systemseitig für den FB- und Multiinstanz-CALL verwendet und dürfen deshalb innerhalb von FB's nicht verändert werden.

    Das Adressregister AR1 wird von einem Teil der ladbaren Standardbausteine verwendet.

    Der Befehl "L P#Parametername" lädt innerhalb eines FB den Adressoffset des angegebenen Parameters, relativ zum Adressregister AR2. Um in multiinstanzfähigen FBs den absoluten Offset im Instanzdatenbaustein zu ermitteln, muss zu diesem Wert noch der bereichsinterne Zeiger (nur Adresse) des AR2-Registers addiert werden.

    Weitere Information zu den Registern der CPU finden Sie in der Hilfe zur Programmiersprache (KOP/FUP/AWL).

    Siehe auch:
    Vermeiden von Fehlern beim Aufrufen von Bausteinen
    Der Hilfe-Beitrag "Vermeiden von Fehlern beim Aufrufen von Bausteinen" beschreibt noch ausführlicher die Situationen, in denen Register modifiziert werden.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Alle Register werden systemseitig verwendet!  

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    00alex (18.05.2013)

  10. #7
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    • vollqualifizierter DB-Zugriff (z.B. DB20.DBW10) als Aktualparameter für FC
    • FB- und Multiinstanz-CALL
    • Strukturkomponente eines Formalparameters als Operand innerhalb eines FC oder FB
    • Strukturkomponente eines Formalparameters als Aktualparameter für FC oder FB
    Wenn ich mich nicht irre, sind das alles Sachen, die nur das DB-Register oder das AR2 ändern. Welches davon ändert das AR1? Oder ist da womöglich ein Schreibfehler in der Überschrift?
    Gruß
    Michael

  11. #8
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    ________________________-
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg reg.jpg (168,1 KB, 179x aufgerufen)

  12. Folgender Benutzer sagt Danke zu Verpolt für den nützlichen Beitrag:

    M-Ott (21.01.2011)

  13. #9
    Registriert seit
    09.04.2008
    Beiträge
    42
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Alle Register (AR1, AR2, DB- und DI-Register, Akkus) werden je nach Situation systemseitig verwendet!
    Das kann man sehr leicht in der Step7-Hilfe und den diversen Step7-Programmierhandbüchern nachlesen.
    Hallo,
    also die Hilfe dazu kenne ich, die habe ich auch gelesen, allerdings nicht so wirklich verstanden. Weshalb ich diesen Betrag begonnen habe.

    Ich würd an dieser Stelle aber gerne darauf eingehen:



    Zitat Zitat von PN/DP Beitrag anzeigen
    • vollqualifizierter DB-Zugriff (z.B. DB20.DBW10) als Aktualparameter für FC
    Was soll das genau bedeuten?



    Zitat Zitat von PN/DP Beitrag anzeigen
    • FB- und Multiinstanz-CALL
    ..ist mir jetzt glaube ich klar



    Zitat Zitat von PN/DP Beitrag anzeigen
    • Strukturkomponente eines Formalparameters als Operand innerhalb eines FC oder FB
    • Strukturkomponente eines Formalparameters als Aktualparameter für FC oder FB
    ...und da weiß ich auch nicht so recht was denn gemeint ist.

  14. #10
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    Was soll das genau bedeuten?.
    z.B. DB20.DBW10 als IN, INOUT oder OUT-Parameter eines FC (ändert das DB-Register)
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    ..ist mir jetzt glaube ich klar.
    Zitat Zitat von LittleJack86 Beitrag anzeigen
    ...und da weiß ich auch nicht so recht was denn gemeint ist.
    Wenn Du eine Struct als FB- oder FC-Parameter angibst, ändert sich jedesmal, wenn Du auf einen Teil davon zugreifst, das AR1, Du musst also in diesem Fall darauf aufpassen, dass ein evtl. von Dir dort hinterlegter Wert nicht überschrieben wird.
    Gruß
    Michael

Ähnliche Themen

  1. Insolvenz, was als AN beachten?
    Von Boxy im Forum Stammtisch
    Antworten: 22
    Letzter Beitrag: 28.08.2011, 04:11
  2. Traurige Sache, Anna Nicole Smith ist tot
    Von Unregistrierter gast im Forum Stammtisch
    Antworten: 8
    Letzter Beitrag: 09.02.2007, 10:14
  3. Komische Sache, beim installieren von Step7
    Von Lazarus™ im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.07.2005, 19:25
  4. Step 7 V5.2 SP1, Siemens hat die Sache nicht im Griff.
    Von Anonymous im Forum PC- und Netzwerktechnik
    Antworten: 2
    Letzter Beitrag: 09.09.2003, 16:55

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •