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