IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau Discussion :

Lecture d'une trame NMEA : données incomplètes


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Nileeda
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Par défaut Lecture d'une trame NMEA : données incomplètes
    Bonjour,

    Actuellement en train de travailler sur mon projet de BTS, j'ai besoin de récupérer des trames NMEA via un port série. Mon programme semble ne pas afficher d'erreur lorsque je le compile, mais je n'arrive visiblement pas à récupérer les trames souhaitées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <QApplication>
    #include <QCoreApplication>
    #include <QDebug>
    #include <QIODevice>
    #include <QObject>
    #include <QSerialPort>
    #include <qSerialPort.h>
    #include <QString>
    #define PORT "/dev/ttyUSB0"
    #include <iostream>
     
    using namespace std;
     
    int main(int argc, char** argv)
    {
        const char *data;
        QApplication app(argc, argv);
        QSerialPort *port = new QSerialPort();
        QString trame;
     
        port->setPortName(PORT);
     
        if(!port->open(QIODevice::ReadOnly)){
            cout << "Le port série refuse de s'ouvrir." <<  endl;
            perror("open");
            return 0;
        } else {
            port->setBaudRate(QSerialPort::Baud4800);
            port->setDataBits(QSerialPort::Data8);
            port->setStopBits(QSerialPort::OneStop);
            port->setParity(QSerialPort::NoParity);
            port->setFlowControl(QSerialPort::NoFlowControl);
     
            cout << "Data : " << endl;
     
            trame = QString::fromLatin1(port->readAll());
            qDebug() << trame << endl;
            if(trame.contains("$GPGGA")){
                data = trame.toUtf8().constData();
                cout << data << endl;
            }
            return 0;
        }
    }
    Quelqu'un aurait-il une solution à me proposer ? Je précise que je travaille en C++ sous Qt Creator 3.0.1 basé sur Qt 5.2.1 et sur Ubuntu. Merci à tous ceux qui prendront la peine de m'aider...

    Recup_GPGGA.tar.gz

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Par défaut
    Salut !

    Es-tu sûre qu'il y a quelque chose a lire lorsque tu fais ton readAll() ? -> http://doc.qt.io/qt-5/qiodevice.html#waitForReadyRead

    PS : N'oublie pas de fermer le port

  3. #3
    Membre confirmé Avatar de Nileeda
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Par défaut
    Merci, tu as en partis résolu mon problème. Maintenant il m'affiche le symbole $, qui correspond au début des trames que je souhaite recevoir. Mais c'est malheureusement tout, je ne reçois pas le reste de la trame...

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Quand la fonction waitForReadyRead() retourne, tu as des données à lire, mais elle ne garantit jamais que tu as l'entièreté d'un paquet (elle travaille à une couche inférieure dans la pile de protocoles). Si tu réappelles cette fonction, elle attendra jusqu'à ce que de nouvelles données soient disponibles, c'est-à-dire la suite de ta trame.

    D'ailleurs, pour éviter de bloquer ton programme en attendant les données (notamment si tu as une interface graphique en parallèle…), tu peux aussi utiliser le signal readyRead().
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Membre confirmé Avatar de Nileeda
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Par défaut
    Merci dourouc ! En incluant waitForReadyRead() dans une boucle while, j'ai réussi à récupérer toutes les trames gps et à mettre en place mon filtre pour ne récupérer que les trames GPGGA ! Je vais pouvoir progresser dans mon projet, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2008, 13h59
  2. VBA : lecture d'une base de données SQL *.gdb
    Par _Nimy_ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/04/2008, 11h16
  3. acquerir une trame nmea rs232(serie)>PIC
    Par strygolw dans le forum C
    Réponses: 7
    Dernier message: 06/05/2007, 14h17
  4. [C#]Lecture d'une base de donnée
    Par crawling5 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/04/2006, 17h53
  5. [VB]Lecture dans une base de donnée posant problème
    Par polo-j dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/03/2006, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo