onire77 Inserito: 22 marzo 2019 Segnala Share Inserito: 22 marzo 2019 Buonasera, vorrei creare un datalogger su Windows, che mi vada a leggere dei dati su un S7 1500, impostando una cadenza regolare, oppure tramite un trigger, e li memorizzi su MariaDB. Da qualche giorno leggo la documentazione di Snap7, cercando di capire cosa possa fare al caso mio. Leggendo, mi sono accorto del pregevole e mastodontico lavoro fatto da Davide Nardella. Colgo l'occasione per ringraziarlo. Premesso che conosco poco il VB, il C# mai usato ed il Pascal l'ho fatto solo a scuola, vorrei un consiglio per capire quale potrebbe essere lo strumento più semplice da utilizzare nel mio caso. In entrambi (non me ne vogliano gli esperti, ma VB e C# mi sembrano quasi uguali) gli approcci ho trovato pro e contro. Inizialmente pensavo di svilupparlo in Lazarus, in quanto ho visto che supporta nativamente mysql e si trovano esempi già fatti per connettersi al db. Inoltre ho pensato, non so se a torto o a ragione, che potesse essere semplice compilare lo stesso progetto anche su Linux. Ho scaricato Lazarus e Snap7 1.4.2, ma quando vado a compilare l'esempio client in rich-demos mi da una marea di errori, a cui non so porre rimedio. Ho scaricato Visual Studio Community Edition e Sharp7. Per connetersi da VS a MariaDB ho visto che c'è un ampio ventaglio di possibilità, ancora non ho capito quale sia il più semplice, ma visto la mole di esempi, credo di riuscirci. Invece per quanto riguarda Sharp7 ho visto che c'è il solo file Sharp7.cs e sinceramnte non saprei propio da dove iniziare per usarlo. Secondo voi, quale potrebbe essere l'approccio più semplice da seguire, in modo da non scoraggiarmi ad abbandonare il progetto. Grazie Onire Link al commento Condividi su altri siti More sharing options...
onire77 Inserita: 22 marzo 2019 Autore Segnala Share Inserita: 22 marzo 2019 Forse qualcosa ho iniziato a capire in Visual Studio. Devo scaricare sharp7-full-1.0.0.7z e sostituire in src il file con Sharp7.cs ver 1.0.5. A questo punto i vari esempi dovrebbero funzionare con la nuova versione. Giusto? Link al commento Condividi su altri siti More sharing options...
onire77 Inserita: 26 marzo 2019 Autore Segnala Share Inserita: 26 marzo 2019 Buongiorno, alla fine ho optato per Sharp7. Sono riuscito a fare un piccolo programmino per leggere e scrivere su alcune DB. Dalla documentazione ho preso questo esempio: // Multi Reader Instance specifying Client S7MultiVar Reader = new S7MultiVar(Client); // Our buffers byte[] DB_A = new byte[1024]; byte[] DB_B = new byte[1024]; byte[] DB_C = new byte[1024]; // Our DB number references int DBNumber_A = 1; // DB1 int DBNumber_B = 2; // DB2 int DBNumber_C = 3; // DB3 // Add Items def. specifying 16 bytes to read starting from 0 Reader.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, DBNumber_A, 0, 16, ref DB_A); Reader.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, DBNumber_B, 0, 16, ref DB_B); Reader.Add(S7Consts.S7AreaDB, S7Consts.S7WLByte, DBNumber_C, 0, 16, ref DB_C); // Performs the Read int Result = Reader.Read(); L'esempio mostra come leggere da 3 DB diverse in una sola volta. La mia idea è quella di creare un programma che mi legga un file di testo in cui sono contenuti gli indirizzi da recuperare, es. : DB1.DBB0, Byte DB2.DBW2, Int DB2.DBW4, Word DB3.DBD16, Real DB4.DBD8, DWord etc.. Creare una funzione che faccia il parsing di questo file non credo sia un problema. Nell'esempio vengono creati 3 buffers, uno per ogni DB da recuperare, che poi verranno passati per riferimento alla funzione Reader.Add. Nel mio caso, non conoscendo a priori quanti DB diversi saranno elencati nel file, avevo pensato di crearne uno solo, opportunamente dimensionato, e poi passarlo attraverso uno slice, come si fa in Python, alla funzione, per capirci: Reader.Add(S7Consts.S7AreaDB, S7Consts.S7xx, DBNumber, 0, 16, ref Buffer[a,b]); Reader.Add(S7Consts.S7AreaDB, S7Consts.S7xx, DBNumber, 0, 16, ref Buffer[c,d]); Reader.Add(S7Consts.S7AreaDB, S7Consts.S7xx, DBNumber, 0, 16, ref Buffer[e,f]); etc. Non credo che in C# si possa fare una cosa del genere, ho visto che si può accedere ad un elemento la volta dell'array non ad un intervallo. Sapete suggerirmi un'alternativa? Grazie 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