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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: Überprüfen: Programm mit Schleife zum Vergleich eines Werts mit Werten in DB

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ein DB kann doch nur max 64kB groß sein, oder???
    In diese Gefilde kommt er mit dem +AR1 Befehl eh nicht.
    Wie weit kann AR1/AR2 adressieren? Um jetzt nichts falsches zu schreiben,
    mußte ich das erst nachlesen und ausprobieren.

    Als Konstante Adresse kann man maximal P#65535.7 laden (LAR1 P#65535.7).
    Mehr läßt der Step7-AWL-Editor nicht zu.
    Man kann also schon weiter Adressieren, als ein DB überhaupt lang sein kann
    (P#DBX65535.7 ist größer als 65534).

    Über den Umweg Akku1 oder per +AR1 P#x.y (notfalls mehrmals) kann man die
    AR-Register bis max P#2097151.7 (ca. 2MB) bringen.
    Mehr geht nicht mit 24 Bit Adresse und 8 Bit Bereichskennung.
    Wenn man dann noch etwas zum AR dazuaddieren will, dann wird die Addition
    tatsächlich ausgeführt und das AR-Register hat einen klassischen Überlauf
    (fängt wieder "unten" an).
    Eine Adresse > P#65535.7 zeigt natürlich garantiert ins nirgendwo, ist aber
    möglich.

    Zum Programmentwurf von ibanesch:
    Beim Aufruf mit der maximal möglichen DB-Länge und wenn #Can_msg nicht
    gefunden wird wäre die Schleife 65536 mal durchlaufen worden und AR1 hätte
    am Ende auf P#131072.0 gestanden (65536 * P#2.0).
    (das wäre natürlich nur mit OB121 gegangen)

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #22
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Wie Kollege online schon im Beitrag #3 bemerkte, macht man Schleifen eigentlich so, daß man
    schon vor der Schleife die maximale Anzahl Schleifendurchläufe festlegt und dann mittels LOOP
    den Schleifenzähler rückwärts bis 0 laufen läßt. (das macht sogar die Schleife etwas schneller)
    Dann können solche berechenbaren unberechenbaren Programmabläufe gar nicht erst passieren.
    Das würde dann so aussehen: (nun wird das Programm langsam perfekt)
    Code:
          L     P#0.0
          LAR1  
          AUF   #DB_nummer
          SET
          L     DBLG        // DB-Länge in Byte (0..65534)
          L     2
          /I                // auf Anzahl Words bringen ...
          SPZ   M003        //   Nix suchen, DB ist nur 0 oder 1 Byte lang!
    M001: T     #S_ZAE      // und als maxAnzahl_Schleifenzähler zuweisen
    
          L     #Can_msg
          L     DBW [AR1,P#0.0]
          ==I   
          S     #treffer
          SPB   M002
    
          +AR1  P#2.0       // AR1 auf nächstes Word stellen
          L     #S_ZAE
          LOOP  M001        // --S_ZAE > 0 ? SPB M001 : Ende Schleife
    
    M003: R     #treffer
          L     0           // Ersatzwert bei nicht gefunden
     
    M002: T     #code
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #23
    Registriert seit
    14.10.2010
    Ort
    Telgte
    Beiträge
    653
    Danke
    97
    Erhielt 129 Danke für 99 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Na wenn das hier mal keine qualifizierte Hilfe ist !
    Dieser Thread hat ja das Niveau eines Siemens Lehrgangs.

    @PN/DP
    Ich hoffe der TE weiß deine Leistung zu schätzen!

    Gruß
    Toki
    Zitieren Zitieren Danke  

Ähnliche Themen

  1. Antworten: 50
    Letzter Beitrag: 01.08.2011, 12:57
  2. Antworten: 6
    Letzter Beitrag: 12.08.2009, 17:26
  3. Existenz eines DB überprüfen
    Von maxcis im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 26.06.2009, 00:42
  4. Antworten: 7
    Letzter Beitrag: 13.10.2008, 19:56
  5. Antworten: 6
    Letzter Beitrag: 11.10.2004, 01:55

Lesezeichen

Berechtigungen

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