Vai al contenuto
PLC Forum


Diagnostica Moduli I/o


S.angioni

Messaggi consigliati

Salve a tutti,

vorrei implementare la diagnostica dei moduli I/O tramite software, ovvero utilizzare una qualche funzione che mi sappia dire "il modulo tot è in fault/spento/programmato male". Mamma siemens ha già preparato qualcosa di simile?

Grazie

SA

Link al commento
Condividi su altri siti


Certo che sì, leggi la guida di Step 7 sezione "guida ai blocchi organizzativi" troverai fra i tanti ob anche i seguenti, utilizzabili in base al tipo di cpu impiegata.

OB 80 Errore temporale

OB 81 Errore di alimentazione

OB 82 Allarme di diagnostica

OB 83 Allarme di estrazione/inserimento

OB 84 Errore hardware CPU

OB 85 Errore di esecuzione programma

OB 86 Avaria di un'apparecchiatura di ampliamento, di un sistema master DP o di una stazione con periferia decentrata

OB 87 Errore di comunicazione

OB 121 Errore di programmazione

OB 122 Errore di accesso alla periferia

Basta lavorare sulle variabili locali magari trasferendole da qualche parte ad esempio

CALL "BLKMOV"

SRCBLK :=P#L 0.0 BYTE 20

RET_VAL:=#RTV

DSTBLK :="Fault OB82".FAULTS

Ciao

Link al commento
Condividi su altri siti

Grazie per la risposta!

Quindi se ho ben capito (questo è il primo programma step7 che scrivo completamente, da zero), appena la CPU rileva un fault hardware, richiama l'esecuzione dell'ob specifico per quel fault (nel nostro caso dovrebbe essere l'82), e nelle variabili locali di quell'OB è contenuta l'informazione sul'errore, che io poi posso trasferire sulla zona allarmi che ho progettato.

Ma l'esecuzione dell'ob 82 è one shot o continua finchè c'è il fault?

Link al commento
Condividi su altri siti

L' Ob viene richiamato finchè persiste la causa dell'errore.

Se ad esempio hai un errore di accesso alla periferia, la cpu tenta di richiamare l' OB122, nel caso questo non sia stato caricato, la cpu passa in stop.

Questo vuol dire che bisogna stare molto attenti perchè in caso di errore con ob122 caricato, stando all'esempio che ti ho fatto, se non si gestisce bene il sistema, la cpu non va in stop e ciò potrabbe costituire una condizione di pericolo.

Leggiti bene gli . e se hai la cpu sotto mano fai qualche prova....nessuna spiegazione è meglio di una verifica sul campo....ciao

Link al commento
Condividi su altri siti

L' Ob viene richiamato finchè persiste la causa dell'errore.

Gli OB vengono richiamati su evento. In particolare, per usare la terminologia Siemens, vengono richiamati su evento "entrante" e su evento "uscente". In parole più comprensibili, l'OB viene richiamato una volta quando viene rilevato un tipo di anomalia, ed una volta quando viene rilevato il ritorno alla normalità.

Nel caso di errori di accesso alla periferia l'OB relativo viene richiamato continuamente perché continuamente da programma si cerca di accedere alla periferia.

Link al commento
Condividi su altri siti

Ho provato a scrivere una bozza di OB 82 per rilevare errori generici sui moduli:

ORGANIZATION_BLOCK "I/O_FLT1"

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

BEGIN

NETWORK

TITLE =I/O MODULES FAULT - INCOMING EVENT

//Questa parte di OB82 viene eseguita in caso di evento "entrante" ovvero al

//verificarsi del fault

SET ;

U( ;

L #OB82_EV_CLASS;

L B#16#39; /// INCOMING EVENT CODE

==I ;

) ;

SPBN OUT;

///

/// DIGITAL INPUT MODULE FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 0; /// MODULE BASE ADDRESS

==I ;

) ;

U( ;

L #OB82_IO_FLAG;

L B#16#54; /// INPUT MODULE CODE

==I ;

) ;

S "Electronic Diag DB".DI_Module_1_Fault;

///

/// DIGITAL OUTPUT MODULE FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 0; /// MODULE BASE ADDRESS

==I ;

) ;

U( ;

L #OB82_IO_FLAG;

L B#16#55; /// INPUT MODULE CODE

==I ;

) ;

S "Electronic Diag DB".DO_Module_1_Fault;

///

/// ANALOG INPUT MODULE 1 FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 304; /// MODULE BASE ADDRESS

==I ;

) ;

S "Electronic Diag DB".AI_Module_1_Fault;

///

/// ANALOG INPUT MODULE 2 FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 320; /// MODULE BASE ADDRESS

==I ;

) ;

S "Electronic Diag DB".AI_Module_2_Fault;

///

/// ANALOG OUTPUT MODULE 1 FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 336; /// MODULE BASE ADDRESS

==I ;

) ;

S "Electronic Diag DB".AO_Module_1_Fault;

NETWORK

TITLE =I/O MODULES FAULT - OUTCOMING EVENT

//Questa parte di OB82 viene eseguita in caso di evento "uscente" ovvero alla

//cessazione del fault

OUT: SET ;

///

/// DIGITAL INPUT MODULE FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 0; /// MODULE BASE ADDRESS

==I ;

) ;

U( ;

L #OB82_IO_FLAG;

L B#16#54; /// INPUT MODULE CODE

==I ;

) ;

R "Electronic Diag DB".DI_Module_1_Fault;

///

/// DIGITAL OUTPUT MODULE FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 0; /// MODULE BASE ADDRESS

==I ;

) ;

U( ;

L #OB82_IO_FLAG;

L B#16#55; /// INPUT MODULE CODE

==I ;

) ;

R "Electronic Diag DB".DO_Module_1_Fault;

///

/// ANALOG INPUT MODULE 1 FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 304; /// MODULE BASE ADDRESS

==I ;

) ;

R "Electronic Diag DB".AI_Module_1_Fault;

///

/// ANALOG INPUT MODULE 2 FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 320; /// MODULE BASE ADDRESS

==I ;

) ;

R "Electronic Diag DB".AI_Module_2_Fault;

///

/// ANALOG OUTPUT MODULE 1 FAULT

///

SET ;

U( ;

L #OB82_MDL_ADDR;

L 336; /// MODULE BASE ADDRESS

==I ;

) ;

R "Electronic Diag DB".AO_Module_1_Fault;

END_ORGANIZATION_BLOCK

Al di là degli indirizzi dei moduli che dipendono dalla mia configurazione hardware, può funzionare? Inparticolare, è corretto il modo di distinguere il modulo DI da quello DO, che hanno lo stesso base address? Non ho a disposizione la CPU per provare, mi sapreste dire se almeno in linea di principio sto lavorando correttamente?

Se inoltre volessi disabilitare l'errore di broken wire sui moduli AI, al di là di disabilitarlo in questa routine utilizzando le variabili riservate dell'ob82, posso agire sulla configurazione hardware disabilitando la diagnostica del singolo canale? Normalmente faccio i test di conduttore rotto via software in modo da poterli parametrizzare come preferisco.

Grazie a tutti

Modificato: da S.angioni
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...