leonardi.mair Inserito: 4 novembre 2007 Segnala Inserito: 4 novembre 2007 Il server in discussione basato sulla libreria libnodave e tramiteun file di definizione degli items (linking nome simbolico a indirizzo dell'area DB nel plc)rende disponibili i valori in tcp/ip ad una libreria referenziabile in un progetto VB. Nel progeto VB si accede a queste tags con una sintassi del tipo: a=plc.item("prima tag") in lettura plc.item("prima tag")=b in scritturaC'è anche un simulatore che emula il comportamento del plc in modo tale da utilizzareil programma client senza avere fisicamente a disposizione il plc.
Bruno Inserita: 5 novembre 2007 Segnala Inserita: 5 novembre 2007 (modificato) Buongiorno !Il progetto sembra interessante, una domanda: cosa intendi per VB ? VB6 o VB.NET ?Penso che dovremmo dare strumenti in modo che la libreria sia referenziabile anche con il framework.Tornando ai problemi di connessione ho fatto una prova prima di iniziare la giornata lavorativa:1) Ho usato il programma sviluppato in VB6 "TestLibNoDave" che ho messo a disposizione nell'area upload/download2) Nel test ho usato la DLL della versione 0.8.23) Nel test ho eseguito una connessione ISO on TCP con un PLC S7300 (CPU 314C-2DP e CP 343-lean)4) Dopo la connessione ho eseguito un paio di letture su DB con successo5) Ho staccato il cavo ethernet6) Ho provato ad eseguire una lettura su DB e dopo un timeout (sembravano 5 sec) è ritornato il codice di errore7) Il programma non è terminato8) Ho provato ad eseguire altre letture senza successo9) Ho ricollegato il cavo ethernet10) Ho provato ad eseguire altre letture senza successo11) Eseguito disconnessione da PLC12) Ho ricomandato la connessione (eseguita con successo)13) Dopo la connessione ho potuto eseguire letture su DB con successoOggi in pausa pranzo controllo l'esempio in C#, non vorrei che manchi qualche gestione di errore.Magari se trovo il tempo provo anche con la DLL versione 0.8.4 (nei miei impianti sono ancora alla 0.8.2)Ciao Modificato: 5 novembre 2007 da Bruno
leonardi.mair Inserita: 5 novembre 2007 Autore Segnala Inserita: 5 novembre 2007 il problema si manifesta con letture cicliche di + datablock. Per esempio: timer (300ms) { Lettura DB400 Lettura DB401 Lettura DB402 ... Lettura DB450 // aggiornamento immagine interna // }Ad ogni lettura viene richiamata la funzione davereadbytes, dopodichè, alla fine della lettura di tutti i DB ci sarà un nuovo ciclo di timer. Nel tuo progetto c# ho inserito molte aree DB da leggere e l'ho lasciato ciclare.Ho poi scollegato il cavo e succedeva che rimaneva bloccato dal s.o., come succede con il mio.Utilizzando invece s7online(mpi con cp5611) si verifica un errore irreversibile (quello di cui parlavo).
Bruno Inserita: 5 novembre 2007 Segnala Inserita: 5 novembre 2007 (modificato) Stavo giusto per postare che il test appena fatto con l'esempio in C# è andato a buon fine quando ho letto il tuo ultimo messaggio.ok !Consideriamo però che i due esempi messi nell'area upload/download servivano come indicazione sul modo di operare con la DLL, nel serverche utilizzo nei miei impianti (con letture/scritture cicliche e senza interfaccia utente) dopo x errori di comunicazioni dichiaro chiusa la comunicazione(eseguo anche il cleanUP) e ciclicamente riprovo la connessione.NAturalmente cerco di discriminare certe scelte con il codice di errore, specie se ho più PLC collegati:Con un solo PLC collegato tutti i santi aiutano: puoi chiudere tutto e ritentare dall'inizio.Con più PLC collegati bisogna esser più oculati e disconnettere solo quello in errore (es: un quadro spento) e continuare le operazioni sugli altri.Proverò comunque a ripetere il tuo test (comunque con la gestione errore) per vedere di replicare il problema e vedere come affrontare la questione.ciaoBR1 Modificato: 5 novembre 2007 da Bruno
leonardi.mair Inserita: 5 novembre 2007 Autore Segnala Inserita: 5 novembre 2007 anch'io faccio la stessa cosa.Oggi ho modificato il timeout di comunicazione della libreria, in ethernet tuttosi è sistemato. Il problema grosso è sempre con MPI via cp.
Bruno Inserita: 6 novembre 2007 Segnala Inserita: 6 novembre 2007 L'utilizzo del collegamento MPI via CP implica, se non sbaglio, il collegamento S7ONLINE.Io lo evito sempre in quanto utilizza un DLL proprietaria della siemens, con i relativi problemidi licenze, installazioni e configurazioni. (senza contare il fatto che non sono allegati i sorgenti).Le volte che ho utilizzato il protocollo MPI con libnodave in un impianto avevo fatto installare ilPC Adapter seriale in modo da non dover installare null'altro che il mio protocollo.Nel caso di altri supporti bisognerebbe verificare che con l'acquisto della scheda (CP o Adattatore USB)venga fornito un CD che insieme al protocollo sviluppato permetta configurazione e collegamento, il testva fatto su un PC "vergine" sicuramente senza aver installato cose tipo S7 manager o WinCC flex.Io considero conveniente l'installazione di una scheda di rete ethernet sul PLC (la CP-343 lean) è abbastanzaeconomica, il cablaggio è semplice e i vantaggi sono vari e tali da giustificarne la spesa per quegli impiantiche necessitano di una supervisione (non sarà gratis ???) CiaoBR1
borinid Inserita: 7 novembre 2007 Segnala Inserita: 7 novembre 2007 Salve a tutti,devo implementare un sistema di controllo degli alcuni impianti, presumibilmente attraverso PLC S7200. So, e ho già provato, che esiste da Siemens OPC server che permette di far colloquiare PC e PLC tramite Ethernet. Ho visto però che esiste questa libnodave che dovrebbe permettere ad un programmatore di avere le stesse funzionalità di un OPC gratuitamente, Secondo voi è consigliabile utilizzarla anche in applicazioni "spinte" (non dovrebbe essere il mio caso) o è più che altro una libreria per amatori?Grazie 1000Daniele.
leonardi.mair Inserita: 7 novembre 2007 Autore Segnala Inserita: 7 novembre 2007 libnodave funziona egreggiamente anche per applicazioni spinte.Io la utilizzo in impianti con 5 pc collegati in rete e 2 plc. Per ogni pc vengono caricati circa(dipende dalla funzione) 10-15 DB con 300-500 byte per DB.Il tempo di aggiornamento delle variabili nel client dipende dal tipo di cpu(+ lenta la 300 che ha un unico processore, anche tecnology). Nel mio caso si passa dai 250ms (s7 400) ai 500-600 (S7 300).
leonardi.mair Inserita: 7 novembre 2007 Autore Segnala Inserita: 7 novembre 2007 Ho utilizzato anche PBsoftnet + opc della Siemens,ma oltre a essere + lento,la Siemens ha continuamente cambiato versione degradando nelle prestazioni ecomplicando il setup. Prova a dire ad un cliente che deve prepararsi un pcdi configurare il softnet 2005 per esempio. Nel mio caso installo tutto conun pacchetto msi ed ho finito.Per rispondere a Bruno: Io installavo la scheda CP5611 + step7 con licenza che utlizzavo ancheper la teleassistenza, quindi l'utilizzo di s7onlinx era regolare. In questo caso, rispettoall'utilizzo di softnet, risparmiavo in quanto installavo un pacchetto che comunquemi era necessario e non installavo il softnet.Libnodave dovrebbe lavorare correttamente indipendentemente dal fattodi utilizzare o meno la libreria siemens (in particolar modo se legata adun prodotto licenziato). Inoltre anche nel server che hai messo come esempio hai inclusala possibilità di utilizzare la CP con /S7online, quindi se è inclusa deve funzionare correttamente.Il problema di puntamento è legato ad un valore null ritornato da s7onlinx. Questo fine settimanaprovo a controllare nella libreria cosa succede. Ho inoltre aggiunto un accorgimento: se utilizzo /s7online controllo che sia installata la libreria s7onlinx.dll prima di accedervi, altrimentil'accesso provoca un errore fatale dell'applicazione client. Per quanto riguarda il blocco in collegamente ethernet ho visto che la funzione Open() che apre laconnessione tcp/ip impiega diversi secondi a ritornare il controlla all'applicazione client in caso di mancanza di collegamento. Ho pensato di aggiungere un parametro alla funzione che mi consentaun minor numero di cicli di test prima di ritornare (come nel comando ping).
Bruno Inserita: 8 novembre 2007 Segnala Inserita: 8 novembre 2007 Ciao a tuttiPer quanto riguarda il collegamento con i PLC della serie S7-200, io non l'ho mai usato in un impianto, ho fatto solo alcune prove di comunicazione (consuccesso), ma ho letto che diverse persone utilizzano libnodave con tale PLC.Per quanto riguarda il sopracitato esempio in VB6 prevede il collegamento seriale (PPI) con il PLC ed è stato testato con successo da un utente del forum (varg), devi solo stare attento alla configurazione della seriale e indicare come DB1 la zona per leggere i registri V.Puoi vedere anche questa discussionePer leonardi.mair, mi piace l'idea della verifica installazione DLL. Entro lunedì dovrei riuscire anche io a testare libnodave con una CP5611, se trovo miglioramentiposto qualcosa...Per quanto riguarda l'utilizzo della DLL siemens forse non mi sono spiegato bene, intendevo dire che bisogna utilizzare software altrui solo con le licenze a posto (come mi sembra che tu stia facendo se installi S7 con licenza anche sui PC cliente). Sono sicuro che ognuno di noi vuole che il proprio lavoro sia riconosciuto e rispettato. Io sono felice quando mi dicono di aver utilizzato software o parti di software che avevo pubblicato, mi incazzerei molto se qualcuno utilizzasse mio software di strafugo .Ciao BR1
leonardi.mair Inserita: 8 novembre 2007 Autore Segnala Inserita: 8 novembre 2007 approposito... ho visto che in send/receve le nuove 300 non hanno + il limite dei 240 byte,ma 8192.Vista la lentezza nello scambio dati rispetto alle 400, se si scambiassero 8192 bytes per pacchettocon libnodave si colmerebbe il gap di velocità tra i due plc...
leonardi.mair Inserita: 9 novembre 2007 Autore Segnala Inserita: 9 novembre 2007 ho risolto il problema della dll s7onlinx mancante (se non installate step7).Basta applicare la modifica di seguito riportata.EXPORTSPEC HANDLE DECL2 openS7online(const char * accessPoint, HWND handle) { HMODULE hmod; int h,en; _setHWnd SetSinecHWnd; hmod=LoadLibrary("S7onlinx.dll"); if (NULL == hmod) { return -1; //exit on s7onlinx.dll not installed } if (daveDebug & daveDebugOpen) LOG2("LoadLibrary(S7onlinx.dll) returned %p)\n",hmod); SCP_open=GetProcAddress(hmod,"SCP_open"); if (daveDebug & daveDebugOpen) LOG2("GetProcAddress returned %p)\n",SCP_open); SCP_close=GetProcAddress(hmod,"SCP_close"); if (daveDebug & daveDebugOpen) LOG2("GetProcAddress returned %p)\n",SCP_close); SCP_get_errno=GetProcAddress(hmod,"SCP_get_errno"); if (daveDebug & daveDebugOpen) LOG2("GetProcAddress returned %p)\n",SCP_get_errno); SCP_send=GetProcAddress(hmod,"SCP_send"); if (daveDebug & daveDebugOpen) LOG2("GetProcAddress returned %p)\n",SCP_send); SCP_receive=GetProcAddress(hmod,"SCP_receive"); if (daveDebug & daveDebugOpen) LOG2("GetProcAddress returned %p)\n",SCP_receive); SetSinecHWnd=GetProcAddress(hmod,"SetSinecHWnd"); if (daveDebug & daveDebugOpen) LOG2("GetProcAddress returned %p)\n",SetSinecHWnd); en=SCP_get_errno(); h=SCP_open(accessPoint); en=SCP_get_errno(); LOG3("handle: %d error:%d\n", h, en); SetSinecHWnd(h, handle); return h; };[/code]
leonardi.mair Inserita: 9 novembre 2007 Autore Segnala Inserita: 9 novembre 2007 la funzione che crea l'errore fatale è daveConnectPLC. Questa settimana la controllo.
leonardi.mair Inserita: 9 novembre 2007 Autore Segnala Inserita: 9 novembre 2007 per Bruno: ho modificato il file di progetto in quanto non erano inclusi opens7online.h e opens7online.c (le funzioni di s7online non era riconosciuta nella libreria).
leonardi.mair Inserita: 9 novembre 2007 Autore Segnala Inserita: 9 novembre 2007 per Bruno: Ho provato questa mattina la dll ricompilata, tutte le funzioni restituiscono un valore, ma non (in ethernet) stabilisce un collegamento con il plc, mentre sostituendo quella originale il tutto funziona regolarmente. La versione è sempre la 8.4. Oggi purtroppo non ho il tempo di controllare il file di progetto, di sicuro manca ancora qualcosa.
Bruno Inserita: 9 novembre 2007 Segnala Inserita: 9 novembre 2007 Ho appena scaricato il file di progetto, appena possibile gli do un'occhiata.Non ti preoccupare non mi sembra un problema enorme, magari per le prove si utilizza la DLL precedente.Nella parte VB e C# devo aggiungere una modifica per la chiusura (in caso windows ed Ethernet) corretta del socket:dopo diverse connessioni e disconnessioni consucutive sembra che possa comparire un errore (problema segnalato in un'altra discussione).Magari al termine dei test potrei aggiornare la sezione upload/download o mettere un nuovo progetto completo di:Sorgenti libnodave completo di progetto per la compilazione con Dev-C++ (tool liberamente utilizzabile)Sorgenti di un progetto di esempio in C# utilizzabile con Visual C# 2005 Express o con SharpDevelop (tools liberamente utilizzabile)Sorgenti di un progetto di esempio in VB6 (anche se richiede un ambiente di sviluppo a pagamento )Nel fine settimana faccio prove e magari sistemo gli esempi.BR1
leonardi.mair Inserita: 9 novembre 2007 Autore Segnala Inserita: 9 novembre 2007 io non ho mai avuto problemi di chiusura connessioni (magari è latente), se ho tempo controllo anch'io il problema del progetto.Se fai l'upload dei progetti aggiungi anche il controllo sulla libreriache ho "post-ato".
leonardi.mair Inserita: 9 novembre 2007 Autore Segnala Inserita: 9 novembre 2007 Il collegamento ethernet con la dll ricompilata non va a buon fine perchèla funzione daveConnectPLC restituisce -1.
Bruno Inserita: 10 novembre 2007 Segnala Inserita: 10 novembre 2007 Ciao Ho preparato un paio di progetti per Dev-C++ in modo da compilare le DLL di libnodave (oltre all'ultima anche la 0.8.2 che uso in diversi impianti), e sono riuscito a fare le prove.Preparando e testando i progetti di test in VB6 e C# ho notato una discrepanza nei file:libnodave-0.8.4\Dot.NET\libnodave.net.cslibnodave-0.8.4\Excel And VB\Modul12.basnel download della libreria da sourceforge.Infatti nell'ultima versione della libreria è stata modificata la chiamata alla funzione openS7online daEXPORTSPEC HANDLE DECL2 openS7online(const char * accessPoint);aEXPORTSPEC HANDLE DECL2 openS7online(const char * accessPoint, HWND handle);Adesso in questi eseguo alcune prove, quindi metterò nella sezione upload/downloadun nuovo progetto con le correzioni opportune.Naturalmente contatterò Thomas Hergenhahn per cumunicargli la svista nella parte windows...Stay tunedBR1
leonardi.mair Inserita: 11 novembre 2007 Autore Segnala Inserita: 11 novembre 2007 non è una svista è stata appositamente modificata per risolvere un problema che aveva la versione 0.8.2.Io utilizzo la 0.8.4 da un anno con questa chiamata modificata.
leonardi.mair Inserita: 11 novembre 2007 Autore Segnala Inserita: 11 novembre 2007 ... sto adattando il server che utilizzo (di cui parlavo) perun suo libero utilizzo. Chiaramente attualmente è troppo specificoe adattato al mia realtà aziendale. Spero in settimana di riuscirea pubblicarlo.
Bruno Inserita: 12 novembre 2007 Segnala Inserita: 12 novembre 2007 La svista di cui mi riferivo, non è nella parte sorgente del codice in C.Ma nei due file da utilizzare quando si usa la DLL in windows e in VB6 o con DOT.NET.i file openS7online.c e openS7online.h sono corretti, sono gli altri due che debbono essere modificati.Ciao
Bruno Inserita: 12 novembre 2007 Segnala Inserita: 12 novembre 2007 Confermo quanto detto sopra, ecco i risultati dei primi test:VB6modificare il modolo per le dichiarazioni delle funzioni libnodaveda:Private Declare Function openS7online Lib "libnodave.dll" (ByVal peer As String) As Longa:Private Declare Function openS7online Lib "libnodave.dll" (ByVal peer As String, ByVal hw as Long) As LongAll'interno del software la chiamata di apertura cambiada:ph = openS7online("/S7ONLINE")a:ph = openS7online("/S7ONLINE", frm.hdwn) ' Si può anche usare l'API per ottenere l'handle in caso di applicazione console (ho provato con 0 e funziona)Dopo aver fatto le prove anche in DOT.NET pubblicherò gli esempi.stay tunedBR1
leonardi.mair Inserita: 15 novembre 2007 Autore Segnala Inserita: 15 novembre 2007 si, io utilizzo 0.
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