Diagnosealarm

SCLNewbie

Level-1
Beiträge
42
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte über den OB82 eine bestimmte Diagnosealarmnummer auslesen/verarbeiten. Ist es ausreichend über das Byte 1 ("OB82_FLD_ID") des OB82 nach dem Prinzip:

IF OB82_FLD_ID[0] = B#16#42 THEN
...
END_IF;

zu gehen oder spielen noch andere Variablen eine Rolle? Das Byte 1 habe ich zuvor als ein array deklariert ("OB82_FLD_ID : array[0..19] of byte; "). Damit hatte es nämlich leider net gefunzt. Vielen Dank für eure Antworten!

Viele Grüße
 
Hallo,

laut Hilfe zum Diagnosealarm-OB OB82 ist der Fehlercode in OB82_FLT_ID immer B#16#42.
Der OB82 gibt keine Information über die Fehlernummer.
Du könntest höchstens die Fehlerbits auswerten.
Ich weiß nicht, ob man aus den Fehlerbits die Fehlernummer ausrechnen kann.

Das Byte 1 habe ich zuvor als ein array deklariert ("OB82_FLD_ID : array[0..19] of byte; "). Damit hatte es nämlich leider net gefunzt.
Man kann kein Array deklarieren, was bei einer ungeraden Adresse anfängt, Dein OB82_FLD_ID[0] adressiert nicht das LB1
Benutze mal besser diese Deklaration der OB82 Lokaldaten (über AWL-Quelle erzeugt):
Code:
ORGANIZATION_BLOCK OB82
TITLE = 'I/O Point Fault'
VERSION : '0.1'

VAR_TEMP
  OB82_EV_CLASS : BYTE ;            //16#39, Event class 3, Entering event state, Internal fault event
  OB82_FLT_ID : BYTE ;              //16#XX, Fault identifcation code
  OB82_PRIORITY : BYTE ;            //Priority of OB Execution
  OB82_OB_NUMBR : BYTE ;            //82 (Organization block 82, OB82)
  OB82_RESERVED_1 : BYTE ;          //Reserved for system
  OB82_IO_FLAG : BYTE ;             //Input (01010100), Output (01010101)
  OB82_MDL_ADDR : WORD ;            //Base address of module with fault
  OB82_MDL_DEFECT : BOOL ;          //Module defective
  OB82_INT_FAULT : BOOL ;           //Internal fault
  OB82_EXT_FAULT : BOOL ;           //External fault
  OB82_PNT_INFO : BOOL ;            //Point information
  OB82_EXT_VOLTAGE : BOOL ;         //External voltage low
  OB82_FLD_CONNCTR : BOOL ;         //Field wiring connector missing
  OB82_NO_CONFIG : BOOL ;           //Module has no configuration data
  OB82_CONFIG_ERR : BOOL ;          //Module has configuration error
  OB82_MDL_TYPE : BYTE ;            //Type of module
  OB82_SUB_MDL_ERR : BOOL ;         //Sub-Module is missing or has error
  OB82_COMM_FAULT : BOOL ;          //Communication fault
  OB82_MDL_STOP : BOOL ;            //Module is stopped
  OB82_WTCH_DOG_FLT : BOOL ;        //Watch dog timer stopped module
  OB82_INT_PS_FLT : BOOL ;          //Internal power supply fault
  OB82_PRIM_BATT_FLT : BOOL ;       //Primary battery is in fault
  OB82_BCKUP_BATT_FLT : BOOL ;      //Backup battery is in fault
  OB82_RESERVED_2 : BOOL ;          //Reserved for system
  OB82_RACK_FLT : BOOL ;            //Rack fault, only for bus interface module
  OB82_PROC_FLT : BOOL ;            //Processor fault
  OB82_EPROM_FLT : BOOL ;           //EPROM fault
  OB82_RAM_FLT : BOOL ;             //RAM fault
  OB82_ADU_FLT : BOOL ;             //ADU fault
  OB82_FUSE_FLT : BOOL ;            //Fuse fault
  OB82_HW_INTR_FLT : BOOL ;         //Hardware interupt input in fault
  OB82_RESERVED_3 : BOOL ;          //Reserved for system  
  OB82_DATE_TIME : DATE_AND_TIME ;  //Date and time OB82 started   
END_VAR

    ;
END_ORGANIZATION_BLOCK

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
du kannst nur das kommende und gehende Fehlerereignis über OB82_EV_CLASS =B#16#38: gehendes Ereignis
oder B#16#39: kommendes Ereignis auswerten.

Der Fehlercode OB82_FLT_ID bleibt B#16#42 wie von Harald beschrieben.

Eine zugehörige Fehlernummer/eine Meldung o.ä. zum jeweiligen Ereignis musst du dir
wohl über ein anderes Verfahren erzeugen.


 
Hey,

ja aber jeder Diagnosealarm wird im Diagnosepuffer mit einer bestimmten Ereignis-ID vermerkt, die sich aus der Ereignisklasse,Kennungen und der Ereignisnummer zusammensetzt (das ist denk ich auch die Diagnosenummer). Die muss doch in irgend einen Byte stehen, oder?

Viele Grüße
 
Frag Siemens. In der offiziellen Dokumentation finde ich keinen Hinweis, wo die Ereignisnummer "versteckt" sein könnte.

Harald
 
Zurück
Oben