Se connecter avec
S'enregistrer | Connectez-vous

Borland recevoir des donnees via le port serie c++

Dernière réponse : dans Programmation

Bonjour,

Je n'arrive pas à recevoir des données via le module tvacomm de Borland c builder, voici le code que j'ai tapé, pouvez me dire ce qui cloche ? J'arrive à envoyer les commandes mais pas à les recevoir.

  1. void __fastcall TForm2::portserieRxFlag(TObject *Sender)
  2. {
  3. String res;
  4. String s;
  5. int i;
  6. int count = portserie->ReadBufUsed();
  7. int c = portserie->ReadBuf(rb,count);
  8. rb[count]=0;
  9. s=String(rb);
  10. i=s.Pos("=");
  11. res=s.SubString(i,s.Length()-i 1);
  12. T1->Text=res;
  13.  
  14. }


Merci d'avance
Lassé par la pub ? Créez un compte

CRicky a dit :
Et en debug, ça donne quoi?



Au lancement du programme, il n'y a aucune erreur, juste l'avertissement ci dessous :

"[BCC32 Avertissement] Unit2.cpp(46): W8004 'c' est affecté à une valeur qui n'est jamais utilisée"


On arrive pas a recevoir les données. Voici un exemple de ce qu'on doit recevoir :
En italique c'est le logiciel qu'on a utilisé qui nous le met (Docklight, sorte d'hyper terminal).
En gras, ce qu'on envoie.
En souligné ce qu'on reçoit.

On a mis un eventchar a #13, le code qu'on t'a envoyé précédemment ne doit s'exécuter que lorsque qu'un retour chariot est détecté.

14/04/2010 09:19:59.90 [TX] - A
14/04/2010 09:19:59.98 [RX] - <LF><CR>
CnvSkip<LF><CR>
mes=-14426<LF><CR>
mes=-13670<LF><CR>
Expert Programmation

Pour le warning, c'est juste que tu n'utilises jamais la variable c après l'avoir initialisée. Donc, tu peux l'enlever.

Pour ton problème, si tu sais que la connexion fonctionne c'est déjà une bonne chose. :) 

Je ne connais pas ce module (de la VCL ?), mais est-ce que tu as bien paramétré le port COM dans l'objet (vitesse, contrôle, parité, etc) ?
Est-ce que tu as jeté un œil sur une doc expliquant ce composant?

CRicky a dit :
Pour le warning, c'est juste que tu n'utilises jamais la variable c après l'avoir initialisée. Donc, tu peux l'enlever.

Pour ton problème, si tu sais que la connexion fonctionne c'est déjà une bonne chose. :) 

Je ne connais pas ce module (de la VCL ?), mais est-ce que tu as bien paramétré le port COM dans l'objet (vitesse, contrôle, parité, etc) ?
Est-ce que tu as jeté un œil sur une doc expliquant ce composant?



J'ai compris pour le warning, je vais enlever la variable. Oui j'utilise des applications VCL, j'ai vérifié pour le port COM et les paramètres sont bon : vitesse : 9600, 8 bits, pas de parité, un bit de start et un bit de stop.

Oui j'ai jeté un oeil mais j'ai pas tout compris.

CRicky a dit :
Ah ok :D 
Sinon, count retourne toujours 0? (tu devrais afficher un message si != 0)



En mettant un point d'arrêt je me suis rendu compte de quelque chose en fait, l'évènement ne se déclenche pas, je ne comprend vraiment pas pourquoi, il devrait se déclencher dès qu'il capte un retour à la ligne mais quand c'est l'appareil qui l'envoie il ne le remarque pas, j'ai essayé avec un port série spécial où l'entrée était relié à la sortie et j'ai envoyé un retour à la ligne qui s'est donc retrouvé directement à la sortie et la ca s'est déclenché. J'ai utilisé un hyperterminal pour voir ce que l'appareil m'envoie. Ce qu'il nous envoie je l'ai mis dans un bloc note que j'ai ensuite ouvert avec un éditeur hexadécimal et il envoie bien un retour à la ligne et j'ai bien mis pour le port com un event char à 13.

CRicky a dit :
As-tu essayé avec un autre caractère juste pour voir si l'évènement est déclenché ?


J'ai reussi a trouver il fallait mettre la commande Portserie->SetRTS (true); dans l'ouverture du port .

Je te remercie de ton aide .


Cordialement ,

Limdizrad
Expert Programmation

Effectivement PetitTigre, tout n'est qu'une question d'interprétation. ;) 
C'est un programme .com en langage machine x86 pour OS Microsoft (On reconnait l'interruption 21h à la fin). Il affiche juste des pixels qui changent de couleur avec le clavier.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde