DPMike Inserito: 7 gennaio 2014 Segnala Share Inserito: 7 gennaio 2014 Ciao a tutti. Ho scaricato Snap7 1.2.0 per fare delle prove con VB.Net, ma ho problemi con il caricamento della libreria in un progetto Windows form di Visual Studio. Con VS 2008 (standard) su PC con WinXP, dopo aver caricato la libreria (tramite Project -> Add reference) sono andato nella sezione del codice e mi sottolinea tutti i riferimenti alla libreria (chiaro segno che non riconosce i nomi nseriti) Passando il mouse sopra, l'avviso è relativo al fatto che il Namespace non contiene alcun membro pubblico ... Controllando le "References" del progetto, la libreria snap7.net ha come numero di versione 0.0.0.0 ed il path riporta un errore (il sistema non trova il riferimento specificato). Quando ho inserito la referenza, non ho avuto nessun messaggio di errore. Con VS 2013 (express) su PC con Win8.1, carico la libreria correttamente, nella sezione di codice i riferimenti della libreria non hanno alcun errore, ma quando lancio il programma, ho come errore: Impossibile aggiungere un riferimento a ...snap7.dll Verificare che il file sia accessibile e che l'assembly o il componente COM sia valido. Per quanto ne capisco, sto commettendo lo stesso errore con entrambi gli strumenti. Non riesco a capire come intervenire. Ho guardato gli esempi allegati al progetto, ma oltre ad essere in C#, non sono progetti per Form. Qualcuno sa darmi qualche lume? PS: Uso VB.Net e libnodave, ho caricato la libreria del Snap7 allo stesso modo. Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 7 gennaio 2014 Segnala Share Inserita: 7 gennaio 2014 Ciao, la tua procedura è corretta, è un problema di framework e/o piattaforma (CPU). Snap7.net.dll che hai usato è stata compilata con .NET framework 4.5 e architettura "AnyCpu". Devi semplicemente ricompilare la libreria di classi, non ho ritenuto necessario distribuire varie release (.net 3.5 sp1, .net 4.5 ecc..) per non ingigantire ulteriormente la distribuzione, inoltre qualunque ambiente .net (visual studio o mono) si usi, c'è tutto pronto per farlo. E' molto semplice, hai due soluzioni, la prima rapidissima, la seconda un po' più fastidiosa all'inizio ma che può tornarti comoda quando cambierai framework/piattaforma delle tue applicazioni. Soluzione 1 Lanci dotnet.bat sullo stesso pc in cui compili il tuo programma (ricorda di farlo dal prompt di Visual Studio : Programmi->Microsoft Visual Studio->Visual Studio Tools->Prompt.... ed usi snap7.net.dll che trovi in winbin. Se ti leghi ad una piattaforma in particolare, x86 o x64 (cosa che ti sconsiglio comunque di fare) devi modificare dotnet.bat cambiando /platform:anycpu con quello che ti serve. Soluzione 2 Crei un nuovo progetto (preferibilmente nella tua soluzione, così passi dalle proprietà di un progetto all'altro velocemente) del tipo Libreria di classi Visual c#, Che chiami Snap7. Ti verrà creata di default Class1.cs (che conterrà il namespace Snap7). Nella cartella di Class1.cs vai a copiare snap7.net.cs. Rimuovi dal progetto Class1 e aggiungi "Elemento esistente..." snap7.net.cs. A questo punto puoi settare tutte le proprietà in accordo a quelle del tuo progetto : framework, piattaforma, ecc.. Non è necessario che tu conosca C# (è questo il bello di .net) compili il progetto ed importi Snap7.net.dll come hai già fatto. Fammi sapere Link al commento Condividi su altri siti More sharing options...
DPMike Inserita: 7 gennaio 2014 Autore Segnala Share Inserita: 7 gennaio 2014 Ciao, grazie mille . Ho provato (per il momento solo con VS 2008 ed XP) e funziona. (in realtà la compilazione con il dotnet.bat la avevo provata, solo che poi andavo a pescare il file snap7.net.dll nella cartella originale della distribuzione e non nella cartella di copia che mi ero creato per non "sporcare" l'originale ). Ho ancora due segnalazioni sull'uso di Snap7 e VB.Net Sono ai primi approcci con il forum non so se iniziare una nuova discussione o continuare questa, ma trattandosi sempre di Snap7 e VB.Net, ... Dopo aver creato il client sono andato ad interrogare lo stato degli ingressi e di qualche Merker byte. Risultato: tutto a zero. Per i Merker nessun problema, non c'era niente che scriveva valori, ma alcuni ingressi erano cablati e quindi avrei dovuto vedere qualche stato alto. Morale della favola, non funzionava perchè nel progetto caricato nella CPU, era impostata una password. La domanda quindi è: C'è un qualche messaggio di errore che possa farmi capire che sto accedendo ad una CPU protetta? La CPU è protetta perchè usata in un test di scrittura variabili con pagine html, lo scrivo perchè in questo caso Siemens dice che se provi a scrivere senza accedere con password, non ottieni alcun messaggio di errore e l'operazione non viene eseguita (e temo di essermi appena risposto ) Una seconda segnalazione è invece riferita ad un errore in fase di esecuzione che si è verificato cercando di ottenere lo stato della CPU. Dim S7_CPU As S7Client Dim StatoCPU As Integer Dim res As Integer = S7.ConnectTo(IP, Rack, Slot) S7_CPU.PlcGetStatus(StatoCPU) L'ultima riga la ho scritta con l'autocompletamento del VS. Genera un'eccezzione a runtime dovuta al fatto che non viene trovato l'entry point Cli_PlcGetStatus Il problema che nel manuale compare la descrizione della funzione Cli_GetPlcStatus Temo ci sia un errore di battitura nei nomi funzione. Ringrazio anticipatamente. Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 8 gennaio 2014 Segnala Share Inserita: 8 gennaio 2014 Ciao, andiamo con ordine. Innanzitutto hai ragione c'è un'errore nel wrapper , la funzione importata dev'essere Cli_GetPlcStatus, puoi tranquillamente correggerlo. Snap7, al contrario di altre librerie ( ) permette il controllo completo della sicurezza del PLC, trovi tutto nel gruppo "security functions". GetProtection() ti permette di conoscere il livello di protezione corrente (password/selettore ecc..) Con SetSessionPassword() puoi effettuare il login per la sessione corrente ed elevare il livello di sicurezza della tua applicazione cosicché tutte le funzioni avranno esito positivo. Con ClearSessionPassword() effettui il logout. Sul manuale trovi tutto, inoltre ClientDemo che trovi nei rich-demos ha una pagina dedicata che ti permette di testare tutte queste funzioni. Saluti Davide Nardella p.s. Come spiego nella documentazione SetSessionPassword() funziona a patto che tu conosca la password impostata. Link al commento Condividi su altri siti More sharing options...
DPMike Inserita: 8 gennaio 2014 Autore Segnala Share Inserita: 8 gennaio 2014 Grazie, mi ero accorto che la libreria è piuttosto vasta e ben articolata, non resta che rituffarsi nel manuale . Quanto al wrapper, provo a correggere Link al commento Condividi su altri siti More sharing options...
singh_schneider Inserita: 22 marzo 2014 Segnala Share Inserita: 22 marzo 2014 Solo per l'aggiornamento .. Avevo solo bisogno di tirare fuori i dati da S7-1200. C'è una libreria denominata S7.Net. Ho usato il tipo di CPU S7300 e il suo lavoro con S71200. Grazie a tutti voi un sacco Link al commento Condividi su altri siti More sharing options...
Azzokiller92 Inserita: 26 marzo 2014 Segnala Share Inserita: 26 marzo 2014 Ciao a tutti, ho seguito il procedimento 1, eseguo il dotnet dal prompt di Visual Studio, mi prendo la snap7.net.dll compilata in winbin la metto nella cartella del mio progetto, la aggiungo ai riferimenti. Il mio problema viene quando cerco di connettermi al plc otengo il seguente errore: Impossibile caricare il tipo 'Snap7.S7Client' dall'assembly 'Snap7.net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Sto utilizzando Visual Studio 2012 su Windows 7 64 bi, il framework del progetto è il 4.5 quindi non dovrebbero esserci problemi, o sbaglio? Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 26 marzo 2014 Segnala Share Inserita: 26 marzo 2014 Ciao, All'inizio del tuo file (ad esempio form1.vb) hai inserito Imports Snap7 ? L'aggiunta della classe compilata è come in figura ? E' sicuramente qualche settaggio. Se non ne vieni fuori mandami un m.p. con un'indirizzo che può ricevere allegati e ti invio un progetto VS2012 VB (molto semplice, non ti aspettare granchè) che ho già inviato a molte persone che avevano difficoltà con le parametrizzazioni di VS. Non lo includo nei demo perché è solo un form con qualche pulsante e legge un po' di bytes, ma serve come "startup". Fammi sapere Link al commento Condividi su altri siti More sharing options...
Azzokiller92 Inserita: 26 marzo 2014 Segnala Share Inserita: 26 marzo 2014 non riesco a mandarti un mp mi dice che non puoi ricevere messaggi Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 26 marzo 2014 Segnala Share Inserita: 26 marzo 2014 Avevo raggiunto il limite, ho fatto pulizia ;-) Link al commento Condividi su altri siti More sharing options...
EnryPLC Inserita: 29 aprile 2014 Segnala Share Inserita: 29 aprile 2014 Salve per caso qualcuno sa dirmi come si puo sistemare l'errore del wrapper? e modificare il nome di PlcGetStatus.. grazie Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 29 aprile 2014 Segnala Share Inserita: 29 aprile 2014 (modificato) Nella 1.2.1 è già sistemato, in ogni caso non devi cambiare il nome del metodo (PlcGetStatus) ma il nome della funzione importata quindi devi modificare le righe 894 e 897 sostituendo Cli_PlcGetStatus con Cli_GetPlcStatus. (come ho scritto 7 risposte più sopra) In riferimento al mp, si, per mandare il PLC in run puoi usare PlcHotStart o PlcColdStart. Dato che le richieste sono spesso molto simili, ricordo a tutti che preferisco rispondere sul forum in modo da condividere i consigli. Modificato: 29 aprile 2014 da dan64100 Link al commento Condividi su altri siti More sharing options...
EnryPLC Inserita: 29 aprile 2014 Segnala Share Inserita: 29 aprile 2014 (modificato) Già avrei dovuto leggere meglio effettivamente, per quanto la documentazione sia davvero completa ho ancora dei problemi con lo stop e il run del plc da codice, sara che sono un po negato... Condivido qui di seguito un semplice progetto di prova in modo tale che chi si trovi nella mia stessa situazione possa risolvere anche lui i miei stessi problemi, all'interno di questa cartella infatti vi è infatti lo schema da caricare su LOGO0BA7 e un progetto in c# ampiamente commentato. Mi piacerebbe che dal click di quel tasto si potesse settare lo stato del plc In Particolare mi da sempre l'errore "ISO : An error occurred during send TCP : Connection timed out" Non voglio che qualcun altro mi faccia il lavoro per me, mi piacerebbe solo un aiutino sul capire come mai mi dia questo errore, e allo stesso tempo offrire una semplice base su cui lavorarci magari. E qui di seguito il progetto in c# sviluppato grazie alla libreria Snap7 link depositfile: http://dfiles.eu/files/65a589kit Modificato: 29 aprile 2014 da EnryPLC Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 29 aprile 2014 Segnala Share Inserita: 29 aprile 2014 (modificato) Ciao, andiamo con ordine: 1) La pancia che balla nella pubblicità del depositfile mi ha fatto impazzire , paccato che cambia ogni volta altrimenti mettevo la pagina fra i preferiti. 2) Bello il programma devi ingrandire un pochino la Form ReadOut (quella della foto) perchè la barra di stato ed il pulsante di update non si vedono (ho un tema standard di W7). 3) Non potrai mai fare il run/stop per 2 motivi: 3.1) Per ogni operazione fai una connessione/disconnessione cosa che ti sconsiglio perchè comunque porta via tempo, nelle procedure di run/stop ti sei dimenticato di inserire Client.Connect() e Client.Disconnect() . 3.2) Se guardi a pag. 74 del manuale, trovi che per il LOGO il protocollo S7 è solo per il trasporto dati, il controllo può essere fatto solo con il protocollo AG nativo (quello che usa il LOGO Comfort per capirci). Comunque l'approccio è corretto : programma di test (ben fatto) e prove sul campo. Una sola curiosità, dato che mi arrivano letteralmente decine di mail per fare il run/stop con il LOGO (probabilmente chi lo fa con il 300/400 non mi scrive perchè funziona). La mia domanda è : PERCHE' c'è questa pulsione irrefrenabile al run/stop, caricare SDB ed altre cose così poco igieniche ??? p.s. in C# non hai bisogno di snap7.net.dll, includi direttamente snap7.cs nel tuo progetto e copia snap7.dll (quella win32 o win64) nella cartella di output, risparmi rogne se cambi framework Modificato: 29 aprile 2014 da dan64100 Link al commento Condividi su altri siti More sharing options...
EnryPLC Inserita: 29 aprile 2014 Segnala Share Inserita: 29 aprile 2014 (modificato) Mmm grazie per il consiglio, per quanto riguarda il discorso del RUN e STOP non ne ho idea, è un pallino che mi rimane in testa, mi piace l'idea di poterlo fare ora proverò con eclipse e una tool chiamata Sharpen per decompilare il codice di LOGO Comfort e convertirlo in C#, non appena finirò posterò la soluzione mi piacerebbe l'idea di verificare lo status del plc, se in run poterlo stoppare e viceversa, e devo trovare una soluzione piu pulita per accendere Q1, in ogni caso grazie per i consigli, ora ho un po da lavorarci su Modificato: 29 aprile 2014 da EnryPLC Link al commento Condividi su altri siti More sharing options...
EnryPLC Inserita: 30 aprile 2014 Segnala Share Inserita: 30 aprile 2014 (modificato) Rilascio qui di seguito l'ultima versione di questo piccolo progettino prova. setta anche lo stato del plc in run e stop librerie utilizzate Snap7 desTransfer il vecchio link è stato rimosso link depositfile: http://dfiles.eu/files/agu3ph4cr Modificato: 30 aprile 2014 da EnryPLC Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 30 aprile 2014 Segnala Share Inserita: 30 aprile 2014 Ecco, era DesTeansfer la libreria. Purtroppo non ci sono i sorgenti (o almeno io non li ho trovati nemmeno nel demo che il programmatore ha rilasciato sul forum Siemens). A questo punto se hai necessità del run/stop potresti usare destransfer per fare tutto dato che mi sembra che ha anche le funzioni per il trasferimento dei dati. Link al commento Condividi su altri siti More sharing options...
EnryPLC Inserita: 30 aprile 2014 Segnala Share Inserita: 30 aprile 2014 Il fatto è che si blocca tante volte durante il run e stop e va in timeout Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 30 aprile 2014 Segnala Share Inserita: 30 aprile 2014 Purtroppo senza sorgenti il problema e' quello, o ti aiuta il programmatore o non hai speranze. Ricordo comunque una discussione per cui c'era la possibilità di modificare il timeout attraverso una funzione. Per i blocchi non saprei... Link al commento Condividi su altri siti More sharing options...
saliman24 Inserita: 23 ottobre 2015 Segnala Share Inserita: 23 ottobre 2015 Salve a tutti, ho scritto molto poco su questo forum, che seguo però con tanto interesse, diciamo che mi trovo spesso a risolvere i problemi soltantoguardando come li hanno risolto gli altri ( un pò parassita, chiamatemi pure così) adesso però comincio ad avere la necessità di andare in fondo all'argomentodi questa discussione, cioè riuscire a creare un programma in Vb.net ( che è quello che conosco di più) che connetta diversi Logo 0BA8 per analisi varie a distanza.prometto che pubblicherò qualsiasi cosa in più che eventualmente riesco a fare.Mi piacerebbe che qualcuno che ha fatto qualcosa con VB.net mi desse qualche dritta ad esempio intanto su come creare passo passo "snap7.net.dll" che io chissà perchè non riesco a fare seguendo le spiegazioni di Dan. E poi magari un esempio di applicazione che legga e scriva una variabile sul Logo. Come ha fatto EnryPLCche ringrazio tantissimo.Colgo l'occasione per ringraziare di esistere a Davide Nardella, che ci ha aperto questa breccia sul mondo un pò blindato della Siemens. Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 27 ottobre 2015 Segnala Share Inserita: 27 ottobre 2015 Sul sito (e quindi sul manuale) c'è un'intera pagina dedicata a .nethttp://snap7.sourceforge.net/dotnet.html#key_conceptsNell'ultima nuova versione (1.4.0), in \examples\dot.net\WinForm trovi esempi funzionanti in VB.NET e un progetto apposito (in Buildsnap7Assembly) per creare snap7.net.dllNon ho proprio idea di cos'altro dirti. Link al commento Condividi su altri siti More sharing options...
skybyte Inserita: 8 febbraio 2017 Segnala Share Inserita: 8 febbraio 2017 Ciao Dan, sto cercando di capire se il logo 8 FS4 può fare al caso mio per automatizzare casa. Da questa versione vi è sia supporto modbus tcp che snap7. L'app del logo è molto lacunosa e l'ambiente TDE non mi esalta, vorrei sopperire scrivendo qualcosa in ambiente .net. Il mio target vorrebbe essere comandare per esempio degli interruttori da app. E possibile avere delle indicazioni o ancor meglio un esempio su come fare per comandare degli ingressi tramite modbus tcp o snap7 su logo 8? Grazie in anticipo S Link al commento Condividi su altri siti More sharing options...
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