Dannyy Inserito: 5 giugno 2016 Segnala Share Inserito: 5 giugno 2016 Buonasera a tutti anche io sto usando la libreria Moka7 infinite grazie Davide Nardella. Volevo sapere se la procedura che sto attualmente utilizzando è corretta, la cpu è una 319pn/dp alla quale sono connessi in profibus 10 inverter, in mpi 8 pannellini ed in ethernet 2 pc pannel . La procedura che ho adottato e la seguente 1) attivo la connessione 2) ciclicamente ad intervalli di 2 secondi mando il lettura 13 db con circa 20 byte l'uno. Eventualmente dovessi gestire la ri-connessione in modo automatico cosa mi consigliate. (attualmente quando il plc viene spento si deve riavviare il programma java manualmente) Grazie. Link al commento Condividi su altri siti More sharing options...
Livio Migliaresi Inserita: 5 giugno 2016 Segnala Share Inserita: 5 giugno 2016 @dannnny separato il tuo messaggio inserito nella discussione, della quale si è conservato il link; accodarsi crea confusione nelle risposte. Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 6 giugno 2016 Segnala Share Inserita: 6 giugno 2016 Ogni programma che comunica con il PLC o altro equipment generico deve gestire gli errori di comunicazione (spegnimento PLC, disconnessione cavi ecc..), non è ammissibile dover riavviare il programma. Alle 3:00 di notte se si stacca un cavo a chi chiamano ?? Ti posto il corpo di un piccolo thread che uso spesso in Delphi (credo che sia abbastanza comprensibile). TS7Worker è una classe di tipo TThread, il metodo Execute è il corpo del thread vero e proprio, quando la procedura termina il thread viene deallocato. Terminated è una proprietà booleana del thread che viene messa a True quando vogliamo uscire dal programma (anche questo devi considerare). FController è una classe che si occupa della comunicazione ed ha al suo interno un oggetto di tipo Snap7Client. Esso ha la proprietà Status (intero) che assume il valore cChannelError quando si verifica un errore di comunicazione. Il metodo Connect() ritorna True quando la connessione è andata a buon fine altrimenti False e setta lo Status a cChannelError. Nel metodo Execute avviene la comunicazione con il PLC, Execute esce (mettendo Status a cChannelError) quando una delle operazioni ha dato esito negativo, cioè quando Client.ReadXXX ritorna un codice !=0. procedure TS7Worker.Execute; procedure CheckConnection; begin if FController.Status=cChannelError then begin repeat if not Terminated then Sleep(500); until Terminated or FController.Connect; end; end; begin FController.Connect; while not Terminated do begin CheckConnection; // Execution if not Terminated then FController.Execute; // Sleep if not Terminated then Sleep(FWorkDelay); end; end; Uso la stessa filosofia anche per comunicazioni TCP, a prescindere da Snap7. Link al commento Condividi su altri siti More sharing options...
Dannyy Inserita: 7 giugno 2016 Autore Segnala Share Inserita: 7 giugno 2016 Grazie per la disponibilità ! Link al commento Condividi su altri siti More sharing options...
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