//Erzeugen der Vorlage für den Datenbaustein
TYPE UDT1
TITLE = 'UDT:Fehler_OBs'
VERSION : 0.1
NAME : Fehl_OBs
FAMILY : 'Fehler'
AUTHOR : ''
STRUCT
Fehler_OB80: STRUCT //Zeitfehler OB80
OB_Zykl_ueber : BOOL; //Zykluszeitüberschreitung
OB_bearbeitung : BOOL; //Der angeforderte OB ist noch in Bearbeitung
OB_Uhr_Sprg : BOOL; //abgelaufener Uhrzeitalarm durch Uhrzeitsprung
OB_Uhr_Wdr : BOOL; //abgelaufener Uhrzeitalarm bei Wiedereintritt in RUN nach HALT
OB_Puffer : BOOL; //Überlauf des OB-Anforderungspuffers für die aktuelle Prio Klasse
OB_Taktsync : BOOL; //Taktsynchronalarm-Zeitfehler
OB_Alarmlast : BOOL; //Alarmverlust durch zu hohe Alarmlast
OB_Wiedertritt : BOOL; //Wiedereintritt in RUN nach CiR
OB_Tech_Sync : BOOL; //Technologiesynchronalarm-Zeitfehler
OB_Error_Info : WORD; //Fehlerinformation
OB_Err_Ev_Class : BYTE; //Klasse des Ereignisses, das den Fehler ausgelöst hat
OB_Err_EV_Num : BYTE; //Nummer des Ereignisses, das den Fehler ausgelöst hat
OB_Prio : BYTE; //Fehlerinformation
OB_Num : BYTE; //Fehlerinformation
OB_SFC20 : INT;
OB_Date : DATE_AND_TIME; //Datum und Uhrzeit des Ereignisses
Reserve : ARRAY[16..28] OF BYTE; //Reserve
END_STRUCT;
END_STRUCT
END_TYPE
//Erzeugen des Datenbausteins mit Vorlage aus dem UDT
DATA_BLOCK DB11 UDT1
BEGIN
END_DATA_BLOCK
//Erzeugen des Organisationsbausteins OB80
ORGANIZATION_BLOCK OB80
VAR_TEMP
OB80_EV_CLASS : BYTE;
OB80_FLT_ID : BYTE;
OB80_PRIORITY : BYTE;
OB80_OB_NUMMER : BYTE;
OB80_RESERVED_1 : BYTE;
OB80_RESERVED_2 : BYTE;
OB80_ERROR_INFO : WORD;
OB80_ERR_EV_CLASS : BYTE;
OB80_ERR_EV_NUM : BYTE;
OB80_OB_PRIORITY : BYTE;
OB80_OB_NUM : BYTE;
OB80_DATE_TIME : DATE_AND_TIME;
END_VAR
BEGIN
IF OB80_FLT_ID=b#16#01 THEN //Zykluszeitüberschreitung
db11.dbx0.0 := true;
db11.dbw2 := OB80_ERROR_INFO; //Laufzeit des letzten Zyklus
db11.dbb4 := OB80_ERR_EV_CLASS; //Klasse des Ereignisses, das den Alarm ausglöst hat
db11.dbb5 := OB80_ERR_EV_NUM; //Nummer des Ereignisses, das den Alarm ausgelöst hat
db11.dbb6 := OB80_OB_PRIORITY; //Prioritätsklasse des OB, der bearbeitet wurde
db11.dbb7 := OB80_OB_NUM; //Nummer des OB, der bearbeitet wurde, als der Fehler auftrat
ELSIF OB80_FLT_ID=b#16#02 THEN //Der angeforderte OB ist noch in Bearbeitung
db11.dbx0.1 := true;
db11.dbw2 := OB80_ERROR_INFO; //Die zugehörige temporäre Variable des angeforderten OB
db11.dbb4 := OB80_ERR_EV_CLASS; //Klasse des Ereignisses, das den Alarm ausglöst hat
db11.dbb5 := OB80_ERR_EV_NUM; //Nummer des Ereignisses, das den Alarm ausgelöst hat
db11.dbb6 := OB80_OB_PRIORITY; //Prioritätsklasse des Fehler verursachenden OBs
db11.dbb7 := OB80_OB_NUM; //Nummer des Fehler verursachenden OB
ELSIF OB80_FLT_ID=b#16#05 THEN //abgelaufener Uhrzeitalarm durch Uhrzeitsprung
db11.dbx0.2 := true;
db11.dbw2 := OB80_ERROR_INFO; //Für den Uhrzeitalarm liegt der Startzeitpunkt in der Vergangenheit
ELSIF OB80_FLT_ID=b#16#06 THEN //abgelaufener Uhrzeitalarm bei Wiedereintritt in RUN nach HALT
db11.dbx0.3 := true;
db11.dbw2 := OB80_ERROR_INFO; //Für den Uhrzeitalarm liegt der Startzeitpunkt in der Vergangenheit
ELSIF OB80_FLT_ID=b#16#07 THEN //Überlauf des OB-Anforderungspuffers für die aktuelle Prio Klasse
db11.dbx0.4 := true;
db11.dbw2 := OB80_ERROR_INFO; //Die zugehörige temporäre Variable des angeforderten OB
db11.dbb4 := OB80_ERR_EV_CLASS; //Klasse des Ereignisses, das den Alarm ausglöst hat
db11.dbb5 := OB80_ERR_EV_NUM; //Nummer des Ereignisses, das den Alarm ausgelöst hat
db11.dbb6 := OB80_OB_PRIORITY; //Prioritätsklasse des Fehler verursachenden OBs
db11.dbb7 := OB80_OB_NUM; //Nummer des Fehler verursachenden OB
ELSIF OB80_FLT_ID=b#16#08 THEN //Taktsynchronalarm-Zeitfehler
db11.dbx0.5 := true;
db11.dbw2 := OB80_ERROR_INFO; //Die zugehörige temporäre Variable des angeforderten OB
db11.dbb4 := OB80_ERR_EV_CLASS; //Klasse des Ereignisses, das den Alarm ausglöst hat
db11.dbb5 := OB80_ERR_EV_NUM; //Nummer des Ereignisses, das den Alarm ausgelöst hat
db11.dbb6 := OB80_OB_PRIORITY; //Prioritätsklasse des Fehler verursachenden OBs
db11.dbb7 := OB80_OB_NUM; //Nummer des Fehler verursachenden OB
ELSIF OB80_FLT_ID=b#16#09 THEN //Alarmverlust durch zu hohe Alarmlast
db11.dbx0.6 := true;
db11.dbw2 := OB80_ERROR_INFO; //Die zugehörige temporäre Variable des angeforderten OB
db11.dbb4 := OB80_ERR_EV_CLASS; //Klasse des Ereignisses, das den Alarm ausglöst hat
db11.dbb5 := OB80_ERR_EV_NUM; //Nummer des Ereignisses, das den Alarm ausgelöst hat
db11.dbb6 := OB80_OB_PRIORITY; //Prioritätsklasse des Fehler verursachenden OBs
db11.dbb7 := OB80_OB_NUM; //Nummer des Fehler verursachenden OB
ELSIF OB80_FLT_ID=b#16#0A THEN //Wiedereintritt in RUN nach CiR
db11.dbx0.7 := true;
db11.dbw2 := OB80_ERROR_INFO; //CiR-Synchronisationszeit in ms
ELSIF OB80_FLT_ID=b#16#0B THEN //Technologiesynchronalarm-Zeitfehler
db11.dbx1.0 := true;
db11.dbb5 := OB80_ERR_EV_NUM; //Nummer des Ereignisses, das den Alarm ausgelöst hat
db11.dbb6 := OB80_OB_PRIORITY; //Prioritätsklasse des Fehler verursachenden OBs
db11.dbb7 := OB80_OB_NUM; //Nummer des Fehler verursachenden OB
END_IF;
END_ORGANIZATION_BLOCK