Vai al contenuto
PLC Forum


Controllo Ciclico - Blocco di watchdog.... o no?


Messaggi consigliati

Inserito:

Buonasera a tutti. Sto realizzando un applicativo che deve memorizzare all'interno del plc fino a 20 pezzi. In parole povere salvo in una db le ultime 20 tipologie di lavorazione che sono state applicate al pezzo in questione. Per riconoscere se quel pezzo è già stato lavorato, un pc spedisce un codice di 8 cifre tramite seriale al plc che deve controllare se tale codice è presente dentro di esso. Per fare ciò, ho realizzato un ciclo il cui codice è sotto. Non capisco perché la macchina va in stop alla ricezione dei dati a causa del watchdog. Per verificare che fosse effettivamente quello il problema l'ho innalzato in modo pauroso a 3s e difatti va in stop dopo tale tempo. Il problema è che non rimane incastrato all'interno del ciclo in quanto ho messo per prova anche una MW che incremento ad ogni passaggio ma rimane costantemente a 0. Il ciclo si blocca appena effettuato il controllo.... Qualcuno sa capirci dov'è che sbaglio??? la CPU è una 313C. Per il ciclo ho utilizzato una FC e la variabile puntatore è locale. Grazie mille in anticipo.

U "DB_RCV".NDR

SPBN m000 // salta alla fine del blocco

L 0 // azzero il puntatore

T #puntatore

m001: SET

L 60 // la dimensione di ogni singolo report è 60 byte

L 8

*I

L #puntatore

*I

LAR1

U(

AUF DB1

L DBB [AR1,P#0.0]

L "DB Ricezione dati".Dato[0]

==I

)

U(

AUF DB1

L DBB [AR1,P#1.0]

L "DB Ricezione dati".Dato[1]

==I

)

.............. continuo controllo dei dati arrivati

SPBN m005 // punto in cui la diagnostica mi dice che si blocca il ciclo e mi manda in stop la CPU

AUF DB1

U(

L DBD [AR1,P#40.0]

L 0.000000e+000

<>R

)

..... blocco di istruzioni per verifiche interne al report

SPBN m008

....... blocco di istruzioni

BEA

m008: NOP 0

.... blocco di istruzioni

SPA m006 //salta a una parte successiva nella FC

m005: NOP 0

AUF DB1

U(

L DBB [AR1,P#0.0]

L ' '

==I

)

SPBN m002

.... blocco di istruzioni

SPA m001

m002: NOP 0

L #puntatore // aggiorno il puntatore al successivo

L 1

+I

T #puntatore

U(

L #puntatore

L 20

>=I // il puntatore è arrivato al limite?

)

SPBN m007

SPA m003 // verso il blocco di istruzioni successive

m007: L MW 150 // MW di test per vedere se il ciclo funziona o no

L 1

+I

T MW 150

SPA m001 // salto all'inizio


Inserita:

se può essere di ulteriore aiuto questa sotto è la diagnostica che viene fuori

Evento 4 di 10: ID di evento 16# 4568

STOP dovuto ad errore temporale (OB non caricato o non caricabile, oppure FRB assente)

Punto di interruzione nel programma utente: Programma ciclico (OB 1)

Classe di priorità: 1

N. FC: 7

Indirizzo blocco: 130

Stato di funzionamento attuale: RUN

Stato di funzionamento richiesto: STOP (interno)

Errore interno, Evento entrante

15:24:47:580 20.06.07

Evento 5 di 10: ID di evento 16# 3501

Superamento tempo di ciclo

Tempo di esecuzione dell'ultimo ciclo (ms): 3000

Causa: OB1 è stato avviato, al termine di OB1

dell'OB di causa: Programma ciclico (OB 1)

classe di priorità di causa: 1

OB richiesto: OB di errore temporale (OB 80)

classe di priorità: 26

Errore interno, Evento entrante

15:24:47:568 20.06.07

Grazie mille ancora in anticipo

Inserita:

Inanzitutto se programmi OB 80

la cpu resta in run e puo' darsi che riesci a vedere qualcosa in stato

Poi ti diro' che di cose simili ne ho fatte tante , ma non riesco ad interpretare il tuo codice

ho un'applicazione funzionante ( simile ) cosi' fatta ( circa ) :

OPN DB 100

L MD 100 // puntatore da 0 a 20

L 8

*D

T MD 200 // md temporanea anche LD

L MD 200 // md temporanea anche LD

L 20 // passo dei tuoi dati

*D

T MD 210 // numero del byte nella DB per i primi 4 byte da controllare

L MD 210

L 32

+D

T MD 212 // numero del byte nella DB per i secondi 4 byte da controllare

Controllo i dati ricevuti in MD120 e MD122 se uguali

A(

L DBD [MD 210]

L MD 120

==D

)

A(

L DBD [MD 212]

L MD 130

==D

)

// se diversi incrementi di 1 MD100 ( come gia' fai )

// controlli se sei al limite ( come gia' fai )

// risalti all'inizio ( come gia' fai )

comunque dal tipo di errore ti si inloppa dentro e non esce piu'

come ti ho gia detto se programmi l'OB

forse capisci esattamente dove ti si inloppa

ciao

Luca

Inserita:

Grazie luca, ma poi ho trovato il mio errore...

SPBN m002

.... blocco di istruzioni

SPA m001

m002: NOP 0

L'errore stava in questo controllo.... proticamente, all'interno di m002 non avevo messo lo stesso l'incremento del puntatore.... mi ci è voluto un pò ma alla fine l'ho trovato.... Grazie mille dell'aiuto ;)

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