Vai al contenuto
PLC Forum


libreria Moka7: giusta la mia procedura di utilizzo??


Messaggi consigliati

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


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

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