IF #OBSTART.OB_86 THEN
(* ================= Ablauf im OB86 Baugruppenträgerausfall ================= *)
IF #CPU_DIAG_PN.OB_86.AREA = #GEO.AREA AND
#CPU_DIAG_PN.OB_86.SUBNET = #GEO.IOSYSTEM AND
#CPU_DIAG_PN.OB_86.RACK = #GEO.STATION THEN // !! HW_IO Rack !!
(* ------------------------------------------------------------------------------------------------------------ *)
#DUSY := BYTE_TO_WORD(#CPU_DIAG_PN.OB_86.TINFO.Fault_ID);
(* ------------------------------------------------------------------------------------------------------------ *)
(*
IF #CPU_DIAG_PN.OB_86.TINFO.Event_Class = B#16#38 THEN
(* gehendes Ereignis - Station kehrt wieder *)
IF #CPU_DIAG_PN.OB_86.TINFO.Fault_ID = B#16#CB OR // PROFINET IO-Stationsausfall/Stationswiederkehr
#CPU_DIAG_PN.OB_86.TINFO.Fault_ID = B#16#CC OR // PROFINET IO-Stationswiederkehr mit Störung oder Wartung
#CPU_DIAG_PN.OB_86.TINFO.Fault_ID = B#16#CD OR // PROFINET IO-Stationswiederkehr, Sollausbau weicht von Istausbau ab
#CPU_DIAG_PN.OB_86.TINFO.Fault_ID = B#16#CE THEN // PROFINET IO-Stationswiederkehr, Fehler bei der Baugruppenparametrierung
#RQ.DIAG := TRUE; // Diagnose anfordern
#RQ.PARA := TRUE; // Parametrierung anfordern
ELSE
#RQ.CHRS := TRUE; // Baugruppen-Diagnosealarme löschen
#RACKF.BG := FALSE; // Baugruppenfehler = false
#EN_OUTP := TRUE; // Ausgänge freischalten
END_IF;
ELSE
(* Kommendes Ereignis - Station geht vom Netz *)
#RQ.CHRS := TRUE; // Baugruppen-Diagnosealarme löschen
#RACKF.BG := FALSE; // Baugruppenfehler = false
END_IF;
*)
CASE BYTE_TO_INT(#CPU_DIAG_PN.OB_86.TINFO.Fault_ID) OF
(* Analyze of Param = Event ID *)
INT#16#CA, INT#16#CB, INT#16#C4: // PROFINET IO-Systemausfall / PROFINET IO-Stationsausfall/Stationswiederkehr / Ausfall einer DP-Station
(* Event_Class = B#16#39/38, FAULT_ID = CB: PROFINET IO-Stationsausfall/Stationswiederkehr *)
#RACKF.ZS := #CPU_DIAG_PN.OB_86.TINFO.Event_Class = B#16#39; (* PROFINET IO-Station ausgefallen *)
#RACKF.FBG := FALSE; (* Falsche Bauruppe 2.8.2001 SCH *)
IF #RACKF.ZS THEN
#x_QRACKF := TRUE; // 12.07.2018
#x_WR_REQ_INTERNAL := FALSE; // 12.07.2018
#x_RD_REQ_INTERNAL := FAlse; // 12.07.2018
#RACKF.ZSMEL := TRUE; (* Baugruppe gezogen melden *)
#RACKF.T_BG_ZS := 18; (* Baugruppe Begleitwert *)
ELSE
#RACKF.ACC := FALSE; (* Zugriffsfehler *)
#RACKF.ZSMEL := FALSE; (* Baugruppe gezogen melden *)
#RACKF.T_BG_ZS := 0; (* Baugruppe Begleitwert *)
END_IF;
IF #CPU_DIAG_PN.OB_86.TINFO.Event_Class = B#16#38 THEN
(* gehendes Event *)
(* HW_IO of RACK
#GEO.AREA := WORD_TO_UINT(#RACK_INF.Ber_bgbr);
#GEO.HWTYPE := WORD_TO_UINT(#RACK_INF.RESERVE);
#GEO.STATION := BYTE_TO_UINT(#RACK_INF.RACK_NO);
#GEO.IOSYSTEM := BYTE_TO_UINT(#RACK_INF.SUBN_ID);
#GEO.SLOT := BYTE_TO_UINT(#RACK_INF.SLOT_NO);
#GEO.SUBSLOT := BYTE_TO_UINT(#RACK_INF.SUBSL_NO);
#i_RetVal := GEO2LOG(GEOADDR := #GEO, LADDR => #HWIO_ADDR);*)
(* Outgoing, no more diagnostic errors are pending *)
#i_RETURN_VALUE := GET_DIAG(
MODE := UINT#1, // Diagnosis of the HW Component witch describtion was given by HWIO
LADDR := #RACK_ID, // HW-IO Address of the Module
CNT_DIAG => #CNT_DIAG, // Placeholder
DIAG := #statGetDiag // Target Area for SUBMODULE Data
);
IF #i_RETURN_VALUE = INT#0 THEN
(* Check the ModuleState *)
IF #statGetDiag.ComponentStateDetail = DW#16#0000_8000 THEN
(* No Diagnostic Interrupt pending *)
#x_QDIAG := FALSE;
(* ModuleState completely OK - clear the ErrorStorage *)
;
// FOR #i_RetVal := 0 TO #c_EADD_MAX BY 1 DO
// #DIAG_ALARM[#i_RetVal] := W#16#0000;
// END_FOR;
END_IF;
END_IF;
END_IF;
INT#16#CC, INT#16#C5: // B#16#CC, B#16#C5:
(* Event_Class = B#16#38, FAULT_ID = CC: PROFINET IO-Stationswiederkehr mit Störung oder Wartung *)
IF #CPU_DIAG_PN.OB_86.TINFO.Event_Class = B#16#38 THEN
(* Wiederkehr *)
(* ======================================================================================== *)
(* **************************** RDREC 800A ON SLOT **************************************** *)
(* ======================================================================================== *)
#x_QDIAG := TRUE;
#RQ.OB1PARA := TRUE;
#RQ.DIAG := TRUE; (* Neu 04.04.2019 *)
END_IF;
#RACKF.T_BG_ZS := 35; (* Falscher BG-Typ gesteckt *)
INT#16#CD, INT#16#C8: // B#16#CD, B#16#C8:
(* Event_Class = B#16#38, FAULT_ID = CD: PROFINET IO-Stationswiederkehr, Sollausbau weicht von Istausbau ab *)
#RACKF.T_BG_ZS := 36; (* Gestörte BG gesteckt *)
#RACKF.FBG := TRUE;
#RACKF.ZSMEL := FALSE;
INT#16#CE, INT#16#C7: // B#16#CE, B#16#C7:
(* Event_Class = B#16#38, FAULT_ID = CE: PROFINET IO-Stationswiederkehr, Fehler bei der Baugruppenparametrierung *)
#RACKF.T_BG_ZS := 37; (* BG gesteckt Parametrierfehler *)
#RACKF.FBG := TRUE;
#RACKF.ZSMEL := FALSE;
#RQ.DIAG := TRUE; (* Neu 04.04.2019 *)
INT#16#CF, INT#16#C9: // B#16#CF, B#16#C9:
(* Event_Class = B#16#32/33, FAULT_ID = CF: Aktivierung/Deaktivierung eines PROFINET IO-DEvices mit der Anweisung "D_ACT_DP" *)
#RACKF.ACC := #CPU_DIAG_PN.OB_86.TINFO.Event_Class = B#16#33; (* B#16#33: Deaktivierung einer Station mit der Anweisung "D_ACT_DP" *)
IF #RACKF.ACC THEN
#RACKF.ZS := FALSE; (* Baugruppe gezogen *)
#RACKF.ZSMEL := FALSE; (* Baugruppe gezogen melden *)
#RACKF.T_BG_ZS := 39; (* Baugruppe Begleitwert *)
ELSE
#RACKF.ZS := FALSE; (* Baugruppe gezogen *)
#RACKF.ZSMEL := FALSE; (* Baugruppe gezogen melden *)
#RACKF.T_BG_ZS := W#16#0; (* Baugruppe Begleitwert *)
#RQ.DIAG := TRUE; (* Neu 04.04.2019 *)
END_IF;
ELSE:
#RACKF.T_BG_ZS := W#16#99; (* Unbekannte Event-ID *)
END_CASE;
REGION Message OB86
(* =========================================================================================================== *)
(* ================= Message Generation with Programm Alarm for an OB83 Pull-/Plug Event ===================== *)
(* =========================================================================================================== *)
#RACK_INF.RESERVE[0] := #RACKF.T_BG_ZS; // Sichtbarkeit Kasten im HMI
END_REGION
END_IF;
END_IF;