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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 38

Thema: Bitmusterüberprüfung mittels Schleife in AWL

  1. #21
    Rune17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.04.2015
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo JS,
    genau das will ich machen, aber in einer Schleife, weil ich ja 64 Bitmuster a 4Byte ( = 1Doppelwort) miteinander vergleichen muss.
    Und immer gegeneinander, d.h. wenn die ersten 64 vergleiche durch sind muss der zeiger ein Doppelwort tiefer rutschen und 63 vergleiche machen, usw.
    Wie schreib ich sowas??
    Gruß Rune

  2. #22
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Siehe Post 2 von Ronin. Den mußt Du nur um die Prüfung der anderen 6 Byte entschlacken.

    Wenn Du es auf einer 1500er laufen lassen willst, kannst Du auch ReadFromArrayDB nutzen:

    Code:
         L     0
          T     #X
          L     1
          T     #Y
          R     #Meldung
    
    //Start äußere Schleife
    // Auslesen erstes Array-Element
    Lop1: CALL  ReadFromArrayDB
             db      :="MyDB"
             index   :=#X
             Ret_Val :=#Ret_Val_1
             value   :=#First_UDT
    //Start innere Schleife
    // Auslesen zweites Array-Element
    Lop2: CALL  ReadFromArrayDB
             db      :="MyDB"
             index   :=#Y
             Ret_Val :=#Ret_Val_1
             value   :=#Second_UDT
    
    //Laden der beiden Doppelwörter aus UDT und Vergleich
          L     #First_UDT
          L     #Second_UDT
          ==D
          S     #Meldung
    
    //Hochzählen der inneren Schleife
          L     #Y
          L     1
          +D
          T     #Y
    //Nachsehen, ob Schleifenzähler <64
          L     64
          >D
    //Dann führe innere Schleife weiter
          SPB   Lop2
    //Sonst zähle äußere Schleife hoch
          L     #X
          L     1
          +D
          T     #X
    //Startwert innere Schleife setzen
          L     1
          +D
          T     #Y
    //Nachsehen, ob Schleifenzähler <64
          L     64
          >D
    //Äußere Schleife fortsetzen
          SPB   Lop1
    So oder so ähnlich, habe es nicht getestet.

  3. #23
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Du schreibst ja, daß Du Ronins Programm anscheinend umgesetzt hast und Fehler auftreten.
    Poste doch bitte mal die Fehlermeldung, vielleicht sieht man, wo er aus dem Ruder läuft.

  4. #24
    Rune17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.04.2015
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo danke ,
    erstmal. Ich sende den Post später, vom Programm.
    Programm läuft auf 414-3DP oder 416-3DP, bzw. soll dort laufen.
    Muss ich noch was beachten?
    Gruß Rune

  5. #25
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Hab mir das Programm nochmal angesehen.

    Kann es sein, daß der Fehler hier liegt:

    Code:
    MX10: L     #Index_VBasis               // Anfangswert laden in AR1
          L     1274                                   // Startadresse ersten der 10 Byte
          *I    
          SLD   3
          LAR1
    Da wird auf den ersten Blick 1247 als Strukturgröße und nicht als Offset genutzt... Du mußt immer 10 mit Index multiplizieren und 1247 hinzuaddieren. Oder sehe ich das falsch?

  6. #26
    Rune17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.04.2015
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi JS,
    ich glaub das könnte der Fehler sein. Ich wird es morgen ausprobieren.
    Dann hab ich die ganze Zeit falsch gerechnet bzw. mich gewundert das nix geht.
    Danke. ich melde mich.
    Gruß Rune

  7. #27
    Rune17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.04.2015
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo JS ,
    anbei ein Auszug von dem von mir geschriebenen Programm, bitte schau es dir nochmals an! Anzeige mit VKE, AKKU1,AKKU2, usw.

    Teil1.jpgTeil2.jpg

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

    Standard

    Die 3e kolom isr nicht Akku1 , dass ist Akku2. Weiter must sie auch die DB und dass AR1 tonen.
    Nach berechne von die adressen wurde die in ein LD geschrieben und wenn sie die data lese brauchen Sie das AR1 , Sie must die berechende adresse In das AR1 schreiben und nicht in ein LD.

    Gruss,

    Joop

  9. #29
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Hallo Rune17,

    Wenn Du mit L (Laden) arbeitest, denke immer, Du arbeitest mit einem Schieberegister mit zwei Speicherplätzen: AKKU1 und AKKU2. Wenn Du lädst, schiebst Du Akku1 in Akku2 (Akku2 geht dabei verloren) und lädst den neuen Wert in Akku1.
    Wenn Du also
    Code:
    L #Basis_1
    L 1274
    L 10
    *D
    schreibst, so kickst Du Basis_1 aus der Berechnung und rechnest 1274*10, was aber auch Deinem Ziel nicht entspricht.
    Richtig wäre
    Code:
    L #Basis_1
    L 10
    *D
          Jetzt hast Du Basis_1*10 in AKKU1
    L 1274
          Ergebnis jetzt in AKKU2, 1274 in AKKU1
    +D
          Offset hinzugerechnet, Ergebnis in AKKU1
    Das gleiche gilt auch für Basis_2.

    Den Sinn von Deinem XOD verstehe ich nicht.
    Du lädst dann AKKU1 in den Ladespeicher (LD400). Du müßtest aber in das Adressregister1 laden (LAR1), denn damit arbeitest Du beim DB-Zugriff weiter. Bitte sieh Dir dazu das Beispiel von Ronin nochmal an.

    NW27: Das U() kannst Du Dir sparen, da das S nur vom ==D beeinflußt wird und Du keine weitere Verknüpfung machst.
    Das SPB kannst Du auch durch SPA ersetzen, weil Du immer springen willst.

    Das, was mir aufgefallen ist.

  10. #30
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn Du mit L (Laden) arbeitest, denke immer, Du arbeitest mit einem Schieberegister mit zwei Speicherplätzen: AKKU1 und AKKU2. Wenn Du lädst, schiebst Du Akku1 in Akku2 (Akku2 geht dabei verloren) und lädst den neuen Wert in Akku1.
    Ist das bei einer 414 CPU von Siemens wirklich so? Hat die nicht 4 Akkus??
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

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

    JSEngineering (29.04.2015)

Ähnliche Themen

  1. Step 7 AWL - Schleife mit Array
    Von bo1986 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.06.2013, 12:57
  2. Antworten: 4
    Letzter Beitrag: 17.11.2011, 10:38
  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

Lesezeichen

Berechtigungen

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