Componer las tramas recibidas en el puerto serie (C#)


Respondiendo a la petición de nuestro compañero Pablo :
___________ Foro C# MSDN Spanish.


Cuando recibo los bytes en el evento DataRecived del SerialPort1; a veces estos bytes me llegan completos otras no; solucione este problema con tu idea de un bucle; solo q este bucle lo hice infinito, es decir, un while (true) y todo mi codigo para almacenar esos bytes y desplegarlos en en textbox1; pormedio del delegado; mi pregunta es ¿existe alguna otra manera para recibir esta trama completa desde mi inicio H01…….H3F;  de 19 elementos de longuitd; a veces me llegan H01….3F; de por decir 15 elementos de longuitud; y esto si lo soluciono con el bucle while; pero no lo quiero hacer infinito? espero haberme explicado bien y me puedas ayudar.


____________


Podéis descargaros el ejemplo pulsando sobre el link de ‘attachments’… estaré encantado de responder a cualquier pregunta relacionada. Os invito a participar.
Saludos,
Pep Lluis,

Principales Mandatos para utilizar el Puerto Serie, del espacio System.IO.Ports

Estos son los mandatos e instrucciones mas frecuentes para utilizar el puerto serie:

 

' Principales mandatos para utilizar el puerto serie:
Serie = My.Computer.Ports.OpenSerialPort("COM1")  'Constructor
'
'Definir las características de la comunicación
Serie.BaudRate = 19200        'velocidad de comunicaciones
Serie.DataBits = 8            'Longitud para Byte de datos
Serie.Parity = Parity.Even    'paridad(enumeracion parity)
Serie.StopBits = StopBits.Two 'Bits parada después datos
'
'Abrir/Control/Liberar Puerto
Serie.Open()            'Abrir el puerto Serie
Serie.Close()           'Cerrar el Puerto Serie
Serie.Dispose()         'Liberar objecto
Dim SiNo As Integer
SiNo = Serie.IsOpen     'El Puerto esta abierto?
Dim Puerto As String
Puerto = Serie.PortName 'Nombre del puerto
'
'Manejo y Control de señales
Dim Estado As Boolean     'True=Activa / False=Inactiva
Estado = Serie.CDHolding  'Estado de la señal carrier detect
Estado = Serie.CtsHolding 'Señal Clear to Send
Estado = Serie.DsrHolding 'Señal Data Set Ready
Serie.DtrEnable = True    'Activar de Data Terminal Ready
Serie.RtsEnable = True    'Activar Request To Send
'
'Control Transmission/Recepcion
Serie.ReadBufferSize = 1024  'Definir tamaño buffer recepcion
Serie.WriteBufferSize = 1024 'Definir tamaño buffer envio
Serie.ReadTimeout = 10       'Fuera de tiempo en receción
Serie.WriteTimeout = 10      'Fuera de tiempo en transmisión
Serie.Handshake = Handshake.XOnXOff 'Control recepcion/envio
Serie.DiscardInBuffer()             'Borrar buffer de entrada
Serie.DiscardOutBuffer()            'Borrar buffer de salida
'
'Enviar datos
Contador = Serie.BytesToWrite 'Bytes en espera de ser escritos
Serie.Write("Hola Mundo")     'Enviar una cadena de caracteres
Serie.WriteLine("Hola Mundo"'Enviar una linea
'
'Leer datos
Dim Contador as Integer
Contador = Serie.BytesToRead  'Bytes en espera de ser leidos
Serie.ReadByte()              'Leer un byte
Serie.ReadChar()              'Leer un char
Serie.ReadLine()              'Leer una linea
Serie.ReadExisting()          'Leer datos existentes en buffer
PepLluis :-)

Saludos,
Pep Lluis