none
Problema de corte al recibir datos por tcpip RRS feed

  • Pregunta

  • Hola, estoy haciendo una aplicacion que recibe datos de un laser.

    Cuando le mando las ordenes con el hyperterminal funciona correctamente y me devuelve los 65000 valores. Bien el caso es que con la siguiente funcion intento capturar los datos

        Dim tcpClient As New System.Net.Sockets.TcpClient()<br/>
        tcpClient.ReceiveBufferSize = 170000<br/>
        tcpClient.ReceiveTimeout = 200<br/>
        Try<br/>
          tcpClient.Connect("192.168.0.3", port)<br/>
    <br/>
          Dim networkStream As NetworkStream = tcpClient.GetStream()         'Se crea el Stream para la comunicacion<br/>
    <br/>
          Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(comando + Chr(13))      'Enviamos los comandos a la controladora<br/>
          networkStream.Write(sendBytes, 0, sendBytes.Length)<br/>
          System.Threading.Thread.Sleep(400)<br/>
          Dim bytes(tcpClient.ReceiveBufferSize) As Byte<br/>
          networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))       'Recibe la respuesta<br/>
          Dim returndata As String = Encoding.ASCII.GetString(bytes)         'Pasamos de Bytes a String<br/>
          txtreturn.Text = returndata                         'Para mostrarlo <br/>
          fotoservida = True<br/>
          tcpClient.Close()<br/>
        Catch ex As Exception<br/>
          MessageBox.Show(ex.Message)<br/>
        End Try
    

    El programa entra 3 veces en la funcion, una mandando el inicio para guardar los datos  AS y el laser devuelve AS despues envia AP y es devuelto y por ultimo se envia AO,2 y el laser empieza a transmitir los datos guardados

    Pues bien, cuando sale del networkstream.read ha leido como unos 300 valores, y al volver a hacer este proceso de AS, AP, AO, sigue recibiendo valores.

    Si en cualquier momento paro el programa e inicio el hyperterminal me empieza a transmitir todos los valores que le quedan.

    ¿Me podriais decir como puedo hacer para leer todos los valores en una sola lectura?

    Gracias

    jueves, 3 de marzo de 2011 17:45

Todas las respuestas

  • Hola Pablo,

    Deberías poder delimitar la recepción de datos, 1) por tamaño, 2) por fin de trama.

    El problema es que estas cerrando la comunicación después de esperar 400ms sin saber si el láser ha finalizado de transmitir todas las tramas.

     

    Mira de buscar el protocolo del fabricante, no sea que esté utilizando Xon/Xoff para no rebosar buffers o saber si existe un carácter o combinación final de trama, en tal caso deberías mover las lecturas a un buffer intermedio y cerrarlo al recibir final de trama.

     

    Es una mera idea, pues es difícil de responder sin conocer los dispositivos y en este caso "los laser".

    Saludo,

    Pep Lluis,


    MVP - Visual Developer
    martes, 8 de marzo de 2011 15:52
    Moderador
  • saludos.

    una consulta. como seria recepcionar los datos por fin de trama?

    gracias

    sábado, 27 de mayo de 2017 17:36