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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Pointer FB (STAT, TEMP)

  1. #11
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @RN: sogesehen richtig, aber du hast ja bereits den Inhalt von AR2 maskiert. Und wenn ich nix übersehen hab war es dann von Anfang an ja richtig.
    mfG Aventinus

  2. #12
    Registriert seit
    13.10.2007
    Beiträge
    12.030
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Zitat Zitat von Aventinus Beitrag anzeigen
    @RN: sogesehen richtig, aber du hast ja bereits den Inhalt von AR2 maskiert. Und wenn ich nix übersehen hab war es dann von Anfang an ja richtig.
    Um was es mir ging war das Vorsicht bei der Größe der Adresse des Zeigers zu walten ist.
    Wenn du einen FB als Multiinstanz schreibst und dieser in einer großen Instanz weit hinten
    steht, kann es leicht passieren das der Pointer >4095.7 ist. Bei der Verwendung von +AR1
    oder +AR2 zeigst du schnell ins bodenlose. Das Ausmaskieren der Bereichskennung beim
    AR2 ist selbsverständlich, sonst wird diese zur Bereichskennung vom AR1 mit Addiert, wenn
    man nicht aufpasst und +D nutzt.

  3. #13
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    Code:
         
           TAR1  dTempAR1                   //Adressregister 1 retten
           TAR2  dTempAR2                   //Adressregister 2 retten
           ..
           ..
           TAR2                             //Adressregister 2 Laden
           UD DW#16#FFFFFF                  //Bereichskennung ausmaskieren
           LAR1 P##ANY_Pointer              //Zeiger ins Adressregister 1 Laden
           +AR1                             //beide Register addieren
    
          ..
          ..
          LAR1  dTempAR1                   //Adressregister 1 wieder herstellen
          LAR2  dTempAR2                   //Adressregister 2 wieder herstellen
    Wenn ich die ARs wie oben addiere, kann ich dann Gefahrlos weiter im Baustein LAR1 P##dies und LAR2 P##das benutzen? Oder muss ich dieses dann jedesmal vor dem Pointern machen?
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  4. #14
    Registriert seit
    13.10.2007
    Beiträge
    12.030
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Nach dem Addieren kannst du damit ganz normal auf Variablen zugreifen, möchtest du
    aber wie in deiner Fragestellung einen neuen Pointer zuweisen LAR1 P##dies, solltest du
    schon wissen wo dieser herkommt und entsprechend behandeln. Also unter Umständen
    das AR2 hinzu addieren.

    Möchtest du den Pointer nur erhöhen, um auf eine weitere Variablen im Datenfeld zu zeigen,
    so kannst ihn einfach erhöhen.

    Code:
    +AR1 P#0.1        //lässt das Adressregister 1 auf das nächste Bit zeigen
    +AR2 P#2.0        //lässt das Adressregister 2 auf das nächste Wort zeigen

  5. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Nordischerjung (20.08.2012)

  6. #15
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    Nach dem Addieren kannst du damit ganz normal auf Variablen zugreifen, möchtest du
    aber wie in deiner Fragestellung einen neuen Pointer zuweisen LAR1 P##dies, solltest du
    schon wissen wo dieser herkommt und entsprechend behandeln. Also unter Umständen
    das AR2 hinzu addieren.
    Danke erstmal,


    Das erhöhen ist schon klar. Es ging mir jetzt eben nur darum, wenn ich zB in NW 1 folgendes habe

    Code:
     
    L     WORD_In
    T     WORD_Temp
         TAR2                              //Adressregister 2 Laden
          UD    DW#16#FFFFFF                //Bereichskennung ausmaskieren
          LAR1  P##WORD_2_Temp                //Pointer auf DB_Zone_1
          +AR1                              //beide Register addieren
    
          L     8                           
    M00:  T     #Schleife                   
    
    
          L     #WORD_Temp               
          T     LW [AR1,P#0.0]              
    
          L     #WORD_Temp               
          +     1
          T     #WORD_Temp
    
          +AR1     P#2.0                       
            
    
          L     #Schleife                   
          LOOP  M00
    ...
    ...
    ...
    und im nächsten NW

    Code:
          LAR1  P##dies            //Pointer auf WORD In
          LAR2  P##das      //Pointer auf  BYTE OUT
    
          L     8                           
    M01:  T     #Schleife_2            
    
    
          U      [AR1,P#0.4]                
          S      [AR2,P#0.0]                
    
          +AR1    P#2.0                             
          +AR2    P#0.1                       
            
    
          L     #Schleife_2            // Schleife
          LOOP  M01
    ...
    ...
    ...
    und im 3. NW dann wieder nur LAR1 P##irgendwas usw.

    Wann muss ich dann das AR1 und AR2 addieren?
    Geändert von Nordischerjung (20.08.2012 um 21:32 Uhr)
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  7. #16
    Registriert seit
    13.10.2007
    Beiträge
    12.030
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    eigentlich musst du das AR2 Addieren, wenn deine Daten (auf die du zeigen möchtest)
    im Stat-Bereich deines FBs liegt und dieser FB eine Multiintanz eines anderen FBs ist.

    hier ist jetzt mal so ein Datenbaustein wo zweimal ein FB als Multiinstanz enthalten ist
    mit den Feldern Multi_1 und Multi_2.
    DATA_BLOCK DB 101
    TITLE =
    VERSION : 0.0

    FB 101
    BEGIN
    irgendwas_1 := W#16#0;
    Multi_1.Feld[0] := 0;
    Multi_1.Feld[1] := 0;
    Multi_1.Feld[2] := 0;
    Multi_1.Feld[3] := 0;
    Multi_1.Feld[4] := 0;
    Multi_1.Feld[5] := 0;
    Multi_1.Feld[6] := 0;
    Multi_1.Feld[7] := 0;
    Multi_1.Feld[8] := 0;
    Multi_1.Feld[9] := 0;
    Multi_1.Feld[10] := 0;
    Multi_2.Feld[0] := 0;
    Multi_2.Feld[1] := 0;
    Multi_2.Feld[2] := 0;
    Multi_2.Feld[3] := 0;
    Multi_2.Feld[4] := 0;
    Multi_2.Feld[5] := 0;
    Multi_2.Feld[6] := 0;
    Multi_2.Feld[7] := 0;
    Multi_2.Feld[8] := 0;
    Multi_2.Feld[9] := 0;
    Multi_2.Feld[10] := 0;
    END_DATA_BLOCK
    Möchtest du jetzt in deinen erstellten Multiinztanzbaustein zugreifen muß du wissen
    wo er sich im Instanzdatenbaustein befindet, die Daten befinden sich ja nicht unbedingt
    bei 0.0 sondern etwas tiefer. Das AR2 teilt im Prinzip den Multiinstanzbaustein mit wo
    dieser im Instanzdatenbaustein seine Daten findet.

  8. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Nordischerjung (20.08.2012)

  9. #17
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    eigentlich musst du das AR2 Addieren, wenn deine Daten (auf die du zeigen möchtest)
    im Stat-Bereich deines FBs liegt und dieser FB eine Multiintanz eines anderen FBs ist.
    Aha, da ich aber auf IN und OUT Vars zeige, brauch ich es nicht zu machen.
    Also nur wenn man auf STAT Vars zeigt, die dann noch in andere FB als Multiinstanzen angelegt sind.
    Wieder was gelernt, danke!
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  10. #18
    Registriert seit
    13.10.2007
    Beiträge
    12.030
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    neh neh, das gilt für alle Variablen die in der Instanz abgelegt werden, das wären
    IN; OUT; INOUT und STAT. Die Lokalvariablen nicht.
    Das Beispiel war nur so gedacht, das mann zb ein Datenfeld mit Werten füllen möchte.

    Lese bitte auch noch mal Beitrag #10...
    Geändert von rostiger Nagel (20.08.2012 um 22:09 Uhr)

  11. #19
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Ok,

    und wie mache ich das denn jetzt?

    Jedesmal
    Code:
    TAR2                              //Adressregister 2 Laden
    UD    DW#16#FFFFFF                //Bereichskennung ausmaskieren
    LAR1  P##dies                //Pointer       
    +AR1
    wie mache ich es wenn ich LAR1 p##dies und LAR2 P##das benutze?

    Code:
     TAR2                              //Adressregister 2 Laden       
    UD    DW#16#FFFFFF                //Bereichskennung ausmaskieren
    LAR1  P##dies                //Pointer       
    +AR1 
    LAR2 P##das
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  12. #20
    Registriert seit
    13.10.2007
    Beiträge
    12.030
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
         
           TAR1  dTempAR1                   //Adressregister 1 retten
           TAR2  dTempAR2                   //Adressregister 2 retten
           ..
           ..
           TAR2                             //Adressregister 2 Laden
           UD DW#16#FFFFFF                  //Bereichskennung ausmaskieren
           L P#das                          //Zeiger Pointer Laden
           +D                               //beide Zeiger addieren
           LAR1                             //Zeiger in das Adressregister 1 Laden 
    
           TAR2                             //Adressregister 2 Laden
           UD DW#16#FFFFFF                  //Bereichskennung ausmaskieren
           L P#dies                         //Zeiger Pointer Laden
           +D                               //beide Zeiger addieren
           LAR2                             //Zeiger in das Adressregister 2 Laden
           ..
           ..
           LAR1  dTempAR1                   //Adressregister 1 wieder herstellen
           LAR2  dTempAR2                   //Adressregister 2 wieder herstellen
    Oder vielleicht auch so

    Code:
         
           TAR1  dTempAR1                   //Adressregister 1 retten
           TAR2  dTempAR2                   //Adressregister 2 retten
           ..
           ..
           TAR2                             //Adressregister 2 Laden
           UD DW#16#FFFFFF                  //Bereichskennung 
           T dTempOffsetAR2
    
           L P#das                          //Zeiger Pointer Laden
           +D                               //beide Zeiger addieren
           LAR1                             //Zeiger in das Adressregister 1 Laden 
    
           L dTempOffsetAR2                 //Offset Adressregister 2 Laden
           L P#dies                         //Zeiger Pointer Laden
           +D                               //beide Zeiger addieren
           LAR2                             //Zeiger in das Adressregister 2 Laden
           ..
           ..
           LAR1  dTempAR1                   //Adressregister 1 wieder herstellen
           LAR2  dTempAR2                   //Adressregister 2 wieder herstellen

  13. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Nordischerjung (20.08.2012)

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 18.05.2011, 23:57
  2. FB IN/OUT/STAT Liste
    Von hank12 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 09.05.2009, 10:41
  3. Antworten: 1
    Letzter Beitrag: 28.10.2008, 21:57
  4. pointer über temp struct...
    Von Jochen Kühner im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.09.2006, 10:23
  5. Stat und Temp Variablen
    Von Anonymous im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 13.07.2004, 11:20

Lesezeichen

Berechtigungen

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