locked
contar caracteres via serie RRS feed

  • Pregunta

  • Hola a tod@s

    me gustaría saber que tengo de poner para contar los datos que me vienen via serie

    ej. me llegan 324 datos , pues tener una variable que me indique el valor (si puede ser conforme lleguen los datos mejor que mejor)

    gracias de antemano

    pd. es en vb net

    pd2. también indicar como mostrar el dato (ya sea label o text)

    saludos joan


    joanVB

    miércoles, 10 de mayo de 2017 13:30

Respuestas

  • Si has configurado el SerialPort para que dispare un evento, los caracteres te llegan a través del manejador del evento. Como te llegan en un String, no tienes más que tomar el .Length del string, que te dice cuántos llegaron de esa tacada, y sumarlo a la variable que uses como contador de caracteres, que te totalizará cuántos han llegado hasta el momento.

    Evidentemente, al igual que cualquier otra variable, puedes asignársela al .Text de un Label o TextBox, teniendo en cuenta que el manejador se dispara en otro hilo y por lo tanto hay que aplicar el habitual salto entre hilos que siempre aplicamos en estos casos.

    ...
            AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler
    
    ...
        Private Contador as Integer
    ...
        Private Shared Sub DataReceivedHandler(
                            sender As Object,
                            e As SerialDataReceivedEventArgs)
            Dim sp As SerialPort = CType(sender, SerialPort)
            Dim indata As String = sp.ReadExisting()
            Contador += indata.Length
            PresentarContador()
        End Sub
    

    Fíjate que no te he escrito el contenido de PresentarContador, que es algo que no tiene nada que ver con el puerto serie, sino que es una cuestión de programación en multihilo. Si no sabes cómo usar el Me.Invoke para hacer el salto entre hilos, pregunta y buscaremos un ejemplo.

    • Propuesto como respuesta Joyce_ACModerator miércoles, 10 de mayo de 2017 21:15
    • Marcado como respuesta JoanVB jueves, 11 de mayo de 2017 11:06
    miércoles, 10 de mayo de 2017 20:54

Todas las respuestas

  • Si has configurado el SerialPort para que dispare un evento, los caracteres te llegan a través del manejador del evento. Como te llegan en un String, no tienes más que tomar el .Length del string, que te dice cuántos llegaron de esa tacada, y sumarlo a la variable que uses como contador de caracteres, que te totalizará cuántos han llegado hasta el momento.

    Evidentemente, al igual que cualquier otra variable, puedes asignársela al .Text de un Label o TextBox, teniendo en cuenta que el manejador se dispara en otro hilo y por lo tanto hay que aplicar el habitual salto entre hilos que siempre aplicamos en estos casos.

    ...
            AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler
    
    ...
        Private Contador as Integer
    ...
        Private Shared Sub DataReceivedHandler(
                            sender As Object,
                            e As SerialDataReceivedEventArgs)
            Dim sp As SerialPort = CType(sender, SerialPort)
            Dim indata As String = sp.ReadExisting()
            Contador += indata.Length
            PresentarContador()
        End Sub
    

    Fíjate que no te he escrito el contenido de PresentarContador, que es algo que no tiene nada que ver con el puerto serie, sino que es una cuestión de programación en multihilo. Si no sabes cómo usar el Me.Invoke para hacer el salto entre hilos, pregunta y buscaremos un ejemplo.

    • Propuesto como respuesta Joyce_ACModerator miércoles, 10 de mayo de 2017 21:15
    • Marcado como respuesta JoanVB jueves, 11 de mayo de 2017 11:06
    miércoles, 10 de mayo de 2017 20:54
  • Gracias Alberto a funcionado a la primera (con algún retoque)

    la idea la tenia pero me faltaba un empujoncito

    gracias

    joan


    joanVB

    jueves, 11 de mayo de 2017 11:06