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

Ergebnis 1 bis 7 von 7

Thema: Indirekte Adressierung mit 2 Pointern

  1. #1
    Registriert seit
    23.02.2011
    Beiträge
    20
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,


    ich habe ein Problem bei der indirekten Adressierung mit 2 Pointern.
    Ich möchte aus 2 DB’s jeweils ein Bit aus einer Array- Funktion vergleichen und bei Ungleichheit ein Bit (Fehlermeldung) setzen. Das Array hat einen Bereich von [1..130]
    Kann ich zwei untererschiedliche Pointer generieren und wenn ja wie kann ich sie unterscheiden? Wie gebe ich die Adressierung des DB am Pointer an und wie springe ich zum nächsten Bit welches einige Worte weiter weg ist?
    1.Bit DB2.DBX5.0, 2.Bit DB2.DBX18.0, ..., bzw. 1.Bit DB4.DBX8.1, 2.Bit DB4.DBX28.1,... .


    Mein Ansatz sieht momentan folgendermaßen aus:
    (Hier sind aber noch am Anfang die absoluten Adressen und nicht die Pointer drin.)



    Code:
    U     DB2.DBX   5.0
    UN    DB4.DBX   8.1
    S     M   1.0              
    
    U     M   1.0
    SPB   FAIL              // springe zur Fehlermeldung
    
    L     #count           // counter vergleich           
    L     129
    ==I   
    =     #RST_COUNT
    U     #RST_COUNT                  
    SPBNB RST
    L     0
    T     #count
    RST:  NOP   0                           // reset counter auf 0
    
    L     #count                   // bei Gleichheit vorwärts zählen 
    +D    
    INC   1
    L     #pnt1                // 1.Pointer zum springen im Array
    L     P#???
    
    ??
    ??
    Zitieren Zitieren Indirekte Adressierung mit 2 Pointern  

  2. #2
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Zur "Unterscheidung" deiner Pointer kannst mit dem AR1 und dem AR2 arbeiten.
    Das AR2 musst du aber vorher sichern und danach wieder zurücksichern.

    Zur Erhöhung deines Pointers brauchst du nur zum Wert von AR1 bzw von AR2 deinen Offset dazu addieren.

    Oder verstehe ich deine Frage falsch?

    godi

  3. #3
    TorstenX ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.02.2011
    Beiträge
    20
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Frage verstehst Du richtig.

    Einen Pointer gebe ich ja mit P#... an. Wo kann ich da die Unterscheidung vornehmen?

  4. #4
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    673
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard

    Code:
    U     DB2.DBX   5.0
    UN    DB4.DBX   8.1
    S     M   1.0              
    
    U     M   1.0
    SPB   FAIL              // springe zur Fehlermeldung
    
    L     #count           // counter vergleich           
    L     129
    ==I   
    =     #RST_COUNT
    U     #RST_COUNT                  
    SPBNB RST
    L     0
    T     #count
    RST:  NOP   0                           // reset counter auf 0
    
    L     #count                   
    L     P#13.0
    *D
    L     P#5.0
    +D
    T     #pntDB2                // TEMP  DWORD     Pointer mit adresse bit von DB2
    
    L     #count                   
     
    L     P#20.0
    *D
    L     P#8.1
    +D
    T     #pntDB2                // TEMP  DWORD     Pointer mit adresse bit von DB4
    
    AUF DB2
    U DBX [#pntDB2]
    AUF DB4
    U DBX [#pntDB4]
    = M 1.0
    
    ??
    ??
    Geändert von JoopB (25.02.2011 um 20:06 Uhr)

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

    TorstenX (27.02.2011)

  6. #5
    TorstenX ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.02.2011
    Beiträge
    20
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja, so müsste es gehen.
    Vielen Dank für die Hilfe!!

  7. #6
    TorstenX ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.02.2011
    Beiträge
    20
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Da ich den Code mehrmals verwende und damit unterschiedliche DB’s (insgesamt 4 Vergleiche) Vergleiche, funktioniert das Ganze nicht mehr. Ich denke es liegt an den Aufrufen (AUF DB...). Dort scheint das Programm nicht mehr weiter zu laufen.
    Kann es sein, dass ich zu viele Aufrufe mache und dann schon einen anderen Wert in den Akku schiebe??

  8. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... um auf die Frage sinnvoll antworten zu können wäre es nicht schlecht den aktuellen Stand deiner Arbeit als Code zu haben und vielleicht auch noch den Hinweiß was was bewirken soll ...

    Gruß
    Larry

Ähnliche Themen

  1. Indirekte Adressierung FB mit Pointern
    Von kliebisch.m im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.10.2010, 12:06
  2. Indirekte Adressierung im DB
    Von Bollo im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 07.05.2008, 07:14
  3. Indirekte Adressierung !
    Von max1de im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.02.2007, 18:18
  4. Indirekte Adressierung von SFC 20
    Von andre im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.09.2005, 09:44
  5. Indirekte Adressierung mit S5!!
    Von Anonymous im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 20.10.2004, 15:15

Stichworte

Lesezeichen

Berechtigungen

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