Hola Patricia, yo tengo trabajos hechos con rs232, pero bajo VFP, no obstante
los míos se limitan a "escuchar" el puerto, la info y la long del string que
recibo en el puerto no depende de mí sino del que transmite. En el caso mío son
centrales telefónicas que emiten un string de long fija delimitados por un
"fin de linea". Lo que hago es leer ese string hasta encontrar ese "fin
delinea" y así sucesivamente.
Espero que te sea útil.
Saludos.
Sergio.
From: Patricia Banfi
Sent: Thursday, December 02, 2010 8:30 AM
To: vbnet List Member
Subject: [vbnet] Lectura de un puerto RS232
Muchas Gracias Carlos, lo voy a intentar y después te cuento.
--- 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]>
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 As
IO.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