KingHelmer
Level-3
- Beiträge
- 1.076
- Reaktionspunkte
- 140
-> Hier kostenlos registrieren
Hallo liebe Leute, ich bins mal wieder.
Ich habe wieder ein problem im Programm, wobei ich sagen muss, dass bisher alles rund geklappt hat.
Ich habe ein Programm geschrieben zum Dimmen und Szenen einstellen bei LED-Leuchten. Es handelt sich um RGB-LEDS und ich steuere ein PWM-Modul mit 0-10V an.
Erklären wäre sehr schwierig, ich glaube ein Code hilft hier mehr:
Funktionsblock für das Dimmen:
Hier wird ein Zählerwert gesetzt, der mittels einem Impulsgeber (GEN_PULSE) erhöhr und erniedrigt werden kann in Stufen, die von einer eingegebenen Dimmdauer abhängig sind.
Das funktioniert ALLEINE wunderbar. Jedoch habe ich nun auch einen Block für das Einstellen von Lichtszenen erstellt, siehe hier:
Das ist ein Auszug aus dem FB.
Man sieht hier nun, dass der gleiche Analogausgang, z.B. Analogausgang_ROT 2 x gesetzt wird. Einmal kann man ihn dimmen und einmal kann man einen Wert darauf schrieben mit einer Taste "Szene1_ON_OFF".
Allerdings kan ich in der Visu nur das setzen von Szenen benutzen, die Dimmfunktion bleibt funktionslos, obwohl in der Instanz im Online-modus ein Wert korrekt gesetzt wird.
Nun die eigentliche Frage:
Kann ich eine Variable an zwei Ausgängen von FBs zuweisen?
Ich meine, wenn der eine FB der Variablen keinen Wert zuweisst, weisst er ihr dann den Wert 0 zu?
Vieleicht hat jemand interesse , mal mein Programm anzusehen. ich könnte es per Email versenden, hier hochladen funktioniert anscheinend nicht.
Es wäre auch eine Visu dabei, mit der die Funktionsweise klar wird!
Mein Gott, das ist so schwer zu beschreiben......
Grüße,
Florian
Ich habe wieder ein problem im Programm, wobei ich sagen muss, dass bisher alles rund geklappt hat.
Ich habe ein Programm geschrieben zum Dimmen und Szenen einstellen bei LED-Leuchten. Es handelt sich um RGB-LEDS und ich steuere ein PWM-Modul mit 0-10V an.
Erklären wäre sehr schwierig, ich glaube ein Code hilft hier mehr:
Funktionsblock für das Dimmen:
Code:
Instanz1_GEN_PULSE(ENQ:=DIM_Hoch , PTH:= (Zeitintervall_Puls/2), PTL:=(Zeitintervall_Puls/2) , Q=> );
Instanz2_GEN_PULSE(ENQ:=DIM_Runter , PTH:= (Zeitintervall_Puls/2), PTL:=(Zeitintervall_Puls/2) , Q=> );
Instanz1_Fb_Stromstoss(
xTaster:=Licht_Einschalten ,
xZenAUS:=FALSE ,
xZenEIN:=FALSE ,
bResetModus:=,
xAktor=>Merker_EIN );
IF Merker_EIN = TRUE
THEN Rueckmeldung_AN := TRUE;
ELSE Rueckmeldung_AN:= FALSE;
END_IF;
Instanz1_CTUD(
CU:= (Instanz1_GEN_PULSE.Q AND NOT Zaehler_Obergrenze),
CD:= Instanz2_GEN_PULSE.Q,
PV:= REAL_TO_INT(((TIME_TO_REAL(Dimmdauer)/TIME_TO_REAL(Zeitintervall_Puls))/100)*Einschalthelligkeit_Prozent),
QU=> ,
QD=> ,
CV=> );
Instanz1_R_TRIG(CLK:=Merker_EIN , Q=>Instanz1_CTUD.LOAD );
Instanz1_F_TRIG(CLK:=Merker_EIN , Q=>Instanz1_CTUD.RESET );
Zaehlerwert:=LIMIT(0,Instanz1_CTUD.CV*((32761*TIME_TO_INT(Zeitintervall_Puls))/TIME_TO_INT(Dimmdauer)), 32761);
Ausgabe_Analogausgang:=Zaehlerwert;
IF Zaehlerwert >= 32761 THEN
Zaehler_Obergrenze:=TRUE;
ELSE Zaehler_Obergrenze:=FALSE;
END_IF;
Hier wird ein Zählerwert gesetzt, der mittels einem Impulsgeber (GEN_PULSE) erhöhr und erniedrigt werden kann in Stufen, die von einer eingegebenen Dimmdauer abhängig sind.
Das funktioniert ALLEINE wunderbar. Jedoch habe ich nun auch einen Block für das Einstellen von Lichtszenen erstellt, siehe hier:
Code:
Instanz1_F_TRIG( CLK:=Szene1_ON_OFF , Q=>MTRIG1 );
Instanz2_F_TRIG( CLK:=Szene2_ON_OFF , Q=>MTRIG2 );
Instanz3_F_TRIG( CLK:=Szene3_ON_OFF , Q=>MTRIG3 );
Instanz4_F_TRIG( CLK:=Szene4_ON_OFF , Q=>MTRIG4 );
IF MTRIG1 THEN
Analogausgang_ROT := REAL_TO_INT((INT_TO_REAL(RotwertProzentS1)/100.0)*32761.0);
Analogausgang_BLAU := REAL_TO_INT((INT_TO_REAL(BlauwertProzentS1)/100.0)*32761.0);
Analogausgang_GRUEN := REAL_TO_INT((INT_TO_REAL(GruenwertProzentS1)/100.0)*32761.0);
ELSIF MTRIG2 THEN
Analogausgang_ROT := REAL_TO_INT((INT_TO_REAL(RotwertProzentS2)/100.0)*32761.0);
Analogausgang_BLAU := REAL_TO_INT((INT_TO_REAL(BlauwertProzentS2)/100.0)*32761.0);
Analogausgang_GRUEN := REAL_TO_INT((INT_TO_REAL(GruenwertProzentS2)/100.0)*32761.0);
ELSIF MTRIG3 THEN
Analogausgang_ROT := REAL_TO_INT((INT_TO_REAL(RotwertProzentS3)/100.0)*32761.0);
Analogausgang_BLAU := REAL_TO_INT((INT_TO_REAL(BlauwertProzentS3)/100.0)*32761.0);
Analogausgang_GRUEN := REAL_TO_INT((INT_TO_REAL(GruenwertProzentS3)/100.0)*32761.0);
ELSIF MTRIG4 THEN
Analogausgang_ROT := REAL_TO_INT((INT_TO_REAL(RotwertProzentS4)/100.0)*32761.0);
Analogausgang_BLAU := REAL_TO_INT((INT_TO_REAL(BlauwertProzentS4)/100.0)*32761.0);
Analogausgang_GRUEN := REAL_TO_INT((INT_TO_REAL(GruenwertProzentS4)/100.0)*32761.0);
END_IF;
Das ist ein Auszug aus dem FB.
Man sieht hier nun, dass der gleiche Analogausgang, z.B. Analogausgang_ROT 2 x gesetzt wird. Einmal kann man ihn dimmen und einmal kann man einen Wert darauf schrieben mit einer Taste "Szene1_ON_OFF".
Allerdings kan ich in der Visu nur das setzen von Szenen benutzen, die Dimmfunktion bleibt funktionslos, obwohl in der Instanz im Online-modus ein Wert korrekt gesetzt wird.
Nun die eigentliche Frage:
Kann ich eine Variable an zwei Ausgängen von FBs zuweisen?
Ich meine, wenn der eine FB der Variablen keinen Wert zuweisst, weisst er ihr dann den Wert 0 zu?
Vieleicht hat jemand interesse , mal mein Programm anzusehen. ich könnte es per Email versenden, hier hochladen funktioniert anscheinend nicht.
Es wäre auch eine Visu dabei, mit der die Funktionsweise klar wird!
Mein Gott, das ist so schwer zu beschreiben......
Grüße,
Florian