2016-02-05 2 views
-1

Je dois enregistrer les données provenant du GPS. J'utilise le système Windows 7 et le GPS est connecté en utilisant le port USB. J'utilise dialogue visual studio applicationReadFile USB Port série trop lent

données GPS est quelque chose comme ça

"$GPGLL,2219.2500182,N,09019.0118688,E,055547.65,A,A*61" 

je dois enregistrer ces données dans le fichier. J'ai complètement passé par this link et ai réglé des paramètres en conséquence.

char buffer[56]; 

Ceci est mon code pour ouvrir le port

hcomm= CreateFile("COM8", 
        GENERIC_READ, 
        0, 
        NULL, 
        OPEN_EXISTING, 
        0, 
        NULL); 
if (hcomm == INVALID_HANDLE_VALUE) 
    TRACE("%s","error"); 
memset(&port, 0, sizeof(port)); 
port.DCBlength = sizeof(port); 
if (!GetCommState(hcomm, &port)) 
TRACE("getting comm state"); 
if (!BuildCommDCB("baud=19200", &port)) 
TRACE("building comm DCB"); 
if (!SetCommState(hcomm, &port)) 
    TRACE("adjusting port settings"); 
    timeouts.ReadIntervalTimeout = 0; 
    timeouts.ReadTotalTimeoutMultiplier = 0; 
    timeouts.ReadTotalTimeoutConstant = 0; 
    if (!SetCommTimeouts(hcomm, &timeouts)) 
    TRACE("setting port time-outs."); 

Et suis la lecture des données comme suit

while(loop which executes after every 20 ms) { 
ReadFile(hcomm, buffer, sizeof(buffer), &read, NULL); 
     if (read){ 
     //code to write data to file 
       } 

Bien que je reçois des données, la vitesse est terriblement faible. Je reçois des données à 10 Hz. Je veux enregistrer les données à 50 lectures/seconde.

Quelqu'un peut-il m'aider?

EDIT: Comme par @ Paul suggestion R, j'ai augmenté la vitesse de transmission 115200. Maintenant, il enregistre les données @ 20 messages/seconde. Mon GPS prend en charge un taux de mise à jour maximum de 20 Hz et 11520 bauds maximum. Si je veux enregistrer des données à 50 messages/seconde, que dois-je faire?

Par exemple, si le taux de mise à jour est de 20 Hz, chaque la lecture est disponible pour 50 ms. Donc, si je lis le port après chaque 20ms, ne devrait-il pas enregistrer chaque entrée deux fois ou dans une proportion appropriée?

+2

Lisez la section "Taux de mise à jour" de [cette page Web] (https://learn.sparkfun.com/tutorials/gps-basics/gps-glossary). –

+0

@HansPassant, s'il vous plaît voir modifier la section à la question – Anonymous

+0

Si le GPS a un taux de mise à jour 20Hz, alors c'est 20 fois par seconde, ce qui signifie que même si vous pourrez lire 50 messages par seconde, vous ne recevrez pas 50 messages uniques . Tenter de lire plus de messages n'est qu'un gaspillage de ressources. –

Répondre

1

C'est juste de l'arithmétique basique. À 19200 bps, vous pouvez recevoir environ 1920 caractères par seconde (en supposant que chaque caractère = 8 bits de données + 1 bit de départ + 1 bit d'arrêt). Votre exemple de message ci-dessus est d'environ 55 caractères + terminateurs de ligne, etc., ce qui signifie un peu plus de 30 messages par seconde. Si vous devez envoyer un message à l'appareil entre chaque message reçu, il sera encore plus bas. Donc, 50 messages/seconde n'est tout simplement pas possible à ce débit de données.

Solution simple: augmentez le débit de données de 19200 bps à quelque chose de beaucoup plus élevé, par ex. 57600 bps.

+0

Oh..Merci d'avoir signalé une erreur. J'ai augmenté le débit en bauds pour le GPS et le code. Il enregistre maintenant @ 20 messages/seconde. Le taux de mise à jour du GPS est de 20 Hz maximum. Est-ce que cela pose problème maintenant? – Anonymous