Programmschnipsel - Überlauf einer BYTE Variablen

KingHelmer

Level-1
Beiträge
1.076
Reaktionspunkte
139
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.
 
Zuletzt bearbeitet:
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
 
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
 
Zurück
Oben