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

Ergebnis 1 bis 6 von 6

Thema: Programmschleife

  1. #1
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte in einem DB mehrere Werte mit einem Offset beschreiben:
    Beispiel: Offset = 100
    1. Wert = 100
    2. Wert = 1. Wert + Offset
    3. Wert = 2. Wert + Offset
    usw.

    meine Programmschleife sieht so aus:
    1. Netzwerk

    L DBNO // DB-Register
    T #DB_REGISTER
    TAR1 #AR1_REGISTER // AR1-Register

    2. Netzwerk

    U #Sort
    SPB AUS
    AUF #DATENBAUSTEIN // Datenbaustein
    L #STARTADRESSE // Startadresse
    ITD
    SLD 3
    T #BEREICHSZEIGER // Bereichszeiger
    L #BLOCKANZAHL // Blockanzahl
    L 1
    -I
    M01: T #SCHLEIFE_1
    L #BEREICHSZEIGER // Bereichszeiger
    LAR1
    L #ABSTAND
    L DBD [AR1,P#0.0] // Wert 1
    +D
    T DBD [AR1,P#4.0] // Wert 2
    L P#4.0
    +AR1

    L #SCHLEIFE_1
    LOOP M01
    UN #Sort
    S #Sort
    AUS: NOP 0

    3. Netzwerk

    AUF DB [#DB_REGISTER] // DB-Register
    LAR1 #AR1_REGISTER // AR1-Register


    Leider funktioniert das ganze nicht.
    Was mach ich falsch?
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    --Albert Einstein--
    Zitieren Zitieren Programmschleife  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Schnell mal drübergeschaut würde ich sagen, du lädst ja am Anfang der Schleife immer wieder "#Bereichstzeiger" ins AR1, also passiert da auch nichts.

    Also entweder

    a) "P#4.0" nicht ins AR1 laden, sontern zu "#Bereichszeiger" dazuaddieren, dann zu M01 zurück "loopen"
    oder aber
    b) "M01: T #SCHLEIFE_1" nach "#Bereichszeiger" schreiben und nach "T #BEREICHSZEIGER // Bereichszeiger" ein "LAR1"

    Kannst ja beide Versionen mal testen.

    Das ITD läßt du weg, sonst bekommst du evtl. Probleme, wenn du deine Adressen weit hinten in einem DB liegen hast. Ein Pointer ist eh ein DWORD und keine DINT. Das hatte ich frühfer auch falsch, bis irgendwann ein Umkopieren weit hinten im DB nicht mehr funktionierte.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    RainerP (14.03.2013)

  4. #3
    RainerP ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hab jetzt den Baustein so geändert:

    U #Sort
    SPB AUS
    AUF #DATENBAUSTEIN // Datenbaustein
    L #STARTADRESSE // Startadresse
    // ITD
    SLD 3
    T #BEREICHSZEIGER // Bereichszeiger
    LAR1

    L #ABSTAND
    T DBD [AR1,P#0.0] // Wert 2

    L #BLOCKANZAHL // Blockanzahl
    M01: L 1
    -I
    T #SCHLEIFE_1 // Bereichszeiger

    L DBD [AR1,P#0.0] // Wert 1
    L #ABSTAND
    +D
    T DBD [AR1,P#4.0] // Wert 2
    L P#4.0
    +D
    T #BEREICHSZEIGER
    LAR1

    L #SCHLEIFE_1
    LOOP M01

    UN #Sort
    S #Sort
    AUS: NOP 0



    mit dem Erfolg, das die ersten drei Werte wie gewünscht beschrieben werden.
    Aber dann ist Schluß. steh irgendwie total auf dem Schlauch.....
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    --Albert Einstein--

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Versuche es mal so:

    Code:
    U #Sort
    SPB AUS
    
    AUF #DATENBAUSTEIN // Datenbaustein
    L #STARTADRESSE // Startadresse
    SLD 3
    T #BEREICHSZEIGER // Bereichszeiger
    LAR1 
    
    L #ABSTAND
    T DBD [AR1,P#0.0] // Wert 1
    
    L #BLOCKANZAHL // Blockanzahl
    
    M01: T #SCHLEIFE_1
    
    L DBD [AR1,P#0.0] // Wert 1
    L #ABSTAND
    +D 
    T DBD [AR1,P#4.0] // Wert 2
    
    +AR1  P#4.0
    
    L #SCHLEIFE_1
    LOOP M01
    
    UN #Sort
    S #Sort
    
    AUS: NOP 0
    Man könnte statt

    +AR1 P#4.0

    schreiben

    L #BEREICHSZEIGER
    L P#4.0
    +D
    T #BEREICHSZEIGER
    LAR1

    Dann hat man in #BEREICHSZEIGER immer die zu bearbeitende Adresse stehen.
    Geändert von Ralle (14.03.2013 um 13:10 Uhr) Grund: kleiner Fehler
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    RainerP (14.03.2013)

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

    Standard

    M01: L 1
    -I
    T #SCHLEIFE_1 // Bereichszeiger
    .
    .
    .
    L #SCHLEIFE_1
    LOOP M01
    Also wenn ich mich recht erinnere, dann dekrementiert dir der loop-Befehl den Akku um 1 und springt, falls größer als 0, zu M01.
    An der Sprungmarke M01 solltest du das Ergebnis wieder in #Schleife_1 schreiben.

    Code:
    L 10
    M01: T #Schleife_1
    .
    .
    .
    L #Schleife_1
    LOOP M01
    Gruß wolder

    Edit: zu spät...
    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

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

    RainerP (14.03.2013)

  9. #6
    RainerP ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke, so gehts erst mal.
    Und was noch wichtiger ist: ich glaub ich hab auch verstanden wieso.
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    --Albert Einstein--

Ähnliche Themen

  1. Loop/Programmschleife mit Logo
    Von Altair im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 28.06.2011, 15:09
  2. Programmschleife in SCL erstellen
    Von frodob10 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.02.2008, 17:23

Lesezeichen

Berechtigungen

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