Folge Störungen im Programm unterdrücken

2007-01-24
2007-01-24
  • Juergen Maier - 2007-01-24

    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;
    

    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...

     
  • J Schohaus - 2007-01-24

    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.