Votre question

Borland recevoir des donnees via le port serie c++

Tags :
  • string
  • Programmation
Dernière réponse : dans Programmation
13 Avril 2010 15:43:51

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

Autres pages sur : borland recevoir donnees via port serie

a b L Programmation
13 Avril 2010 18:51:22

Et en debug, ça donne quoi?
m
0
l
14 Avril 2010 09:30:00

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>
m
0
l
Contenus similaires
Pas de réponse à votre question ? Demandez !
14 Avril 2010 10:33:06

Tu as probablement créé une variable qui existe déjà ( une variable de base, créé au lancement du programme, comme %errorlevel% en BATCH... ), donc il y a un problème.
m
0
l
a b L Programmation
14 Avril 2010 20:38:08

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?
m
0
l
15 Avril 2010 14:18:37

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.
m
0
l
a b L Programmation
15 Avril 2010 20:48:52

C'est aussi sur l'Internet? :) 

En fait, ceci me parait bizarre:
  1. int count = portserie->ReadBufUsed();

ça ne serait pas plutôt ReadBufUsed() qui retourne la taille?
m
0
l
16 Avril 2010 12:54:24

dans le code il y a " -> " c'est équivalent a " -> "pour le borland
m
0
l
a b L Programmation
16 Avril 2010 20:27:33

Ah ok :D 
Sinon, count retourne toujours 0? (tu devrais afficher un message si != 0)
m
0
l
19 Avril 2010 08:59:38

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.
m
0
l
a b L Programmation
19 Avril 2010 19:16:21

As-tu essayé avec un autre caractère juste pour voir si l'évènement est déclenché ?
m
0
l
20 Avril 2010 10:34:28

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
m
0
l
20 Avril 2010 13:05:19

6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21

ca veut dire quoi ???

merci
m
0
l
20 Avril 2010 18:59:50

Les 15 premiers caractères :

7 494 165 734 957 973 709
9 365 517 975 798 558 957
8 429 582 229 528 737 247
m
0
l
a b L Programmation
20 Avril 2010 20:59:08

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.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS