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

Qt Discussion :

envoi d'un fichier sur port RS232


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut envoi d'un fichier sur port RS232
    Bonjour à tous!
    J'ai réussi a réaliser une petite interface qui me permet d'envoyer des caractère sur le port série, mais je voudrais maintenant pouvoir envoyer un fichier complet, j'ai modifier mon code comme suit pour ma fonction d'envoie:

    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
     
    1.void QSerialPortTerminal::slot_sendPort()
    2.{
    3.    QString Message;
    4.    Message = QFileDialog::getOpenFileName(this, tr("Ouvrir fichier hex" ),
    5.                                          "D:/",
    6.                                          tr("hex files (*.hex)" ));
    7.
    8.    if (!Message.isEmpty())
    9.        loadFile(Message);
    10.
    11.    QByteArray temp(Message.toUtf8());
    12.    serialPort->sendData(temp);
    13.
    14.    lineEditSend->clear();
    15.}


    Mais comment faire pour remplire mon buffer Message avec le fichier que je veux envoyer ?

    j'ai réaliser une focntion loadfile qui me permet cela mais je n'arrive pas a la réaliser, pour le moment mon code ressemble à cela :

    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
     
    1.void QSerialPortTerminal::loadFile(const QString &fileName)
    2.{
    3.    /************************** ECRITURE DES PROGRAMMES **********************************/
    4.    QFile filePRG;
    5.    bool ok;
    6.    QString tmp_image;
    7.
    8.    QString line;
    9.    QStringList list[54];
    10.
    11.    int i,e,s,p;
    12.    int nb_exercices,nb_sequences,nb_positions;
    13.
    14.    QFile file(fileName);
    15.    QString resultat;
    16.    QString tmp;
    17.    int line_number;
    18.    QTextStream out;
    19.
    20.    if (!file.open(QFile::ReadOnly)) {
    21.        QMessageBox::warning(this, tr("Chargement hex" ),
    22.                            tr("Impossible de lire le fichier %1:\n%2." )
    23.                            .arg(fileName)
    24.                            .arg(file.errorString()));
    25.        return;
    26.    }
    27.
    28.    QTextStream in(&file);
    29.
    30.    line_number = 0;
    31.
    32.    while(in.atEnd()==false)
    33.    {
    34.        line = in.readLine(0);
    35.        //line = line.toLower(); 
    36.        list[line_number] = line.split(";" );
    37.        line_number = line_number + 1;
    38.    }
    39.    file.close();
    40.}


    Il faut que je modifie mon loadfile à partire du While pour remplire correctement mon buffer, pouvez vous m'aider svp?
    Je vous remercie d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    j'ai réussi a réaliser un programme d'envoie de fichier par RS232, mais le probleme c'est que lorsque le fichier fait environs 128 lignes cela ne fonctionne plus alors que sa fonctionne avec un fichier plus petit,
    voici mes deux fonctions :

    loadFile qui rempli le fichier dans un buffer :

    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
    QByteArray  QSerialPortTerminal::loadFile(const QString &fileName){
        QFile file(fileName);
        if (!file.open(QFile::ReadOnly)) {
            QMessageBox::warning(this, tr("Chargement hex"),
                                 tr("Impossible de lire le fichier %1:\n%2.")
                                 .arg(fileName)
                                 .arg(file.errorString()));
            return 0;
        }
     
       QByteArray buf = file.readAll();
        file.close();
        return buf;
     
     
    }
    et ma fonction d'envoi sur la liaison RS232 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void QSerialPortTerminal::slot_sendPort(){
    QByteArray Monbuffer;
            QString file;
        file= QFileDialog::getOpenFileName(this, tr("Ouvrir fichier hex"),
                                               "D:/",
                                               tr("hex files (*.hex)"));
     
        if (!file.isEmpty())
            Monbuffer = loadFile(file);
     
        serialPort->sendData(Monbuffer);
     
     
    }
    Es le buffer qui n'arrive pas a enregistrer tout le fichier ?

  3. #3
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    ça va être une réponse un peu indirecte :
    il existe un projet pour les liaisons séries : http://code.google.com/p/qextserialport/

    La classe QextSerialPort hérite de QIODevice, il serait donc, a priori, possible de faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Utilisation de la méthode loadFile déjà existante :
    QByteArray fileData = loadFile("monfichier.txt");
     
    // Utilisation QIODevice
    QextSerialPort portSerie(/* différents paramètres... */);
    portSerie.open(QIODevice::WriteOnly);
    portSerie.write(fileData);

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    j'ai modifier mon code.
    Maintenant j'ai un bouton chargeùent fichier qui me sert a mettre le fichier dans un buffer puis de l'afficher sur un textBrowser(voir le code ci-dessou)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void MainWindow::loadTheFileTx()
    {
            //load file here
           QString file = QFileDialog::getOpenFileName(this, tr("Ouvrir fichier hex"),
                                                        "D:/Daniel",
                                                       tr("hex files (*.hex)"));
            QFile fileDes(file);
            if(fileDes.open(QIODevice::ReadOnly))
            {
                  ui->textBrowser->setPlainText(fileDes.readAll().toHex());
                  fileDes.close();
            }
     
    }
    et j'ai un bouton Envoi, pour envoyer le fichier sur le port RS232

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [void MainWindow::slot_sendPort(){
     
        QByteArray buff = ui->textBrowser->toPlainText().toAscii();
        ui->textBrowser_2->setPlainText(buff);
        serialPort->sendData(buff);
     
    }
    la ligne "ui->textBrowser_2->setPlainText(buff);" mer permet de vérifier ce que j'ai dans mon buffer, j'ai bien toute le données voulu, mais je n'arrive pas a envoyer les données sur le port série, en appuyant sur le bouton send, cela ne marche pas
    Auriez vous une idée please ?

  5. #5
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Points : 356
    Points
    356
    Par défaut
    Peut être qu'en essayant ce qui a été expliqué au dessus...

Discussions similaires

  1. transfert de fichier via port RS232, ...
    Par Axiome dans le forum C
    Réponses: 2
    Dernier message: 21/04/2006, 13h51
  2. [VB6] Communication binaire sur port RS232
    Par Oseval dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 12/04/2006, 12h53
  3. Envoi/Reception de fichier sur un reseau
    Par Janitrix dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 19/12/2005, 14h10
  4. envoi tableau de data sur port série
    Par chourmo dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2005, 16h23
  5. [C#] [FTP] Envoi et suppression fichier sur ftp NON ANONYME!
    Par djsbens dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/03/2005, 10h20

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