[VB6] Timer functie gebruiken om data binnen te halen

Pagina: 1
Acties:
  • 156 views sinds 30-01-2008
  • Reageer

  • MaartenK18
  • Registratie: Oktober 2004
  • Laatst online: 06-01-2022
Zou iemand mij misschien kunnen helpen met het volgende probleem:

Er moet data uit een com-poort uitgelezen worden om de x aantal miliseconden. Het uitlezen zelf is geen probleem, dat is wel gelukt, maar nu moet je constant op een command-button klikken om telkens 1 meting binnen te halen. De bedoeling is dus dat er via een command-button een timer aan zal gaan en dat dan om een x aantal miliseconden er een meting binnengehaald wordt.

Iemand misschien een idee ??

(PS: hoeft niet per se een stuk code te zijn, als ik er maar wijzer van wordt)

Verwijderd

Je hebt toch gewoon een timer component. Die kun je gewoon toevoegen en die om de zoveel miliseconden iets laten doen.

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 19:12

sopsop

[v] [;,,;] [v]

Je hebt de timer-control in VB al gevonden? Zie dit icoontje in je toolbar:
Afbeeldingslocatie: http://www.moz.ac.at/user/herf/lv/vb4einf/graphics/timer.jpg

Je commandbutton code wordt dan iets als:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
Private Sub Command1_Click()
   Timer1.Interval = 100
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
  '
  ' voer je code uit.
  '
End Sub

Veel simpeler wordt het niet...

[ Voor 47% gewijzigd door sopsop op 21-12-2004 13:26 ]


  • MaartenK18
  • Registratie: Oktober 2004
  • Laatst online: 06-01-2022
Jaja, zo ver was ik al, en dan kan je de intervaltijd instellen, maar hoe kan je dan zeggen dat hij een bepaalde handeling om de zoveel tijd uit moet voeren ?

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 19:12

sopsop

[v] [;,,;] [v]

MaartenK18 schreef op dinsdag 21 december 2004 @ 13:25:
Jaja, zo ver was ik al, en dan kan je de intervaltijd instellen, maar hoe kan je dan zeggen dat hij een bepaalde handeling om de zoveel tijd uit moet voeren ?
De code die in het timer event staat voert hij iedere interval uit. In mijn voorbeeld dus iedere 100ms.

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Heb je al gezocht bij Google naar 'Visual Basic Timer function', daar vindt je namelijk genoeg voorbeelden en ook mogelijkheden tot het gebruiken van een Timer (class) zonder de Timer control op je form te plaatsen...

Edit:
dit is wel een goede uitleg over het Timer control...

[ Voor 19% gewijzigd door Woudloper op 21-12-2004 13:30 ]


  • MaartenK18
  • Registratie: Oktober 2004
  • Laatst online: 06-01-2022
Mijn dank is groot! 8)

  • sebastius
  • Registratie: September 2000
  • Laatst online: 08:39

sebastius

Laten we lekker link gaan doen

Je kan ook 'OnComm' gebruiken, uit diezelfde Comm component. Dan gaat het werken zodra er iets in de buffer terecht is gekomen.

Verwijderd

Je hebt de timer-control in VB al gevonden?
Let wel op dat de timer control in VB een resolutie heeft van 16ms en dat intervallen onder de 16 ms dus onzin zijn en je bij overige intervallen een afwijking kunt hebben.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
Verwijderd schreef op dinsdag 21 december 2004 @ 21:13:
Let wel op dat de timer control in VB een resolutie heeft van 16ms en dat intervallen onder de 16 ms dus onzin zijn en je bij overige intervallen een afwijking kunt hebben.
16ms resolutie? Is dat niet een beetje erg positief ? Als je verder niets doet dan op die timer wachten kom je er _misschien_ aan.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

16ms resolutie? Is dat niet een beetje erg positief ? Als je verder niets doet dan op die timer wachten kom je er _misschien_ aan.
Je hebt helemaal gelijk. De timer-control heeft een resolutie van 55ms. De timer()-functie heeft een resolutie van 16ms. Ik zat ze weer eens door elkaar te halen.

  • MaartenK18
  • Registratie: Oktober 2004
  • Laatst online: 06-01-2022
Als ik een goeie timer probeer te maken lukt dit dus niet, want per minuut zit ie er ongeveer 5 tellen naast. Heeft dat dan met die resolutie te maken ??

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 19:59

Super_ik

haklust!

waarom gebruik je de onComm event niet? dan leest ie het vanzelf uit zodra er iets binnen komt

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • MaartenK18
  • Registratie: Oktober 2004
  • Laatst online: 06-01-2022
Dat is wel zo, maar ik wil het zo maken dat ik kan zeggen hoeveel data er per seconde binnenkomt en dan kan zeggen hoelang hij moet gaan ontvangen.

Als ik mijn interval op 250 miliseconde zet is ie wel nauwkeurig, maar waarom is ie dat dan niet als ik hem op 100 ms zet ?

[ Voor 31% gewijzigd door MaartenK18 op 23-12-2004 15:35 ]


Verwijderd

MaartenK18 schreef op donderdag 23 december 2004 @ 15:23:
Dat is wel zo, maar ik wil het zo maken dat ik kan zeggen hoeveel data er per seconde binnenkomt en dan kan zeggen hoelang hij moet gaan ontvangen.

Als ik mijn interval op 250 miliseconde zet is ie wel nauwkeurig, maar waarom is ie dat dan niet als ik hem op 100 ms zet ?
Omdat 250 +/- 55 ms minder afwijking is dan 100 +/- 55 ms ?

Als je dit soort dingen wilt doen met een timer, zoek dan eens op google naar 'vb high resolution timer'

Verwijderd

Wat je ook kunt doen is je berekening van de snelheid via een timer te laten doen, en de afhandeling van de binnen gekomen data via OnComm. Hoog in de OnComm een teller op die bijhoud hoeveel data er is binnengekomen. In je OnTimer zet je dan zoiets als

code:
1
2
3
4
5
6
7
Static VorigeTijd as double
dim HuidigeTijd as double

huidigetijd = timer
snelheid = AantalBytes / (vorigetijd - huidigetijd)
vorigetijd = huidigetijd
aantalbytes = 0

Vanwaar het opnieuw bepalen van de tijden ? Omdat het in principe zelfs mogelijk is dat een timer-event verloren gaat ( Windows staat maar 1 timer message toe in de messagequeue van een control ).
Pagina: 1