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

Page 2 of 2 FirstFirst 12
Results 11 to 19 of 19

Thread: S7 Indirekte Adressierung

  1. #11
    Join Date
    25.01.2009
    Location
    Frankfurt
    Posts
    53
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bestens Dank für euch alle. Besonders Kai

  2. #12
    Join Date
    25.01.2009
    Location
    Frankfurt
    Posts
    53
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default

    Vielen Dank an alle Besonders Kai
    Reply With Quote Reply With Quote S7 Indirekte Adressierung  

  3. #13
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    los, einmal geht noch. aller guten dinge sind drei!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #14
    Join Date
    25.03.2012
    Posts
    314
    Danke
    60
    Erhielt 11 Danke für 10 Beiträge

    Default

    EDIT: @Kai's FC_Werte (s. o.)

    Code:
          L     P##ARRAY_WERTE; // Pointer
          LAR1  ; 
    
          L     W [AR1,P#0.0]; // DB-Nummer --> Warum steht hier die DB-Nummer ? In welchem Speicherbereich bin ich hier? Wo ist sowas dokumentiert ?
          T     #DB_NUMMER; 
    
          AUF   DB [#DB_NUMMER]; 
    
          L     D [AR1,P#2.0]; // Bereichszeiger --> Warum steht hier der Bereichszeiger ? In welchem Speicherbereich bin ich hier? Wo ist sowas dokumentiert ?
          LAR1  ;
    Last edited by Flux; 28.04.2014 at 10:22.
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

  5. #15
    Join Date
    03.04.2008
    Posts
    6,464
    Danke
    238
    Erhielt 825 Danke für 698 Beiträge

    Default

    Quote Originally Posted by Flux View Post
    Code:
          L     P##ARRAY_WERTE; // Pointer
          LAR1  ; 
    
          L     W [AR1,P#0.0]; // DB-Nummer --> Warum steht hier die DB-Nummer ?  In welchem Speicherbereich bin ich hier? Wo ist sowas dokumentiert ?
          T     #DB_NUMMER; 
    
          AUF   DB [#DB_NUMMER]; 
    
          L     D [AR1,P#2.0]; // Bereichszeiger --> Warum steht hier der Bereichszeiger ? In welchem Speicherbereich bin ich hier? Wo ist sowas dokumentiert ?
          LAR1  ;

    Stichwort "anypointer".
    Und wenn du uns schreibst woher du den Pointer hast, kann dir noch besser geholfen werden.
    Es scheint so, als ob du dir ein Programmteil von irgendwo her kopiert hast, der mit diesem Pointer einen der schönen? SFC versorgen.
    Könnte von mir sein, wobei es bestimmt tausende Programmzeilen gibt die mehr oder weniger so ausschauen.
    Es gibt doch hier auch ein how to do von Volker hier?

    Schreib zusammenhängend, wo du was her kopiert hast und was du nicht verstehst.
    Also den gesamten Code, damit man sieht was du überhaupt willst.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  6. #16
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,645
    Danke
    1,292
    Erhielt 4,608 Danke für 3,724 Beiträge

    Default

    @bike
    Den Code hat er von Kai hier vom Beitrag #9 zitiert/kopiert.
    Es handelt sich nicht um einen ANY-Pointer.

    @flux
    Das Array wird per Pointer an den FC übergeben (das wird bei jedem Datentyp > 4 Byte so gemacht).
    Schau Dir in der Step7-Hilfe den Aufbau des Datentyps POINTER an (Index > Pointerformat > Format des Parametertyps POINTER).

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    bike (28.04.2014),Flux (28.04.2014)

  8. #17
    Join Date
    25.03.2012
    Posts
    314
    Danke
    60
    Erhielt 11 Danke für 10 Beiträge

    Default

    Ich hatte dasgleiche in einem FB versucht (also L P##oINT_IDB_NO; LAR1; L W [AR1,P#0.0]; T #oINT_IDB_NO), was aber nur den Wert 0 hervorgebracht hat. Der Pointer erklärt es, da INT <= 4 Byte (liegt die Grenze bei 4 Byte, weil das die AKKU-Breite ist ?)

    L DBNO; T #oINT_IDB_NO; führte ebenfalls nicht zum Ziel - was macht L DBNO denn dann genau ??

    Meine Frage ist, wie kann ich zur Laufzeit die IDB-Nummer meiner FB-Instanz bestimmen ?
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

  9. #18
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,645
    Danke
    1,292
    Erhielt 4,608 Danke für 3,724 Beiträge

    Default

    Quote Originally Posted by Flux View Post
    Meine Frage ist, wie kann ich zur Laufzeit die IDB-Nummer meiner FB-Instanz bestimmen ?
    Code:
    L DINO
    Allerdings ist das nur die halbe Wahrheit. Bei multiinstanzfähigen FB steht die Anfangsadresse der Instanz (Offset im Mutter-IDB) in AR2.


    Quote Originally Posted by Flux View Post
    was macht L DBNO denn dann genau ??
    Tippe "L DBNO" in den AWL-Editor und drücke F1, das gleiche auch mit "L DINO"
    oder Hilfe zu AWL > Inhalt > AWL-Operationen Übersicht > ... sortiert nach deutscher Mnemonik (SIMATIC)
    Quote Originally Posted by AWL-Operationen sortiert nach deutscher Mnemonik (SIMATIC)
    L DBNO Lade Nummer Global-DB in AKKU 1
    L DINO Lade Nummer Instanz-DB in AKKU 1

    Quote Originally Posted by Flux View Post
    Der Pointer erklärt es, da INT <= 4 Byte (liegt die Grenze bei 4 Byte, weil das die AKKU-Breite ist ?)
    Nicht ganz.
    Elementare Datentypen werden als Wert (Kopie, ByVal) übergeben.
    Zusammengesetzte Datentypen werden als POINTER (Referenz, ByRef) übergeben.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Flux (28.04.2014)

  11. #19
    Join Date
    25.03.2012
    Posts
    314
    Danke
    60
    Erhielt 11 Danke für 10 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nochmal ne Frage zu o. g. Code:
    Code:
          L     P##ARRAY_WERTE; // Pointer: Gehen hierbei nicht Byte 4 und 5 des Pointer verloren, da der AKKU1 nur 4 Byte groß ist ??
          LAR1  ; 
    
    
          L     W [AR1,P#0.0]; // DB-Nummer: die ersten zwei Byte im Pointer
          T     #DB_NUMMER; 
    
    
          AUF   DB [#DB_NUMMER]; 
    
    
          L     D [AR1,P#2.0]; // Bereichszeiger: siehe Frage 
          LAR1  ;
    
          L     #WERT                       
          T     DBD [AR1,P#0.0]          // DBD bezieht sich auf das zuvor geladene DB-Register
    Frage:
    Bezieht sich diese Anweisung 1. auf das zuvor geladene DB-Register oder liest es 2. einen Teil aus dem Pointer?
    Wenn 1, müsste es dann nicht DBD [...] heissen ?
    Wenn 2., warum heisst es dann nicht L B [AR1, P#2.0], wenn nur der Bereichszeiger gemeint ist ? Laut Pointer-Format-Doku steht im Byte 2 der Speicherbereich.
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

Similar Threads

  1. Step 7 Indirekte Adressierung
    By firefox711 in forum Simatic
    Replies: 10
    Last Post: 16.05.2013, 07:55
  2. indirekte Adressierung
    By schneijo in forum Simatic
    Replies: 7
    Last Post: 22.10.2012, 14:42
  3. Indirekte-Adressierung
    By johnij in forum Simatic
    Replies: 2
    Last Post: 14.02.2008, 14:32
  4. Indirekte Adressierung
    By wusel220983 in forum Simatic
    Replies: 6
    Last Post: 18.05.2007, 18:19
  5. Indirekte Adressierung
    By Raab in forum Simatic
    Replies: 1
    Last Post: 20.12.2003, 12:17

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •