Question

Je suis en train d'élaborer un Qt/C++ programme dans QtCreator qui lit et écrit à partir de/vers le port série à l'aide de QextSerialPort.Mon programme envoie des commandes à un Rhinocéros Mark IV contrôleur et doit lire la réponse de ces commandes (juste au cas où ils produisent aucune réponse).Mon développement et de déploiement de la plate-forme est Windows XP Professionnel.

Lorsque le Mark IV envoie une réponse à une commande et mon programme lit la réponse à partir du port série de la mémoire tampon, les données ne sont pas correctement codées;mon programme ne semble pas pour obtenir la plaine de données ASCII.Par exemple, lorsque le Mark IV envoie un ASCII "0" (décimal 48) suivi d'un retour chariot (13 en décimal), mon tampon (char *) obtient -80 et 13.Les personnages ne sont pas encodés correctement, mais les retours chariot sont en effet. J'ai essayé d'utiliser les deux read (char *data, qint64 maxSize) et readAll ().

J'ai suivi le port série de la circulation l'utilisation de deux moniteurs qui interprètent les données ASCII et d'afficher les caractères correspondants, et les données envoyées dans les deux sens semblent être codé correctement (en réalité, ils sont affichés correctement).Étant donné que QByteArray ne pas interpréter n'importe quel encodage des caractères et que j'ai essayé d'utiliser les deux read (char *data, qint64 maxSize) et readAll (), J'ai mis au rebut que le problème peut être causé par Qt.Cependant, je ne suis pas sûr si le problème est causé par QextSerialPort, parce que mon programme envoyer (écrit) les données correctement, mais ne lit pas le bon octets.

J'ai aussi essayé de parler à la Mark IV contrôleur à la main en utilisant HyperTerminal, et la communication se déroule correctement.J'ai configuré la connexion en utilisant HyperTerminal avec le suivant parammeters:

  • Débit en bauds:9600
  • Bits de données:8
  • Bits de parité:0
  • Bits d'arrêt:1
  • Contrôle de flux:Matériel

Mon programme configure le port série à l'aide de la même parammeters.HyperTerminal fonctionne, mon programme ne fonctionne pas.

J'ai commencé à utiliser QextSerialPort 1.1 de qextserialport.sourceforge.net et puis essayé avec le dernier code source de QextSerialPort sur Google Code, et le problème reste le même.

Ce qui est à l'origine du mauvais encodage des caractères?

Que dois-je faire pour résoudre ce problème?

Était-ce utile?

La solution 2

Enfin, j'ai réalisé que je ne configurais pas correctement le port série, Comme suggéré par le juge Maygarden .Je n'ai pas trouvé ces informations dans le manuel de l'appareil, mais dans le manuel d'un produit logiciel développé pour ce périphérique.

La bonne façon de configurer le port série pour la connexion au contrôleur Mark IV est de définir

  • Baud Taux: 9600
  • BITS DE DONNÉES: 7
  • parité: même
  • Arrêt bits: 2 bits
  • Contrôle de flux: matériel

    Cependant, je me demande toujours pourquoi HyperTerminal affiche-t-il les caractères correctement même avec la mauvaise configuration.

Autres conseils

48 vs. -80 sent comme un charcut signé vs. non signé une décadaptation sans signification.Essayez avec un caractère explicite non signé * au lieu de char *.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top