Passion4Automation
Level-2
- Beiträge
- 432
- Reaktionspunkte
- 18
-> Hier kostenlos registrieren
Hallo,
ich versuche gerade meine Beleuchtungssteuerung etwas zu optimieren, dazu habe ich einen FB Stromstoß etwas geändern.
Folgende Funktion soll erfüllt werden:
Zentral AUS
Zentral EIN
Taster EIN/AUS
Szene EIN (Dauerhaft True)
Szene AUS (Dauerhaft True)
Ich möchte unabhängig ob die Lampe an oder aus ist, auf die Szene umschalten können, wird die Szene wieder deaktiviert, soll der Letzte Zustand davor angenommen werden, Ausser Licht AUS.
Den letzten Zustand annehmen bereitet mir Schwierigkeiten, ich habe versucht das mit einer Statusvariable zu lösen.
Das ist der CODE sowie die Bausteinschnittstelle:
Mir Überschreibt es hier den Statusmerker, soviel ist klar. Ich brauche bitte einen Denkanstoß in die richtige Richtung.
Der Baustein soll einfach Bitorientiert gesteuert werden und soll wie ich es will beliebige Zustände annehmen.
Ich wäre um einen Tipp dankbar.
ich versuche gerade meine Beleuchtungssteuerung etwas zu optimieren, dazu habe ich einen FB Stromstoß etwas geändern.
Folgende Funktion soll erfüllt werden:
Zentral AUS
Zentral EIN
Taster EIN/AUS
Szene EIN (Dauerhaft True)
Szene AUS (Dauerhaft True)
Ich möchte unabhängig ob die Lampe an oder aus ist, auf die Szene umschalten können, wird die Szene wieder deaktiviert, soll der Letzte Zustand davor angenommen werden, Ausser Licht AUS.
Den letzten Zustand annehmen bereitet mir Schwierigkeiten, ich habe versucht das mit einer Statusvariable zu lösen.
Das ist der CODE sowie die Bausteinschnittstelle:
Code:
VAR_INPUT
xTaster: BOOL;
xModbus: BOOL;
xZent_Aus: BOOL;
xZent_Ein: BOOL;
xSzene_Ein: BOOL;
xSzene_Aus: BOOL;
END_VAR
VAR_OUTPUT
xQ: BOOL;
iStatus: INT;
END_VAR
VAR
p_Flanke: R_TRIG;
iStatusmerker: INT;
END_VAR
Code:
p_Flanke(CLK:=xTaster OR xModbus );
IF p_Flanke.Q AND NOT xQ THEN
iStatus:= 100;
ELSIF
p_Flanke.Q AND xQ THEN
iStatus:= 101;
END_IF
IF xZent_Aus THEN
iStatus:= 102;
ELSIF xZent_Ein THEN
iStatus:= 103;
END_IF
IF xSzene_Ein THEN
iStatus:= 104;
iStatusmerker:= iStatus;
ELSIF NOT xSzene_Ein THEN
iStatus:= iStatusmerker;
END_IF
IF xSzene_Aus THEN
iStatus:= 105;
iStatusmerker:= iStatus;
ELSIF NOT xSzene_Aus THEN
iStatus:= iStatusmerker;
END_IF
CASE iStatus OF
0: xQ:= FALSE;
100: xQ:= TRUE;
101: xQ:= FALSE;
102: xQ:= FALSE;
103: xQ:= TRUE;
104: xQ:= TRUE;
105: xQ:= FALSE;
END_CASE
Mir Überschreibt es hier den Statusmerker, soviel ist klar. Ich brauche bitte einen Denkanstoß in die richtige Richtung.
Der Baustein soll einfach Bitorientiert gesteuert werden und soll wie ich es will beliebige Zustände annehmen.
Ich wäre um einen Tipp dankbar.