Oppure

Loading
22/10/13 12:07
allamac74
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
aaa
22/10/13 12:13
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 ?
22/10/13 12:43
allamac74
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
aaa
22/10/13 13:16
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 ...
22/10/13 16:12
allamac74
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
aaa
22/10/13 19:03
Snogar
Posta il codice magari c'è qualche falla li dentro.
aaa
06/11/13 12:23
allamac74
Scusate l'assenza.. posto il codice che stabilisce una connessione con il server in modo molto lento

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 :rotfl: 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



aaa