Vai al contenuto
PLC Forum


Libnodave E Tcp - gestire connessioni cadute


Messaggi consigliati

Inserito: (modificato)

Ciao a tutti,

sto sviluppando un'applicazione usando libnodave per gestire un magazzino automatico tramite cavo ethernet.

Tutto funziona abbastanza bene ma ho un piccolo problema:

quando l'applicazione sta girando e comunicando col PLC se stacco e riattacco il cavo di rete il mio programma va in errore e si chiude.

Qualcuno ha avuto questo problema? Come l'avete risolto?

PS uso linux ma non credo faccia molta differenza.

GRAZIE

Modificato: da Luca_TGMX

Inserita:

Io lavoro in ambiente windows, ma come dici tu non dovrebbero esserci grosse differenze.

Se durante la comunicazione stacco il cavo di collegamento gestisco l'errore, quindi dopo aver decretato non più

valida la connessione ne libero le risorse.

A questo punto ritento la connessione ciclicamente a tempo.

Penso che il tuo unico problema sia identificare il punto in cui il software va in errore tale da chiudere l'applicazione,

in che cosa sviluppi ? Come gestisci gli errori/eccezzioni ?

In bocca al Lupo.

BR1

Inserita:

Programmo in c sotto linux.

Per adesso non faccio niente di tutto quello che hai detto tu, effettuo la connessione e ciclicamente leggo dal PLC con daveReadByte. Se stacco il cavo di rete la lettura si interrompe ma non si chiude il programma perchè controllo che il valore ritornato dalla funzione sia 0. Se però lo riattacco crasha tutto.

Più che altro vorrei sapere come posso, col programma in esecuzione, chiudere e riaprire la connessione. Tu come fai?

GRAZIE

Inserita:

Quando considero caduta la connessione al PLC eseguo in sequenza:

1) Disconnessione dal PLC:

daveDisconnectPlc(dc);

- naturalmente libero la memoria con daveFree(dc);

2) Disconnessione dall'interfaccia usata

daveDisconnectAdapter(di);

attendo almeno 500ms

3) Disconnessione dalla porta

closePort(ph);

4) Alla fine libero la memoria dell'interfaccia

daveFree(di)

Quindi con calma ritento (ciclicamente) con una nuova connessione....

Spero di esserti stato utile, ho visto che usi C e Linux (ho notato la tua richiesta sul forum sourceforge.net), se ti può essere di aiuto avevo messo

nella sezione upload/download di questo sito un esempi in C# in cui ci sono due pulsanti che eseguono la connessione e la disconnessione....

Ciao

Inserita:

Grazie per l'aiuto.

Ho fatto più o meno come mi hai consigliato ma con qualche modifica per venire in contro all'ambiente di sviluppo e alle librerie grafiche che utilizzo.

Più o meno faccio così:

- effettuo una lettura e controllo il valore restituito da daveReadBytes

- disconnetto dal plc e dall'interfaccia con: daveDisconnectPlc(dc) e daveDisconnectAdapter(di)

- libero la memoria con delete(dc) delete(di)

- chiudo il socket con close(fds.rfd)

Sembra funzionare. Che ne dici?

Tra l'altro non conoscevo le funzioni closePort e daveFree... nella documentazione non le ho trovate.

PS. per la precisione, dato che sono stato vago e potrebbe essere utile a qualcun'altro, utilizzo linux, programmo in c++ usando le librerie grafiche QT3.

Inserita:

In linea di massima mi sembra OK, io preferisco tenere attiva la connessione a meno di errori o di condizioni particolari, infatti per la connessione e la disconnessione il sistema rallenta (circa 500ms nel caso della disconnessione).

Ciao

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