Hi Leute,
ich habe mir eine routine geschrieben, mit der ich mir immer die richtige Meldung anzeigen kann.
Siehe hier:
Im Arbeitsprogramm:
WHILE IN_AREA_FREE_AS == FALSE
Check (132, TRUE, 22, 003)
ENDWHILE
Im Check:
DEF Check (EINGANG: IN, STATUS: IN, ZEIT: IN, FEHLER_NR: IN)
INT EINGANG, ZEIT, FEHLER_NR
BOOL STATUS
CHAR TEXT[26] ; max. 26 Zeichen
;Beispiel Aufruf:
;Check ($in[8], true, 5, 17)
$TIMER[1] = 0 ; Timer initialisieren
ZEIT = ZEIT * 1000 ; Zeit von sek nach ms umrechnen
$TIMER_STOP[1] = FALSE
WAIT FOR ($TIMER[1] >= ZEIT) OR ($IN[EINGANG] == STATUS)
IF ($TIMER[1] >= ZEIT) AND ($IN[EINGANG] <> STATUS) THEN
$TIMER_STOP[1] = TRUE ; timer anhalten
;Fehlermeldung auswerten/setzen
SWITCH FEHLER_NR
CASE 001
;Fehler 1
TEXT[] = "Kein Werkstueck angewaehlt"
usermessage (FEHLER_NR, TEXT[])
DEFAULT
;Ungueltige Fehlernummer
TEXT[] = "Ungueltige Fehlernummer"
usermessage (FEHLER_NR, TEXT[])
ENDSWITCH
ENDIF
$TIMER_STOP[1] = TRUE ; timer anhalten
END
Und im usermessage den Rest...:
DEF userMessage (FNr:IN, Meldungstext:IN)
INT FNr ; Fehlernummer aus dem Check() Programm
CHAR Meldungstext[] ; Text aus dem Check() Programm - max. 26 Zeichen
DECL KrlMsg_T Error_Msg
DECL KrlMsgPar_T Par[3]
DECL KrlMsgOpt_T Opt
INT nHandle
;Fehlernummer an SPS uebertragen
OUT_FNR_AN_SPS = FNr
Error_Msg = { Modul[] "userfault", Nr 1, Msg_txt[] "Fehler-Nr. %1: %2" }
;%1 = FNr
Par[1] = {par_type #value, par_int 0}
Par[1] .par_int = FNr
;%2 = Meldungstext
Par[2] = {par_type #value, par_txt[] " "}
Par[2] .par_txt[] = Meldungstext[]
Opt = { VL_Stop TRUE, Clear_P_Reset TRUE, Log_To_DB FALSE }
nHandle = Set_KrlMsg (#quit, Error_Msg, Par[], Opt)
;Halt bei Taktende
IF IN_HALT_TAKTENDE THEN
;FOLD OUT 144 'O_Halt_bei_Taktende' State=TRUE ;%{PE}%R 8.2.24,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:144, 3:O_Halt_bei_Taktende, 5:TRUE, 6:
$OUT[144]=TRUE
;ENDFOLD
HALT
;FOLD OUT 144 'O_Halt_bei_Taktende' State=FALSE ;%{PE}%R 8.2.24,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:144, 3:O_Halt_bei_Taktende, 5:FALSE, 6:
$OUT[144]=FALSE
;ENDFOLD
ENDIF
;Fehler in SPS zuruecksetzen
OUT_FNR_AN_SPS = 0
END
Soweit funktioniert das auch, allerdings kann es vorkommen, dass ich z.B. 20 Meldungen habe und die probleme sich selbst behoben haben, wie Bereichsfreigabe.
Wie kann ich die Meldung nach beheben des Problems automatisch löschen? Gibt es da ne Möglichkeit?
Gruß Tealmasta