Vai al contenuto
PLC Forum


Gestione Della Lettura Da Db Con Libnodave


AndreaD82

Messaggi consigliati

Salve a tutti,

vorrei chiedervi un parere in merito ad un progetto che ho appena iniziato,

prendendo spunto dalla libreria di Bruno per la comunicazione in TCP con libnodave

ho creato un programma con RealStudio e funziona! Riesco a leggere e scrivere i dati,

tutto perfetto e ne approfitto per fare i complimenti all'autore!

Senza il lavoro di Bruno penso che non sarei riuscito a fare un granchè!

Ma veniamo alla domanda, la lettura dei dati da plc verso il pc mi sembra un tantino lenta,

qual'è il modo migliore per leggere grandi quantità di dati dai blocchi della cpu?

Io utilizzo un thread per leggere ciclicamente tutti i dati dai vari db presenti nel plc,

creando un array di circa 500 elementi.

Dovrei forse utilizzare una lettura in blocco di tutti dati?

La cpu che utilizzo è una VIPA 314ST e uso Step7.

Sono un programmatore plc un po' inesperto e avrei bisogno dei vostri consigli.

Un saluto a tutti.

Andrea

Link al commento
Condividi su altri siti

  • 4 weeks later...

Ciao, probabilmente è lenta perchè tutte le volte oltre a leggere i valori prima ti connetti al PLC e poi ti disconnetti (e questo porta via un paio di secondi abbondanti come minimo).

Se così fosse, basta che esegui la connessione una volta sola ad inizio ciclo e poi la disconnessione a fine ciclo.

Ciao

Luca

Link al commento
Condividi su altri siti

  • 1 month later...

Ciao

Grazie per i complimenti, ultimamente sono rimasto assente perchè sto preparando uno starter kit sviluppato in Java per Android.

Confermo quello scritto da Luca, le operazioni di connessione e disconnessione richiedono un pochettino di tempo.

Con le prove che ho fatto io una volta instaurata la connessione una lettura non richiede oltre i 10ms, tra l'altro tra leggere 10 bytes o 100 bytes non cambia praticamente nulla.

Tieni solo presente che un singolo telegramma al massimo può avere 220 byte di dati, ma mi sembra che nello starter kit era già presente lo spacchettamento.

ciao

Bruno

Link al commento
Condividi su altri siti

Ciao Bruno,

ho provato a ricontrollare il codice, ma in realtà io faccio solo una connessione all'inizio del programma,

poi in un thread ho una serie di 8 letture di valori BOOL quindi 2 byte, con la readBytes,

quello che noto è che sembra un po' lento il refresh...

Naturalmente le 8 letture di valori di tipo BOOL è solo per un esempio, per vedere se posso integrarla nella mia applicazione.

Hai qualche consiglio da darmi?

Grazie

Andrea.

P.S. Grazie anche a Luca per la risposta.

Link al commento
Condividi su altri siti

Ciao Andrea,

cosa intendi per "serie di 8 letture di valori BOOL quindi 2 byte, con la readBytes" ?

esegui otto volte la readBytes ? oppure fai una readbytes che legge 2 bytes ?

cosa intendi per refresh lento ?

se vuoi un termine di paragone prova ad eseguire il progetto "TestLibNoDave" in VB6 che trovi dentro lo starter Kit che hai scaricato, vengono visualizzati i tempi per ogni operazione di lettura / scrittura con il PLC.

mentre scrivo ho provato a leggere DB e MERKER e il tempi di lettura di 200 bytes mi variano dai 15 ai 31 msec sia nel caso di DB che di Merker.

(il tempo di chiusura connessione sui 500 msec)

ciao

B

Modificato: da Bruno
Link al commento
Condividi su altri siti

  • 3 weeks later...

Ciao Bruno scusa per il ritardo nella risposta,

per motivi aziendali penso dovrò spostare tutto il programma in java,

per cui dovrò rifare tutto da capo, comunque mi sono già fatto un po le ossa.

Appena arrivo a questo punto con java vi aggiornerò!

Grazie mille per l'aiuto!

Andrea

Link al commento
Condividi su altri siti

  • 5 weeks later...

Ciao a tutti,

sono passato alla versione in Java, ho un problema, e volevo chiedervi un cosiglio,

dovrei leggere un DB contentente tutta la diagnostica che è grande 3060byte,

la libnodave ho letto che ha delle limitazioni come dimensioni del buffer di lettura,

come posso fare?

Un saluti.

Andrea

Link al commento
Condividi su altri siti

E' una soluzione alla quale ho pensato anche io, però comporta molto lavoro in più in fase lettura e ricomposizione del messaggio,

è l'unica soluzione possibile?

Ho scoperto un altra cosa, ho provato lo starter kit di Bruno in C# che utilizza la libreria libnodave in C ver.0.8.4.6 e non ho problemi a leggere un DB di 2kbyte (modificando il limite della libnodave) in un ciclo perpetuo e non ho problemi

mentre invece con java, che utilizza la libreria libnodave ver. 0.1 non riesco a farlo,

probabilmente dovrei cercare di utilizzare la libreria scritta in C.

Però con java è un problema...

Non capisco perchè sembra abbandonata la versione in java :(

Link al commento
Condividi su altri siti

Il messaggio accodato a questa discussione è stato spostato qui.

Gli accodamenti non sono ammessi perchè creano confusione.

Link al commento
Condividi su altri siti

Spero di non sbagliare a rispondere qui (Livio ha ragione per la confusione)....

SPACCHETTAMENTO:

Stai attento se usi il mio starter kit la lettura di 2K è spacchettata dalla libreria scritta da me, il messaggio singolo in un pacchetto S7 è sempre di circa 220 byte (devi tenere conto degli header).

Dai, non è così difficile fare un metodo che spacchetta in più comunicazioni una richiesta di lettura o scrittura di molti byte .... Fai delle limitazioni: esempio se devi fare 5 operazioni di lettura non dare il risultato fintanto che non termini tutto e limita il risultato positivo a tutte e cinque le operazioni ok e al risultato negativo non appena incontri un errore... in casi di retry riparti dall'inizio.

scrivi bene la funzione e la riutilizzerai !!!

ciao

B.

Link al commento
Condividi su altri siti

Grazie bruno,

in effetti alla fine ho fatto così! :)

Chissà perchè avevo paura che se creavo un sistema di impacchettamento si rallentava tutto...

Invece no!

Grazie a tutti per le risposte e l'aiuto!!!

Andrea

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