Si, Carlos , lo recibí, pero no supe implementarlo, por eso volví a empezar de cero. Ahora ya tengo resuelta la recepción , la identificación de cada registro y el cálculo del check sum. Muchísimas gracias
--- El mié 8-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, 8 de diciembre de 2010, 9:02 Hola Patricia, No me queda claro si recibiste el mail en el que te describia paso a paso mi recomendacion. 1) Deberias crear un buffer (una variable de instancia de tipo string en el formulario). 2) Cada vez que recibis algo en el puerto deberias concatenarlo en esa variable, NADA MAS. Aqui no haces analisis y revision de lo recibido. 3) Colocar un timer en el mismo formulario y que cada vez que se dispara analice el la variable de tipo string y extraiga los mensajes de acuerdo a los caracteres de delimitacion. Por supuesto que esta funcion deberia retirar el mensaje leido desde el buffer. Por mas que ajustes el tamaño del buffer del puerto, nunca vas a tener un procesamiento confiable porque vas a depender de recibir los mensajes completos en el puerto y eso es muy dificil. Contame como tenes la implementacion porque se ahce dificil aconsejarte a ciegas. ---------------------------------- Carlos Peix 2010/12/8 Patricia Banfi <[email protected]> Necesito leerlo porque analizando ese carácter me doy cuenta cuando comienza y termina la transmisión y si tengo que evaluar los dos check digit que vienen al final de algunos registros.Hasta ahora no lo hice porque estaba probando la recepcion.En el archivo adjunto fuí grabando lo que entró por el puerto serie. Gracias --- El mar 7-dic-10, Cristian A. Lòpez <[email protected]> escribió: De: Cristian A. Lòpez <[email protected]> Asunto: [vbnet] Lectura de un puerto RS232 Para: "vbnet List Member" <[email protected]> Fecha: martes, 7 de diciembre de 2010, 19:44 Salta el primer carácter, no lo leas, me parece la más fácil. Saludos. Cristian Lopez De: [email protected] [mailto:[email protected]] En nombre de Patricia Banfi Enviado el: Martes, 07 de Diciembre de 2010 14:17 Para: vbnet List Member Asunto: [vbnet] Lectura de un puerto RS232 Encontré otras respuestas en el Spam. Para no seguir complicando las cosas empecé de nuevo desde cero. Ahora ví con readexisting traigo en un string lo que necesito ( siempre que tenga el mensaje que muestra la longitud del buffer,si no trae de a 8). Cambié el mensaje por Threading.Thread.Sleep(1000) (más por intuición que por conocimiento) y anda ok. Ahora que solucioné lo más complicado me queda algo que debe ser simple: el primer caracter del string que recibo es un valor hexadecimal y no sé cómo compararlo contra un char. De nuevo gracias a todos. Patricia --- El mié 1-dic-10, Angel "Java" Lopez <[email protected]> escribió: De: Angel "Java" Lopez <[email protected]> Asunto: [vbnet] Lectura de un puerto RS232 Para: "vbnet List Member" <[email protected]> Fecha: miércoles, 1 de diciembre de 2010, 20:05 Hola gente! Hmm… intentaria revisar los parametros, y ver de manejar la puerta por eventos. Ejemplo simple: http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx Otro ejemplo, presentado en un enlace de: http://www.vbforums.com/showthread.php?t=530790 http://www.vbforums.com/attachment.php?attachmentid=68715&d=1233255133 Pero probaria con el primer ejemplo, parece mas simple. Nos leemos! Angel “Java” Lopez http://www.ajlopez.com http://twitter.com/ajlopez From: [email protected] [mailto:[email protected]] On Behalf Of Patricia Banfi Sent: Wednesday, December 01, 2010 5:29 PM To: vbnet List Member Subject: [vbnet] Lectura de un puerto RS232 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
