Het probleem is het volgende:
Ik ben bezig om een progje te schrijven om via de seriele poort mijn GSM te kunnen aansturen. Dat kan met behulp van 'AT+...' commando's die je bv. via hyperterminal kan sturen.
Ik heb in mijn progje gebruik gemaakt van een MSComm object dat de COM-poort voor moet stellen. Als er nu een commando wordt weggestuurd met :
Dan komt er na verloop van tijd een antwoord van de telefoon. Dat antwoord kan gedetecteerd worden via het OnComm event:
Nou is mijn probleem dat dit event niet synchroon loopt met mijn commando's
Als ik de eerste keer een commando wegstuur treedt er pas na een tijdje een OnComm event op en als ik voor die tijd een tweede commando wegstuur dan krijg ik het antwoord van de eerste pas binnen.....
Ik heb het nu zo gemaakt dat er elke keer als er een commando wordt weggestuurd een pauze wordt ingelast voordat er wordt gekeken naar het OnComm event.
Tijdens deze pauze is het OnComm event wel opgetreden en wordt de antwoordbuffer uitgelezen voor een resultaat.
Nu lijkt me dit geen juiste oplossing omdat het regelmatig blijkt dat de pauze die ik inlas (meestal ongeveer 0,1 s) te kort is. Op dat moment lopen dus de commando's en de antwoorden niet meer synchroon, met alle gevolgen van dien. Wat ook wel eens gebeurd is dat slechts een gedeelte van het antwoord opgevangen wordt.
Mijn vraag is dus:
Hoe kan ik zien dat het OnComm event optreedt zodat ik dan pas mijn antwoordbuffer ga lezen.
Ik wil bijvoorbeeld mijn telefoonboek uit gaan lezen. Dan komt er dus een commando in een loopje te staan dat elke keer een entry in het telefoonboek opvraagt. Als dit niet meer synchroon loopt dan klopt er dus helemaal nix meer van.
Ik heb me echt rot gezocht naar het antwoord op MSDN en Google, maar tot nu toe heb ik nix kunnen vinden, wat mijn probleem oplost.
Als iemand meer code wil zien laat het maar effe weten.
Alvast bedankt.
Ik ben bezig om een progje te schrijven om via de seriele poort mijn GSM te kunnen aansturen. Dat kan met behulp van 'AT+...' commando's die je bv. via hyperterminal kan sturen.
Ik heb in mijn progje gebruik gemaakt van een MSComm object dat de COM-poort voor moet stellen. Als er nu een commando wordt weggestuurd met :
code:
1
| MSComm1.Output = "AT+CGMM" & vbCr |
Dan komt er na verloop van tijd een antwoord van de telefoon. Dat antwoord kan gedetecteerd worden via het OnComm event:
code:
1
2
3
4
5
6
| Select Case MSComm1.CommEvent
Case comEvReceive ' Received RThreshold # of characters
While (MSComm1.InBufferCount > 0)
strInpoet = strInpoet & MSComm1.Input
Wend
End Select |
Nou is mijn probleem dat dit event niet synchroon loopt met mijn commando's
Als ik de eerste keer een commando wegstuur treedt er pas na een tijdje een OnComm event op en als ik voor die tijd een tweede commando wegstuur dan krijg ik het antwoord van de eerste pas binnen.....
Ik heb het nu zo gemaakt dat er elke keer als er een commando wordt weggestuurd een pauze wordt ingelast voordat er wordt gekeken naar het OnComm event.
code:
1
2
3
4
5
6
| MSComm1.Output = "AT+CGMM" & vbCr
duration! = Timer + 0,1
Do Until Timer > duration!
dummy = DoEvents()
Loop |
Tijdens deze pauze is het OnComm event wel opgetreden en wordt de antwoordbuffer uitgelezen voor een resultaat.
Nu lijkt me dit geen juiste oplossing omdat het regelmatig blijkt dat de pauze die ik inlas (meestal ongeveer 0,1 s) te kort is. Op dat moment lopen dus de commando's en de antwoorden niet meer synchroon, met alle gevolgen van dien. Wat ook wel eens gebeurd is dat slechts een gedeelte van het antwoord opgevangen wordt.
Mijn vraag is dus:
Hoe kan ik zien dat het OnComm event optreedt zodat ik dan pas mijn antwoordbuffer ga lezen.
Ik wil bijvoorbeeld mijn telefoonboek uit gaan lezen. Dan komt er dus een commando in een loopje te staan dat elke keer een entry in het telefoonboek opvraagt. Als dit niet meer synchroon loopt dan klopt er dus helemaal nix meer van.
Ik heb me echt rot gezocht naar het antwoord op MSDN en Google, maar tot nu toe heb ik nix kunnen vinden, wat mijn probleem oplost.
Als iemand meer code wil zien laat het maar effe weten.
Alvast bedankt.