Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Tokes en 25 Diciembre 2010, 02:47 am



Título: ¿Cómo reiniciar un timer en visual basic 6?
Publicado por: Tokes en 25 Diciembre 2010, 02:47 am
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í:

Código:
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.


Título: Re: ¿Cómo reiniciar un timer en visual basic 6?
Publicado por: ignorantev1.1 en 25 Diciembre 2010, 03:11 am
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
  1. Dim contador as integer
  2. Dim s as string
  3.  
  4. private sub Comm1_OnComm()
  5.    if comm1.commevent=comevreceive then 'Si se ha recibido un caracter.
  6.        timer1.enabled = true    ' se habilita el timer.
  7.        contador=0 'El tiempo de espera se renueva
  8.        s = s & comm1.input 'Se obtiene el siguiente caracter
  9.        'Aquí proceso el caracter recibido.
  10.        ' Cuando se reciban tdos los caracteres se inhabilita el timer.
  11.    end if
  12. end sub
  13.  
  14. private sub timer1_Timer()
  15.    contador=contador+1 'cada vez que de un Tick, aumentara en 1
  16.    if contador=5 then ' el tiempo de espera se agoto, la cadena se reinicia
  17.        s=""   ' Vacía la cadena de recepción.
  18.        contador=0 'el tiempo de espera se renueva
  19.        timer1.enabled=false 'Se desactiva el timer
  20.    end if
  21. end sub
  22.  

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


Título: Re: ¿Cómo reiniciar un timer en visual basic 6?
Publicado por: Elemental Code en 25 Diciembre 2010, 17:08 pm
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!


Título: Re: ¿Cómo reiniciar un timer en visual basic 6?
Publicado por: Tokes en 25 Diciembre 2010, 20:57 pm
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!