Vai al contenuto
PLC Forum


Comunicazione Pc/pc In Ethernet Da Codice C++


drugo66

Messaggi consigliati

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.

Link al commento
Condividi su altri siti


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

Link al commento
Condividi su altri siti

  • 4 weeks later...

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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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.

Modificato: da drugo66
Link al commento
Condividi su altri siti

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 ;)

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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

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