Timer programmieren

  • Hallo zusammen,

    mir ist bei einem Kunden das Hydraulikaggregat zu heiß geworden, weil es durch ein Leck den Druck nicht erreicht hat.

    Ich will zum ersten Mal einen Timer programmieren, und bräuchte Hilfe.

    Ist das so richtig? Kann es leider nicht testen, da Home Office.


    IF $IN[20] == FALSE THEN ; Druckschalter

    IF $IN[21] == FALSE THEN ; Hydraulik Niveau ok

    $Timer[1]=-5000 ; nach 5 sec Agg. ausschalten, bei Fehler

    $TIMER_STOP[1]=FALSE ; Timer laeuft

    $OUT[13]=TRUE ; Aggregat anschalten

    IF ($IN[20] == TRUE) OR ($Timer[1]>=0) THEN

    $OUT[13]=FALSE ; Aggregat ausschalten

    IF ($TIMER[1]>=0) THEN

    $OUT[50]=TRUE ;Fehlerausgang an übergeordnete SPS

    $OUT[51]=TRUE ;Fehlerausgang an übergeordnete SPS

    ENDIF

    $TIMER_STOP[1]=TRUE ;Timer gestoppt

    $Timer[1]=0

    ENDIF

    ENDIF



    Danke Falkone63

  • Schritt für Schritt zum Roboterprofi!
  • Nö, das passt nicht.

    Code
    IF $IN[20] == FALSE THEN ; Druckschalter
    IF $IN[21] == FALSE THEN ; Hydraulik Niveau ok
    $Timer[1]=-5000 ; nach 5 sec Agg. ausschalten, bei Fehler
    $TIMER_STOP[1]=FALSE ; Timer laeuft
    $OUT[13]=TRUE ; Aggregat anschalten
    IF ($IN[20] == TRUE) OR ($Timer[1]>=0) THEN
    ... 

    Wie soll da am Ende $in[20] true sein, wenn das nur dann ausgeführt wird wenn es false (erste Zeile) ist.

  • Servus,


    über die SPS.sub würde ich es in etwa so machen.

    Zusätzlich noch einen Quittierungseingang zum Wiederanlauf implementieren.


    ;FOLD Ueberwachung Hydraulikaggregat


    ;wenn Oelstand zu niedrig oder Druck nach 5 Sekunden nicht erreicht

    IF (($IN[21] == FALSE) OR ($TIMER[1]>=0)) THEN

    $OUT[13]=FALSE ; Aggregat ausschalten

    ;Meldungen zur SPS => Niveau und/oder Druck n.i.O.

    IF (($IN[21] == FALSE) AND ($OUT[50]=FALSE)) THEN

    $OUT[50]=TRUE ;Fehler Niveau n.i.O. zur SPS

    ENDIF

    IF (($TIMER[1]>=0) AND ($OUT[50]=FALSE)) THEN

    $OUT[51]=TRUE ;Fehler Druck n.i.O. an SPS

    ENDIF

    ENDIF


    ;Aggregat baut keinen Druck auf

    IF ($IN[20] == FALSE) THEN ; Druckschalter

    $TIMER_STOP[1]=TRUE ;Timer gestoppt

    $Timer[1]=-5000 ;

    $TIMER_STOP[1]=FALSE ; Timer starten

    ELSE

    ;hier zuruecksetzen um kurzzeitige Druckabfaelle

    ;nicht zu beruecksichtigen

    $TIMER_STOP[1]=TRUE ;Timer stoppen

    $Timer[1]=-5000 ;

    ENDIF


    ;zuruecksetzten Fehler und Starten des Hydraulikaggregates

    ;Vorbedingung Niveau i.O. => zusaetzlichen Quittiereingang implementieren

    IF (($IN[21] == TRUE) AND ($IN[XXX] == TRUE)) THEN

    $TIMER_STOP[1]=TRUE ;Timer stoppen

    $Timer[1]=-5000 ;

    $OUT[50]=FALSE ;Fehler Niveau n.i.O. zur SPS zuruecksetzen

    $OUT[51]=FALSE ;Fehler Druck n.i.O. an SPS zuruecksetzen

    $OUT[13]=TRUE ; Aggregat einschalten

    ENDIF


    ;ENDFOLD (Ueberwachung Hydraulikaggregat)


    Gruss Martl

  • Das wird aber so nicht funktionieren oder doch ?

    Müsste nicht "$OUT[50]==FALSE" in der IF Bedingung stehen ?

  • Sorry,


    Schreibfehler, wer einen findet kann Ihn behalten. 8o


    ;FOLD Ueberwachung Hydraulikaggregat


    ;wenn Oelstand zu niedrig oder Druck nach 5 Sekunden nicht erreicht

    IF (($IN[21] == FALSE) OR ($TIMER[1]>=0)) THEN

    $OUT[13]=FALSE ; Aggregat ausschalten

    ;Meldungen zur SPS => Niveau und/oder Druck n.i.O.

    IF (($IN[21] == FALSE) AND ($OUT[50] == FALSE)) THEN

    $OUT[50]=TRUE ;Fehler Niveau n.i.O. zur SPS

    ENDIF

    IF (($TIMER[1]>=0) AND ($OUT[50] == FALSE)) THEN

    $OUT[51]=TRUE ;Fehler Druck n.i.O. an SPS

    ENDIF

    ENDIF


    ;Aggregat baut keinen Druck auf

    IF ($IN[20] == FALSE) THEN ; Druckschalter

    $TIMER_STOP[1]=TRUE ;Timer gestoppt

    $Timer[1]=-5000 ;

    $TIMER_STOP[1]=FALSE ; Timer starten

    ELSE

    ;hier zuruecksetzen um kurzzeitige Druckabfaelle

    ;nicht zu beruecksichtigen

    $TIMER_STOP[1]=TRUE ;Timer stoppen

    $Timer[1]=-5000 ;

    ENDIF


    ;zuruecksetzten Fehler und Starten des Hydraulikaggregates

    ;Vorbedingung Niveau i.O. => zusaetzlichen Quittiereingang implementieren

    IF (($IN[21] == TRUE) AND ($IN[XXX] == TRUE)) THEN

    $TIMER_STOP[1]=TRUE ;Timer stoppen

    $Timer[1]=-5000 ;

    $OUT[50]=FALSE ;Fehler Niveau n.i.O. zur SPS zuruecksetzen

    $OUT[51]=FALSE ;Fehler Druck n.i.O. an SPS zuruecksetzen

    $OUT[13]=TRUE ; Aggregat einschalten

    ENDIF


    ;ENDFOLD (Ueberwachung Hydraulikaggregat)



    Gruss Martl

  • Martl

    Ja kann ich auch nicht so ganz nachvollziehen...mit vernünftigen Signalnamen arbeitet es sich viel leichter


    falkone63

    Habe die Tage eben eine Bauteil Auswertung mit Timer geschrieben.

    Bin allerdings auch noch nicht zum testen gekommen. Vielleicht hilft es dir ja trotzdem weiter oder inspiriert dich ^^

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden