Puerto USB, no consigo detener evento...
-
lunes, 13 de febrero de 2012 22:43Hola ya no.... encuentro solucion... estoy deprimido, necesito si es posible la ayuda de alguien, el tema es el siguiente: Recepciono datos desde el puerto usb para poder programar una placa, logro cortar el arranque de la misma mandando un pulso "Escape" pero obtengo un rebote de vario datos entrantes confirmando dicho corte ya que tengo configurada la lectura con el evento DataReceived hasta el momento que "queda quieto" para poder programar pasan unos cuantos OK y yo necesito solo 1 y listo como controlo el evento?
- Cambiado PepLluisModerator martes, 14 de febrero de 2012 16:36 (De:Lenguaje VB.NET)
Todas las respuestas
-
martes, 14 de febrero de 2012 16:36Moderador
Hola elnovato,
Deberias especificar que tipo de adaptador USB estas utilizando... USB/232 ? y en tal caso, podrias volver a explicar el problema en otras palabras. Es dificil de entender si no se conoce el escenario donde estas experimentando.
Saludos,
PepLluis,MVP - Visual Developer
-
martes, 14 de febrero de 2012 18:34
ok, perdon, va de nuevo... tengo un adptador usb/232... y el siguiente codigo:
Dim Recibidos As String
Public Sub New()
InitializeComponent()
If Not USB.IsOpen Then
Try
USB.Open()
Catch ex As System.Exception
MessageBox.Show(ex.ToString())
End Try
End If
AddHandler USB.DataReceived, AddressOf Recepcion
End SubPrivate Sub Recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
Recibidos += USB.ReadExisting
USB.Write(Chr(Keys.Enter))
Me.Invoke(New EventHandler(AddressOf actualizar))
End SubPrivate Sub actualizar(ByVal s As Object, ByVal e As EventArgs)
textBox_visualizar_mensaje.Text = Recibidos
End SubCuando ocurre el evento llama a recepcion, manda el pulso y para la placa, cabe aclarar el funcionamiento de esta, al momento de encenderla envia datos a la pc que tiene almacenados en la bios y la forma de poder programarla es cortando el "arranque" con un pulso de enter o escape, mi problema es que al mandar el pulso en este caso enter ocurre un rebote ya que envio y recepriono lo que envio, y esto ocurre unas cuantas veces hasta que para, tira algo como:
Ok
Ok
Ok
Ok...
yo necesito recepcionar un solo OK, ya que el codigo que tengo que poner despues me lo repetiria las veces que ocurra el rebote, no me sirve usar una variable Boolean tiene que haber otra forma...
-
martes, 14 de febrero de 2012 23:03Moderador
Quizas algo como esto ...
Private Sub Recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Threading.Thread.Sleep(50) ' Dar tiempo al disposivo para enviar respuesta Recibidos += USB.ReadExisting Me.Invoke(New EventHandler(AddressOf actualizar)) End Sub Private Sub actualizar(ByVal s As Object, ByVal e As EventArgs) textBox_visualizar_mensaje.Text = Recibidos If Recibidos.Contains("OK") Then 'Realizar la operacion...despues del primer OK Else USB.Write(vbCr) End If End Sub
Saludos,
PepLluisMVP - Visual Developer
-
miércoles, 15 de febrero de 2012 12:36
Hola, muchas gracias por la respuesta pude solucionar el problema por fin graicas a tus datos...
te cuento que saque por ahora la instruccion if aumente el sleep a 900 para darle tiempo ya que el secreto de la recepcion estaba ahi y ademas aumente la cantidad de bytes leidos antes de que ocurra el evento, funciono perfectamente cortando al primer ok, es la primera ves que participo en un foro tengo que puntuar no???
Muchas Gracias
Angel Camacho
-
miércoles, 15 de febrero de 2012 14:18Moderador
OK, Me alegro.
Aunque no es aconsejable utilizar tiempos tan largos en hilos de los que dependen los interfaces de usuario.
No se tiene que puntuar... lo que se hace es "Marcar como Respuesta" si la misma ha ayudado a resolver tu problema, de esa forma resulta mas facil su busqueda para otros usuarios con el mismo problema... pues inicialmente buscaran en preguntas que esten respondidas.
Saludos,
PepLluis,MVP - Visual Developer
- Marcado como respuesta elnovato jueves, 16 de febrero de 2012 15:00

