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