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

Ergebnis 1 bis 3 von 3

Thema: Programmschnipsel - Überlauf einer BYTE Variablen

  1. #1
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    995
    Danke
    115
    Erhielt 129 Danke für 102 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich bräcuhte einen kleinen Denkanstoß.

    Habe mir vorhin ein kleines DMX Programm zusammengebastelt, in welchem ich mit einem WAGO 750-881 und einer seriellen Klemme 750-652 ein DMX Gerät mit 4 Channeln steuere.

    Funktioniert auch alles, bis darauf, dass beim DIMMEN meiner Farben die Variable überläuft.
    Sie dimmt also von z.B. 0 bis auf 255 und springt dann auf 0 zurück und fängt wieder an zu dimmen.

    Hier der entsprechende Programmausschnitt:

    Code:
    iBUFFER_VARIABLE := BYTE_TO_INT(bCOLOUR_VALUE); //Diese VAR hatte ich testweise angelegt
    
    IF xDIM_UP_WHEN_OFF = TRUE THEN
        IF DIM3_TON.Q THEN
        iBUFFER_VARIABLE := LIMIT(0,REAL_TO_BYTE(INT_TO_REAL(iBUFFER_VARIABLE) + rVALUE_DIM_STEP),255);
        bCOLOUR_VALUE:= LIMIT(0,INT_TO_BYTE(iBUFFER_VARIABLE),255);
        END_IF;
    ELSIF xDIM_UP_WHEN_OFF = FALSE THEN
        IF bCOLOUR_VALUE >0 AND DIM3_TON.Q THEN
        iBUFFER_VARIABLE := LIMIT(0,REAL_TO_BYTE(INT_TO_REAL(iBUFFER_VARIABLE) + rVALUE_DIM_STEP),255);
        bCOLOUR_VALUE:= LIMIT(0,INT_TO_BYTE(iBUFFER_VARIABLE),255);
        END_IF;
    END_IF;
    Im Grunde wird eine BYTE Variable pro Zyklus um einen festen Wert erhöht, solange eine bestimmte BOOL auf TRUE ist.
    Jetzt frage ich mich, warum die Variable, trotz der Funktion LIMIT mit Grenzwerten 0 und 255, überläuft.

    Kann es sein, dass die Konvertierungen (INT zu REAL bzw. INT zu BYTE) etwas damit zu tun haben?

    Vielleicht sieht ja jemand direkt den Fehler

    Grüße,
    Flo


    EDIT:// Es sind zwei IF-Anweisungen, da ich einstellbar mache, ob auch vom AUS Zustand hochgedimmt werden kann, oder das Licht erst eingeschaltet sein muss.
    Geändert von KingHelmer (12.03.2015 um 14:20 Uhr)
    Zitieren Zitieren Programmschnipsel - Überlauf einer BYTE Variablen  

  2. #2
    Registriert seit
    22.12.2007
    Beiträge
    17
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ich denke dass dein REAL_TO_BYTE das Problem ist. Versuch einfach mal REAL_TO_UINT (oder REAL_TO_WORD) stattdessen dann sollte auch die LIMIT Funktion eine Chance haben. Ichj denke nämlich, dass REAL_TO_BYTE bei 255.1 zB. 0 zurückgegeben wird.

    Grüße

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

    KingHelmer (12.03.2015)

  4. #3
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    995
    Danke
    115
    Erhielt 129 Danke für 102 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi professor,

    das war das Problem, ja.
    Allerdings hatte ich das schon in dem "Runterdimmen" geändert gehabt, nur es für das "hochdimmen" welches ich hier gepostet habe, vergessen gehabt.....

    Also war mein Programm eigentlich sogar gut, so wie es war, nur hatte ich nen kleinen copy/paste Fehler.
    Funktioniert nun tadellos.

    Merci!

    Flo

Ähnliche Themen

  1. TwinCAT2: Überschreiben einer Variablen einer FB-Instanz
    Von LMDaniel999 im Forum CODESYS und IEC61131
    Antworten: 13
    Letzter Beitrag: 05.12.2014, 08:37
  2. Überlauf mit einer Subtraktion bei DWORD berechnen
    Von drfunfrock im Forum Programmierstrategien
    Antworten: 7
    Letzter Beitrag: 03.12.2013, 11:58
  3. Antworten: 11
    Letzter Beitrag: 24.04.2012, 12:57
  4. Bits in einem Byte auf einer S5 spiegeln
    Von matziane im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 07.12.2011, 13:50
  5. Antworten: 1
    Letzter Beitrag: 17.09.2009, 13:50

Stichworte

Lesezeichen

Berechtigungen

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