Elaganter wäre es wenn eine Funktion hierfür geschieben wird.
z.B.
VAR_GLOBALError_Aktive:BOOL;Error_Quit:BOOL;END_VARFUNCTIONErr_Handler:BOOLVAR_INPUTHmi_Error:BOOL;Error_Flag:BOOL;END_VAR(* Error_Flag Störung ist vorhanden ; Hmi_Error Störungsmerker für die Anzeige *)IF(Hmi_ErrorORError_Flag)ANDNOTError_QuitANDNOTError_AktiveTHENError_Aktive:=TRUE;Err_Handler:=TRUE;ELSEErr_Handler:=FALSE;END_IFIFError_QuitTHENError_Aktive:=FALSE;END_IFPROGRAMPLC_PRGVARHmi_Error_1:BOOL;FehlerQuelle_1:BOOL;Hmi_Error_2:BOOL;FehlerQuelle_2:BOOL;END_VARHmi_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);
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.