Gruppensteuerung mit Moeller Sucosoft

MarioR

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe mir mit einer Moeller-PS4-341 eine Rolladensteuerung "gebastelt"

Für jeden Taster Hoch und Runter einen F-Trigger und die Ergebnisse der
beiden in einen Funktionsbaustein. Diese entscheidet dann ob Hoch für x-Sek,
oder Runter für x-Sek oder Stop. Im FB habe ich das über einem TimePuls
gelöst, da ich die Ausschaltverzögerungen nicht abbrechen, sondern nur
unterbrechen kann.
Funktioniert auch soweit ganz gut.

Nur wie mache ich das in einer Gruppe?
-Zentralschalter für alle hoch/runter
-Hausseite halb runter (Sonne) etc.

Gruß Mario
 
Gelöst

Hallo,

so, nach ein wenig probieren habe ich gemerkt, dass ich alle gewünschten
Sonderfunktionen in einen Funktionsbaustein (FB) stecken muss, sonst behaken
sich die einzelnen FB (HochRunter, Zentrale, Sonne) gegenseitig.

Falls es jemanden interessiert hier mal der Code für den FB:

Code:
FUNCTION_BLOCK FB_UD
VAR_INPUT
    Up:    BOOL;    (*Taster Hoch*)
    Down:    BOOL;    (*Taster Runter*)
    ZEN_Up:    BOOL;    (*Zentraltaster Hoch*)
    ZEN_Down:    BOOL;    (*Zentraltaster Runter*)
    GAP_Up:    BOOL;    (*Hausseite Hoch*)
    GAP_Down:    BOOL;    (*Hausseite Runter*)
    FullUpTakt:    UINT;    (*Fahrt komplett hoch*)
    FullDownTakt:    UINT;    (*Fahrt komplett runter*)
    GapDownTakt:    UINT;    (*Fahrt "auf Lücke" runter*)
END_VAR

VAR_OUTPUT
    OutputUp:    BOOL;
    OutputDown:    BOOL;
END_VAR

VAR
    TaktUp:    TimePulse;
    DownTakt:    UINT;
    StopUp:    BOOL;
    StopDown:    BOOL;
    TaktDown:    TimePulse;
END_VAR

(* Manuelles betätigen des Taster Stoppt *)
IF (OutputUp OR OutputDown) AND (Up OR Down) THEN
    StopUp := TRUE;
    StopDown := TRUE;
ELSE
    StopUp := FALSE;
    StopDown := FALSE;
END_IF;

(* Zentrale hat Vorrang *)
IF (OutputUp AND (ZEN_Down OR GAP_Down)) THEN
    StopUp := True;
END_IF;
IF (OutputDown AND (ZEN_Up OR GAP_Up)) THEN
    StopDown := True;
END_IF;

(* Kontrolle auf "Kollision" *)
If ((ZEN_Up AND GAP_Down) OR (ZEN_Down AND GAP_Up)) THEN
    StopUp := TRUE;
    StopDown := TRUE;
END_IF;


(* Zeittakt Runter "Auf Lücke" oder "Komplett" *)
IF (GAP_Down) THEN
    DownTakt := GAPDownTakt;
ELSE
    DownTakt := FullDownTakt;
END_IF;


TaktUp ( Set := Up OR ZEN_Up OR GAP_Up,
    ReSet := StopUp,
    PresetTime := FullUpTakt,
    PulseOutput => OutputUp,
    ElapsedTime => );

TaktDown ( Set := Down OR ZEN_Down OR GAP_Down,
    ReSet := StopDown,
    PresetTime := DownTakt,
    PulseOutput => OutputDown,
    ElapsedTime => );
END_FUNCTION_BLOCK
Gruß Mario
 
Zuletzt bearbeitet:
Zurück
Oben