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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 38

Thema: Schleife / Pointer versuch

  1. #1
    Registriert seit
    21.01.2008
    Ort
    Lippe
    Beiträge
    317
    Danke
    43
    Erhielt 49 Danke für 46 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    mal wieder was zu Pointern . Ich hoffe es gibt noch jemanden, der hierbei ein bisschen unterstützung für den Anfang gibt. Ich versuche über eine positive Flanke einen Schleifendurchlauf zu starten, um dort einen Block von 11 Datenwörtern eins nach dem anderen mit einem Festen DW zu vergleichen. Wenn eins gleich ist soll am Ende ein Merker gesetzt werden, wenn nicht das Netzwerk verlassen werden. Hier meine Idee (SPS geht nicht mal mehr in Stop , mein erster Erfolg), der Merker 3.6 wird aber nicht gesetzt.


    AUF DB 4
    L DBW 1000
    L 0
    ==I
    FP M 3.5
    SPBN end // Schleife nur einmal bei positiver Flanke durchlaufen

    R M 3.6 // Merker auf 0 setzen



    L 11 // Anzahl Wörter zum vergleichen (1080-1100)
    next: T #Schleifen_Zaehler

    L 1180 // DBW1180
    SLD 3 // Pointer erzeugen
    LAR1 // in das Adressregister 1 laden

    L DBW [AR1,P#0.0]
    L DBW 1002 // Vergleichen mit DBW1002
    ==I
    SPB func // wenn ja ENDE

    TAK
    L P#2.0 // DBW1180 auf 1182 erhöhen
    +AR1

    L #Schleifen_Zaehler
    L 0
    ==I
    SPB end // Wenn Schleifenzähler 0 Ende

    LOOP next
    func: SET
    = M 3.6 // Wenn Vergleich DBW =1 dieses Bit setzen
    end: NOP 0


    Danke im voraus an alle.
    Zitieren Zitieren Schleife / Pointer versuch  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    [code ] und [/code ] (jeweils ohne space) machen code lesbarer

    merker setzen geht mit

    Code:
     S   M3.6
    du lädst in der schleife immer wieer die selbe position 1180, da hilft auch nicht die erhöhung des Adressregisters mit

    Code:
          L     P#2.0                       // DBW1180 auf 1182 erhöhen
          +AR1
    versuchs mal vor der schleife mit

    Code:
          L     1180                       
          T     #start
    in der schleife dann mit

    Code:
          L     #start                       
          SLD   3
          LAR1
    und

    Code:
          L     #start                       
          L     2
          +I
          T     #start
    zur erhöhung der adresse


    [edit]
    ODER

    du baust den pointer vor der schleife, dann klappts auch mit
    Code:
          L     P#2.0                       // DBW1180 auf 1182 erhöhen
          +AR1
    [/edit]
    Geändert von vierlagig (11.04.2008 um 08:30 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    online (12.04.2008)

  4. #3
    Avatar von online
    online ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.01.2008
    Ort
    Lippe
    Beiträge
    317
    Danke
    43
    Erhielt 49 Danke für 46 Beiträge

    Standard

    Danke für die schnelle Antwort,
    das mit dem S war ein dummer flüchtigkeitsfehler, habe es oben mit R ja richtig gehabt. Das Programm sieht nun so aus:




    AUF DB 4
    L DBW 1000
    L 510
    ==I
    FP M 3.5
    SPBN end

    R M 3.6

    L 1180
    T #StartDW

    L 11 // Anzahl Wörter zum vergleichen (1080-1100)
    next: T #Schleifen_Zaehler

    L #StartDW // DBW1180
    SLD 3 // Pointer erzeugen
    LAR1 // in das Adressregister 1 laden

    L DBW [AR1,P#0.0]
    L DBW 1002 // Vergleichen mit DBW1002
    ==I
    SPB func // wenn ja ENDE

    L #StartDW // DBW1180 auf 1182 erhöhen
    L 2
    +I
    T #StartDW


    L #Schleifen_Zaehler
    L 0
    ==I
    SPB end // Wenn Schleifenzähler 0 Ende

    LOOP next
    func: S M 3.6 // Wenn Vergleich =1 dieses Bit setzen
    end: NOP 0


    Tuts aber leider immer noch nicht so wie es soll.

  5. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von online Beitrag anzeigen
    Tuts aber leider immer noch nicht so wie es soll.
    wie dann?

    [code ] und [/code ] (jeweils ohne space) machen code lesbarer


    Code:
          L     #Schleifen_Zaehler
          LOOP  next
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    online (12.04.2008)

  7. #5
    Avatar von online
    online ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.01.2008
    Ort
    Lippe
    Beiträge
    317
    Danke
    43
    Erhielt 49 Danke für 46 Beiträge

    Standard

    Es setzt mir halt bei erfolgreichem Vergleich nicht den Merker.

  8. #6
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard

    Du zählst deinen Schleifenzähler nicht runter, stattdessen wird beim ersten Rücksprung eine 0 reingeschrieben, weil die noch im Akku steht.

    Grüße von HaDi

  9. Folgender Benutzer sagt Danke zu HaDi für den nützlichen Beitrag:

    online (12.04.2008)

  10. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von HaDi Beitrag anzeigen
    Du zählst deinen Schleifenzähler nicht runter, stattdessen wird beim ersten Rücksprung eine 0 reingeschrieben, weil die noch im Akku steht.
    was mein ich wohl mit:

    Code:
          L     #Schleifen_Zaehler
          LOOP  next
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    online (12.04.2008)

  12. #8
    Registriert seit
    25.10.2007
    Beiträge
    14
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Blinzeln

    AUF DB 4
    L DBW 1000
    L 510
    ==I
    FP M 3.5
    SPBN end

    R M 3.6

    L 1180
    T #StartDW

    L 11 // Anzahl Wörter zum vergleichen (1080-1100)
    next: T #Schleifen_Zaehler

    L DBW [StartDW ]
    L DBW 1002 // Vergleichen mit DBW1002
    ==I
    SPB func // wenn ja ENDE

    L #StartDW // #StartDW erhöhen
    L 2
    +I
    T #StartDW

    L #Schleifen_Zaehler
    LOOP next

    func: S M 3.6 // Wenn Vergleich =1 dieses Bit setzen
    end: NOP 0
    Zitieren Zitieren ohne Pointer gehts auch  

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

    online (12.04.2008)

  14. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    [code ] und [/code ] (jeweils ohne space) machen code lesbarer


    ...schöne lösung...aber online scheint pointern zu wollen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  15. #10
    Avatar von online
    online ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.01.2008
    Ort
    Lippe
    Beiträge
    317
    Danke
    43
    Erhielt 49 Danke für 46 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also wenn ich das so eintippe kommt L DBW[StartDW ].
    Es muß nicht unbedingt Pointer sein, ich will halt mehrere Datenwörter in einer Schleife vergleichen können. Und vor allem will ich neues lernen.
    Gruß online

Ähnliche Themen

  1. awl schleife und pointer
    Von Iserlohner im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 18.02.2011, 09:12
  2. Pointer, Adressregiester, Schleife
    Von LSOLO im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 25.07.2006, 10:31

Lesezeichen

Berechtigungen

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