Vai al contenuto
PLC Forum


Consigli datalogger con Snap7


Messaggi consigliati

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


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

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

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