Hola Patricia,

Tenes el codigo que esribiste? Por ahi es mas facil orientarte sobre el
codigo concreto.

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

2010/12/7 Patricia Banfi <[email protected]>

> Hola Carlos,
>
> Intenté hacer lo que me dijiste, pero
>
> 1.Nno tengo claro dónde tengo que definir la variable shared .
>
> 2. "Retirar el mensaje leido desde el buffer" sería limpiar la variable
> shared la matriz en la que recibe los datos ?
>
> Como ves, se me confunde el buffer (matriz) de puerto.read con la variable
> shared.
> Haciendo pruebas me dí cuenta de que con el mensaje que muestra el tamaño
> del buffer llego a ver más información recibida, pero si lo saco se comporta
> completamente diferente.
>
> Muchas gracias
> Patricia
>
> --- El *mié 1-dic-10, Carlos Peix <[email protected]>* escribió:
>
>
> De: Carlos Peix <[email protected]>
> Asunto: [vbnet] Lectura de un puerto RS232
> Para: "vbnet List Member" <[email protected]>
> Fecha: miércoles, 1 de diciembre de 2010, 22:05
>
> 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]<http://ar.mc576.mail.yahoo.com/mc/[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 <http://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]<http://ar.mc576.mail.yahoo.com/mc/[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