TIA Baugruppenausfall ET200SP

4nD1

Level-2
Beiträge
497
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich soll an einer Anlage mit ET200SP überwachen wenn eine Baugruppe gestört ist. Sprich wenn eine Lokale Baugruppe gestört ist will der Kunde eine Meldung. Nun dachte ich, ich mach das mit Device States aber dort kommt immer die Meldung(Siehe Screenshot). Was mach ich denn falsch?
TIA V17 nütze ich

Die Diagnose der einzelnen Baugruppen ist aktiviert
Die ET200Sp dient dem Kunden als "Datensammler" diese gibt es einige Male in der Halle, sie sind unter einander nicht vernetzt sondern melden alle an seine Zentralle Leittechnik bzw an sein Energiemonitoring-System.
 

Anhänge

  • Fehler DeviceStats.PNG
    Fehler DeviceStats.PNG
    14,2 KB · Aufrufe: 63
Da muss
Ich soll an einer Anlage mit ET200SP überwachen wenn eine Baugruppe gestört ist. Sprich wenn eine Lokale Baugruppe gestört ist will der Kunde eine Meldung. Nun dachte ich, ich mach das mit Device States aber dort kommt immer die Meldung(Siehe Screenshot). Was mach ich denn falsch?
TIA V17 nütze ich

Die Diagnose der einzelnen Baugruppen ist aktiviert
Die ET200Sp dient dem Kunden als "Datensammler" diese gibt es einige Male in der Halle, sie sind unter einander nicht vernetzt sondern melden alle an seine Zentralle Leittechnik bzw an sein Energiemonitoring-System.
Da musst du das symbol des typs hwiosystem anhängen. Das die symbole findest du in der variablenliste. Du hast jetzt eine einzelne karte der Baugruppe adressiert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da muss

Da musst du das symbol des typs hwiosystem anhängen. Das die symbole findest du in der variablenliste. Du hast jetzt eine einzelne karte der Baugruppe adressiert
Die Variable hab ich nur wenn ich ein Profinet-System hab. Ich will ja Lokal schauen ob eine Baugruppe gestört ist, gibt es da einen anderen Baustein oder wie mache ich das, dann am besten?

Systemkonstante.PNG
 
Mir würde da der LED Baustein ( Unter dem Reiter Diagnose) einfallen. Hier kannst du die Status LEDs auslesen. Damit hättest du über diesen Umweg dein Status der Baugruppe.
ODER
passenden OB hinzufügen, der im Fehlerfall aufgerufen wird?
 
Die Variable hab ich nur wenn ich ein Profinet-System hab. Ich will ja Lokal schauen ob eine Baugruppe gestört ist, gibt es da einen anderen Baustein oder wie mache ich das, dann am besten?
Du meinst, Du hast eine ET200SP-CPU also z.B. ne S7-1510SP mit lokalen Baugruppen und willst pro Baugruppe wissen, ob diese gestört ist? Oder willst Du generell nur wissen, ob mindestens irgendeine zentrale Baugruppe gestört ist? Für die Sammelmeldung kannst die LED der CPU auslesen.

Einzelne zentrale Module weiss ich aus dem Kopf grad auch keine einfache allgemeine Lösung, "ModuleStates" geht m.M. auch nur für dezentrale Peripherie.

PS: mit "GET_DIAG" kannst Du die Diagnose von zentralen einzelnen Baugruppen abfragen. Siehe Hilfe, Handbuch, Google.
 
Zuletzt bearbeitet:
In dem Siemens Baustein "UserDiag_PLCCheck" wird der Baustein dafür verwendet.

Anhang anzeigen 74637
gut zu wissen. Wenn ichs mal brauche, probier ichs mal aus. Normalerweise brauche ich keine Einzeldiagnose der Baugruppen. Auf jeden Fall wäre "ModuleStates" aber vermutlich einfacher händelbar als "GET_DIAG"

Grundsätzlich würd ich dem Praktikanten der das "Anwendungsbeispiel" gebastelt hat, aber nicht blind trauen ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich mir mal irgendwann dazu gebastelt. Kommentare zu meinen Variablen könnt Ihr Euch sparen. Ansonsten hat man mit sowas immer das gleiche Problem: Wie testet man das ohne zu viel Zeit?

Code:
REGION Hardwareprüfung
    // Zur Prüfung von Hardware während der Laufzeit steht der Befehl LED bei der ET200SP nur für die CPU
    // zur Verfügung. Hier werden die Run/Stop-, die Error- und die Maintenance-LED abgefragt.
    // Die Bedeutung der Ergebnisse steht im jeweiligen Kommentar der Monitor-Variable.
    // Weitere Informationen liefert in bestimmtem Rahmen das Kommando GET DIAG.
    // CPU
    "Mon".Steuerung."SPS-Hardware".CPU."Run/Stop-LED" := LED(LADDR := "Local~Common", LED := Uint#1);
    "Mon".Steuerung."SPS-Hardware".CPU."Error-LED" := LED(LADDR := "Local~Common", LED := Uint#2);
    "Mon".Steuerung."SPS-Hardware".CPU."Maintenance-LED" := LED(LADDR := "Local~Common", LED := Uint#3);
    "Mon".Steuerung."SPS-Hardware".CPU.Ergebnis := GET_DIAG(MODE := UInt#1,
                                                            LADDR := "Local~Common",
                                                            CNT_DIAG => "Mon".Steuerung."SPS-Hardware".CPU.CNT_DIAG,
                                                            DIAG := "Mon".Steuerung."SPS-Hardware".CPU.Status);
    // Während die Error-LED der CPU auch reagiert, wenn eine Baugruppe am lokalen Bus Probleme hat, bezieht sich
    // die folgende Auswertung nur auf die CPU-Einheit selbst:
    IF "Mon".Steuerung."SPS-Hardware".CPU.Ergebnis = Int#0
    THEN
        IF
            "Mon".Steuerung."SPS-Hardware".CPU.Status.OwnState = UInt#2
        THEN
            "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := TRUE;
            "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := FALSE;
        ELSIF "Mon".Steuerung."SPS-Hardware".CPU.Status.OwnState <> UInt#0
            & "Mon".Steuerung."SPS-Hardware".CPU.Ergebnis = Int#0
        THEN
            "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := FALSE;
            "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := TRUE;
        ELSE
            "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := FALSE;
            "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := FALSE;
        END_IF;
    ELSE
        "Mon".Steuerung."SPS-Hardware".CPU."Fehlfunktion GET DIAG" := TRUE;
        "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := FALSE;
        "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := FALSE;
    END_IF;
    
    
    // Bei den E/A-Karten werden hier offenbar nur die Fehler gemeldet, die auch in der Hardware-Konfiguration
    // im Unterpunkt Diagnose aktiviert wurden:
    "Mon".Steuerung."SPS-Hardware"."AI 1".Ergebnis := GET_DIAG(MODE := UInt#1,
                                                               LADDR := "Local~AI_8xU_I_RTD_TC_ST",
                                                               CNT_DIAG => "Mon".Steuerung."SPS-Hardware"."AI 1".CNT_DIAG,
                                                               DIAG := "Mon".Steuerung."SPS-Hardware"."AI 1".Status);
    "Mon".Steuerung."SPS-Hardware"."AI 1".Hardwarefehler :=
    "Mon".Steuerung."SPS-Hardware"."AI 1".Status.OwnState <> Uint#0
    & "Mon".Steuerung."SPS-Hardware"."AI 1".Ergebnis = Int#0;
    
    "Mon".Steuerung."SPS-Hardware"."DI 1".Ergebnis := GET_DIAG(MODE := UInt#1,
                                                               LADDR := "Local~DI_32x24VDC_HF",
                                                               CNT_DIAG => "Mon".Steuerung."SPS-Hardware"."DI 1".CNT_DIAG,
                                                               DIAG := "Mon".Steuerung."SPS-Hardware"."DI 1".Status);
    "Mon".Steuerung."SPS-Hardware"."DI 1".Hardwarefehler :=
    "Mon".Steuerung."SPS-Hardware"."DI 1".Status.OwnState <> Uint#0
    & "Mon".Steuerung."SPS-Hardware"."DI 1".Ergebnis = Int#0;
    
    
    "Mon".Steuerung."SPS-Hardware"."DO 1".Ergebnis := GET_DIAG(MODE := UInt#1,
                                                               LADDR := "Local~DQ_32x24VDC_0_5A_HF",
                                                               CNT_DIAG => "Mon".Steuerung."SPS-Hardware"."DO 1".CNT_DIAG,
                                                               DIAG := "Mon".Steuerung."SPS-Hardware"."DO 1".Status);
    "Mon".Steuerung."SPS-Hardware"."DO 1".Hardwarefehler :=
    "Mon".Steuerung."SPS-Hardware"."DO 1".Status.OwnState <> Uint#0
    & "Mon".Steuerung."SPS-Hardware"."DO 1".Ergebnis = Int#0;
    
    
    "Mon".Steuerung."SPS-Hardware"."SPS-Fehler" :=
    ("Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler
    OR "Mon".Steuerung."SPS-Hardware"."AI 1".Hardwarefehler
    OR "Mon".Steuerung."SPS-Hardware"."DI 1".Hardwarefehler
    OR "Mon".Steuerung."SPS-Hardware"."DO 1".Hardwarefehler
        //  2= dauerhaft rot; 4= blinkt rot mit 2 Hz
    OR "Mon".Steuerung."SPS-Hardware".CPU."Error-LED" = Int#2
    OR "Mon".Steuerung."SPS-Hardware".CPU."Error-LED" = Int#4)
    & "Mon".Steuerung.SPS."IOs bereit";
    
END_REGION
 
Ansonsten hat man mit sowas immer das gleiche Problem: Wie testet man das ohne zu viel Zeit?
jo, deswegen vermeide ich komplizierte Einzeldiagnose... Rote LED der CPU sowie Erreichbarkeit der Feldbusteilnehmer. Fertig... Wenn da was kommt, muss eh jemand mit Ahnung an die Anlage.

Messwertfehler kommt automatisch eh bei jeder Messung, wenn die nen Fehler hat, egal warum. DIs sind "drahtbruchsicher"

Sonst kann man sich, wenn man keine Lust auf Baustelle hat, auch Vollzeit im Büro mit allen möglichen Diagnosen beschäftigen.

Für Serienmaschinen ist es vielleicht nochmal etwas anders... Im Auto hast mittlerweile mehr "Diagnosecode" als "Automatisierungscode", ist aber zum Teil gesetzliche Vorgabe.
 
Das habe ich mir mal irgendwann dazu gebastelt. Kommentare zu meinen Variablen könnt Ihr Euch sparen. Ansonsten hat man mit sowas immer das gleiche Problem: Wie testet man das ohne zu viel Zeit?

Code:
REGION Hardwareprüfung
    // Zur Prüfung von Hardware während der Laufzeit steht der Befehl LED bei der ET200SP nur für die CPU
    // zur Verfügung. Hier werden die Run/Stop-, die Error- und die Maintenance-LED abgefragt.
    // Die Bedeutung der Ergebnisse steht im jeweiligen Kommentar der Monitor-Variable.
    // Weitere Informationen liefert in bestimmtem Rahmen das Kommando GET DIAG.
    // CPU
    "Mon".Steuerung."SPS-Hardware".CPU."Run/Stop-LED" := LED(LADDR := "Local~Common", LED := Uint#1);
    "Mon".Steuerung."SPS-Hardware".CPU."Error-LED" := LED(LADDR := "Local~Common", LED := Uint#2);
    "Mon".Steuerung."SPS-Hardware".CPU."Maintenance-LED" := LED(LADDR := "Local~Common", LED := Uint#3);
    "Mon".Steuerung."SPS-Hardware".CPU.Ergebnis := GET_DIAG(MODE := UInt#1,
                                                            LADDR := "Local~Common",
                                                            CNT_DIAG => "Mon".Steuerung."SPS-Hardware".CPU.CNT_DIAG,
                                                            DIAG := "Mon".Steuerung."SPS-Hardware".CPU.Status);
    // Während die Error-LED der CPU auch reagiert, wenn eine Baugruppe am lokalen Bus Probleme hat, bezieht sich
    // die folgende Auswertung nur auf die CPU-Einheit selbst:
    IF "Mon".Steuerung."SPS-Hardware".CPU.Ergebnis = Int#0
    THEN
        IF
            "Mon".Steuerung."SPS-Hardware".CPU.Status.OwnState = UInt#2
        THEN
            "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := TRUE;
            "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := FALSE;
        ELSIF "Mon".Steuerung."SPS-Hardware".CPU.Status.OwnState <> UInt#0
            & "Mon".Steuerung."SPS-Hardware".CPU.Ergebnis = Int#0
        THEN
            "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := FALSE;
            "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := TRUE;
        ELSE
            "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := FALSE;
            "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := FALSE;
        END_IF;
    ELSE
        "Mon".Steuerung."SPS-Hardware".CPU."Fehlfunktion GET DIAG" := TRUE;
        "Mon".Steuerung."SPS-Hardware".CPU.Wartungsanforderung := FALSE;
        "Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler := FALSE;
    END_IF;
   
   
    // Bei den E/A-Karten werden hier offenbar nur die Fehler gemeldet, die auch in der Hardware-Konfiguration
    // im Unterpunkt Diagnose aktiviert wurden:
    "Mon".Steuerung."SPS-Hardware"."AI 1".Ergebnis := GET_DIAG(MODE := UInt#1,
                                                               LADDR := "Local~AI_8xU_I_RTD_TC_ST",
                                                               CNT_DIAG => "Mon".Steuerung."SPS-Hardware"."AI 1".CNT_DIAG,
                                                               DIAG := "Mon".Steuerung."SPS-Hardware"."AI 1".Status);
    "Mon".Steuerung."SPS-Hardware"."AI 1".Hardwarefehler :=
    "Mon".Steuerung."SPS-Hardware"."AI 1".Status.OwnState <> Uint#0
    & "Mon".Steuerung."SPS-Hardware"."AI 1".Ergebnis = Int#0;
   
    "Mon".Steuerung."SPS-Hardware"."DI 1".Ergebnis := GET_DIAG(MODE := UInt#1,
                                                               LADDR := "Local~DI_32x24VDC_HF",
                                                               CNT_DIAG => "Mon".Steuerung."SPS-Hardware"."DI 1".CNT_DIAG,
                                                               DIAG := "Mon".Steuerung."SPS-Hardware"."DI 1".Status);
    "Mon".Steuerung."SPS-Hardware"."DI 1".Hardwarefehler :=
    "Mon".Steuerung."SPS-Hardware"."DI 1".Status.OwnState <> Uint#0
    & "Mon".Steuerung."SPS-Hardware"."DI 1".Ergebnis = Int#0;
   
   
    "Mon".Steuerung."SPS-Hardware"."DO 1".Ergebnis := GET_DIAG(MODE := UInt#1,
                                                               LADDR := "Local~DQ_32x24VDC_0_5A_HF",
                                                               CNT_DIAG => "Mon".Steuerung."SPS-Hardware"."DO 1".CNT_DIAG,
                                                               DIAG := "Mon".Steuerung."SPS-Hardware"."DO 1".Status);
    "Mon".Steuerung."SPS-Hardware"."DO 1".Hardwarefehler :=
    "Mon".Steuerung."SPS-Hardware"."DO 1".Status.OwnState <> Uint#0
    & "Mon".Steuerung."SPS-Hardware"."DO 1".Ergebnis = Int#0;
   
   
    "Mon".Steuerung."SPS-Hardware"."SPS-Fehler" :=
    ("Mon".Steuerung."SPS-Hardware".CPU.Hardwarefehler
    OR "Mon".Steuerung."SPS-Hardware"."AI 1".Hardwarefehler
    OR "Mon".Steuerung."SPS-Hardware"."DI 1".Hardwarefehler
    OR "Mon".Steuerung."SPS-Hardware"."DO 1".Hardwarefehler
        //  2= dauerhaft rot; 4= blinkt rot mit 2 Hz
    OR "Mon".Steuerung."SPS-Hardware".CPU."Error-LED" = Int#2
    OR "Mon".Steuerung."SPS-Hardware".CPU."Error-LED" = Int#4)
    & "Mon".Steuerung.SPS."IOs bereit";
   
END_REGION
Du frägst damit dann jede gesteckte Baugruppe ab ob sie Fehler hat richtig? Nur wo passiert die Fehlerauswertung genau? Mein SCL Kurs ist erst dieses Jahr^^
 
Du meinst, Du hast eine ET200SP-CPU also z.B. ne S7-1510SP mit lokalen Baugruppen und willst pro Baugruppe wissen, ob diese gestört ist? Oder willst Du generell nur wissen, ob mindestens irgendeine zentrale Baugruppe gestört ist? Für die Sammelmeldung kannst die LED der CPU auslesen.

Einzelne zentrale Module weiss ich aus dem Kopf grad auch keine einfache allgemeine Lösung, "ModuleStates" geht m.M. auch nur für dezentrale Peripherie.

PS: mit "GET_DIAG" kannst Du die Diagnose von zentralen einzelnen Baugruppen abfragen. Siehe Hilfe, Handbuch, Google.
Sorry irgendwie hat das mit dem mehrfach zitieren nicht richtig geklappt. Genau ich bzw der Kunde möchte wissen wenn an seinen Datensammler eine Lokale Baugruppe gestört ist. Die CPU ist eine 1510SP
 
Zurück
Oben