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

Bibliothèques Discussion :

Dialogue avec le port série [Port série]


Sujet :

Bibliothèques

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut Dialogue avec le port série
    Bonjour à tous,

    Encore une problématique sur le port série...
    J'utilise le port série pour communiquer avec une machine industrielle. Pour cela je me sers évidement de la librairie QextSerialPort.
    Mon port s'ouvre et est bien configuré, j'arrive à faire marcher l'appli en émission et réceptions de données.

    Cependant j'ai un petit (gros?) problème...

    Pour le dialogue avec un équipement particulier, mon appli doit vérifier la présence d'un caractère dans les trames reçues et lui en renvoyer un autre afin d'avoir en permanence la certitude que le dialogue est établit. (A la manière d'une poignée de main en réseau)

    C'est ici que les choses se gâtent!
    Je réceptionne bien la trame envoyée par l'équipement et je détecte le caractère qui nécessite un acquittement.

    Lorsqu'il est détecté je fais un write() sur le port série pour envoyer le caractère d'acquittement. Pourtant ce caractère ne part pas tout de suite.

    L'équipement me renvoie une demande d'acquittement, puis deux... Puis coupe le dialogue.
    A ce moment, mon appli répond avec les 3 acquittements demandés quelques secondes plus tôt.

    J'ai donc plusieurs questions:

    1. La librairie QextSerialPort permet elle un full-duplex total? (D'après ce que j'avais lu, oui, mais bon ne sait-on jamais...)

    2. La fonction write() héritant de QIOdevice est-elle instantanée?

    3. Je sais que le port série a un buffer intégré qui se vide après un certain temps ou un certain remplissage, savez-vous ou l'on pourrait régler ce paramètre?

    4. Vous avez d'autres idées ?

    Je viens demander votre aide parce que je ne sais pas si je dois chercher du côté de la librairie QextSerialPort ou modifier mon code (je préférerais nettement la deuxième solution pour être honnête)

    Merci d'avance...

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Je ne connais pas la lib QextSerialPort, mais n'y a t'il pas une méthode de flush ? Dans un peu près tous les drivers d'interfaces réseaux où il y a un buffer d'écriture, tu as ce genre de commande pour forcer l'écriture du buffer sur le support.

    Donc s'il y a une fonction de ce type, essaie de l'appeler juste après ton write.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    En fait, la lib QExtSerialPort dérive que QIODevice.
    Donc effectivement elle possède une méthode de flush.
    J'ai bien essayé de le placer après mon write pour forcer l'écriture, mais les trames arrivent toujours après.
    J'ai très peur que la lib ne soit pas full-duplex

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    En effet j'ai peur que la communication ne soit pas full duplex (sans certitude), sinon est-il possible de revoir ton code pour implémenter une communication en half-duplex ?

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Non j'ai vraiment besoin d'une communication full.
    Le signal ReadyRead() serait-il défectueux?
    Dans ce cas il faudrait que je mette quelques QTimer un peu partout dans mon code ce que je redoute totalement

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    En effet cela risque de compliquer ton code si tu n'es pas à l'aise avec les Qtimers

  7. #7
    Responsable Qt & Livres


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

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut
    Il faut aussi remarquer ce post : http://www.developpez.net/forums/d0-m5367987/a/a/. Il existe une autre bibliothèque, QSerialDevice, pour cela, encore maintenue et plus orientée Qt.
    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 !

  8. #8
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    Oui et avec celle la il y a un vrai signal readyRead qui marche.

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    D'accord, merci pour l'info sur cette librairie j'avoue que j'en ignorais l'existence.
    Je vais peut-être m'orienter vers celle-ci.
    Cependant, qu'est-ce qui me garantie qu'elle est full-duplex?

    Car QextSerialPort fonctionne, ses signaux aussi.
    C'est juste que je n'arrive pas à établir un dialogue qui répond de manière instantanée.
    J'ai impression que mon automate occupe le port et ne laisse pas répondre.

    Pourtant un port série a une broche d'émission, et une broche de réception.
    Donc le full ne devrait pas poser de problème. (Toujours selon moi...)

    Pour info, la dernière version de QExtSerialPort a été trouvée ici : http://code.google.com/p/qextserialport/
    et date de 2009 il me semble.

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Je crois avoir mis le doigt dessus.
    Dans la librairie, la fonction write et la fonction read gèrent un mutex.
    Forcément pendant l'écriture on bloque le mutex et on le débloque à la fin, idem pour la lecture.
    Je pense que cette utilisation est normale mais croyez vous dans ce cas que mon automate ne rende pas la communication?
    Et dans ce cas si vous aviez une astuce pour le forcer à "lacher prise" ...

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Pour les intéressés : Le test de la nouvelle librairie QSerialDevice est positif.
    Les changements à faire sont minimes puisque QExtSerialPort et QSerialDevice sont basées toutes deux sur IODevice.
    Elle est régulièrement maintenue et je vérifierai très prochainement si elle est parfaitement multi-plateformes.
    C'est donc une librairie externe très intéressante !

    Par contre pour mon soucis de full-duplex, toujours dans le noir.
    J'ai changé la librairie (De QExtSP à QSD) et récemment mis en place deux threads : un pour la réception et un pour l'émission.
    Mais je n'arrive toujours pas à écrire sur le port pendant ma réception. J'ai le même problème.

    Mais maintenant je n'ai plus d'idée

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Es tu sûr que le problème soit dû à l'accès à ton port ? C'est peut être tes threads qui ne sont pas bien crées, et qui ne parallélisent en fait pas les opérations.

    Le code de tes threads et de leur déclaration pourrait sans doute nous aider à t'aider .

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  13. #13
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Merci pour ton soutien Gulish

    J'ai donc une classe GestionPortSerie :
    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
    45
    46
    47
    #include "GestionPortSerie.h"
     
    GestionPortSerie::GestionPortSerie(QString Nom,AbstractSerial::BaudRate Bps,AbstractSerial::DataBits Nb_Bits_Donnees,AbstractSerial::StopBits Bits_Stop,AbstractSerial::Parity Parite,AbstractSerial::Flow Controle_Flux)
    {
        //Récupération des informations en paramètres (récupérées précédement dans le XML)
        this->NomSerial = Nom;
        this->F_Bps = Bps;
        this->F_Nb_Bits_Donnees = Nb_Bits_Donnees;
        this->F_Bits_Stop = Bits_Stop;
        this->F_Parite = Parite;
        this->F_Controle_Flux = Controle_Flux;
        //Déclaration du nom du port en constante
        const QString NomPort = this->NomSerial;
     
        //Paramétrage du port série
        AbstractSerial *portSerie = new AbstractSerial();
        portSerie->setDeviceName(NomPort);
        portSerie->open(AbstractSerial::ReadWrite);
        portSerie->setFlowControl(Controle_Flux);
        portSerie->setParity(Parite);
        portSerie->setDataBits(Nb_Bits_Donnees);
        portSerie->setStopBits(Bits_Stop);
        portSerie->setBaudRate(Bps);
        portSerie->setCharIntervalTimeout(50);
     
        this->port = portSerie;
     
     
     
        //Initialisation et lancement des deux threads
        //Réception
          m_ThreadReception = new ThreadReception(port);
          m_ThreadReception->start();
     
     
        //Envoi
          m_ThreadEnvoi = new ThreadEnvoi(port);
          m_ThreadEnvoi->start();
     
     
     
    }
     
    GestionPortSerie::~GestionPortSerie()
    {
        delete port;
    }

    Ma Classe de thread de réception :
    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
    45
    46
    47
    48
    49
    50
    51
    52
     
    ThreadReception::ThreadReception(AbstractSerial *addressSerialPort) : extSerialPort(addressSerialPort)
    {
        stopped=false;
    }
     
    ThreadReception::~ThreadReception()
    {
        if (isRunning())
        {
            stopReceiving();
            wait();
        }
    }
     
    void ThreadReception::stopReceiving()
    {
        stopped = true;
    }
     
    void ThreadReception::run()
    {
        int numBytes=0;
        char data[1024];
        QByteArray dataReceived;
     
        forever
        {
            if (stopped)
            {
                stopped = false;
                break;
            }
            numBytes = extSerialPort->bytesAvailable();
            if (numBytes > 0)
            {
     
                mutexReceive.lock();
     
                extSerialPort->read(data, numBytes);
                data[numBytes]='\0';
     
                dataReceived = data;
                qDebug()<<"Donnees dans le thread de reception: ";
                qDebug()<<data<<endl;
     
                mutexReceive.unlock();
     
                emit newDataReceived(dataReceived);
            }
        }
    }
    Ma classe de thread d'envoi :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    ThreadEnvoi::ThreadEnvoi(AbstractSerial *addressSerialPort) : extSerialPort(addressSerialPort)
    {
        dataToSend.clear();
        stopped=false;
    }
     
    ThreadEnvoi::~ThreadEnvoi()
    {
        if (isRunning())
        {
            stopSending();
            wait();
        }
    }
     
     
    void ThreadEnvoi::addDataToSend(QByteArray dataToAdd)
    {
        QMutexLocker locker(&mutexSend);
        for (int i=0; i<dataToAdd.size(); i++)
     
            dataToSend.enqueue(QByteArray(1,dataToAdd.at(i)));
     
        qDebug()<<"Donnees dans le thread de emission ";
        qDebug()<<dataToSend<<endl;
     
        if (!isRunning())
            start();
    }
     
    void ThreadEnvoi::stopSending()
    {
        stopped=true;
    }
     
    void ThreadEnvoi::run()
    {
        QByteArray byteArray;
     
        forever
        {
            if (dataToSend.isEmpty() || stopped)
            {
                stopped = false;
                break;
            }
            mutexSend.lock();
            byteArray = dataToSend.dequeue();
            mutexSend.unlock();
     
            extSerialPort->write(byteArray, 1);
            extSerialPort->flush();
        }
    }
     
    //Slot permettant d'utiliser la fonction d'envoi de données.
    void ThreadEnvoi::transfererDonnee(QByteArray donnee){
        addDataToSend(donnee);
    }
    Ces deux threads sont connectés à la lecture de mon XML par les lignes suivantes :
    (un_Serial et m_Serial sont deux objets GestionPortSerie créés auparavant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Connexion entre les deux threads réception et envoi des deux ports séries
                 connect(un_serial->m_ThreadReception,SIGNAL(newDataReceived(QByteArray)),m_serial->m_ThreadEnvoi,SLOT(transfererDonnee(QByteArray)));
                 connect(m_serial->m_ThreadReception,SIGNAL(newDataReceived(QByteArray)),un_serial->m_ThreadEnvoi,SLOT(transfererDonnee(QByteArray)));
    J'ai une création de deux objets car mon appli sert à prolonger une liaison série. (Elle récupère un flux série et renvoie un flux série)

    Désolé pour l'avalanche de code
    En espérant que ça vous aide...

  14. #14
    Membre actif
    Homme Profil pro
    Ingénierie des systemes embarqués temps réels
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénierie des systemes embarqués temps réels
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par L-F-an Voir le message
    .... récemment mis en place deux threads : un pour la réception et un pour l'émission.
    Mais je n'arrive toujours pas à écrire sur le port pendant ma réception.
    Sous µ$oft Je m'y suis essayé avant de me résoudre au fait que les actions sont unique. ouverture- lecture ou écriture -fermeture.
    Donc la lecture et l ecriture ne peut pas se faire en même temps . Amha.

    Encore moins ouverture- lecture ou écriture -fermeture en simultané sur des port differents.
    Le souci se posait au niveau de la configuration de CreateFile[A |W] ou un truc de ce genre.

    Hope
    Pendant 25 ans j'ai toujours cru que le soleil se levait à l'est et se couchait à l'ouest... 1/4 de siècle à remettre en cause...
    _______________________ ______________
    Systèmes embarqués RT et Informatique Industrielle.
    Conception, intégration électronique et logicielle.
    Développement des drivers ,GUI,et softs pour vos applications.
    _______
    Debian ,CentOS,Suse,Windows(xp pro,7).

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThreadReception::ThreadReception(AbstractSerial *addressSerialPort) : extSerialPort(addressSerialPort)
    Qu est ce que extSerialPort ? Si tu as les headers en passant, ça serait pas plus mal.

    Sinon, je suppose que tes deux classes de thread dérivent de QThread ? Si tu n'as pas trop d'expérience avec Qthre, je te renvoie à une discussion sur le multithreading. En lisant les 2 articles citées dans la discussion, tu trouveras une manière simple de faire des threads qui marchent.

    Après, j'avoue que je n'ai pas lu en détail ce que tu as fait. Et si tu as un doute sur tes automates, tu peux toujours essayer entre 2 pc.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Re,
    Merci pour les réponses et pour le lien.
    Je vais regarder ça maintenant.
    Comment simuler l'occupation d'une communication avec un pc qui nécessite une réponse?
    Car entre deux pc mon programme fonctionne.
    bi_turbo, si il n'est pas possible de lire et écrire en parallèle, il doit bien exister un moyen de bloquer la lecture pendant l'ecriture? non?

    Voici les headers:

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #ifndef GESTIONPORTSERIE_H
    #define GESTIONPORTSERIE_H
     
    #include "abstractserial.h"
    #include "EcouteurPortSerie.h"
    #include <QThread>
    #include <QQueue>
    #include <QMutex>
    #include <QDebug>
     
     
    class ThreadReception;
    class ThreadEnvoi;
     
    class GestionPortSerie: public QObject
    {
     
    private:
     
        EcouteurPortSerie *EcouteurSerie;
        QString NomSerial;
        AbstractSerial *port;
        AbstractSerial::BaudRate F_Bps;
        AbstractSerial::DataBits F_Nb_Bits_Donnees;
        AbstractSerial::StopBits F_Bits_Stop;
        AbstractSerial::Parity F_Parite;
        AbstractSerial::Flow F_Controle_Flux;
     
     
    public:
        GestionPortSerie(QString Nom,AbstractSerial::BaudRate Bps,AbstractSerial::DataBits Nb_Bits_Donnees,AbstractSerial::StopBits Bits_Stop,AbstractSerial::Parity Parite,AbstractSerial::Flow Controle_Flux);
        ~GestionPortSerie();
        QString RecupNomSerial();
        EcouteurPortSerie* RecupEcouteurPort();
        ThreadReception *m_ThreadReception;
        ThreadEnvoi *m_ThreadEnvoi;
     
     
    };
    #endif // GESTIONPORTSERIE_H
     
    //THREAD RECEPTION
    class ThreadReception : public QThread
    {
        Q_OBJECT
     
    public:
        ThreadReception(AbstractSerial *addressSerialPort);
        ~ThreadReception();
        void stopReceiving();
     
    protected:
        void run();
     
    private :
            QMutex mutexReceive;
    AbstractSerial *extSerialPort;
    bool stopped;
     
    signals:
    void newDataReceived(QByteArray dataReceived);
    };
     
     
    //THREAD ENVOI
    class ThreadEnvoi : public QThread
    {
        Q_OBJECT
     
    public:
        ThreadEnvoi(AbstractSerial *addressSerialPort);
        ~ThreadEnvoi();
        void addDataToSend(QByteArray dataToAdd);
        void stopSending();
     
    protected:
        void run();
     
    private:
        QMutex mutexSend;
        AbstractSerial *extSerialPort;
        QQueue<QByteArray> dataToSend;
        bool stopped;
     
    public slots:
        void transfererDonnee(QByteArray donnee);
    };

  17. #17
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Voici quelques mois que j'ai résolu mon problème et je me suis rendu compte que je n'avais pas donné de suite sur le forum.
    Je ne sais pas si je l'ai déjà dit donc pour cloturer ce topic je précise quelques infos pour faciliter la recherche des futures personnes susceptibles de travailler sur le port série.
    Dèjà, bien utiliser la librairie qSerialDevice qui à ce jour est la meilleure proposée pour Qt.
    Elle est totalement multi plate forme et full duplex. Son utilisation est intuitive et je n'ai à ce jour, constaté aucun problème.
    Mes soucis venaient d'autre chose, qui ne dépendaient pas de mon application.
    Parfois, on s'obstine à remettre en cause son code alors que la vérité est ailleurs (enfin, seulement parfois dans mon cas ! )

    a+

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

Discussions similaires

  1. Communiquer avec un port série en java
    Par jlassiramzy dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2006, 18h50
  2. [reseaux] Dialogue avec les ports COM
    Par EricBisca dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 05/11/2006, 18h08
  3. [C#]Problème avec le port série sous Win98
    Par Polux63 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/09/2006, 09h14
  4. Réponses: 7
    Dernier message: 09/06/2006, 10h38
  5. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50

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