Jump to content
PLC Forum


Sign in to follow this  
drugo66

Comunicazione Pc/pc In Ethernet Da Codice C++

Recommended Posts

drugo66

Salve a tutti,

mi stavo chiedendo se esiste un modo per comunicare in ethernet fra 2 PC, ovviamente della stessa sottorete, fra programmi scritti in VC++; l'ho già fatto, ma in un modo che non mi soddisfa: io scrivevo un file .txt nell'hard disk dell'altro PC, che l'altro software si preoccupava di leggere; vorrei, invece, poter condividere parti di memoria (variabili) come si fa con i PLC: ad esempio, l'uno alza un bool per dire che è in attesa, l'altro scrive dei valori in alcune variabili e poi resetta lo stesso bool nel primo PC.

Ho cercato in rete qualcosa di simile, ma ho trovato poco o niente ...

Grazie a tutti

P.S.: normalmente utilizzo VC++ con MFC, ma sono in grado di tradurre dai linguaggi più usati.

Share this post


Link to post
Share on other sites

accacca

Per far comunicare i due PC potresti usare un socket TCP

Un pc apre un socket in ascolto su una data porta l'altro si collega al socket come client

Una volta stabilita la connessione ci fai passare i dati utilizzando ad esempio modbus TCP

questo programma ti consente di aprire un socket tcp server/client e provare una comunicazione semplicemente scrivendo dalla tastiera

Io però non utilizzerei VC++ ci sono altre soluzioni che rendono la vita molto semplice

Io sono "datato" e mi sono fermato al TCLe ti assicuro che bastano poche righe di codice per fare quello che chiedi tu.

E hai anche il vantaggio che lo stesso codice lo puoi usare in ambiente win/linux/mac

Share this post


Link to post
Share on other sites
drugo66

Ok,

grazie delle dritte :thumb_yello: : appena ho tempo, ci "tiro un occhio" e vi faccio sapere.

Share this post


Link to post
Share on other sites
drugo66

Ciao a tutti.

trovate quello che "ho combinato" con VC++ versione 6 e le MFC; ci sono 4 cartelle:

Old: contiene il primo tentativo utilizzando SOCKET, ma non mi soddisfaceva completamente, quindi l'ho praticamente abbandonato.

Class: contiene il progetto della classe CSocketComm; nei file di implementazione e header c'è la documentazione in inglese, mentre in SocketComm.txt la documentazione è in italiano; utilizza CSocket e invia sia dati che testo.

Dll: contiene la DLL di estensione di CSocketComm: ho provato ad utilizzarla con compilatori più "aggiornati" e sembra funzionare

Exe: contiene dll, lib, header e documentazione.

Ho testato la classe con una specie di Chat (molto ridotta): un PC deve comunicare come server mentre gli altri come client (ne ho provati fino a tre).

Share this post


Link to post
Share on other sites
walterword

la strada piu intuitiva e' quella di implementare i socket di berkeley ,Di solito ogni linguaggui fornisce librerie di socket per creare connessioni client-server .

La stessa tecnologia e' usata per creare comunicazioni o code di messaggi tra diverse applicazioni che girano su uno stesso pc

Share this post


Link to post
Share on other sites
drugo66

Ciao,

SOCKET è un handle MSC compatibile con i sockey Berkeley versione 4.3; ho preferito CSocket delle MFC perchè è possibile l'utilizzo abbinato la classe CArchivie (sempre MFC e gestisce il salvataggio di file), quindi più facile per la gestione dei dati; l'idea è, in caso di bisogno, aggiungere i dati che mi servono, farne una DLL e consegnarla alla controparte in modo che possa utilizzarla; per la compatibilità si vedrà se e quando ne avrò bisogno; in ogni caso, sono presenti entrambi, solo che con SOCKET occorre convertire tutti i dati in testo prima di inviare e dopo la ricezione.

Edited by drugo66

Share this post


Link to post
Share on other sites
walterword

si giusto , se gli oggetti fanno parte della stessa libreria o famiglia meglio usare quelli .Se il metodo send vuole una stringa o un array di caratteri non e' sicuramente un problema convertire uno stream di bytes o una struttura dati in bytes e poi array di char , uno come te lo sa fare ;)

Share this post


Link to post
Share on other sites
drugo66

Vero,

ma è anche vero che se si usa un compilatore simile, è molto più veloce aagiungere dati ad una classe derivata da CObject, farne una DLL e consegnarla alla controparte.

Un'altro limite di SOCKET è che quando lo metti in "ascolto" come server con listen(), quello ci rimane e non esiste una funzione tipo close(), almeno io non l'ho trovata.

In ogni caso, mi sono lasciato aperte entrambe le strade ...

Share this post


Link to post
Share on other sites
walterword

io avevo sviluppato a suo tempo una libreria tcp/ip modbus in C# che avevo testato con microcontrollori Rabbit ZWorld e plc schneider e s7

Poi avevo provato una libreria che si chiama SocketWrench , costava relativamente poco

Però se tu devi rimanere in ambito win32 con c++ ....

Considera che in .NEt con c# si pososno creare oggetti remoti , per esempio un oggetto che contiene dati in un pc e po dall'altro pc fai una chiamata ad un metodo del oggetto e ti ritrovi tutti i dati in locale con pochissime righe .

La libreria wrappa le funzionalità socket , xml e quant'altro , l'assembly si chiama Remoting

Anche in java ci sono oggetti simili

Ovviamente tra pc e pc con installati i relativi framework puoi farlo , se invece uno o piu terminali sono processori generici allora bisogna ricorrere alle socket classiche

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...