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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Zähler Überlauf überwachen

  1. #1
    Registriert seit
    11.05.2009
    Beiträge
    106
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, haben einen Zähler mit einen Doppelinteger (bis +2147483647).
    Zähle ich dann weiter, wird der Wert negative. Wie kann ich das verhindern, bzw. eine Warnung audgeben oder wieder bei Null beginnen?
    Danke im Voraus.
    Zitieren Zitieren Zähler Überlauf überwachen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    damit hast du dann die Grenze des Bereichs DINT erreicht.
    Du könntest :
    - im Zählbereich nur Werte bis z.B. 2.000.000.000 zulassen.
    - den Wertesprung erfassen (letzter Wert zu aktueller Wert)
    - dir mit Hilfe z.B. der Oscat-Lib einen Quad-Integer bauen.
    - mit einem Offset arbeiten, das es grundsätzlich verhindert, das solche Werte entstehen.

    Gruß
    LL

  3. #3
    Registriert seit
    20.03.2010
    Beiträge
    59
    Danke
    10
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Wie wärs wenn du den Zähler zurücksetzt sobald er den Maximalwert erreicht hat?

    Code:
    L Zähler
    L L#Maximalwert
    ==D
    R Zähler
    oder falls du einen Zähler durch addieren nachbildest trandferierst du einfach eine "0" in den Zählwert

    Code:
    L DBy.dbdy
    L L#Maximalwert
    ==D
    L L#0
    t dby.dbdy
    Somit fängt der Zähler nach erreichen des Maximalwertes immer wieder bei "0" an. Zusätzlich könntest du noch einen Merker dabeiprogrammieren der dann z.B. eine Hinweismeldung ansteuert.
    Den Fortschritt verdanken die Menschen den Unzufriedenen.
    Aldous Huxley

  4. #4
    Registriert seit
    20.03.2010
    Beiträge
    59
    Danke
    10
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Sorry, ich habe gerade festgestellt da noch ein Sprung rein muss!

    Code:
    L DBy.dbdy
    L L#Maximalwert
    ==D
    spbn ende
    L L#0
    t dby.dbdy
    ende: Nop 0
    Den Fortschritt verdanken die Menschen den Unzufriedenen.
    Aldous Huxley

  5. #5
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard

    Hallo,
    wie wäre es einfach das oberste Bit auszumaskieren,
    dann brauchst du sonst gar nichts machen

    Wenns das Vorzeichen nicht gibt ist der Zähler immer positiv.

    Dann hast du einen 31 Bit Zähler.

    Vielleicht geht ja auch einen UDINT verwenden ?

    lg
    bb

  6. #6
    Registriert seit
    13.08.2008
    Beiträge
    35
    Danke
    0
    Erhielt 9 Danke für 7 Beiträge

    Standard

    Die "normalen" Zähler blockieren biem Maximalwert.
    Durch Addition kann man eben einen Überlauf haben.
    Um das abzufangen gibt es den SPO Befehl:
    L #Zaehler
    + 1
    SPO over
    T #Zaehler
    SPA weiter

    over: L 0
    T Zaehler

    _____

    In KOP und FUP ist der ENO Ausgang der Addition gleich Null wenn überlauf,
    und gleich Eins wenn alles OK.

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

    Standard

    Oder du zählst eine Realzahl hoch....
    Die geht noch weiter.

    Aber wofür musst du soviel Zählen?!

    Gruß wolder
    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. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von wolder Beitrag anzeigen
    Oder du zählst eine Realzahl hoch....
    Die geht noch weiter.
    Das stimmt leider nicht, eine REAL-Zahl hochzählen funktioniert nur eingeschränkt.
    Bei knapp 17 Millionen bleibt der Zähler stehen: 16.800.000,0 + 1,0 = 16.800.000,0 !!


    Zähler 0 bis 999.999.999 mit automatischem Überlauf/Rückstellung zu 0
    Code:
          L     DBx.DBDy                    //alter Zählerstand
          +     L#1                         //Zähleinheit addieren
          L     L#1_000_000_000             //max Zählumfang
          >=D
          =     "Uebertrag"
          S     "Ueberlaufwarnung"
          MOD                               //Wrap zu 0
          T     DBx.DBDy                    //neuer Zählerstand
    Die blauen Programmzeilen werden nur benötigt, wenn eine Überlaufwarnung oder Kaskadierung
    mehrerer Zähler zur Erhöhung des Zählumfangs erfolgen soll.

    Gruß
    Harald
    Zitieren Zitieren Zähler 0...999.999.999 mit Wrap zu 0 und Übertrag  

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    wolder (28.04.2010)

  10. #9
    Registriert seit
    13.08.2008
    Beiträge
    35
    Danke
    0
    Erhielt 9 Danke für 7 Beiträge

    Standard

    Genau, Realzahlen sind schlecht geeignet zum zählen bzw. inkrementien.
    Die blockade wird von der Anzahl der Bits der Mantisse bestimmt.

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke PN/DP!
    Wußte ich noch nicht. Hab ich auch noch nie ausprobiert.
    Mir ist noch kein Fall in die Quere gekommen, wo ich so viel Zählen musste.

    Gruß wolder
    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

Ähnliche Themen

  1. bei 20 mA überlauf ??
    Von prinz1978 im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 07.08.2008, 12:33
  2. Zähler mit Überlauf
    Von MSB im Forum Programmierstrategien
    Antworten: 18
    Letzter Beitrag: 03.09.2007, 16:45
  3. Überlauf Diagnosedaten in der CPU???
    Von maninthedark im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 19.01.2006, 05:05
  4. Überlauf Diagnostik
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.09.2005, 15:46
  5. Antworten: 3
    Letzter Beitrag: 01.07.2004, 15:28

Lesezeichen

Berechtigungen

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