
allamac74 (Normal User)
Newbie
    
Messaggi: 4
Iscritto: 22/10/2013
|
Ciao a tutti vi spiego in dettaglio l'applicazione:
Ho realizzato dei contatori geiger, la scheda monta un Pic18 con periferica Ethernet che funziona da server,
ora voglio controllarli con un pc.. e ricevere i dati delle misure fatte.
Sto scrivendo la mia prima applicazione in vb.net , e sono insicuro sulla strategia da utilizzare
avrei delle domande da porre:
1) quando apro una connessione l'indirizzo ip cambia per ogni dispositivo, deve cambiare anche la porta?
2) posso mantenere circa 10 comunicazioni aperte in contemporanea?
ringrazio chiunque mi possa dare delle dritte
GRAZIE ciao
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
1) No, se cambia il dispositivo e l'IP, la porta non c'è nessuna necessità di cambiarla. Anzi, il programma sul PIC lavorerà sempre su una porta ben stabilita.
2) Puoi mantenere aperte tutte le comunicazioni che vuoi, ma chiarisci la domanda ... con 10 device diversi? con lo stesso device? il problema è lato PC o device?
E poi, con quale protocollo lavorerà il Pic ? TCP ? UDP ?
|
|

allamac74 (Normal User)
Newbie
    
Messaggi: 4
Iscritto: 22/10/2013
|
grazie per le risposte, hai fatto centro!!
entrambe le risposte che mi hai dato sono utilissime .
Il pic lavora con protocollo TCP (qui nessun problema), i dispositivi potrebbero essere N (~10/15) ogni dispositivo è un server.
Attualmente ho provato a comunicare con la classe system.net.socket.. ho notato che la connessione del socket è "lenta", circa 7/8 secondi per connettersi e avere un socket disponibile..
ho letto sul sito che si può usare più semplicemnte la classe client quasi quasi stasera ci provo..
scusate se non mi spiego bene e in gergo tecnico
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
Sì, puoi usare più semplicemente la classe TCPClient
Sulla lentezza, sicuramente dipenderà dal dispositivo ... un PIC non ha molte risorse. Però mi sembra sempre un po' tanto ...
|
|

allamac74 (Normal User)
Newbie
    
Messaggi: 4
Iscritto: 22/10/2013
|
Si ci mette troppo ... è un tempo imbarazzante, credo che sia il codice vb che ho "ripreso" e modificato da un esempio nella MSDN..
Comunque proverò con la classe tcpclient e ti farò sapere
grazie per il tuo aiuto
ciao
|
|

Snogar (Normal User)
Pro
    
Messaggi: 148
Iscritto: 09/01/2012
|
Posta il codice magari c'è qualche falla li dentro.
|
|

allamac74 (Normal User)
Newbie
    
Messaggi: 4
Iscritto: 22/10/2013
|
Scusate l'assenza.. posto il codice che stabilisce una connessione con il server in modo molto lento
Codice sorgente - presumibilmente VB.NET |
Public Function ConnectSocket(ByVal server As String, ByVal port As Integer) As Boolean Dim msg As String Try s = CntSkt(server, port) If s.Connected = True Then Return True Link = True Else Return False End If Catch ex As Exception msg = ex.Message MsgBox(msg, MsgBoxStyle.Critical, "function connect socket") End Try End Function Private Function CntSkt(ByVal server As String, ByVal port As Integer) As Socket Dim Msg As String = "" 'Dim s As Socket = Nothing Dim hostEntry As IPHostEntry = Nothing ' Get host related information. hostEntry = Dns.GetHostEntry(server) ' Loop through the AddressList to obtain the supported AddressFamily. This is to avoid ' an exception that occurs when the host host IP Address is not compatible with the address family ' (typical in the IPv6 case). Dim address As IPAddress Try For Each address In hostEntry.AddressList Dim endPoint As New IPEndPoint(address, port) Dim tempSocket As New Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp) tempSocket.Connect(endPoint) If tempSocket.Connected Then s = tempSocket Msg = "Device is connected! " & Chr(13) & s.RemoteEndPoint.ToString() 'Msg = "Device is connected! " & Chr(13) & tempSocket.RemoteEndPoint.ToString() MsgBox(Msg, MsgBoxStyle.Information, "Link Status") Link = True Exit For End If Next address Catch ex As Exception 'msg = ex.ToString() Msg = "Device is disconnected!" & Chr(13) & ex.ToString() MsgBox(Msg, MsgBoxStyle.Information, "Link Status") Link = False End Try Return s End Function
|
Usando la classe tcpclient la connessione avviene in pochi millisecondi..
giunto a questo punto ho voluto calcolare quanto tempo impiega il server a rispondere ad un comando generico, es. : inizia a contare e il server risponde ok comando ricevuto.
per calcolare il tempo ho inizializzato nella variabile StartTime as date = now all'inizio della funzione
e assegnato a endTime as date = now alla fine.
fin qui tutto ok  ora sottraggo startTime da endTime per otttenere il tempo impiegato.
Ora ho la possibilità di ottenere il tempo in millisecond o totalmillisecond
il risultato con funzione millisecond è di 50 millisecondi mentre in totalmillisecond è di 64,002
qualcuno sa dirmi perchè??
il tempo mi serve per capire a quanti dispositivi(server) posso inviare una richiesta di dati, nel tempo di un secondo
|
|