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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Schleife AWL

  1. #1
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    kennt einer das Problem, dass eine Schleife (LOOP) nicht vorzeitig beendet wird.

    Meine Schleife soll max 256 durchläufe machen, fall aber ein bestimmter Wert X im DB steht soll diese beendet werden durch ein Sprung.
    Dies funktioniert solange der Wert X an stelle 0 bis 215 im DB steht (216 Schleifen)
    Steht der Wert X an der Stelle 216 wird die Schleife nicht vorzeitig beendet.

    L 256
    Schl: T loopzahler
    L DBB[AR1, P0.0]
    L WertX
    ==I
    SPB RAUS
    ...
    ...

    L P#1.0
    +AR1
    ...
    ...
    L loopzahler
    LOOP Schl

    Gruß
    Erick
    Zitieren Zitieren Schleife AWL  

  2. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.197
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    setzt du vorher das AR1 auf 0.0 ?

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....

  3. #3
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi,
    in wirklichkeit zeigt das AR1 auf DB200.DBB 536.0 und ein AR2 wird wird auch verwendet.

    1. Es soll der Wert aus DBB [AR1] nehmen und vergleichen auf größer 40 (alle Werte liegen zwischen 30 und 50 nur WertX ist gleich 13)
    Wahr -> dann wird aus der Schleife raus gesprungen (SPBN Groe) und eine Berechnung durchgeführt, danach wird zurück in Schleife gesprungen ( ASC1: T ...)
    2.....
    Diese wird 255 mal durchgeführt oder solange bis in "DBW [AR1,P#2.0]" der Wert "WertX" steht.
    Wie gesagt es geht 215 schleifen gut und ab dann wird WertX nicht mehr erkannt bzw. der Vergleich auf den WertX

    Code:
    L     P#536.0
    LAR1        
    L     P#1050.0
    LAR2  
    
    L     255
    Schl: T     #loopzahler             
    L     DBB [AR1,P#0.0] // Lade 1.Byte      
    L     B#16#40      
    <I    // DBB X kleiner "40" dann SP nicht        
    SPBN  Groe      
    L     DBB [AR1,P#0.0]      
    L     B#16#0// DBB X auf "0" überprüfen      
    ==I         
    SPB   ASC1      
    L     DBB [AR1,P#0.0]      
    L     16// DBB X um 4 stellen nach Links verschieben      
    *I    
    ASC1: T     DBW 1320// 1. konvertierte Byte Hex zwischenspeichern 
    //--------------------------
    //Berechnung des 2. Bytes 
    //--------------------------      
    L     DBB [AR1,P#1.0]      
    L     B#16#40      
    <I          
    SPBN  Gro2      
    L     DBB [AR1,P#1.0]      
    L     B#16#0      
    ==I         
    SPB   Calc      
    L     DBB [AR1,P#1.0]// Wenn DBB X+1 kleiner 40 dann Subtr "30" damit nur 1 dezstelle über bleibt     
     L     B#16#30      
    -I    
    Calc: T     DBW 1322//DBrechner2      
    L     DBW 1320      
    +I          
    T     DBW 1320      
    T     DBB [AR2,P#0.0]
    //-----------------------------------
    //Auf endzeichen ueberpruefen 
    //-----------------------------------      
    L     WertX// Prüfen ob WertX nächste Runde auftritt     
    L     DBW [AR1,P#2.0] 
    ==I         
    SPB   opei
      L     P#1.0     
     +AR1      
    +AR1       
    +AR2 
    L     #loopzahler          
     LOOP  Schl
    
    opei:....
    Ich verwende eine S7-412 5H Version 6.02 mit STEP7 5.5

    Gruß
    Erick
    Geändert von MC_DARKSTONE (09.06.2015 um 16:06 Uhr)

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    dein Problem ist der +AR1-Befehl. Der addiert nur auf 16 Bit-Breite. Dabei kannst du (je nachdem, wo du dich mit deinem AR1 schon befindest) schnell aus seinem Bereich herauslaufen.
    Bitte dazu mal die Step7-Hilfe anschauen.
    Ich denke, dein Problem wird schon gelösst sein, wenn du den Pointer vollwertig aufaddierst ...

    Gruß
    Larry

  5. #5
    Registriert seit
    30.08.2003
    Beiträge
    2.197
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    dein Problem ist der +AR1-Befehl. Der addiert nur auf 16 Bit-Breite. Dabei kannst du (je nachdem, wo du dich mit deinem AR1 schon befindest) schnell aus seinem Bereich herauslaufen.
    Bitte dazu mal die Step7-Hilfe anschauen.
    Ich denke, dein Problem wird schon gelösst sein, wenn du den Pointer vollwertig aufaddierst ...

    Gruß
    Larry
    Hallo,

    das ist Quatsch! +AR1 arbeitet mit 32 Bit. Man kann nur nichts dazuadddieren was grösser als 16 Bit ist. Da der TE aber nur jeweils ein P#1.0 dazuaddiert ist da nicht das Problem.

    Einfach mal das Ergebnis vergleichen:

    LAR1 P#1.0
    L P#32768.0
    +AR1

    LAR1 P#32768.0
    L P#1.0
    +AR1

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....

  6. #6
    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

    das ist Quatsch!
    @Larry,
    ich glaube sps-concept lernt es nie!

    @sps-concept,
    der Ton macht die Musik lieber sps-concept!
    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

  7. #7
    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

    Was mich mal interessieren würde, wo steht WERT_X?
    ist das fest in einer Temp (am Anfang des FC) abgelegt oder wird das aus einem DB (welchem) geholt oder ist das eine STAT?
    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

  8. #8
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi

    WertX ist ein fester Wert -> ersetze WertX durch

    L W#16#0D0A

    Das Problem ist das ich nicht weis woher es kommt und warum,
    Ich habe ein Zähler mit laufen lassen um fest zustellen wieviele durchläufe die Schleife macht, daher weis ich auch das die Schleife komplett (255) durchläuft.
    Außer bei Werten kleiner 108 (=215 Schleifen), wo die Schleife vorzeitig beendet wird.

    Ich habe nur die Befürchtung das dies sich unter Prozessbedingungen noch weiter reduziert.
    Zur zeit habe ich das ganze so begrenzt, dass der WertX max an der 100. Stelle auftauchen kann (= 200 Schleifen)

    Die SPS hat zur zeit nur 2 FC enthalten, nun ist die Frage was passiert unter real Bedingungen!

    Kleines BSP der auszuwertenden Werte
    1. BSP (Schleife wird in der 2. Runde beendet)
    DBB 536 = 30 ...
    DBB 537 = 41 ...
    DBB 538 = 49 (0x31)
    DBB 539 = 00 (0x00)
    DBB 540 = 13 (0x0D)
    DBB 541 = 10 (0x0A)

    2. BSP (Schleife wird in der 103. Runde beendet)
    DBB 536 = 30 ...
    DBB 537 = 41 ...
    DBB 538 = 49 (0x31)
    DBB 539 = 00 (0x00)
    DBB ...
    DBB 740 = 36 ...
    DBB 741 = 00 ...
    DBB 742 = 13 (0x0D)
    DBB 743 = 10 (0x0A)

    In der Ersten "Runde" wird die 30 & 41 abgefragt und berechnungen durchgeführt
    zusätzlich überprüft ob die nachfolgenden 2 Bytes (0x3100) // L DBW[AR1, P#2.0] = 0x0D0A entsprechen
    Wenn nicht dann springe zur nächsten Runde und erhöhe das AR1 um 2 stellen und AR2 um 1 stelle.

    Gruß
    Erick
    Geändert von MC_DARKSTONE (10.06.2015 um 09:32 Uhr)

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard

    Wegen Verwendung des AR2: Ist das ein FC oder ein "multiinstanzfähiger" FB?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #10
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,
    es ist ein FC
    Erick

Ähnliche Themen

  1. Step 7 Bitmusterüberprüfung mittels Schleife in AWL
    Von Rune17 im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 29.04.2015, 15:32
  2. Step 7 AWL - Schleife mit Array
    Von bo1986 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.06.2013, 12:57
  3. awl schleife und pointer
    Von Iserlohner im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 18.02.2011, 09:12
  4. IF oder FOR Schleife in AWL?
    Von motamas im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 21.07.2010, 14:19
  5. AWL Schleife
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.07.2003, 07:05

Stichworte

Lesezeichen

Berechtigungen

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