Hola Patricia,

El tipo SerialPortBuffer es una clase que vas a encontrar en el archivo que
te envie. Respecto de tu orta pregunta del ACK, si, deberias enviar el ACK
como parte de la interpretacion del mensaje.

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

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

> Carlos, traté de probar el ejemplo que me mandaste pero no existe el tipo
> SerialPortBuffer.
> Estoy trabajando con vb 2005.
>
>
> --- El *jue 9-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: jueves, 9 de diciembre de 2010, 7:32
>
> Yo creo, Patricia, que vas a tener problemas con ese enfoque. Te explico
> porque: ese metodo funciona solo si en cada evento de recepcion recibis uno
> y solo un mensaje y si lo recibis completo.
>
> Esas dos condiciones rara vez se dan en la practica. Lo mas comun es que,
> por cuestiones de demoras en el sistema operativo, se acumulen mas de un
> mensaje en la recepcion o, peor aun, un mensaje completo y parte del
> siguiente.
>
> Lo que esto significa es que vas a comenzar a perder mensajes porque no
> tendras maneras de almacenar el mensaje parcial.
>
> Es por esto que te decia que deberias separar la recepcion de su
> extraccion.
>
> Te paso adjunto un pequeño ejemplo en VB, falta la logica de extraccion
> porque no la conozco pero te tiro algunas pistas.
>
> ----------------------------------
> Carlos Peix
>
> 2010/12/8 Patricia Banfi 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >
>
>   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]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >* escribió:
>
>
> De: Carlos Peix 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >
> Asunto: [vbnet] Lectura de un puerto RS232
> Para: "vbnet List Member" 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[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]<http://ar.mc576.mail.yahoo.com/mc/[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]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >* escribió:
>
>
> De: Cristian A. Lòpez 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >
> Asunto: [vbnet] Lectura de un puerto RS232
> Para: "vbnet List Member" 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[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]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>[mailto:
> [email protected]<http://ar.mc576.mail.yahoo.com/mc/[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]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >* escribió:
>
>
> De: Angel "Java" Lopez 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>
> >
> Asunto: [vbnet] Lectura de un puerto RS232
> Para: "vbnet List Member" 
> <[email protected]<http://ar.mc576.mail.yahoo.com/mc/[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]<http://ar.mc576.mail.yahoo.com/mc/[email protected]>[mailto:
> [email protected]<http://ar.mc576.mail.yahoo.com/mc/[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 
> 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