none
Puerto USB, no consigo detener evento... RRS feed

  • Pregunta

  • Hola 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)
    lunes, 13 de febrero de 2012 22:43

Respuestas

  • 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
    miércoles, 15 de febrero de 2012 14:18
    Moderador

Todas las respuestas

  • 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 16:36
    Moderador
  • 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 Sub

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

    Private Sub actualizar(ByVal s As Object, ByVal e As EventArgs)
            textBox_visualizar_mensaje.Text = Recibidos
        End Sub

    Cuando 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 18:34
  • Quizas algo como esto ...

        Private Sub Recepcion(ByVal sender As ObjectByVal 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 ObjectByVal 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,
    PepLluis


    MVP - Visual Developer

    martes, 14 de febrero de 2012 23:03
    Moderador
  • 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 12:36
  • 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
    miércoles, 15 de febrero de 2012 14:18
    Moderador