tode72 Inserito: 20 giugno 2007 Segnala Inserito: 20 giugno 2007 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 #puntatorem001: 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 FCm005: 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 successivem007: 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
tode72 Inserita: 20 giugno 2007 Autore Segnala Inserita: 20 giugno 2007 se può essere di ulteriore aiuto questa sotto è la diagnostica che viene fuoriEvento 4 di 10: ID di evento 16# 4568STOP 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à: 1N. FC: 7Indirizzo blocco: 130 Stato di funzionamento attuale: RUNStato di funzionamento richiesto: STOP (interno)Errore interno, Evento entrante15:24:47:580 20.06.07Evento 5 di 10: ID di evento 16# 3501Superamento tempo di ciclo Tempo di esecuzione dell'ultimo ciclo (ms): 3000Causa: OB1 è stato avviato, al termine di OB1dell'OB di causa: Programma ciclico (OB 1)classe di priorità di causa: 1OB richiesto: OB di errore temporale (OB 80)classe di priorità: 26Errore interno, Evento entrante15:24:47:568 20.06.07Grazie mille ancora in anticipo
Luca Bab Inserita: 20 giugno 2007 Segnala Inserita: 20 giugno 2007 Inanzitutto se programmi OB 80la cpu resta in run e puo' darsi che riesci a vedere qualcosa in statoPoi ti diro' che di cose simili ne ho fatte tante , ma non riesco ad interpretare il tuo codiceho 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 controllareControllo 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'OBforse capisci esattamente dove ti si inloppaciaoLuca
tode72 Inserita: 20 giugno 2007 Autore Segnala Inserita: 20 giugno 2007 Grazie luca, ma poi ho trovato il mio errore... SPBN m002 .... blocco di istruzioniSPA m001 m002: NOP 0L'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
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora