Vai al contenuto
PLC Forum


Diagnostica I/o Et200m - Come diagnosticare il guasto di ogni singolo modulo


rddiego

Messaggi consigliati

sto cercando di fare una diagnostica un po' accurata e vorrei sapere fino a che punto ci si può spingere e come.

ho delle ET200M collegate in profibus su tre diverse reti DP (1,2,3).

Ciascuna ET200M è composta di diversi moduli I/O e devo diagnosticarne il guasto.

Normalmente utilizzo l'OB86 per diagnosticare un guasto generico sullo slave DP.

Ma come si fa a diagnosticare il guasto per esempio del modulo di ingressi SM321 al posto connettore 4 dell'ET200M ?

Link al commento
Condividi su altri siti


  • 2 weeks later...

Di seguito un sorgente con un semplice esempio ( che di solito uso io).

--------------------------------------------------------------------------------------

DATA_BLOCK "Diagnostica"

TITLE =

VERSION : 0.1

STRUCT

ET_200_3_1 : BOOL ;

ET_200_3_2 : BOOL ;

ET_200_4_1 : BOOL ;

ET_200_4_2 : BOOL ;

ET_200_5_1 : BOOL ;

ET_200_5_2 : BOOL ;

ET_200_6_1 : BOOL ;

ET_200_6_2 : BOOL ;

ET_200_7_1 : BOOL ;

ET_200_7_2 : BOOL ;

ET_200_8_1 : BOOL ;

ET_200_8_2 : BOOL ;

spare1_4 : BOOL ;

spare1_5 : BOOL ;

spare1_6 : BOOL ;

spare1_7 : BOOL ;

Errore_CPU1 : BOOL ;

Errore_CPU2 : BOOL ;

Master_1 : BOOL ;

Master_2 : BOOL ;

spare2_4 : BOOL ;

spare2_5 : BOOL ;

spare2_6 : BOOL ;

spare2_7 : BOOL ;

Fault_Batteria : BOOL ;

spare3_1 : BOOL ;

spare3_2 : BOOL ;

spare3_3 : BOOL ;

spare3_4 : BOOL ;

spare3_5 : BOOL ;

spare3_6 : BOOL ;

spare3_7 : BOOL ;

ALlarme_Periferia_In : BOOL ;

ALlarme_Periferia_Out : BOOL ;

Indirizzo : WORD ;

Scheda_Estratta : BOOL ;

SchedaErrata : BOOL ;

SchedaGuasta : BOOL ;

Indirizzo_Scheda_Estr : WORD ;

Errore_Accesso_Scheda_In : BOOL ;

Errore_Accesso_Scheda_Ou : BOOL ;

Indirizzo_Scheda_In : WORD ;

Indirizzo_Scheda_Out : WORD ;

SlaveDP3 : BOOL ;

SlaveDP4 : BOOL ;

SlaveDP5 : BOOL ;

SlaveDP6 : BOOL ;

SlaveDP7 : BOOL ;

SlaveDP8 : BOOL ;

Diagnostica_H : ARRAY [1 .. 20 ] OF BYTE ;

Appoggio : DWORD ;

Rack1_sch_I0 : BOOL ;

Rack1_sch_I1 : BOOL ;

Rack1_sch_I2 : BOOL ;

Rack_sch_I3 : BOOL ;

Rack_sch_I4 : BOOL ;

Rack_sch_I5 : BOOL ;

Rack_sch_I6 : BOOL ;

Rack1_sch_I7 : BOOL ;

Rack2_schI0 : BOOL ;

Rack2_schI1 : BOOL ;

Rack2_schI2 : BOOL ;

Rack2_schI3 : BOOL ;

Rack2_schI4 : BOOL ;

Rack2_schI5 : BOOL ;

Rack2_schI6 : BOOL ;

Rack2_schI7 : BOOL ;

Rack3_schO0 : BOOL ;

Rack3_schO1 : BOOL ;

Rack3_schO2 : BOOL ;

Rack3_schO3 : BOOL ;

Rack3_schO4 : BOOL ;

Rack3_schO5 : BOOL ;

Rack3_schO6 : BOOL ;

Rack3_schO7 : BOOL ;

Rack4_schAI512 : BOOL ;

Rack4_schAI528 : BOOL ;

Rack4_schAI544 : BOOL ;

Rack4_schAI560 : BOOL ;

Rack4_schAI576 : BOOL ;

Rack4_schAI592 : BOOL ;

Rack4_schAO512 : BOOL ;

Rack4_schO46 : BOOL ;

Rack5_schO48 : BOOL ;

Rack5_schO50 : BOOL ;

Rack5_schO52 : BOOL ;

Rack5_schO54 : BOOL ;

Rack5_schO56 : BOOL ;

Rack5_schO58 : BOOL ;

Rack5_schO60 : BOOL ;

Rack5_schO62 : BOOL ;

Rack6_NU64 : BOOL ;

Rack6_NU66 : BOOL ;

Rack6_NU68 : BOOL ;

Rack6_NU70 : BOOL ;

Rack6_NU72 : BOOL ;

Rack6_NU74 : BOOL ;

Rack6_NU76 : BOOL ;

Rack6_NU78 : BOOL ;

Ma2 : BOOL ;

Ma3 : BOOL ;

Ma4 : BOOL ;

Profibus_3_ok_4 : BOOL ;

Profibus_3_ok_5 : BOOL ;

Profibus_3_ok_6 : BOOL ;

Profibus_3_ok_7 : BOOL ;

Profibus_3_ok_8 : BOOL ;

Profibus_3_ok_9 : BOOL ;

Profibus_3_ok_10 : BOOL ;

Profibus_3_ok_11 : BOOL ;

Profibus_3_ok_12 : BOOL ;

Profibus_3_ok_13 : BOOL ;

Profibus_3_ok_14 : BOOL ;

Profibus_3_ok_15 : BOOL ;

Profibus_3_ok_16 : BOOL ;

Profibus_3_ok_17 : BOOL ;

Profibus_3_ok_18 : BOOL ;

Profibus_3_ok_19 : BOOL ;

Profibus_3_ok_20 : BOOL ;

Profibus_3_ok_21 : BOOL ;

Profibus_3_ok_22 : BOOL ;

Profibus_3_ok_23 : BOOL ;

Profibus_3_ok_24 : BOOL ;

Profibus_3_ok_25 : BOOL ;

Profibus_3_ok_26 : BOOL ;

Profibus_3_ok_27 : BOOL ;

Profibus_3_ok_28 : BOOL ;

Profibus_3_ok_29 : BOOL ;

Profibus_3_ok_30 : BOOL ;

Profibus_3_ok_31 : BOOL ;

Profibus_3_ok_32 : BOOL ;

Profibus_3_ok_33 : BOOL ;

Profibus_3_ok_34 : BOOL ;

Profibus_3_ok_35 : BOOL ;

Profibus_3_ok_36 : BOOL ;

Profibus_3_ok_37 : BOOL ;

Profibus_3_ok_38 : BOOL ;

Profibus_3_ok_39 : BOOL ;

Profibus_3_ok_40 : BOOL ;

Profibus_3_ok_41 : BOOL ;

Profibus_3_ok_42 : BOOL ;

Profibus_3_ok_43 : BOOL ;

Profibus_3_ok_44 : BOOL ;

Profibus_3_ok_45 : BOOL ;

Profibus_3_ok_46 : BOOL ;

Profibus_3_ok_47 : BOOL ;

Profibus_3_ok_48 : BOOL ;

Profibus_3_ok_49 : BOOL ;

Profibus_3_ok_50 : BOOL ;

Profibus_3_ok_51 : BOOL ;

Profibus_3_ok_52 : BOOL ;

Profibus_3_ok_53 : BOOL ;

Profibus_3_ok_54 : BOOL ;

Profibus_3_ok_55 : BOOL ;

Spare57 : BYTE ;

Ma11 : BOOL ;

Ma21 : BOOL ;

Ma31 : BOOL ;

Ma41 : BOOL ;

Profibus_6_ok_4 : BOOL ;

Profibus_6_ok_5 : BOOL ;

Profibus_6_ok_6 : BOOL ;

Profibus_6_ok_7 : BOOL ;

Profibus_6_ok_8 : BOOL ;

Profibus_6_ok_9 : BOOL ;

Profibus_6_ok_10 : BOOL ;

Profibus_6_ok_11 : BOOL ;

Profibus_6_ok_12 : BOOL ;

Profibus_6_ok_13 : BOOL ;

Profibus_6_ok_14 : BOOL ;

Profibus_6_ok_15 : BOOL ;

Profibus_6_ok_16 : BOOL ;

Profibus_6_ok_17 : BOOL ;

Profibus_6_ok_18 : BOOL ;

Profibus_6_ok_19 : BOOL ;

Profibus_6_ok_20 : BOOL ;

Profibus_6_ok_21 : BOOL ;

Profibus_6_ok_22 : BOOL ;

Profibus_6_ok_23 : BOOL ;

Profibus_6_ok_24 : BOOL ;

Profibus_6_ok_25 : BOOL ;

Profibus_6_ok_26 : BOOL ;

Profibus_6_ok_27 : BOOL ;

Profibus_6_ok_28 : BOOL ;

Profibus_6_ok_29 : BOOL ;

Profibus_6_ok_30 : BOOL ;

Profibus_6_ok_31 : BOOL ;

Profibus_6_ok_32 : BOOL ;

Profibus_6_ok_33 : BOOL ;

Profibus_6_ok_34 : BOOL ;

Profibus_6_ok_35 : BOOL ;

Profibus_6_ok_36 : BOOL ;

Profibus_6_ok_37 : BOOL ;

Profibus_6_ok_38 : BOOL ;

Profibus_6_ok_39 : BOOL ;

Profibus_6_ok_40 : BOOL ;

Profibus_6_ok_41 : BOOL ;

Profibus_6_ok_42 : BOOL ;

Profibus_6_ok_43 : BOOL ;

Profibus_6_ok_44 : BOOL ;

Profibus_6_ok_45 : BOOL ;

Profibus_6_ok_46 : BOOL ;

Profibus_6_ok_47 : BOOL ;

Profibus_6_ok_48 : BOOL ;

Profibus_6_ok_49 : BOOL ;

Profibus_6_ok_50 : BOOL ;

Profibus_6_ok_51 : BOOL ;

Profibus_6_ok_52 : BOOL ;

Profibus_6_ok_53 : BOOL ;

Profibus_6_ok_54 : BOOL ;

Profibus_6_ok_55 : BOOL ;

CP441A_IF1_Fault : BOOL ;

CP441A_IF2_Fault : BOOL ;

CP441B_IF1_Fault : BOOL ;

CP441B_IF2_Fault : BOOL ;

CP443A_Fault : BOOL ;

CP443B_Fault : BOOL ;

spare656 : BOOL ;

spare657 : BOOL ;

Diagnostica_CP441 : ARRAY [1 .. 10 ] OF BYTE ;

Alim1Rack1_Fault : BOOL ; //Alimentatore 1 Rack 1 Fault

Alim2Rack1_Fault : BOOL ; //Alimentatore 2 Rack 1 Fault

Alim1Rack2_Fault : BOOL ; //Alimentatore 1 Rack 2 Fault

Alim2Rack2_Fault : BOOL ; //Alimentatore 2 Rack 2 Fault

AlimSpare1 : BOOL ; //spare per allarmi alimentatore

AlimSpare2 : BOOL ; //spare per allarmi alimentatore

AlimSpare3 : BOOL ; //spare per allarmi alimentatore

AlimSpare4 : BOOL ; //spare per allarmi alimentatore

Spare770 : BOOL ; //spare

Spare771 : BOOL ; //spare

Spare772 : BOOL ; //spare

Spare773 : BOOL ; //spare

Spare774 : BOOL ; //spare

Spare775 : BOOL ; //spare

Spare776 : BOOL ; //spare

Spare777 : BOOL ; //spare

END_STRUCT ;

BEGIN

ET_200_3_1 := FALSE;

ET_200_3_2 := FALSE;

ET_200_4_1 := FALSE;

ET_200_4_2 := FALSE;

ET_200_5_1 := FALSE;

ET_200_5_2 := FALSE;

ET_200_6_1 := FALSE;

ET_200_6_2 := FALSE;

ET_200_7_1 := FALSE;

ET_200_7_2 := FALSE;

ET_200_8_1 := FALSE;

ET_200_8_2 := FALSE;

spare1_4 := FALSE;

spare1_5 := FALSE;

spare1_6 := FALSE;

spare1_7 := FALSE;

Errore_CPU1 := FALSE;

Errore_CPU2 := FALSE;

Master_1 := FALSE;

Master_2 := FALSE;

spare2_4 := FALSE;

spare2_5 := FALSE;

spare2_6 := FALSE;

spare2_7 := FALSE;

Fault_Batteria := FALSE;

spare3_1 := FALSE;

spare3_2 := FALSE;

spare3_3 := FALSE;

spare3_4 := FALSE;

spare3_5 := FALSE;

spare3_6 := FALSE;

spare3_7 := FALSE;

ALlarme_Periferia_In := FALSE;

ALlarme_Periferia_Out := FALSE;

Indirizzo := W#16#0;

Scheda_Estratta := FALSE;

SchedaErrata := FALSE;

SchedaGuasta := FALSE;

Indirizzo_Scheda_Estr := W#16#0;

Errore_Accesso_Scheda_In := FALSE;

Errore_Accesso_Scheda_Ou := FALSE;

Indirizzo_Scheda_In := W#16#0;

Indirizzo_Scheda_Out := W#16#0;

SlaveDP3 := FALSE;

SlaveDP4 := FALSE;

SlaveDP5 := FALSE;

SlaveDP6 := FALSE;

SlaveDP7 := FALSE;

SlaveDP8 := FALSE;

Diagnostica_H[1] := B#16#0;

Diagnostica_H[2] := B#16#0;

Diagnostica_H[3] := B#16#0;

Diagnostica_H[4] := B#16#0;

Diagnostica_H[5] := B#16#0;

Diagnostica_H[6] := B#16#0;

Diagnostica_H[7] := B#16#0;

Diagnostica_H[8] := B#16#0;

Diagnostica_H[9] := B#16#0;

Diagnostica_H[10] := B#16#0;

Diagnostica_H[11] := B#16#0;

Diagnostica_H[12] := B#16#0;

Diagnostica_H[13] := B#16#0;

Diagnostica_H[14] := B#16#0;

Diagnostica_H[15] := B#16#0;

Diagnostica_H[16] := B#16#0;

Diagnostica_H[17] := B#16#0;

Diagnostica_H[18] := B#16#0;

Diagnostica_H[19] := B#16#0;

Diagnostica_H[20] := B#16#0;

Appoggio := DW#16#0;

Rack1_sch_I0 := FALSE;

Rack1_sch_I1 := FALSE;

Rack1_sch_I2 := FALSE;

Rack_sch_I3 := FALSE;

Rack_sch_I4 := FALSE;

Rack_sch_I5 := FALSE;

Rack_sch_I6 := FALSE;

Rack1_sch_I7 := FALSE;

Rack2_schI0 := FALSE;

Rack2_schI1 := FALSE;

Rack2_schI2 := FALSE;

Rack2_schI3 := FALSE;

Rack2_schI4 := FALSE;

Rack2_schI5 := FALSE;

Rack2_schI6 := FALSE;

Rack2_schI7 := FALSE;

Rack3_schO0 := FALSE;

Rack3_schO1 := FALSE;

Rack3_schO2 := FALSE;

Rack3_schO3 := FALSE;

Rack3_schO4 := FALSE;

Rack3_schO5 := FALSE;

Rack3_schO6 := FALSE;

Rack3_schO7 := FALSE;

Rack4_schAI512 := FALSE;

Rack4_schAI528 := FALSE;

Rack4_schAI544 := FALSE;

Rack4_schAI560 := FALSE;

Rack4_schAI576 := FALSE;

Rack4_schAI592 := FALSE;

Rack4_schAO512 := FALSE;

Rack4_schO46 := FALSE;

Rack5_schO48 := FALSE;

Rack5_schO50 := FALSE;

Rack5_schO52 := FALSE;

Rack5_schO54 := FALSE;

Rack5_schO56 := FALSE;

Rack5_schO58 := FALSE;

Rack5_schO60 := FALSE;

Rack5_schO62 := FALSE;

Rack6_NU64 := FALSE;

Rack6_NU66 := FALSE;

Rack6_NU68 := FALSE;

Rack6_NU70 := FALSE;

Rack6_NU72 := FALSE;

Rack6_NU74 := FALSE;

Rack6_NU76 := FALSE;

Rack6_NU78 := FALSE;

Ma2 := FALSE;

Ma3 := FALSE;

Ma4 := FALSE;

Profibus_3_ok_4 := FALSE;

Profibus_3_ok_5 := FALSE;

Profibus_3_ok_6 := FALSE;

Profibus_3_ok_7 := FALSE;

Profibus_3_ok_8 := FALSE;

Profibus_3_ok_9 := FALSE;

Profibus_3_ok_10 := FALSE;

Profibus_3_ok_11 := FALSE;

Profibus_3_ok_12 := FALSE;

Profibus_3_ok_13 := FALSE;

Profibus_3_ok_14 := FALSE;

Profibus_3_ok_15 := FALSE;

Profibus_3_ok_16 := FALSE;

Profibus_3_ok_17 := FALSE;

Profibus_3_ok_18 := FALSE;

Profibus_3_ok_19 := FALSE;

Profibus_3_ok_20 := FALSE;

Profibus_3_ok_21 := FALSE;

Profibus_3_ok_22 := FALSE;

Profibus_3_ok_23 := FALSE;

Profibus_3_ok_24 := FALSE;

Profibus_3_ok_25 := FALSE;

Profibus_3_ok_26 := FALSE;

Profibus_3_ok_27 := FALSE;

Profibus_3_ok_28 := FALSE;

Profibus_3_ok_29 := FALSE;

Profibus_3_ok_30 := FALSE;

Profibus_3_ok_31 := FALSE;

Profibus_3_ok_32 := FALSE;

Profibus_3_ok_33 := FALSE;

Profibus_3_ok_34 := FALSE;

Profibus_3_ok_35 := FALSE;

Profibus_3_ok_36 := FALSE;

Profibus_3_ok_37 := FALSE;

Profibus_3_ok_38 := FALSE;

Profibus_3_ok_39 := FALSE;

Profibus_3_ok_40 := FALSE;

Profibus_3_ok_41 := FALSE;

Profibus_3_ok_42 := FALSE;

Profibus_3_ok_43 := FALSE;

Profibus_3_ok_44 := FALSE;

Profibus_3_ok_45 := FALSE;

Profibus_3_ok_46 := FALSE;

Profibus_3_ok_47 := FALSE;

Profibus_3_ok_48 := FALSE;

Profibus_3_ok_49 := FALSE;

Profibus_3_ok_50 := FALSE;

Profibus_3_ok_51 := FALSE;

Profibus_3_ok_52 := FALSE;

Profibus_3_ok_53 := FALSE;

Profibus_3_ok_54 := FALSE;

Profibus_3_ok_55 := FALSE;

Spare57 := B#16#0;

Ma11 := FALSE;

Ma21 := FALSE;

Ma31 := FALSE;

Ma41 := FALSE;

Profibus_6_ok_4 := FALSE;

Profibus_6_ok_5 := FALSE;

Profibus_6_ok_6 := FALSE;

Profibus_6_ok_7 := FALSE;

Profibus_6_ok_8 := FALSE;

Profibus_6_ok_9 := FALSE;

Profibus_6_ok_10 := FALSE;

Profibus_6_ok_11 := FALSE;

Profibus_6_ok_12 := FALSE;

Profibus_6_ok_13 := FALSE;

Profibus_6_ok_14 := FALSE;

Profibus_6_ok_15 := FALSE;

Profibus_6_ok_16 := FALSE;

Profibus_6_ok_17 := FALSE;

Profibus_6_ok_18 := FALSE;

Profibus_6_ok_19 := FALSE;

Profibus_6_ok_20 := FALSE;

Profibus_6_ok_21 := FALSE;

Profibus_6_ok_22 := FALSE;

Profibus_6_ok_23 := FALSE;

Profibus_6_ok_24 := FALSE;

Profibus_6_ok_25 := FALSE;

Profibus_6_ok_26 := FALSE;

Profibus_6_ok_27 := FALSE;

Profibus_6_ok_28 := FALSE;

Profibus_6_ok_29 := FALSE;

Profibus_6_ok_30 := FALSE;

Profibus_6_ok_31 := FALSE;

Profibus_6_ok_32 := FALSE;

Profibus_6_ok_33 := FALSE;

Profibus_6_ok_34 := FALSE;

Profibus_6_ok_35 := FALSE;

Profibus_6_ok_36 := FALSE;

Profibus_6_ok_37 := FALSE;

Profibus_6_ok_38 := FALSE;

Profibus_6_ok_39 := FALSE;

Profibus_6_ok_40 := FALSE;

Profibus_6_ok_41 := FALSE;

Profibus_6_ok_42 := FALSE;

Profibus_6_ok_43 := FALSE;

Profibus_6_ok_44 := FALSE;

Profibus_6_ok_45 := FALSE;

Profibus_6_ok_46 := FALSE;

Profibus_6_ok_47 := FALSE;

Profibus_6_ok_48 := FALSE;

Profibus_6_ok_49 := FALSE;

Profibus_6_ok_50 := FALSE;

Profibus_6_ok_51 := FALSE;

Profibus_6_ok_52 := FALSE;

Profibus_6_ok_53 := FALSE;

Profibus_6_ok_54 := FALSE;

Profibus_6_ok_55 := FALSE;

CP441A_IF1_Fault := FALSE;

CP441A_IF2_Fault := FALSE;

CP441B_IF1_Fault := FALSE;

CP441B_IF2_Fault := FALSE;

CP443A_Fault := FALSE;

CP443B_Fault := FALSE;

spare656 := FALSE;

spare657 := FALSE;

Diagnostica_CP441[1] := B#16#0;

Diagnostica_CP441[2] := B#16#0;

Diagnostica_CP441[3] := B#16#0;

Diagnostica_CP441[4] := B#16#0;

Diagnostica_CP441[5] := B#16#0;

Diagnostica_CP441[6] := B#16#0;

Diagnostica_CP441[7] := B#16#0;

Diagnostica_CP441[8] := B#16#0;

Diagnostica_CP441[9] := B#16#0;

Diagnostica_CP441[10] := B#16#0;

Alim1Rack1_Fault := FALSE;

Alim2Rack1_Fault := FALSE;

Alim1Rack2_Fault := FALSE;

Alim2Rack2_Fault := FALSE;

AlimSpare1 := FALSE;

AlimSpare2 := FALSE;

AlimSpare3 := FALSE;

AlimSpare4 := FALSE;

Spare770 := FALSE;

Spare771 := FALSE;

Spare772 := FALSE;

Spare773 := FALSE;

Spare774 := FALSE;

Spare775 := FALSE;

Spare776 := FALSE;

Spare777 := FALSE;

END_DATA_BLOCK

FUNCTION "DiagnosticaHW" : VOID

TITLE =

VERSION : 0.1

VAR_TEMP

AKT_SZL_HEADER : STRUCT //Struttura come operando attuale per SFC 51

LENTHDR : WORD ; //Lunghezza di un record di dati

N_DR : WORD ; //Numero dei record di dati

END_STRUCT ;

AKT_SZL_HEADER_1 : STRUCT //Struttura come operando attuale per SFC 51

LENTHDR : WORD ; //Lunghezza di un record di dati

END_STRUCT ;

END_VAR

BEGIN

NETWORK

TITLE =Redundancy Fault and Check wich one is master or slave

CALL "RDSYSST" (//SFC 51 "RDSYSST" (Read system status)

REQ := TRUE,

SZL_ID := W#16#71,//Read diagnostic data

INDEX := W#16#0,

RET_VAL := DB90.DBW 40,

BUSY := DB90.DBX 42.0,

SZL_HEADER := #AKT_SZL_HEADER,

DR := P#DB90.DBX 20.0 WORD 20);

UN DB90.DBX 42.0;

U( ;

U( ;

L DB90.DBW 28;

L W#16#7;

<=I ;

) ;

O ;

U( ;

L DB90.DBW 28;

L W#16#A;

>=I ;

) ;

) ;

L S5T#5S;

SE "TDelayCPUFault";

U "TDelayCPUFault";

= "Diagnostica".Errore_CPU1;

UN DB90.DBX 42.0;

U( ;

U( ;

L DB90.DBW 30;

L W#16#7;

<=I ;

) ;

O ;

U( ;

L DB90.DBW 30;

L W#16#A;

>=I ;

) ;

) ;

L S5T#5S;

SE "TDelayCPU2Fault";

U "TDelayCPU2Fault";

= "Diagnostica".Errore_CPU2;

UN DB90.DBX 42.0;

U DB90.DBX 22.4;

= "Diagnostica".Master_1;

UN DB90.DBX 42.0;

U DB90.DBX 22.5;

= "Diagnostica".Master_2;

NETWORK

TITLE =Fault ET 200 Node 3

// ET200 3

CALL "RDSYSST" (//SFC 51 "RDSYSST" (lettura lista stati di sistema)

REQ := TRUE,

SZL_ID := W#16#C75,//Read diagnostic status data

INDEX := W#16#1FF2,//Card diagnostic address

RET_VAL := DB90.DBW 40,

BUSY := DB90.DBX 42.0,

SZL_HEADER := #AKT_SZL_HEADER,

DR := P#DB90.DBX 20.0 WORD 20);

//Master DP1 e problemi di comunicazione su DP0

UN DB90.DBX 42.0;

U DB90.DBX 34.0;

U DB90.DBX 35.1;

= "Diagnostica".ET_200_3_2;

//Master DP0 e problemi di comunicazione su DP1

UN DB90.DBX 42.0;

U DB90.DBX 34.1;

U DB90.DBX 35.0;

= "Diagnostica".ET_200_3_1;

//Non comunica ne DP0 ne DP1

UN DB90.DBX 42.0;

U DB90.DBX 35.0;

U DB90.DBX 35.1;

= "Diagnostica".SlaveDP3;

NETWORK

TITLE =Fault ET 200 Node 4

// ET200 4

// ET200 4

CALL "RDSYSST" (//SFC 51 "RDSYSST" (Read system status list)

REQ := TRUE,

SZL_ID := W#16#C75,//Read disgnostic data

INDEX := W#16#1FEE,

RET_VAL := DB90.DBW 40,

BUSY := DB90.DBX 42.0,

SZL_HEADER := #AKT_SZL_HEADER,

DR := P#DB90.DBX 20.0 WORD 20);

//Master DP1 e problemi di comunicazione su DP0

UN DB90.DBX 42.0;

U DB90.DBX 34.0;

U DB90.DBX 35.1;

= "Diagnostica".ET_200_4_2;

//Master DP0 e problemi di comunicazione su DP1

UN DB90.DBX 42.0;

U DB90.DBX 34.1;

U DB90.DBX 35.0;

= "Diagnostica".ET_200_4_1;

//Non comunica ne DP0 ne DP1

UN DB90.DBX 42.0;

U DB90.DBX 35.0;

U DB90.DBX 35.1;

= "Diagnostica".SlaveDP4;

NETWORK

TITLE =Fault ET 200 Node 5

// ET200 5

// ET200 5

CALL "RDSYSST" (//SFC 51 "RDSYSST" (lettura lista stati di sistema)

REQ := TRUE,

SZL_ID := W#16#C75,//read system status data

INDEX := W#16#1FEC,// Diagnostic address of the card

RET_VAL := DB90.DBW 40,

BUSY := DB90.DBX 42.0,

SZL_HEADER := #AKT_SZL_HEADER,

DR := P#DB90.DBX 20.0 WORD 20);

//Master DP1 e problemi di comunicazione su DP0

UN DB90.DBX 42.0;

U DB90.DBX 34.0;

U DB90.DBX 35.1;

= "Diagnostica".ET_200_5_2;

//Master DP0 e problemi di comunicazione su DP1

UN DB90.DBX 42.0;

U DB90.DBX 34.1;

U DB90.DBX 35.0;

= "Diagnostica".ET_200_5_1;

//Non comunica ne DP0 ne DP1

UN DB90.DBX 42.0;

U DB90.DBX 35.0;

U DB90.DBX 35.1;

= "Diagnostica".SlaveDP5;

NETWORK

TITLE =Errore ET 200 Nodo 6

// ET200 6

// ET200 6

CALL "RDSYSST" (//SFC 51 "RDSYSST" (lettura lista stati di sistema)

REQ := TRUE,

SZL_ID := W#16#C75,//Read status diagnostic data

INDEX := W#16#1FEA,

RET_VAL := DB90.DBW 40,

BUSY := DB90.DBX 42.0,

SZL_HEADER := #AKT_SZL_HEADER,

DR := P#DB90.DBX 20.0 WORD 20);

//Master DP1 e problemi di comunicazione su DP0

UN DB90.DBX 42.0;

U DB90.DBX 34.0;

U DB90.DBX 35.1;

= "Diagnostica".ET_200_6_2;

//Master DP0 e problemi di comunicazione su DP1

UN DB90.DBX 42.0;

U DB90.DBX 34.1;

U DB90.DBX 35.0;

= "Diagnostica".ET_200_6_1;

//Non comunica ne DP0 ne DP1

UN DB90.DBX 42.0;

U DB90.DBX 35.0;

U DB90.DBX 35.1;

= "Diagnostica".SlaveDP6;

END_FUNCTION

---------------------------------------------------------------------------------

Basta copiarlo come file di testo, salvarlo come diagnosi.awl, importarlo come sorgente e poi ricompilarlo, creerà una FC90 ed una db90.

Spero che ti sia utile.

Usa molto anche l'aiuto sulla funzione SFC51 che è la chiave di tutta la diagnostica siemens.

Ciao,

Vittorio

Modificato: da vebernasconi
Link al commento
Condividi su altri siti

Eccoti anche un altro ob, in effetti l'OB82, ma è troppo lungo per postarlo.

Te ne copio un pezzettino...

-------------------------------------------------------------------------------------------------------ORGANIZATION_BLOCK "I/O_FLT1"

TITLE = "I/O Point Fault"

//INTERVENTO PER RICHIAMO DA SCHEDE CON INTERRUPT DI DIAGNOST(AI)

//Call on Fault by peripheral with diagnostic interrupt

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

ALLARME : BOOL ;

RIENTRO : BOOL ;

INGRESSI : BOOL ;

USCITE : BOOL ;

END_VAR

BEGIN

NETWORK

TITLE =Evento entrante o uscente?(Check if alarm is gone or incoming)

//Controllo il tipo di periferica in errore e se l'evento si è verificato oppure

//se l'evento è stato risolto

//

//Check wich peripheral type is in fault and if the event is coming or gone

//

U( ;

L #OB82_EV_CLASS; // tipo di evento (TYPE OF EVENT)

L B#16#39; // evento in arrivo (EVENT COMING)

==I ;

) ;

= #ALLARME;

TAK ; // Scambia ACCU1 con ACCU2 ( exchange ACCU1 and ACCU2)

L B#16#38; // evento in partenza (ALARM GOING)

==I ;

= #RIENTRO; // allarme rientrato (NO ALARM)

// Se ho l'allarme allora controllo se la periferica è in ingresso

// Got the alarm? then check if it's on input peripheral

U #ALLARME; // allarme arrivato (ALARM PRESENT)

U( ;

L #OB82_IO_FLAG;

L B#16#54; // SCHEDA DI INGRESSO (INPUT MODULE)

==I ;

) ;

S "Diagnostica".ALlarme_Periferia_In;

// Oppure se la scheda è di uscita

// Or the failure in on output card

U #ALLARME;

U( ;

L #OB82_IO_FLAG;

L B#16#55; // scheda di Uscita (Output module)

==I ;

) ;

S "Diagnostica".ALlarme_Periferia_Out;

// Se invece l'allame è rientrato, allora resetto l'allarme

// Alarm on input peripheral gone? Reset alarm

U #RIENTRO; // allarme arrivato (ALARM PRESENT)

U( ;

L #OB82_IO_FLAG;

L B#16#54; // SCHEDA DI INGRESSO (INPUT MODULE)

==I ;

) ;

R "Diagnostica".ALlarme_Periferia_In;

// Oppure se la scheda è di uscita

// Alarm on ouput peripheral gone? Reset it

U #RIENTRO;

U( ;

L #OB82_IO_FLAG;

L B#16#55; // scheda di Uscita (Output module)

==I ;

) ;

R "Diagnostica".ALlarme_Periferia_Out;

NETWORK

TITLE =INDIRIZZO MODULO IN ERRORE ( Address of fault module)

L #OB82_MDL_ADDR;

T "Diagnostica".Indirizzo;

NETWORK

TITLE =Individuo la scheda con errore (Check wich card got fault)

//Controllo se ho il bit di scheda con errore e se così confronto l'indirizzo

//della scheda estratta con quello delle schede fino a scoprire quale scheda ho

//in avaria.

//Check if I've got the error bit on the card, if so, compare the address to find

//out wich is the card with failure

//

//*************************************************************************

// Rack1 Pos 0 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta (Fault Card taked out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 0;

==I ;

) ;

S "Diagnostica".Rack1_sch_I0;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 0;

==I ;

) ;

R "Diagnostica".Rack1_sch_I0;

//*************************************************************************

// Rack1 Pos 1 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 4;

==I ;

) ;

S "Diagnostica".Rack1_sch_I1;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 4;

==I ;

) ;

R "Diagnostica".Rack1_sch_I1;

//*************************************************************************

// Rack1 Pos 2 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 8;

==I ;

) ;

S "Diagnostica".Rack1_sch_I2;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 8;

==I ;

) ;

R "Diagnostica".Rack1_sch_I2;

//*************************************************************************

// Rack1 Pos 3 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 12;

==I ;

) ;

S "Diagnostica".Rack_sch_I3;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 12;

==I ;

) ;

R "Diagnostica".Rack_sch_I3;

//*************************************************************************

// Rack 2 Pos 5 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 52;

==I ;

) ;

S "Diagnostica".Rack2_schI5;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 52;

==I ;

) ;

R "Diagnostica".Rack2_schI5;

//*************************************************************************

// Rack 2 Pos 6 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 56;

==I ;

) ;

S "Diagnostica".Rack2_schI6;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 56;

==I ;

) ;

R "Diagnostica".Rack2_schI6;

//*************************************************************************

// Rack 2 Pos 7 scheda DI

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 60;

==I ;

) ;

S "Diagnostica".Rack2_schI7;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 60;

==I ;

) ;

R "Diagnostica".Rack2_schI7;

////////////////////////////////////////////////////////////////////////

//=====================================================================

///////////////////////////////////////////////////////////////////////

//*************************************************************************

// Rack 3 Pos 0 scheda DO

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_Out; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 0;

==I ;

) ;

S "Diagnostica".Rack3_schO0;

UN "Diagnostica".ALlarme_Periferia_Out; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 0;

==I ;

) ;

R "Diagnostica".Rack3_schO0;

//*************************************************************************

// Rack 4 Pos 0 scheda AI512

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 512;

==I ;

) ;

S "Diagnostica".Rack4_schAI512;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 512;

==I ;

) ;

R "Diagnostica".Rack4_schAI512;

//*************************************************************************

// Rack4 Pos 1 scheda AI528

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 528;

==I ;

) ;

S "Diagnostica".Rack4_schAI528;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 528;

==I ;

) ;

R "Diagnostica".Rack4_schAI528;

//*************************************************************************

// Rack4 Pos 2 scheda AI544

//*************************************************************************

U "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #ALLARME;

U( ;

L "Diagnostica".Indirizzo;

L 544;

==I ;

) ;

S "Diagnostica".Rack4_schAI544;

UN "Diagnostica".ALlarme_Periferia_In; // errore scheda estratta ( Fault Card taked Out)

U #RIENTRO;

U( ;

L "Diagnostica".Indirizzo;

L 544;

==I ;

) ;

R "Diagnostica".Rack4_schAI544;

////////////////////////////////////////////////////////////////////////

//=====================================================================

///////////////////////////////////////////////////////////////////////

NETWORK

TITLE =Diagnosi CP443A

U #ALLARME;

U "Diagnostica".ALlarme_Periferia_In;

U( ;

L "Diagnostica".Indirizzo;

L 8177;

==I ;

) ;

S "AlmCP443A";

U #RIENTRO;

UN "Diagnostica".ALlarme_Periferia_In;

U( ;

L "Diagnostica".Indirizzo;

L 8177;

==I ;

) ;

R "AlmCP443A";

NETWORK

TITLE =Diagnosi CP443B

U #ALLARME;

U "Diagnostica".ALlarme_Periferia_In;

U( ;

L "Diagnostica".Indirizzo;

L 8176;

==I ;

) ;

S "AlmCP443B";

U #ALLARME;

UN "Diagnostica".ALlarme_Periferia_In;

U( ;

L "Diagnostica".Indirizzo;

L 8176;

==I ;

) ;

R "AlmCP443B";

END_ORGANIZATION_BLOCK

----------------------------------------------------------------------------

Se trovi altre notizie posta!

Ciao,

Vittorio

Link al commento
Condividi su altri siti

per motivi di tempo (troppo lavoro) non ho valutato il codice postato, ma a priori so che mi sarà utile.

Comunque la FB125 scaricabile dal sito di Siemens è un ottimo strumento.

Ad ogni modo ho optato per una diagnostica più generica così segnalerò un generico fault sul remotato xyz e questo tranquillamente in OB82

Link al commento
Condividi su altri siti

  • 1 year later...
Martinelli.Paolo

Buonasera a tutti...

Ho guardato i post precedenti perchè devo realizzare la diagnostica di tre moduli ET200M. Devo diagnosticare se il modulo Et200 è ok e anche se le schede I/O dei moduli sono ok.

Avevo fatto quanche tempo fa la diagnostica dei moduli ET200s utilizzando la funzione SFC13 (Diagnostica di Slave DP) è funzionava bene. Con i moduli ET200M non funziona correttamente anche se in teoria (anche secondo il tecnico siemens che ho cantattato) dovrebbe funzionare.

Qualcuno mi saprebbe dire se ha mai fatto la diagnostica con la SFC13 ed ha avuto problemi?

Ho guardato anche la FB105 come postato in precedenza ma l'. che ho scaricato non spiega molto bene come funziona e come deve essere gestita...

Qualcuno mi saprebbe dare qualche consiglio?

Grazie

Buona serata e buon fine settimana....

Ciao ciao

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...