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