KingHelmer
Level-1
- Beiträge
- 1.076
- Reaktionspunkte
- 139
-> 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:
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.
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: