¿Cómo reiniciar un timer en visual basic 6?

Iniciado por Tokes, 25 Diciembre 2010, 02:47 AM

0 Miembros y 2 Visitantes están viendo este tema.

Tokes

Hola a todos:

Escribo para plantear una pequeña duda que me tiene preocupado: ¿Hay forma de reiniciar un timer en vb6?

Estoy tratando de recibir datos por el puerto COM en formato RS232. La PC debe recibir un bloque de 30 caracteres para procesarlo, pero tengo la propiedad rthreshold a 1 para que se produzca un evento OnComm cada vez que se reciba un caracter.

El objetivo es que cada vez que llegue un caracter se reinicie un timer para evitar que éste último produzca un evento Timer(). Si se produce el evento Timer() quiere decir que el caracter ha tardado en llegar y suponer entonces que ha ocurrido un problema con la comunicación.

Así, por ejemplo, si después del cuarto caracter el quinto no llega en un determinado tiempo, el sistema reiniciará su lógica de recepción y el siguiente caracter que llegue será considerado el primero de una nueva cadena.

De manera burda, lo tengo así:

Dim contacaracter as integer
Dim s as string

private sub Comm1_OnComm()
    if comm1.commevent=comevreceive then 'Si se ha recibido un caracter.
         if contacaracter = 0 then     ' y si es el primero en recibirse
              timer1.enabled = true    ' se habilita el timer.
         else
              timer1.enabled = false   ' Aquí trato de reiniciar el timer apagándolo
              timer1.enabled = true    ' y luego encendiéndolo, pero al parecer no
                                                 ' funciona.
         endif

        s = s & comm1.input
        'Aquí proceso el caracter recibido.
        ' Cuando se reciban tdos los caracteres se inhabilita el timer.
    endif
end sub

private sub timer1_Timer()
    contacaracter=0     ' El siguiente caracter que llegue será considerado el primero.
    s=""   ' Vacía la cadena de recepción.
   timer1.enabled=false   
end sub


Cuando apago el timer (timer1.enabled=false) al parecer sólo lo detengo, pero no lo hago regresar a su valor inicial de conteo.

Si alguien pudiera ayudarme, muchísimas gracias.

ignorantev1.1

No conozco nada de COM, tampoco la logica del programa, a ver corrigeme:

*El sistema recibira caracteres,
* despues de la recepcion de un caracter el timer se habilitara estableciendo un tiempo de espera
* y cada vez que se recibe un caracter el tiempo de espera se renueva.
* Si el tiempo de espera se agota entonces el siguiente caracter recibido sera miembro de una nueva cadena, el timer se deshabilitara hasta recibir un nuevo caracter.

estoy bien?
Código (vb) [Seleccionar]

Dim contador as integer
Dim s as string

private sub Comm1_OnComm()
    if comm1.commevent=comevreceive then 'Si se ha recibido un caracter.
        timer1.enabled = true    ' se habilita el timer.
        contador=0 'El tiempo de espera se renueva
        s = s & comm1.input 'Se obtiene el siguiente caracter
        'Aquí proceso el caracter recibido.
        ' Cuando se reciban tdos los caracteres se inhabilita el timer.
    end if
end sub

private sub timer1_Timer()
    contador=contador+1 'cada vez que de un Tick, aumentara en 1
    if contador=5 then ' el tiempo de espera se agoto, la cadena se reinicia
        s=""   ' Vacía la cadena de recepción.
        contador=0 'el tiempo de espera se renueva
        timer1.enabled=false 'Se desactiva el timer
    end if
end sub


espero haberte ayudado... suerte y feliz navidad :xD

Elemental Code

para "Reiniciar" un timer (es decir que empieze denuevo la cuenta atras) pone asi:

Timer1.enabled = false
timer1.enabled = true


automaticamente para y empieza de nuevo :P!

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Tokes

Muchísimas gracias por sus respuestas.

Trataré de corregir mi código y luego les comento como quedó.

De verdad muchas gracias y ¡Feliz navidad!