Vai al contenuto
PLC Forum


Esempi Libnodave


Messaggi consigliati

Inserita:

Vain nella home del portale trovi una sezione chiamata "up_download" e da lì potrai uplodare i tuoi file (naturalmente anche downloadare quelli che gli altri utenti ).

Attenzione !!! Devi fare un nuovo login (Magari con la stessa tua utenza ).

Ciao

BR1


  • Risposte 53
  • Created
  • Ultima risposta

Top Posters In This Topic

  • Bruno

    17

  • Adriano71

    15

  • tavazzi

    7

  • varg

    5

Top Posters In This Topic

Inserita:

Allora sabato allego le 2 classi con un esempio ed anche un piccolo simulatore di CP343 (sempre in C#).

Gabriele Corrieri
Inserita:

Ciao

se hai bisogno di ulteriore spazio i moderatori e colllaboratori sono disponibili per linkare file di grande formato, contatta qualcuno dello staff.

Ciao

Inserita:

Ho pubblicato un esempio funzionante (spero!) delle classi indicate in precedenza. Il file l'ho chiamato PLCForum...... (forse lo trovate cercando l'utente)

Inoltre ho aggiunto anche il simulatore di CP343 (in realta' e' un po' stupido ma e' quanto basta). Anche lui inizia con PLCForum.....

N.B. All'interno del programma (il primo) trovate una classe "conversione" che converte da byte a int16 e int32 e viceversa.

Se qualcuno conosce un metodo veloce per convertire un numero da 4 byte a float (real del PLC) mi aiuti.

Sul mio PC utilizzando l'esempio, ho ottenuto i seguenti dati:

Numero di letture medie di 2Kb di dati da PLC pari a 13.333 utilizzando una connessione WiFi.

La rete e' cosi' composta: FieldPG in WiFi->Access Point->Router 8 porte->CP343.

P.S. ho illustrato anche come evitare errori di cross-thread.

.: ho dimenticato di illustrare come scrivere al PLC.

Esempio di scrittura:

inserire un button e sul suo click incollare il seguente codice:

//Incremento il valore in DB101

int V = DB101[0] + 1;

if (V > 255) V = 0;

byte[] Vb =new byte[2];

Vb[0]=(byte)V;

Vb[1]=(byte)(255-Vb[0]);

s7SKWR[0].Invia(Vb, 101, 0, 2);

Questo legge il valore del byte 0 in DB101 lo incrementa di 1 e lo rispedisce al PLC.

Per il byte 1 fa' 255-byte0;

N.B. ricordarsi che bisogna sempre spedire e leggere un numero pari di byte.

Spero che i commenti nel primo programma vi siano di aiuto.

E scusate se sono un po' pasticcione

Saluti Adriano71

Inserita:

Ooops, nella tabella del software di test (bisognera' che gli dia un nome), la colonna "Numero di bye", riporta il byte nel DB sbagliato. Bisogna togliere 1.

Inoltre dove visualizza le letture eseguite la scritta "Tempo tra letture", in realta' deve essere "Tempo tra 10 letture".

Se qualche moderatore mi spiega come poter spedire una nuova versione senza passare un duplicato le saro' grato.

P.S.: per adesso utilizzate questo esempio, fatemi sapere se ci sono problemi, poi nella prossima versione li aggiustero':

Risaluti Adriano71

Gabriele Corrieri
Inserita:

Ciao Adriano

nella gestione upload non è tecnicamente possibile, per fare ciò dovresti scrivere a un amministratore che ha i diritti su quella sezione di PLCForum.

Se mandi i file a un moderatore o collaboratore egli può linkare e aggiornare le versioni, per fare ciò contattatalo via email, quando avrai l'indirizzo email potrai allegare i files che ti saranno pubblicati e linkati.

Ciao

Inserita:

x Bruno : ho fatto un test rapido con LibNoDave. In Delphi ho acquisito i l componente e compilato l'esempio. Niente male con i tempi, ma' che tu sappia, con questo componente si e' limitati ad un max di circa 220 bytes x ciclo ? guardando il sorgente sembrerebbe che ci siano 2 diverse funzioni di lettura, a seconda della q. di dati da leggere. Hai indagato in merito ? Ciao, Sergio

Inserita:

Mi rispondo da solo (dalle FAQ di LibNoDave) :

Q: What is the largest block of bytes LIBNODAVE can read/write to a PLC?

A: This is limited by the maximum length of a PDU, which in turn depends on your CPU type.For 240 byte PDU length, you can read 222 bytes and write 218 bytes in a single transaction.

Q: The xy software can write larger blocks, or?

Inserita:

A: No,whichever software hides that limit from you has to split larger blocks into multiple requests.

Inserita:

Esattamente...

Anche se era stato scitto anche in questa stessa discussione (pochi giorni fa), se dai un'occhiata all'esempio pubblicato puoi trarne un'idea di come fare a superare qusto limite.

Infatti io ho fatto una funzioncina che spacchetta i messaggi in modo che l'utente del mio modulo non si debba preuccupare di certi limiti.

Ciao

Inserita:

x Bruno.

Ho provato a guardare le LibNoDave ma l'esempio in C# non sono riuscito a farlo funzionare.

Non avresti un esempio diverso dal quello fornito?

Grazie Adriano

Inserita:

Posso provare a postare qualcosa di non definitivo (una specie di VAT)

fra un paio di giorni...

Pensi che ti vada bene ?

Ciao

P.S.

Che problema hai avuto con l'esempio ? io l'ho compilato così:

1) Creazione della DLL per il framework (che utilizza la DLL in win32)

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library libnodave.net.cs

2) compilazione dell'esempio all'interno del direttorio CS

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /r:libnodave.net.dll CS\simpleISO_TCP.cs

Inserita:

Per Adriano

Nella sezione up_download files (Home/software) ho inserito un piccolo esempio sviluppato in C# (io utilizzo SharpDevelop, ma puoi usare tranquillamente Visual c# 2005 Express Edition), si tratta di una specie di VAT in cui puoi leggere del PLC.

Ho cercato di togliere tutto il contorno che utilizzo io per quel progetto:

  • Multi Thread
  • Logger (per debug)
  • Server TCP per richieste remote
in modo da renderlo il più semplice e comprensibile possibile, le parti che ti interessano dovrebbero essere:
  • MDI_Main.cs : Form main dove viene fatta la connessione al PLC
  • LibNoDaveServer.cs : classe per l'utilizzo delle funzione della DLL
  • frmDebug.cs : Form con la VAT vera e propria
  • resource\libnodave_net.dll : DLL compilata per il Framework 2.0
Buon divertimento, con un po di pazienza metterò il progetto definitivo...

Ciao

Gianmario Pedrani
Inserita:

Ciao Ragazzi anche io sto mettendo hiu un piccolo esempio con libnodave fatto sempre in c#, anch eio ho trovato un po di problemi ha far funzionare gli esempi di dave, anche perche sembra che quello compilato gia da lui non sia esattamente quello del sorgente, ma con un po di pazienza sono riuscito a farlo girare....

Io utilizzo borland c# che è liberamente scaricabile e utilizzabile previo una piccola registrazione

ciao.

apena finisco le prove cerco di mettere in linea qualcosa.

Gianmario Pedrani
Inserita:

Ho provato a scaricare SharpDevelop devo dire che è veramente un bel ide :D

cmplimenti per la dritta

Inserita: (modificato)

Sempre per questioni di dritte:

Se ti interessa per la compilazione della libreria in C prima usavo il compilatore free a riga di comando della Borland, ma poi ho trovato questo: http://www.bloodshed.net/dev/devcpp.html

E riesco a ricompilare le librerie libnodave e a debuggare gli esempi in C (cosa molto utile).

Si potrebbe richiedere a qualche moderatore di creare un'apposita sezione per i protocolli (nella sezione up_download) dove mettere i vari esempi di comunicazione con diversi PLC e con diversi linguaggi:

Io in passato mi sono avventurato (come molti di noi) in comunicazioni con:

Siemens S5, Siemens S7-200, Siemens S7-300, Omron, Texas Instrument e GE-Fanuc (lm90-30) mari potremmo unire le nostre conoscenze....

Ricordatevi che se due fruttivendoli si scambiano una mela hanno una mela a testa invece se due softweristi si scambiano una idea alla fine hanno due idee a testa.

Ciao

BR1

P.S.

Il fatto del moderatore era una battuta :D

Modificato: da Bruno
Inserita:

Grazie Bruno per l'esempio, pultroppo non riesco nemmeno ad inizializzare il socket di connessione, in particolare:

1. In MDI_Main non viene mai impostato step=2;

Ho modificato step=2 (in origine step=1) dopo aver letto impostazioni (prima di if (step == 2)

In questo modo accedo all'inizializzazione della connessione.

2. Nella classe LibNoDaveServer, ho la variabile bAutoLogon a false. Forzo la chiamata a initHardware.

il valore di return della chiamata e' sempre 0

LibNoDaveServer.main_fds.rfd = libnodave.openSocket(2000, LibNoDaveServer.myConnection.sPLC_IP);

Il primo parametro e' la port di uno dei socket aperti in hardware configuration?

Scusa la mia ignoranza, mi sorge un dubbio, tu non stai utilizzando fetch/write?

Mi puoi far sapere.

Adesso comunque provo ad impostare sulla CP343 un protocollo diverso.

Grazie e saluti.

Inserita:

OK, sono riuscito a far funzionare il tuo esempio.

A parte la modifica dello step=2 dopo aver riletto tutti i tuoi messaggi ho trovato dov'era l'inghippo (io ero l'inghippo, visto che ho impostato l'indirizzo tpc/ip sbagliato!) ed ora funziona perfettamente.

Sto valutando se passare alle librerie LibNoDave o se utilizzare le mie classi.

Ricapitolando

PRO LibNoDave

Nessuna configurazione su PLC

Possibilita' di accedere ad area superiore a 255

Passaggio da un'interfaccia all'altra immediato

CONTRO LibNoDave

Limitazione numero di byte letti o inviati

PRO Librerie Fetch/Write

Nessuna limitazione nella quantita' di byte da leggere o scrivere

Semplicita' d'uso (piu' easy con solo 2 classi)

CONTRO Librerie Fetch/Write

Configurazione su PLC

Non e' possibile accedere ad area con indirizzo superiore a 255

(Attualmente non ho ancora implementato possibilita' di leggere M, E, A. Implementazione comunque possibile)

Secondo ME, ricapitolando: per una configurazione elastica meglio le LibNoDave, mentre per una configurazione rigida ma piu' performante (> ~200 byte) classi Fetch/Write.

Comunque sia, due metodi validi.

Saluti

Adriano

Inserita:

Ciao Adriano

Mi spiace per l'errore nell'esempio (al più presto correggerò il sorgente), purtroppo cancellando alcune funzionalità ho fatto un danno.

Un'altra cosettina contro il protocollo FETCH/WRITE (che considerò comunque valido) è il fatto che l'accesso ai dati mi sembra limitato a word (essendo un protocollo nato per S5).

Questa limitazione in lettura non mi dà noia ma in scrittura limita in alcuni casi se il PLC con cui scambiare dati non è di mia fornitura o le aree non sono state progettate in modo conforme.

Ciao BR1

Inserita:

Pienamente concorde.

Infatti penso che la soluzione migliore per F/W S5 sia quando sviluppi sia automazione che supervisione!

Non preoccuparti per errore. Sapessi io quanti ne faccio.... (l'importante per non rimanere somari ed ottusi e riconoscerli, solo cosi' si migliora) , e comunque il tuo non era un errore, e' uno dei cosidetti figli di taglia e incolla.

Siccome e' da qualche mese che utilizzo C#, mi sollazza l'uso della classe XML per settings (mai usata) e mi hai illustrato come mettere i commenti (INFO) alle funzioni e alle variabili. Non ero mai riuscito a trovarlo su internet.

Quindi mi hai dato 3 aiutoni: LibNoDave, XML e <summary>.

Grazie

Saluti

Adriano

  • 5 weeks later...
Inserita: (modificato)

Ciao a tutti

Ho ritirato fuori questa discussione per avvertire che è stata rilasciata una nuova versione delle Librerie LibNoDave, nei file txt ho letto che sono stati eliminati alcuni bug.

Io ho provato la nuova versione della DLL con l'esempino in VB6 e non ci sono stati problemi.

Per cui se volete potete tranquillamente scaricare scaricare la nuova versione da:

Download libnodave

la descrizione della release è consultabile qui:

Release Note

Ciao

Modificato: da Bruno
Inserita:

Salve ragazzi la vostra discussione mi intriga molto anche io avrei bisogno di imparare ad utilizzare questi protocolli ma non conosco il c# come posso utilizzarle per comunicare con un S7 224 da cui devo leggere 10 VW e scriverle in un file TXT ogni 5 mituti.

Grazie per eventuali suggerimenti

Inserita:

Se riesci a "smanettare" un poco in VB6 puoi controllare nella sezione up_download troverai

l'esempio (con sorgenti) che citavo all'inizio di questa discussione.

Magari partendo dallo stesso esempio ti basterebbe aggiungere un timer che esegue le operazioni ad intervallo di tempo.

Un paio di consigli:

1) Se devi leggere solo ogni 5 minuti, apri e chiudi la connessione ogni volta

2) Invece di salvare su file TXT salva anche su DB, successivamente se devi elaborare i dati sono comodi (alme non salvare solo su file)

Ciao

Inserita:

Ciao Bruno ho appena finito di intallare VB6 e comincio a dare un occhiata al tuo esempio ma come dicevo prima è la prima volta per me.

Cercherò di segure i tuoi consigli, comunque il file TXT mi seve proprio per interfacciare con un altro programma VB per visualizzare le variabili e salvare in un DB Acces.

Grazie ancora

Giuseppe

  • 2 weeks later...
Inserita:

Ciao a tutti seguendo i consigli di Bruno sono riuscito a far funzionare il sul esempio ( Complimenti Bruno ) e a modificarlo per una lettura continua dei dati.

Mi sevirebbe una dritta per salvare il messaggio della textbox in un file!

Cercando in rete non sono riuscito a trovare esempi significativi per il mio scopo.

Mi potreste aiutare?

Grazie.

Giuseppe

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