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