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

C++Builder Discussion :

lecture port serie tcomport


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut lecture port serie tcomport
    Salut amis développeurs,
    Je voudrais vous poser une question a propos du composant tcomport.
    J'arrive a envoyer des trames en hexa mais je n'arrive pas a recevoir de donnees.
    J'ai suivis le tuteuriel sur le site avec la fonction onrxchar mais l evenement ne se declenche pas.
    Est ce qu il faut configurer un parametre du compsant?
    Qu est ce qu il faut mettre dans le parametre eventchar?
    Merci d'avance.

  2. #2
    Membre actif Avatar de cfdev
    Homme Profil pro
    Passionné
    Inscrit en
    Octobre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Passionné

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Points : 210
    Points
    210
    Par défaut
    lut,

    verifier si l'event dans les propriétés du Tcomport "evRxChar" est à true

    sinon rien d'autre de particulié

    ++
    mcercle facturation - Logiciel de facturation Win/Mac/Linux

  3. #3
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Es tu sûr qu'il n'y a rien sur le Rx du port COM?
    C'est bizarre que tu arrives à écrire mais pas à lire.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut pb tcomport
    En faites c'est surtout que je n'arrive pas a savoir ou est ce qu il met la trame que le variateur ou le pc me renvoie.
    J'ai éssayé avec hyperterminal mais ca ne marche que dans un sens je peux envoyé et pas recevoir.
    Est ce que tu as au cas ou bout de programme permettant de recuperer les donnes car je suis pas sur que je les récupère bien.
    Voila ce que j ai mis dans la fonction onrxchar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
    {
     
    AnsiString Str;
    ComPort1->ReadStr(Str, Count);
    Memo1->Text = Memo1->Text + Str;
    }

  5. #5
    Membre actif Avatar de cfdev
    Homme Profil pro
    Passionné
    Inscrit en
    Octobre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Passionné

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Points : 210
    Points
    210
    Par défaut
    Re,
    deja si ca ne marche pas avec l'hyperTerminal c'est qu'il y a un soucis!!!

    es-tu sur que l'appareil connecté fonctionne correctement??

    ++
    mcercle facturation - Logiciel de facturation Win/Mac/Linux

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    oui il fonctionne correctement.
    J'ai éssayé de communiquer avec hyper terminal entre 2 PC l'un avec hyperterminal et l'autre avec mon programme. J'arrivais bien a envoyer quelque chose au pc a partir mais programme mais pas l'inverse.

  7. #7
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    J'ai ce genre de programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        int j;
        AnsiString Suite;
     
        ComPort1->ReadStr(Suite,Count);                   //lecture du portCom1
         for(j=1;j<=Count;j++)
             Memo1->Lines->Add(IntToStr((unsigned char)Suite[j]));
    Il faut penser que ce sont des octets que tu recois. Si tu mets ce bout de code dans RxChar, et que rien ne s'affiche, rien ne passe.
    Il se peut sinon que le problème vienne d'autre part, comme une configuration incorrecte: Baudrate, parité ...

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Utilise tu un port COM physique (RS232) ou virtuel ?
    S'il est physique, il se peut que tu ne recoives qu'un seul octet par "morceau détecté". Cela vient de la configuration de la pilie FIFO du port.

    Met un point d'arrêt pour savoir si au moins 1 octets passe dans ta fonction RxChar.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Tcomport 3.1 en C++ builder
    Bonjour la communauté Je suis nouveau sur ce forum, je bidouille pas mal en informatique et juste pour apprendre en m'amusant je teste le C++ Builder, j'ai de bonnes connaissances en Delphi 6 et j'ai voulu faire un test en c++ pour comparer les 2 environnements or autant en delphi ça marche en C++ la fonction m'en read n'a pas l'air de fonctionner
    en Delphi mon programme est (dans un timer 100ms)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var bit:byte;
    bit:=strtoint('209');
    comport1.Write(bit,1);
    Pour la réception c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
    var temp,press: byte;
    Buff : byte;
    ligne:integer;
    begin
    comport1.Read(buff,1); // valeur reçue du port série
    if Buff >= 254 then exit;
    Temp:=buff; // mesure de la Température dans le buffer
    Statusbar1.Panels[0].text:='T° = '+inttostr(Temp);
    end;
    comment faire en C++
    si quelqu'un peut m'aider à comprendre
    car en c++ malgré beaucoup d'essai ça ne marche pas
    merci d'avance

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut erreur Composant TComPort
    Bonjour à tous
    je me bat en se moment avec mon projet en cours
    je dois récuperer les trames envoyés par un PABX sur le Port Série d'un PC pour avoir les infos nécessaires pour concerver une trace de l'appel et le facturer.
    j'utilise donc le port série en configuration 7bits de données, 1 bits de stop, impaire, et sans contrôle de flux.

    j'essai d'implenter le composant de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
    {
    AnsiString Str;
    ComPort1->ReadStr(Str, Count);
    Memo1->Text=Memo1->Text + Str;
    }
    cependant j'ai une erreur quelque part car lors de la compilation, borland C++ 6 me dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [C++ Error] Unit1.cpp(20): E2316 '_fastcall TForm1::ComPort1RxChar(TObject *,int)' is not a member of 'TForm1'
    est-ce que quelqu'un pourrai m'en dire plus?
    merci

  11. #11
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Il semblerait que ta fonction ComPort1RxChar ne soit pas déclaré dans la class TForm1 dans ton .h.
    Comment as tu fais cette fonction?
    As tu généré l'évennement, ou l'as tu écrite toi même?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    en effet je l'ai ajouté à la mains et celà ne dois pas être d'éclarer dans le .h

    quelle est la bonne méthode pour l'ajouter?
    merci

  13. #13
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Dans l'ispecteur d'objet, tu as un onglet "Evennements". Il te suffit de double cliquer dans la colonne de droite, en face de l'évennement choisi.

    La déclaration de la fonction et sont en-tête se fait automatiquement. Il te suffit de coder dans la zone indiquée.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    tout de suite ça marche mieu

    maintenant j'ai un autre probleme:
    les trames que je récupére sont en 5 bloc
    le premier contient le numéro de l'appel (conteur du PABX) la date et l'heure.
    le 2ème contient le numéro du poste appelant, une série de chiffres et le numéro appelé
    les 3ème contien la durée de l'appel
    et je ne me sert pas des 2 dernier blocs

    j'ai besoin de récupérer une varible qui contienne la liste compléte
    hors lorsque je fait afficher la variable dans un Edit, je n'ai que le dernier bloc..

    la taille des lignes peut elle aussi variée (avec le numéro appelé)

    coment faire pour avoirs ma ligne compléte et pouvoir l'exploitée?

    merci
    tibo

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Mon problème se résoud avant même la réponce

    mon nouveau problème est tout autre, et il n'a rien a voir avec le port com mais je ne vois pas l'interet de poster dans un nouveau sujet.

    alors question simple: une trame de PABX resemble à ça:
    153014-02173847 403100100F10619181428 00'12" 3B0040101 00023084

    et voici les infos qu'il faut que je récupére:
    -la date (14-02 dans la première trame)
    -l'heure (173847 toujours dans la première trame)
    -le poste appelant (403 dans la 2ème trame)
    -le numéro appelé (0619181428 dans la 2ème trame)
    -et la durée de l'appel (00'12")

    ma question est sans doute simple mais je ne vois pas commen faire:
    comment séparer la variable correspondant à la trame en plusieurs variable
    par exemple pour le numéro appelé?

    merci
    tibo

  16. #16
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut thibautlelevier:
    Si tes chaines sont de longueur constantes peut etre en utilisant "MidStr", sinon il y a aussi "RightStr" et "LeftStr" avec ces trois fonctions tu devrais pouvoir t'en tirer.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  17. #17
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    De même que si tu mets tout ca dans une AnsiString, tu peux travailler cette chaine avec les fonction Substring, Delete ... il te suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AnsiString chaine = trame;
    AnsiString date = chaine.SubString(5,5);//du 5eme caracteres sur 5 caracteres
    Si tu veux plus d'explications, hésites pas

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Merci les gars pour les conseils

    Bandit Boy, quand tu dis
    AnsiString date = chaine.SubString(5,5);//du 5eme caracteres sur 5 caracteres
    comment faire pour prendre une série de caractéres?
    par exemple de 5 à 6 le jour?

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut SubString
    J'ai cherché un peut et ça ne me donne rien.
    Str est la variable AnsiString de ma trame que je peut sans problème affiché dans un Edit1
    j'ai donc fait un Edit2 pour afficher le jour du moi.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnsiString jour=Str.SubString(5,2);
    Edit2->Text=jour;
    seulement ma variable est vide (la case est ou devient vide)

    le debut de ma trame est
    _ _ _ _ J J - M M H H M M S S

    J J est le jour du mois, M M le numéro du mois
    H H l'heure, M M les minutes et S S les secondes

    je ne pourrai pas utiliser ce système à chaque fois car par exemple si la communication dure plus d'une heure... la partie de la trame qui correspond à la durée va passer de 6 à 9 caractères...

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut retour au problème de trames
    c'est encore moi
    je revient avec mon histoire de définitions de trames
    voici donc un exemple de trame que mon programme a à analyser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    153014-02173847 403100100F10619181428           00'12"          3B0040101   00023084
    le problème est que cette trames est composée de 5 bloc et que mon programme reconnait donc 5 trames différentes...
    Lorsque je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AnsiString Str;
    ComPort1->ReadStr(Str, Count);
    Edit1->Text=Edit1->Text + Str;
    le programme m'affiche la trame à la suite de ce qui ce trouver déjà dans le Edit.
    Normal...
    maintenant si je transforme le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1->Text=Edit1->Text + Str;
    en
    il me fait defiler les 5 bloc et s'arréte sur le dernier
    encore normale mais bon... c'est pas ce que je veut moi

    n'y a t'il donc pas moyen de faire en sorte qu'il comprenne que la trame est composée des 5 bloc?
    la taille de mes trames est variables

    comment faire?
    avec un boucle? (ça fait un peut bricolage )

    A+
    tibo

Discussions similaires

  1. Lecture Port Serie - Arduino
    Par Juaaah dans le forum VB.NET
    Réponses: 11
    Dernier message: 04/12/2014, 22h40
  2. Lecture port serie
    Par asp2014 dans le forum C#
    Réponses: 5
    Dernier message: 18/07/2014, 07h41
  3. Lecture port serie
    Par benaye dans le forum Général Java
    Réponses: 1
    Dernier message: 27/05/2011, 17h46
  4. Lecture port serie / Synchro web
    Par Marcus1981 dans le forum Langage
    Réponses: 3
    Dernier message: 28/04/2011, 16h20
  5. Acces et lecture Port serie avec Windows Seven
    Par Naklov dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/12/2009, 19h40

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