Hallo,
ich habe einen Baustein in dem meine Störmeldungen definiert sind.
Meine "Störmerker" werden über SR Glieder gesetzt.
Ich möchte nun, dass wenn ein "Störmerker" gesetzt wurde, die anderen nicht mehr gesetzt werden (keine folge Störungen bei einer Abschaltung).
Gibt es da eine gute Lösung !
Ein möglicher Ansatz wäre folgender Programmausschnitt !
Doch ich denke man kann das noch elegander Lösen.
VAR_GLOBAL
SM20_0 AT %MX20.0: BOOL; (*Störung 1*) SM20_1 AT %MX20.1: BOOL; (*Störung 2*) SM20_2 AT %MX20.2: BOOL; (*Störung 3*)
END_VAR
PROGRAM P1_STOERUNGEN
VAR
sm200: SR; sm201: SR; sm202: SR; bool1: BOOL := FALSE; bool2: BOOL := FALSE; bool3: BOOL := FALSE; stoerung: BOOL := FALSE; reset : BOOL := FALSE;
(Störung 1)
sm200(SET1:= NOT stoerung AND bool1, RESET:= reset );
SM20_0:= sm200.Q1;
stoerung:= sm200.Q1;
(Störung 2)
sm201(SET1:= NOT stoerung AND bool2, RESET:= reset );
SM20_1:= sm201.Q1;
stoerung:= sm201.Q1;
(Störung 3)
sm202(SET1:= NOT stoerung AND bool3, RESET:= reset );
SM20_2:= sm202.Q1;
stoerung:= sm202.Q1;
usw...
Elaganter wäre es wenn eine Funktion hierfür geschieben wird.
z.B.
VAR_GLOBAL Error_Aktive : BOOL ; Error_Quit : BOOL ; END_VAR FUNCTION Err_Handler : BOOL VAR_INPUT Hmi_Error : BOOL ; Error_Flag : BOOL ; END_VAR (* Error_Flag Störung ist vorhanden ; Hmi_Error Störungsmerker für die Anzeige *) IF ( Hmi_Error OR Error_Flag ) AND NOT Error_Quit AND NOT Error_Aktive THEN Error_Aktive := TRUE ; Err_Handler := TRUE ; ELSE Err_Handler := FALSE ; END_IF IF Error_Quit THEN Error_Aktive := FALSE ; END_IF PROGRAM PLC_PRG VAR Hmi_Error_1: BOOL; FehlerQuelle_1: BOOL; Hmi_Error_2: BOOL; FehlerQuelle_2: BOOL; END_VAR Hmi_Error_1 := Err_Handler( Hmi_Error := Hmi_Error_1 , Error_Flag := FehlerQuelle_1 ); Hmi_Error_2 := Err_Handler( Hmi_Error := Hmi_Error_2 , Error_Flag := FehlerQuelle_2 );
Log in to post a comment.
Hallo,
ich habe einen Baustein in dem meine Störmeldungen definiert sind.
Meine "Störmerker" werden über SR Glieder gesetzt.
Ich möchte nun, dass wenn ein "Störmerker" gesetzt wurde, die anderen nicht mehr gesetzt werden (keine folge Störungen bei einer Abschaltung).
Gibt es da eine gute Lösung !
Ein möglicher Ansatz wäre folgender Programmausschnitt !
Doch ich denke man kann das noch elegander Lösen.
VAR_GLOBAL
END_VAR
PROGRAM P1_STOERUNGEN
VAR
END_VAR
(Störung 1)
sm200(SET1:= NOT stoerung AND bool1, RESET:= reset );
SM20_0:= sm200.Q1;
stoerung:= sm200.Q1;
(Störung 2)
sm201(SET1:= NOT stoerung AND bool2, RESET:= reset );
SM20_1:= sm201.Q1;
stoerung:= sm201.Q1;
(Störung 3)
sm202(SET1:= NOT stoerung AND bool3, RESET:= reset );
SM20_2:= sm202.Q1;
stoerung:= sm202.Q1;
usw...
Elaganter wäre es wenn eine Funktion hierfür geschieben wird.
z.B.