Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

CodESys: librerie OSCAT

PLC, servomotori, inverter...robot

Moderatori: Foto Utentedimaios, Foto Utentecarlomariamanenti

1
voti

[1] CodESys: librerie OSCAT

Messaggioda Foto UtenteCandy » 4 nov 2012, 1:51

Su indicazione di Foto UtenteAOX ho scaricato e provato le librerie dell'OSCAT, una vera miniera d'oro, nulla di immaginabile.
E' da un mese e più che ci giro attorno e devo però dire di avere trovarto parecchi errori.
1) Qua e la nei vari blocchi, dove si lavora attorno ai buffer S_BUF ed R_BUF, c'è molta confusione sulla dichiarazioni delle variabili che lavorano sulla dimensione del buffer: sia passa da dichiarazioni di interi nelle varianti con o senza segno, fino alle doppie word. Non ci si accorge di nulla se i buffer sono relativamente piccoli, di pochi kB, ma, se si intende lavorare un poco più massicciamente sulla memoria, i problemi vengono a galla. Nello specifico, se si tenta di implementare un client HTTP che scambi più di 32 e rotti kB di dati, va tutto a rotoli. La prima operazione che ho dovuto fare è stato ripassare tutta la libreria ed unificare l'elemento SIZE dei buffer al tipo DWORD, ripassandomi anche poi tutti iblocchi dove ne era fatto uso e le variabili connesse.

2) Un errore più grave l'ho trovato nel blocco funzione IP_CONTROL. Non teneva affato in conto delle limitazioni delle funzioni della libreria ADS di Send e Receive, che ammetto un buffer di dimensione massima di 8k. Evidentemente sono state provate ed usate sempre e solo per lo scambio di pochi byte.

3) lo stesso errore del punto 2 lo ha il blocco funzione FILE_SERVER, non tiene conto delle limitazioni della libreria ADS per il Read e Write e, quindi, se si tenta di lavorare su file di dimensioni maggiori ad 8k si ripete il precedente problema.

4) DNS_CLIENT, SNTP_CLIENT ed IP_CONTROL hanno una cattivissima gestione degli errori, o meglio, del ripristino in seguito ad errori. Soprattutto DNS_CLIENT ed IP_CONTROL, dopo un errore, magari causa mancara risposta del server o temporaneo isolamento dalla rete, non si svegliano più. L'attivazione booleana si tolta e riattivata non produce effetti perché agli affetti non azzera la variabile "state" dei vari servizi che, quindi, restano piantati nello state che ha dato errore e non vi escono più. Anche qui ho dovuto intervenire per rendere più funzionali i blocchi funzione.

Altre caratteristiche ritengo si possano ancora migliorare. Non più errori, ma differenze di punti di vista. Il blocco funzione RTC ad esempio, non dispone dei millisecondi parziali dell'ultimo secondo, che devono quindi essere ricostruiti, il FILE_SERVER non dispone di una modalità di append efficace. Ma, lavorando col riposizionamento del puntatore, non era immediato conoscere l'offset a cui puntare per non sovrascrivere dati. Piuttosto che citare il fatto che il client HTTP implementa solo il metodo GET.

Una gan bella libreria, che mi è stata molto utile evendomi evitato di reinventare molte funzioni, ma, certo, è ancora molto grezza.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[2] Re: CodESys: librerie OSCAT

Messaggioda Foto UtenteAOX » 4 nov 2012, 14:34

Penso che come tutte le librerie gratis ed open source vada presa con le pinze e almeno analizzata, ripulita e verificata prima di integrarla nel proprio software. Comunque è una buona sorgente di spunti e tracce su come fare parecchie cose.
Probabilmente la libreria network è la più complessa delle tre e le funzioni fanno un uso troppo frazionato di parti di altre funzioni. Preferirei invece che ogni funzione fosse più autonoma e sotto controllo visivo.
Io le mie funzioni di SNTP, SMTP, HTTP, DNS client le avevo derivate da sorgenti in C già fatti ma comunque solo dopo una paziente ripulitura, sistemazione e verifica le ho integrate direttamente nel RTS.
Dalla libreria Oscat ho invece tratto spunto di piccoli pezzetti come il calcolo dell'ora legale, sempre però riportando il tutto in C. D'altra parte tu avevi chiesto una traccia, anche in C, da seguire per un Http client e comunque il lavoro fatto in tale libreria difficilmente si trova in giro col sorgente alla luce del sole.
Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
 
Messaggi: 232
Iscritto il: 20 mar 2011, 12:29

0
voti

[3] Re: CodESys: librerie OSCAT

Messaggioda Foto UtenteCandy » 4 nov 2012, 19:00

Io ho puntato sin da subito su quelle perché l'interfaccia con le librerie ADS è già implementata e, diversamente, avrei divuto convertire un progetto fatto in C++, che non è assolutamente facile da convertire.

Tuttavia, non è qui il problema, o sulla necessità di controllare e testare il codice di terze parti, ma semmai, la presenza di grandi errori, o problemi, che le rendono ancora grezze, dopo che sono dichiarate essere alla versione 3.11 ed oltre. Sembra invece non siano mai state usate.
Il mio intervento non voleva essere una critica od una richiesta, ma una osservazione.
Non sono in grado di lasciare queste osservazioni in tedesco su loro sito. Le ho fatte qui, pubblicamente. Chissa che non siano aleno utili a qualche utente di lingua nazionale.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[4] Re: CodESys: librerie OSCAT

Messaggioda Foto UtenteAOX » 4 nov 2012, 19:53

Però, dopo questa lavorata e modifiche, ritieni di avere delle function block valide ed affifdabili?
Hai estratto lo stretto necessario in una tua libreria riveduta, corretta e semplificata per quello che ti serve, oppure hai corretto la libreria originale lasciando tutto il resto?
Io le ho solo guardate per curiosità ma so di alcuni che per esempio hanno usato il Modbus TCP/IP trovandolo funzionante. Forse non avranno avuto esigenze spinte come le tue in memoria o magari non tutte le parti sono così da limare.
Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
 
Messaggi: 232
Iscritto il: 20 mar 2011, 12:29

0
voti

[5] Re: CodESys: librerie OSCAT

Messaggioda Foto UtenteCandy » 4 nov 2012, 19:58

Dopo le prime ore di lavoro, ho optato per ribattezzarla come mia. Ne ho fatto una copia e, ora, lavoro su una libreria completa di tutto, ma modificata da me. Modificata nel senso di corretta e migliorata, mantenendo l'impianto originario.
Strappare dei pezzi da una simile libreria è come strappare il cuore da una persona in vita.

C'è poi il fatto dei commenti in tedesco. Non mi sono perso per riscriverli.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[6] Re: CodESys: librerie OSCAT

Messaggioda Foto UtenteAOX » 4 nov 2012, 20:07

Approvo la scelta di tenere una copia parallela ma corretta. L'unica controindicazione è che eventuali aggiornamenti o evoluzioni da parte loro costringerebbero a rifare le migliorie sulla nuova versione. Non sarebbe male invece se le integrassero loro ma comprendo molto bene che non è facile parlare in inglese con dei tedeschi. Così però almeno l'open source potrebbe progredire ed evolvere in meglio.
Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
 
Messaggi: 232
Iscritto il: 20 mar 2011, 12:29

0
voti

[7] Re: CodESys: librerie OSCAT

Messaggioda Foto UtenteCandy » 4 nov 2012, 20:09

Beh, allora l'errore è per primo mio. Non ho lasciato traccia, con commenti, delle modifiche, che ora mi è difficile ricostruire bene, se non andando a memoria, o con confronti.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54


Torna a Automazione industriale ed azionamenti

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite