WagoAppAppLED Sequence Methode

bbm1995

Level-2
Beiträge
54
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Miteinander!

Ich versuche bei der Bibliothek WagoAppAppLED die Methode ".SetSequence" zu verwenden, leider verstehe ich nicht,
wie "POINTER TO ARRAY[0..0] OF typLedSequenceStep" funktionieren soll.

Die Arrays Dimensionen runterzusetzen auf 0..0 und die eckigen Klammern zu entfernen bringt nichts.

Kann mir jemand erklären wie ich eine Sequenz korrekt aufbauen kann?
Code:
{attribute 'qualified_only'}
VAR_GLOBAL
    ///    WIP Mode (Total Duration: 2.55S)
    tSeqWIP:        ARRAY[0..7] OF typLedSequenceStep
                    :=[    (eColor1 :=    eLedColor.Green,     tDuration := T#00.25S),
                        (eColor1 :=    eLedColor.Off,         tDuration := T#00.10S),
                        (eColor1 :=    eLedColor.Green,     tDuration := T#00.25S),
                        (eColor1 :=    eLedColor.Off,         tDuration := T#00.10S),
                        (eColor1 :=    eLedColor.Green,     tDuration := T#00.25S),
                        (eColor1 :=    eLedColor.Off,         tDuration := T#00.10S),
                        (eColor1 :=    eLedColor.Yellow,     tDuration := T#00.75S),
                        (eColor1 :=    eLedColor.Off,         tDuration := T#00.75S)
                    ];

    ///    Manual Operation (Total Duration: 2.00S)
    tSeqManual:        ARRAY[0..1] OF typLedSequenceStep
                    :=[    (eColor1 := eLedColor.Yellow,    tDuration := T#01.5S),
                        (eColor1 := eLedColor.Off,        tDuration := T#00.5S)
                    ];

    ///    Revision (Total Duration: 2.05S)
    tSeqRevision:    ARRAY[0..6] OF typLedSequenceStep
                    :=[    (eColor1 := eLedColor.Yellow,    tDuration := T#01.00S),
                        (eColor1 := eLedColor.Red,        tDuration := T#00.25S),
                        (eColor1 := eLedColor.Off,        tDuration := T#00.10S),
                        (eColor1 := eLedColor.Red,        tDuration := T#00.25S),
                        (eColor1 := eLedColor.Off,        tDuration := T#00.10S),
                        (eColor1 := eLedColor.Red,        tDuration := T#00.25S),
                        (eColor1 := eLedColor.Off,        tDuration := T#00.10S)
                    ];

    /// Standby (Total Duration: 60S)
    tSeqStandby:    ARRAY[0..1] OF typLedSequenceStep
                    :=[    (eColor1 := eLedColor.Yellow,    tDuration := T#00.05S),
                        (eColor1 := eLedColor.Off,        tDuration := T#59.95S)
                    ];

    ///    Generic Fault (Total Duration: 1.00S)
    tSeqErr:        ARRAY[0..1] OF typLedSequenceStep
                    :=[    (eColor1 := eLedColor.Red,        tDuration := T#00.50S),
                        (eColor1 := eLedColor.Off,        tDuration := T#00.50S)
                    ];

END_VAR
Code:
PROGRAM UserLED
VAR
    OpenInit:    BOOL;                        // Channel Initialization
    AppLED:        ARRAY[1..7] OF FbAppLED;    // LED function

END_VAR
(*============================== User LED ===============================*)

// (TRUE) bei der IF Abfrage ist nur ein Platzhalter.

(* Initialization *)
    IF NOT OpenInit THEN
        AppLED[1](
            xOpen    :=    TRUE,
            eID        :=    eLEDID.AppLED_1,
            xError    =>    ,
            xIsOpen    =>    ,
            xIsIdle    =>    ,
            eMode    =>    ,
            xBusy    =>    ,
            oStatus    =>  
        );
    END_IF

(* Criteria *)
    IF (TRUE)
        THEN    // Fault
        AppLED[1].SetSequence(
            pSequence        :=    seqUserLED.tSeqErr,
            udiSequenceSize    :=    2
        );

    ELSIF (TRUE)
        THEN    // Revision
        AppLED[1].SetSequence(
            pSequence        :=    seqUserLED.tSeqRevision,
            udiSequenceSize    :=    7
        );

    ELSIF (TRUE)
        THEN    // Manual
        AppLED[1].SetSequence(
            pSequence        :=    seqUserLED.tSeqManual,
            udiSequenceSize    :=    2
        );

    ELSIF (TRUE)
        THEN    // Operation
        AppLED[1].SetStatic(eLedColor.Green);

    ELSE        // Other status
        AppLED[1].SetSequence(
            pSequence        :=    seqUserLED.tSeqStandby,
            udiSequenceSize    :=    2
        );

    END_IF
 
Hallo @bbm1995,

du kannst die Methode z.B wie folgt anwenden:

Code:
Deklaration:
VAR
    oFbAppLED    : WagoAppAppLED.FbAppLED;
    aSequences    : ARRAY [1..10] OF WagoAppAppLED.typLedSequenceStep;
    xOpen        : BOOL;
    xSet        : BOOL;
END_VAR

Implementation:
oFbAppLED(
    oStatus=> ,
    xOpen:=xOpen ,
    xError=> ,
    xIsOpen=> ,
    xIsIdle=> ,
    eID:= 2,
    eMode=> ,
    xBusy=> );
    
IF xSet THEN
    oFbAppLED.SetSequence(pSequence := ADR(aSequences), udiSequenceSize:= 10);
    xSet:=FALSE;   
END_IF

Viel Erfolg bei der Umsetzung!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Uff, vielen Dank für die Antwort, da muss ich meine Implementation komplett umdenken, weil wenn die SetSequence jedesmal bei einem Zyklus aufgerufen wird, die LED gar keine Zeit hat die Farbe zu wechseln, so bleibt die Farbe immer statisch auf der ersten Sequenz...

Edit:
Beim einmaligen Aufruf von .SetSequence bleibt die LED nur statisch. Ich muss mal überprüfen ob es an der 750-8206 liegt oder diese Funktion auch bei einer 750-8212 nicht läuft.
 
Zuletzt bearbeitet:
Zurück
Oben