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

Ergebnis 1 bis 8 von 8

Thema: Hilfe mit Pointern

  1. #1
    Registriert seit
    08.02.2012
    Beiträge
    7
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe SPS-Jünger,

    also, ich versuche mich erstmals an Pointern. Folgendes will ich bewerkstelligen:

    In DB10 sind Zählwerte (integer) gespeichert.

    DB10.dbw0 - Zählwert für Pos1
    DB10.dbw2 - Zählwert für pos2
    DB10.dbw4 - Zählwert für pos3
    .
    .
    .
    DB10.dbw70 - Zählwert für pos36


    Bei jedem Signal an E10.0 soll Zählwert im gewählten DB-Fach um 1 erhöht werden.

    Bei Signal an E10.1 soll in nächstes DB-Fach gewechselt werden.(+AR1 P#2.0????), nach Pos 36 wieder zu Pos 1

    Bei Signal an E10.2 sollen alle Fächer 0 gesetzt werden.

    Ich habe mich schon 2 Tage durch Forum gelesn und schon einiges probiert. Iregendwie seh ich nun den Wald vor lauter Bäumen nicht mehr...

    Könnt Ihr mir helfen?


    Viele Grüße

    Dirk
    Zitieren Zitieren Hilfe mit Pointern  

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

    Standard

    Hallo,

    Kämpf dich mal hier durch

    http://www.sps-forum.de/showthread.p...iger-FIFO-LIFO

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

    d.schubert1982 (08.02.2012)

  4. #3
    d.schubert1982 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    7
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Beitrag

    Hallo,

    ich habe mir den Beitrag durchgelesen.
    Folgendes war mein Ansatz:
    Code:
     
    
    AUF   DB1
    L 0
    SLD 3
    LAR 1
    U     E     10.0
    FP    #fl1
    SPBNB Ende
    L     DBW [AR1,P#0.0]
    L     1
    +I    
    T DBW [AR1,P#0.0]
    U     E     10.1
    FP    #fl2
    SPBNB Ende
    +AR1  P#2.0
    MfG
    Geändert von d.schubert1982 (08.02.2012 um 11:55 Uhr)

  5. #4
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Dirk,

    erst mal herzlich willkommen im Forum!

    Zu Deinem Ansatz:
    Wo mekst Du Dir die Fach-Nummer? => ein DBW in Deinem DB? =>
    Code:
    AUF DB 1
    L DBW x     // Fach-Nummer
    SLD 3
    LAR1
    Du überspringst die Erhöhung des Zählwertes UND der Fach-Adresse wenn E 10.0 = 0. Ist das so gewollt?
    Besse wäre:
    Code:
    U E 10.0
    FP #F11
    SPBN PLUS
    ...
    PLUS: NOP 0
    U E 10.1
    SPBN NEXT
    L DBW x  // Fach-Nummer
    I 1
    T DBW x // Fach-Nummer
    L 36 // höchste Fach-Nummer
    >=I
    SPBN NEXT
    L 0
    T DBW x // Auf 1. Fach setzen
    NEXT: NOP 0
    
    U E 10.2
    SPBN Loes
    
    Hier Deine Schleife zum löschen aller Fächer
    
    Loes: NOP 0
    Grüße
    Gebs

  6. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    d.schubert1982 (08.02.2012)

  7. #5
    d.schubert1982 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    7
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    vielen Dank, ich versuche mich gerade dran, aber es will nicht so richtig. Die aktuelle Fach-Nr is im dbw72 gespeichert.

    Also:
    Code:
    AUF DB 1 
    L dbw 72
    SLD 3
    LAR1
    U E 10.0
    FP #F11
    SPBN PLUS
    PLUS: NOP 0
    U E 10.1 
    SPBN NEXT 
    L DBW x  // Fach-Nummer 
    I 1 T DBW x // Fach-Nummer 
    L 36 // höchste Fach-Nummer 
    >=I SPBN NEXT 
    L 0 
    T DBW x // Auf 1. Fach setzen 
    NEXT: NOP 0 
    U E 10.2
    SPBN Loes
    in dbw 72 steht ne 1 ansonsten tut sich nix...


    MfG

    Dirk
    Geändert von d.schubert1982 (08.02.2012 um 13:15 Uhr)

  8. #6
    d.schubert1982 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    7
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ahhhh,

    mir fällt gerade der Groschen.....

    Das Fach hochzählen klappt. Wenn ich den Rest nicht passend bekomme melde ich mich....

    Vielen Dank

  9. #7
    d.schubert1982 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    7
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo nochmal,

    hier nun meine funktionierende Lösung. Lässt sich sicher etwas besser gestalten, aber für den Augenblick bin ich Stolz....


    Code:
     AUF DB10
          L     DBW   72
          SLD   3
          LAR1  
          U E10.1
          FP    #fl1
          SPBN  M001
          L     DBW   72
          L     2
          +I    
          T     DBW   72
          L     72
          >=I   
          SPBN  M001
          L     0
          T     DBW   72
    M001: U E10.2
          FP    #fl2
          SPBN  M004
          L     0
          T     DBW   72
          SLD   3
          LAR1  
          L     36
    M003: T     #Schleifenzahl
          L     0
          T     DBW [AR1,P#0.0]
          L     DBW   72
          L     2
          +I    
          T     DBW   72
          SLD   3
          LAR1  
          L     #Schleifenzahl
          LOOP  M003
          L     0
          T     DBW   72
          SLD   3
          LAR1  
    M004: U E10.0
          FP    #fl3
          SPBN  M005
          L     DBW [AR1,P#0.0]
          L     1
          +I    
          T     DBW [AR1,P#0.0]
    
    M005: NOP   0
    Nochmals Danke für die Hilfe!

  10. #8
    Registriert seit
    26.05.2009
    Beiträge
    541
    Danke
    35
    Erhielt 78 Danke für 69 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielleicht ein kleiner optimierungsansatz:

    Warum addierst du in deiner Schleife nicht sofort das Adressregister mit p#2.0?

    Code:
    L     36 
    M003: T     #Schleifenzahl       
    L     0       
    T     DBW [AR1,P#0.0]
    L     DBW   72
    L     2
    +I
    T     DBW   72
    SLD   3
    LAR1
    L     #Schleifenzahl
    LOOP  M003
    Code:
    L     36 
    M003: T     #Schleifenzahl       
    L     0       
    T     DBW [AR1,P#0.0]
    +AR1 P#2.0
    L     #Schleifenzahl
    LOOP  M003
    Da du dich ja jetzt intensiver mit indirekter Adressierung und Pointern beschäftigt hast, kannst du auch noch weiter machen.
    Jetzt bist du im "Saft".
    Wenn du denkst du denkst, dann denkst du nur, dass du denkst, denn beim Denken der Gedanken, kommt dir der Gedanke, dass das Denken der Gedanken ein gedankenloses Denken ist

  11. Folgender Benutzer sagt Danke zu wolder für den nützlichen Beitrag:

    d.schubert1982 (09.02.2012)

Ähnliche Themen

  1. Hilfe bei Pointern und FIFO programmierung.
    Von m0erk im Forum CODESYS und IEC61131
    Antworten: 13
    Letzter Beitrag: 27.01.2012, 18:01
  2. Indirekte Adressierung mit 2 Pointern
    Von TorstenX im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 01.03.2011, 12:39
  3. Indirekte Adressierung FB mit Pointern
    Von kliebisch.m im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.10.2010, 12:06
  4. Antworten: 1
    Letzter Beitrag: 30.05.2010, 10:58
  5. Arbeiten mit zwei Pointern im FB
    Von ottokar24 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 28.01.2009, 10:13

Lesezeichen

Berechtigungen

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