Vai al contenuto
PLC Forum


Libreria Snap7 Con Vb6


Messaggi consigliati

Inserito:

Ciao, sto provando questa dll da qualche giorno, ho avuto dei problemi iniziali con la comunicazione, ho modificato la seguente riga

"Result = Cli_ConnectTo(Client, "192.168.0.71" + Chr$(0), 0, 2)" con questa

"Result = Cli_ConnectTo(Client, "192.168.0.71" + Chr$(0), 0, 0)" , ho modificato l'ultima cifra 2 con uno 0. Poi ho iniziato a leggere dei valori nel DB1, se si legge un byte il programma va bene mentre con le word, doppie word ho dei problemi. Spiego il problema. Se all'interno del DB1 inserisco il valore 0-255 sul pc leggo i stessi valori, se inerisco il valore 256 su plc sul pc leggo il valore 16.

valore lato plc lato pc

0000 0001 0000 0000 basffer1 = 1 baffer2 = 0 risultato 10 esadecimale in decimale 16

Il valore giusto dovrebbe essere baffer1 = 01 baffer2 = 00 risultato 01 00 esadecimale in decimale 256.

E' possibile leggere i dati a bit, byte, word e doppia word?

Grazie.


Inserita:

Ciao,

non è un problema della libreria Snap7, ma è Siemens che inverte i byte, sia nelle word che nelle dword, quindi è normale che, superata la lunghezza del byte, ti ritrovi tutto invertito.

Non so in basic, ma per il C e C++ Davide (l'autore) ha inserito delle funzioni per swappare i byte nella libreria stessa: altrimenti sarai costretto a scriverti un paio di funzioni in basic per fare altrettanto.

Se cerchi nel forum, troverai alcune discussioni in merito.

Inserita:

Ciao, il problema che siemens inverte i byte lo so, ho utilizzato il protocollo Prodave di Siemens anni indietro sempre con VB6, il problema qua è che ogni byte dovrebbe essere composto da 2 cifre cioè 0000 0001 mi deve dare 0 1 i primi 4 bit sono 0000=0 gli altri 4 bit 0001=1 quindi 01 perchè poi quando vado a prendere il secondo byte mi perdo lo 0 del primo byte.

0000 0001 0000 0000

0 1 0 0

Il pc adesso mi legge un byte 1 (0000 0001) il secondo byte 0 (0000 0000) quindi in totale 10 esadecimale =16 decimale.

Praticamente il pc dopo il valore 255 invece di darmi 256 mi ricomincia a contare da 16, fino a quando non ritorna il quinto bit del primo byte cioè 0001 0000. Dal valore 0000 0001 0001 0000 i valori sono corretti fino a quando non ritorna la combinazione

0001 0000 0000 0000 e così via.

Inserita:

Scusami, ma mi sono perso (sarà anche l'ora e la giornata sulle spalle); non conosco bene il VB6, ma in C++ ti posso assicurare che non ho avuto nessun problema con l'uso della libreria Snap7; l'unico consiglio che mi viene in mente e che tu provi a postare il pezzo di codice incriminato, così che qualche buon anima che conosca il VB possa aiutarti ...

Inserita:

Ciao,

Innanzitutto che PLC stai usando ? I parametri di connessione (Rack e Slot) dipendono dal PLC e/o dalla configurazione hardware, se hai dovuto usare 0,0 stai sicuramente lavorando con un S71200/1500.

Da quello che mi hai scritto anche in privato mi sorge il dubbio che tu non abbia scaricato la libreria completa ma forse solo l'update fix, purtroppo SourceForge consiglia il pacchetto più recente.

Se è così scarica snap7-full-1.3.0.7z dalla cartella 1.3.0 di http://sourceforge.net/projects/snap7/files/

Troverai molti esempi e soprattutto il manuale nella cartella /doc

Detto questo, per VB6 non c'è un wrapper ufficiale, ma solo un'interfaccia minimale che ho scritto con le funzioni più utilizzate.

Il vantaggio è che le funzioni Visual Basic hanno lo stesso prototipo di quelle esportate C, per cui puoi fare riferimento alla sintassi che trovi sul manuale per capire quali parametri passare ed il loro significato.

Per semplificarti la vita, ti consiglio di iniziare a lavorare con i bytes, nel senso di leggere un blocco di bytes in un array e poi andare ad estrarre da esso le variabili a partire dall'offset in cui si trovano.

Quindi

Start = Byte di partenza nell'area da leggere (esempio per leggere a partire da DB100.DBW4 Start = 4)

WordLen = S7WLByte = 2

Amount = Quantità di bytes da leggere

Se hai già lavorato con Prodave conosci il problema big-little endian, in ogni caso quì trovi qualche altra informazione:

http://snap7.sourceforge.net/siemens_dataformat.html

E poi se hai qualche conoscenza di Pascal/C/C# puoi vedere cosa fanno le classi helper di conversione che ho scritto per i wrappers completi.

Fammi sapere ;)

Inserita:

Ciao, sto utilizzando un PLC S71200, sono riuscito a leggere il BYTE della db1 anche con la funzione Cli_ReadArea, l'errore commesso era che inserivo il valore della variabile S7AreaDB come scritto nel manuale, non pensando che era in esadecimale, io lo scrivevo in decimale. Sono riuscito a leggere anche il primo BYTE degli ingressi digitali, poi facendo i dovuti calcoli l'ho diviso a bit. Adesso volevo fare delle prove per poter leggere le WORD dal DB1 e provare a settare le uscite digitali.

L'inversione dei BYTE lo sapevo già, ho utilizzato prodave per 2 anni.

Appena fatto queste due prove metto il sorgente nel forum, visto che in VB6 non sono riuscito a trova molto materiale.

Inserita:

L'unico esempio VB6 l'ho postato su PlcForum per agevolare qualche affezionato ;)

Non credo che troverai molto altro in rete, finora nessuno mi ha chiesto (in circa 2000 fra email e messaggi su SF) esempi in VB6.

Purtroppo è in via di estinzione.....

  • 7 months later...
Inserita:

Ciao,

potresti uppare di nuovo il wrapper per VB6 che avevi postato un po' di tempo fa? perchè non è più disponibile?

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