TIA TIA V16 und WinCC V7.5 Verwendung ProgramAlarm & Sammelanzeige. Meiner Erfahrungen

Beiträge
3.053
Reaktionspunkte
1.044
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA V16 und WinCC V7.5 Verwendung ProgramAlarm & Sammelanzeige. Meiner Erfahrungen

Hallo Forum,

Für derjenige die die es gebrauchen kann. Meine Erfahrungen.
Zeitrichtiges Meldeverfahren WinCC7 .5 zusammen mit S7-1500 V16 und Verwendung Sammelanzeige.
Es funktioniert einwandfrei, aber, Leider steck da noch einige Hand zu Fuss Arbeit drin.

Bei dem ProgramAlarm kommst du nich daran vorbei die Meldeklassen im WinCC händisch zu überarbeiten.
Es gibt kein übernahme der Meldeklassen, priorität, und quittierung aus TIA. Auch nicht die selbst angelegte im Gemeinsame Daten.
Es stehen nur die meldeklassen von WinCC selbst zur Verfügung.

Die Meldetext im Grundeinstelllung erschein im WinCC Meldeleiste im Zeile Herkunft.
Diese ist natürlich viel zu schmall und reicht nur aus für KKS (TAG)-Nummer oder CPU Name.
Der echte WinCC Meldetext muss in Zusatztextfeld 2 gemacht werden!!

Sammelanzeige muss selbst im TIA programmiert werden.
Sprich, den EventState
Wenn einmal programmamiert funktioniert die Einwandfrei.

Anbei den Code die ich mit hilfe diese Forum gemacht habe.

Code:
 FUNCTION_BLOCK "Group_Display"
TITLE = Group Display WinCC 7.5
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : 'v.Berkel'
FAMILY : Störmeldungen
VERSION : 16.0
//Group Display WinCC 7.5
   VAR_INPUT 
      "Messstelle gesperrt X" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Status-Meldung Status OS" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Status-Meldung Status AS" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Bedienmeldung OM" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Bedienanforderung OR" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Nicht belegt Status" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Prozessmeldung PM" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Wartungsanforerung MR" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "AS-Leittechnikmeldung Fehler" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "AS-Leittechnikmeldung Störung" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Toleranz TL" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Toleranz TH" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Warnung WL" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Warnung WH" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Alarm AL" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Alarm AH" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      ACK { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
   END_VAR

   VAR_OUTPUT 
      EventState : "EventState";
      Visible : Bool;
   END_VAR

   VAR 
      "R_TRIG_Messstelle gesperrt X" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Status-Meldung Status OS" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Status-Meldung Status AS" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Bedienmeldung OM" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Bedienanforderung OR" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Nicht belegt Status" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Prozessmeldung PM" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Wartungsanforerung MR" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_AS-Leittechnikmeldung Fehler" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_AS-Leittechnikmeldung Störung" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Toleranz TL" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Toleranz TH" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Warnung WL" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Warnung WH" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Alarm AL" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      "R_TRIG_Alarm AH" {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : R_TRIG;
      EventState_Cache { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : "EventState";
      Visible_Collect { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DWord;
   END_VAR


BEGIN
    REGION Messstelle gesperrt X
        #EventState_Cache."Messstelle gesperrt X" := #"Messstelle gesperrt X" AND #EventState_Cache."Messstelle gesperrt Quittiert";
        #"R_TRIG_Messstelle gesperrt X"(CLK := #EventState_Cache."Messstelle gesperrt X");
        IF #ACK THEN
            #EventState_Cache."Messstelle gesperrt Quittiert" := true;
        ELSIF #"R_TRIG_Messstelle gesperrt X".Q THEN
            #EventState_Cache."Messstelle gesperrt Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Status-Meldung Status OS
        #EventState_Cache."Status-Meldung Status OS" := #"Status-Meldung Status OS" AND #EventState_Cache."Status-Meldung OS Quittiert";
        #"R_TRIG_Status-Meldung Status OS"(CLK := #EventState_Cache."Status-Meldung Status OS");
        IF #ACK THEN
            #EventState_Cache."Status-Meldung OS Quittiert" := true;
        ELSIF #"R_TRIG_Status-Meldung Status OS".Q THEN
            #EventState_Cache."Status-Meldung OS Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Status-Meldung Status AS
        #EventState_Cache."Status-Meldung Status AS" := #"Status-Meldung Status AS" AND #EventState_Cache."Status-Meldung AS Quittiert";
        #"R_TRIG_Status-Meldung Status AS"(CLK := #EventState_Cache."Status-Meldung Status AS");
        IF #ACK THEN
            #EventState_Cache."Status-Meldung AS Quittiert" := true;
        ELSIF #"R_TRIG_Status-Meldung Status AS".Q THEN
            #EventState_Cache."Status-Meldung AS Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Bedienmeldung OM
        #EventState_Cache."Bedienmeldung OM" := #"Bedienmeldung OM" AND #EventState_Cache."Bedienmeldung OM Quittiert";
        #"R_TRIG_Bedienmeldung OM"(CLK := #EventState_Cache."Bedienmeldung OM");
        IF #ACK THEN
            #EventState_Cache."Bedienmeldung OM Quittiert" := true;
        ELSIF #"R_TRIG_Bedienmeldung OM".Q THEN
            #EventState_Cache."Bedienmeldung OM Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Bedienanforderung OR
        #EventState_Cache."Bedienanforderung OR" := #"Bedienanforderung OR" AND #EventState_Cache."Bedienanforderung OR Quittiert";
        #"R_TRIG_Bedienanforderung OR"(CLK := #EventState_Cache."Bedienanforderung OR");
        IF #ACK THEN
            #EventState_Cache."Bedienanforderung OR Quittiert" := true;
        ELSIF #"R_TRIG_Bedienanforderung OR".Q THEN
            #EventState_Cache."Bedienanforderung OR Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Nicht belegt Status
        #EventState_Cache."Nicht belegt Status"    := false;
        #EventState_Cache."Nicht belegt Quittiert" := true;
    END_REGION
    
    REGION Prozessmeldung PM
        #EventState_Cache."Prozessmeldung PM" := #"Prozessmeldung PM" AND #EventState_Cache."Prozessmeldung PM Quittiert";
        #"R_TRIG_Prozessmeldung PM"(CLK := #EventState_Cache."Prozessmeldung PM");
        IF #ACK THEN
            #EventState_Cache."Prozessmeldung PM Quittiert" := true;
        ELSIF #"R_TRIG_Prozessmeldung PM".Q THEN
            #EventState_Cache."Prozessmeldung PM Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Wartungsanforerung MR
        #EventState_Cache."Wartungsanforerung MR" := #"Wartungsanforerung MR" AND #EventState_Cache."Wartungsanforerung MR Quittiert";
        #"R_TRIG_Wartungsanforerung MR"(CLK := #EventState_Cache."Wartungsanforerung MR");
        IF #ACK THEN
            #EventState_Cache."Wartungsanforerung MR Quittiert" := true;
        ELSIF #"R_TRIG_Wartungsanforerung MR".Q THEN
            #EventState_Cache."Wartungsanforerung MR Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION AS-Leittechnikmeldung Fehler
        #EventState_Cache."AS-Leittechnikmeldung Fehler" := #"AS-Leittechnikmeldung Fehler" AND #EventState_Cache."AS-Leittechnikmeldung Fehler Quittiert";
        #"R_TRIG_AS-Leittechnikmeldung Fehler"(CLK := #EventState_Cache."AS-Leittechnikmeldung Fehler");
        IF #ACK THEN
            #EventState_Cache."AS-Leittechnikmeldung Fehler Quittiert" := true;
        ELSIF #"R_TRIG_AS-Leittechnikmeldung Fehler".Q THEN
            #EventState_Cache."AS-Leittechnikmeldung Fehler Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION AS-Leittechnikmeldung Störung
        #EventState_Cache."AS-Leittechnikmeldung Störung" := #"AS-Leittechnikmeldung Störung" AND #EventState_Cache."AS-Leittechnikmeldung Störung Quittiert";
        #"R_TRIG_AS-Leittechnikmeldung Störung"(CLK := #EventState_Cache."AS-Leittechnikmeldung Störung");
        IF #ACK THEN
            #EventState_Cache."AS-Leittechnikmeldung Störung Quittiert" := true;
        ELSIF #"R_TRIG_AS-Leittechnikmeldung Störung".Q THEN
            #EventState_Cache."AS-Leittechnikmeldung Störung Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Toleranz TL
        #EventState_Cache."Toleranz TL" := #"Toleranz TL" AND #EventState_Cache."Toleranz TL Quittiert";
        #"R_TRIG_Toleranz TL"(CLK := #EventState_Cache."Toleranz TL");
        IF #ACK THEN
            #EventState_Cache."Toleranz TL Quittiert" := true;
        ELSIF #"R_TRIG_Toleranz TL".Q THEN
            #EventState_Cache."Toleranz TL Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Toleranz TH
        #EventState_Cache."Toleranz TH" := #"Toleranz TH" AND #EventState_Cache."Toleranz TH Quittiert";
        #"R_TRIG_Toleranz TH"(CLK := #EventState_Cache."Toleranz TH");
        IF #ACK THEN
            #EventState_Cache."Toleranz TH Quittiert" := true;
        ELSIF #"R_TRIG_Toleranz TH".Q THEN
            #EventState_Cache."Toleranz TH Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Warnung WL
        #EventState_Cache."Warnung WL" := #"Warnung WL" AND #EventState_Cache."Warnung WL Quittiert";
        #"R_TRIG_Warnung WL"(CLK := #EventState_Cache."Warnung WL");
        IF #ACK THEN
            #EventState_Cache."Warnung WL Quittiert" := true;
        ELSIF #"R_TRIG_Warnung WL".Q THEN
            #EventState_Cache."Warnung WL Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Warnung WH
        #EventState_Cache."Warnung WH" := #"Warnung WH" AND #EventState_Cache."Warnung WH Quittiert";
        #"R_TRIG_Warnung WH"(CLK := #EventState_Cache."Warnung WH");
        IF #ACK THEN
            #EventState_Cache."Warnung WH Quittiert" := true;
        ELSIF #"R_TRIG_Warnung WH".Q THEN
            #EventState_Cache."Warnung WH Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Alarm AL
        #EventState_Cache."Alarm AL" := #"Alarm AL" AND #EventState_Cache."Alarm AL Quittiert";
        #"R_TRIG_Alarm AL"(CLK := #EventState_Cache."Alarm AL");
        IF #ACK THEN
            #EventState_Cache."Alarm AL Quittiert" := true;
        ELSIF #"R_TRIG_Alarm AL".Q THEN
            #EventState_Cache."Alarm AL Quittiert" := false;
        END_IF;
    END_REGION
    
    REGION Alarm AH
        #EventState_Cache."Alarm AH" := #"Alarm AH" AND #EventState_Cache."Alarm AH Quittiert";
        #"R_TRIG_Alarm AH"(CLK:=#EventState_Cache."Alarm AH");
        IF #ACK THEN
            #EventState_Cache."Alarm AH Quittiert" := true;
        ELSIF #"R_TRIG_Alarm AH".Q THEN
            #EventState_Cache."Alarm AH Quittiert" := false;
     END_IF;
    END_REGION
    
    #EventState := #EventState_Cache;
    
    REGION Group Display Visible
        #Visible_Collect.%X0 := #EventState."AS-Leittechnikmeldung Fehler";
        #Visible_Collect.%X1 := #EventState."AS-Leittechnikmeldung Störung";
        #Visible_Collect.%X2 := #EventState."Toleranz TL";
        #Visible_Collect.%X3 := #EventState."Toleranz TH";
        #Visible_Collect.%X4 := #EventState."Warnung WL";
        #Visible_Collect.%X5 := #EventState."Warnung WH";
        #Visible_Collect.%X6 := #EventState."Alarm AL";
        #Visible_Collect.%X7 := #EventState."Alarm AH";
        #Visible_Collect.%X8 := #EventState."Messstelle gesperrt X";
        #Visible_Collect.%X9 := #EventState."Status-Meldung Status OS";
        #Visible_Collect.%X10 := #EventState."Status-Meldung Status AS";
        #Visible_Collect.%X11 := #EventState."Bedienmeldung OM";
        #Visible_Collect.%X12 := #EventState."Bedienanforderung OR";
        #Visible_Collect.%X13 := #EventState."Nicht belegt Status";
        #Visible_Collect.%X14 := #EventState."Prozessmeldung PM";
        #Visible_Collect.%X15 := #EventState."Wartungsanforerung MR";
        #Visible_Collect.%X16 := #EventState."AS-Leittechnikmeldung Fehler Quittiert";
        #Visible_Collect.%X17 := #EventState."AS-Leittechnikmeldung Störung Quittiert";
        #Visible_Collect.%X18 := #EventState."Toleranz TL Quittiert";
        #Visible_Collect.%X19 := #EventState."Toleranz TH Quittiert";
        #Visible_Collect.%X20 := #EventState."Warnung WL Quittiert";
        #Visible_Collect.%X21 := #EventState."Warnung WH Quittiert";
        #Visible_Collect.%X22 := #EventState."Alarm AL Quittiert";
        #Visible_Collect.%X23 := #EventState."Alarm AH Quittiert";
        #Visible_Collect.%X24 := #EventState."Messstelle gesperrt Quittiert";
        #Visible_Collect.%X25 := #EventState."Status-Meldung OS Quittiert";
        #Visible_Collect.%X26 := #EventState."Status-Meldung AS Quittiert";
        #Visible_Collect.%X27 := #EventState."Bedienmeldung OM Quittiert";
        #Visible_Collect.%X28 := #EventState."Bedienanforderung OR Quittiert";
        #Visible_Collect.%X29 := #EventState."Nicht belegt Quittiert";
        #Visible_Collect.%X30 := #EventState."Prozessmeldung PM Quittiert";
        #Visible_Collect.%X31 := #EventState."Wartungsanforerung MR Quittiert";
        #Visible := NOT ( #Visible_Collect = 16#FFFF0000); // 16#65535;
    END_REGION
END_FUNCTION_BLOCK

Grüß Bram
 
Übrigens sieht es bei WinCC Professional nicht viel besser aus.

Auf jeden Fall mache ich üblicherweise bei meinen Anlagen in WinCC eine Unterscheidung zwischen Störungen, Alarme und Warnungen. Das lässt sich bei ProgramAlarm aber überhaupt nicht konfigurieren, sondern ich habe dort nur als Einstellung der Meldeklasse mit ack / ohne ack, Priorität oder ob "Nur Information". Da fehlt dann ja doch einiges an Einstellungen die bisher bei Alarm8 / AlarmS bei Step7 möglich war. Lässt sich das irgendwie nachbilden, oder ist das eben jetzt von der Funktionalität eingeschränkt? Ich kann im WinCC Prof. auch die Meldungen überhaupt nicht sehen um diese irgendwie händisch in eine andere Klasse verschieben zu können.

Die hohe Zykluszeitbelastung von ProgramAlarm lässt sich zumindest laut ersten Tests umgehen, indem man den ProgramAlarm nur bei Änderung am Signal aufruft. Da wäre interessant, ob und welche Sonderbehandlung dann bei SPS Neustart notwendig wird. Einmal alle ProgramAlarme aufrufen? Wie sieht es dann mit der Zykluszeit aus wenn auf mal alle in einem Zyklus aufgerufen werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich ruf sie jede Zyklus auf. Da kommen bei mir 10ms extra zusammen. Im TIA Portal, baumstruktur Reiter Gemeinsame Daten kannst du Meldeklassen hinzufügen. Die kannst du dann wieder im Programm Alarm auswählen. Im Übersicht der Meldungen im CPU (Briefumschlagsymbol)siehst du sie alle und kannst sie auch bearbeiten.
 
Die Systemmeldungen export ist auch für den Arsch. Die onfo ist zwsr dann im wincc7.5, aber steht irgendwo. So hasst du bei Systemmeldung nur leere zeile. Am beste bearbeitet mann die Reiter im Meldezeilen.
 
ich verwende diese Systemfunktion um die aktiven Meldungen je Meldeklasse zu zählen. Ständig

1643006160096.png
Wenn dann zB die Meldeklasse STÖRUNG Anzahl größer 0 ist, dann Lampe ein

Wichtig bei er Konfiguration ist, dass jede Meldeklasse eine Prioritätsnummer erhält. Denn diese ist zur Auswertung mit Get_Alarm nötig
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ioStart sehr schöne Idee bzw. Lösung für das Ganze.

Ich Stehe nur am Schlauch wie man aus auf die Anzahl der "Störungen" kommt.
Kannst du dies etwas näher erklären?

Ich bis jetzt seither bei Data geschaut ob die ID = 0 ist, wenn nicht dann war eine Störung vorhanden.
Mit der Anzahl würde mir dies besser gefallen.
 
Definitionen:
1643352569879.png
der Index im Gruppenfeld entspricht der Prioritätsnummer einer Meldeklasse und ist somit eindeutig. Die Zahl die nach dieser Auswertung drinnensteht ist die Anzahl an aktiven Meldungen dieser Meldeklasse
Das Meldungsfeld wird als Zwischenspeicher benötigt. Die ID einer Meldung wird als Index verwendet. Die Größe des Feldes muss so gewählt werden, dass alle Meldungen "Platz" haben

Der Baustein Get_Alarm liefert bei DataReady true, wenn eine neue Meldung bereit steht. Die Nutzdaten liegen in der Data-Struktur. Die genauen Infos dazu stehen in der Doku zum Baustein.

#FP_Dataready(CLK:=#DataReady); // Positive Flanke wenn neue Daten bereit stehen

IF #FP_Dataready.Q THEN

//Neue Meldung kopieren
IF #Daten.ID_1 <400 AND #Daten.ProducerID <> 4 THEN // (ProducerID = 4: Meldungen aus der Systemdiagnose werden nicht erfasst)
#Meldungsfeld[#Daten.ID_1 ].Status := #Daten.State;
#Meldungsfeld[#Daten.ID_1 ].Gruppe := #Daten.PRIO; // Meldungsklasse
END_IF;



// Auswertung löschen

FOR #i := 0 TO 16 DO
#Gruppenfeld[#i] := 0;
END_FOR;


// Gruppenfeld: Anzahl der Meldungen je Meldeklasse zählen

FOR #i := 0 TO 400 DO
IF #Meldungsfeld[#i].Status = 1 THEN // 1 = Meldung gekommen
#Gruppenfeld[#Meldungsfeld[#i].Gruppe] := #Gruppenfeld[#Meldungsfeld[#i].Gruppe] + 1;
END_IF;
END_FOR;


END_IF;
 
Zurück
Oben