Una cosa mas, en el punto 1 dije "por ahora" y me olvide de aclarar el
despues. Dato que potencialmente tengamos acceso concurrente al buffer,
deberias sincronizar el acceso al mismo, una vez que tengas lo demas
resuelto te ayudamos con esto ultimo.

----------------------------------
Carlos Peix

2010/12/1 Carlos Peix <[email protected]>

> Hola Patricia,
>
> Es normal que te pase lo que describis, deberias hacer las cosas de otra
> manera. No me animo a escribir codigo VB.NET asi que te planteo la idea.
>
> 1) Deberias crear un buffer, por ahora digamos que fuera una variable
> static (Shared en VB).
>
> 2) Deberias crear una funcion muy parecida a la que describis pero que
> agregue al buffer lo que recibe, NADA MAS!
>
> 3) Hacer otra funcion que se dispara periodicamente, por ejemplo con un
> timer, que analice el buffer y extraiga los mensajes de acuerdo a los
> caracteres de delimitacion. Por supuesto que esta funcion deberia retirar el
> mensaje leido desde el buffer.
>
> La idea es desacoplar la lectura del puerto del analisis del buffer.
>
> ----------------------------------
> Carlos Peix
>
> 2010/12/1 Patricia Banfi <[email protected]>
>
>> Hola,
>>
>> Trabajo con vb 2005 , estoy recibiendo datos por el puerto serial COM1 con
>> la siguiente sub (está hecha sólo para hacer pruebas de la interfase)
>> .....
>> AddHandler Puerto.DataReceived, AddressOf Recibir
>> ......
>>
>> Private Sub Recibir(ByVal Sender As Object, ByVal e 
>> AsIO.Ports.SerialDataReceivedEventArgs)
>> Dim RES As String
>> Dim mBuffer As Byte() = New Byte(Puerto.ReadBufferSize) {}
>> Try
>>        Puerto.Read(mBuffer, 0, Puerto.ReadBufferSize)
>>        If mBuffer(0) = Hex(5) Then
>>           Me.mensa.Text = "EMPIEZA LA COMUNICACION"
>>           MandarACK()
>>        ElseIf mBuffer(0) = Hex(2) Then
>>           Me.mensa.Text = "SE ESTAN COMUNICANDO"
>>           MessageBox.Show(mBuffer.Length)
>>           RES = System.Text.ASCIIEncoding.ASCII.GetString(mBuffer)
>>           Me.txtRecibido.Text = RES
>>           SW1.WriteLine(RES)
>>           MandarACK()
>>        ElseIf mBuffer(0) = Hex(4) Then
>>           Me.mensa.Text = "TERMINÓ LA COMUNICACION"
>>        Else
>>           Me.mensa.Text = "recibió " & Convert.ToChar(mBuffer(0))
>> End If
>> Catch ex As Exception
>> MessageBox.Show(ex.ToString)
>> End Try
>> End Sub
>>
>> La longitud del buffer es 4097, pero el getstring(mbuffer) me devuelve
>> sólo 8 caracteres. Sé que recibo más de 8 porque probé con HyperTerminal.
>> Probé con readexisting y no anduvo. Es la primera vez que trabajo con un
>> RS232.
>>
>> Alguna sugerencia ?
>> Muchas Gracias.
>> Patricia
>>
>>
>
>
>

Responder a