Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




moka7 dbread


Messaggi consigliati

Inserito:

Buongiorno a tutti.

 

Esiste un limite in numero per la lettura dei DB in moka7?

 

Es:

Client.SetConnectionType(S7.OP);

int Result = Client.ConnectTo(IpAddress, Rack, Slot);

if (Result==0)

  while(true)

  {

   byte[] Buffer1 = new byte[60];

   int result1 = Client.ReadArea(S7.S7AreaDB, 1, 0, 60, Buffer);

   if (result1 !=0)

   break;

   …

   …

   byte[] Buffer2 = new byte[60];

   int result2= Client.ReadArea(S7.S7AreaDB, 2, 0, 60, Buffer2);

   if (result2 !=0)

   break;

   …

   …

   byte[] Buffer3= new byte[60];

   int result3 = Client.ReadArea(S7.S7AreaDB, 3, 0, 60, Buffer3);

   if (result3! =0)

   break;

   …

   …

   //ripetiamo il codice per n volte quanti sono i db da leggere.

   byte[] Buffer_n= new byte[60];

   int result_n = Client.ReadArea(S7.S7AreaDB, n, 0, 60, Buffer_n);

   if (result_n ! =0)

   break;

   …

   …

   }

Client.Disconnect();

 

In questo caso come gestisce la comunicazione il processore della CPU?

Esiste un modo più efficiente (senza pensare al tempo di elaborazione e creare nuovi DB) per ottenere lo stesso risultato?

 

 

Infinite grazie a Davide Nardella per il suo grande lavoro.

 

Grazie.


Inserita:
Quote

Esiste un modo più efficiente (senza pensare al tempo di elaborazione e creare nuovi DB) per ottenere lo stesso risultato?

 

Un modo più efficiente esiste per Snap7 (Moka7 è una versione ridotta completamente in Java).

Con Snap7 puoi utilizzare Cli_ReadReadMultiVars (o Write) che può leggere più variabili posizionate in DB diverse in un unica funzione.

 

Ci sono comunque alcune controindicazioni:

  1. Puoi leggere max 20 variabili per volta
  2. La quantità complessiva dei dati deve rimanere all'interno del PDU.
  3. Ogni variabile contiene un descrittore nel telegramma di andata e ritorno per cui il payload finale diminuisce.

 

Quindi verresti a perdere il vantaggio della lettura indipendente dal PDU cioè la caratteristica di Snap7 di splittare in più telegrammi una richiesta di molti byte.

 

Comunque non mi è chiaro cosa intendi per "creare nuovi DB".

 

Un altro modo per migliorare l'efficienza è quello creare più client connessi alla stessa CPU e gestirli i thread separati.

Considera però che:

 

  1. hai bisogno di più risorse di comunicazione lato CPU, che magari hai già perché hai solo un HMI.
  2. La CPU gestisce una coda interna di canali attivi, e non è dato sapere come, che varia da processore a processore, per cui per CP esterne o CPU vecchie guadagneresti ben poco. In genere comunque vale la pena provare.

 

 

Quote

In questo caso come gestisce la comunicazione il processore della CPU?

 

Esattamente come sono scritte nel codice : trasferimenti sequenziali e sincroni (il successivo parte quando è completo il precedente).

 

Inserita:

Eseguendo lo script nel programma java,  il processore di comunicazione della CPU vede un pannello operatore che interroga una serie di DB in maniera sequenziale ed ordinata, allocando le risorse di elaborazione per una sola unità OP, è corretto?

 

Per gestire in totale autonomia la riconnessione alla CPU ( in caso di spegnimento problemi di rete ecc.) pensavo di crere un thread separato che controllasse lo stato della

connessione, cosa ne pensi?

 

 

Nello scrivere "creare nuovi DB" intendevo,  creare DB dove copiare il contenuto dei byte da leggere in una sola operazione tramite dbread.

 

Appena ho un po di tempo vedo di studiare il magico C++

 

Grazie.

 

 

 

 

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