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 :

Probleme reception avec utilisation de TComPort


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut Probleme reception avec utilisation de TComPort
    Bonjour,

    Je suis en train d essayer de faire communiquer un PIC avec un PC. Pour ceux qui connaissent, je veux utiliser l emulation RS232 proposee par Microchip et qui permet de communiquer par une prise USB mais qui cree un port COM virtuel. Au final, pour communiquer avec le PIC il faut donc utiliser TComPort comme s il s agissait d une communication serie.

    Apres mes premiers deboirs, j ai recherche sur ce forum et sur internet et j ai trouve un sujet interessant mais qui n a pas resolu mais probleme:
    http://www.developpez.net/forums/vie...&highlight=pic

    Pour le moment, je veux juste un truc simple pour tester le systeme. Il y a un edit, un memo, deux boutons ( code reutilise a partir du lien precedent):
    --
    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
    void __fastcall TForm1::btConnecClick(TObject *Sender)
    {
        ComPort1->Events = TComEvents(); // Effacer tous les évenements
        Memo1->Text = Memo1->Text + "Connexion etablie ..." + "\r\n";
        ComPort1->Connected = true;
        btDeconnec->Visible = true;
     
        TComEvents Ev;
        Ev << evRxChar;
        ComPort1->WaitForEvent (Ev, 0, 5000);
        // Attend un événement OnRxChar ou 5 secondes avant de continuer le traitement
        // Si un évenement OnRxChar arrive, on viendra lire le nombre d'octet reçut
        // Si les 5 secondes sont écoulées on écrira une phrase sur le Caption de la TForm
     
     
            // Y a t il eu des octets d'arrivés ?
            if (Ev.Contains(evRxChar))
             {
              // Oui
              Form1->Caption = IntToStr(ComPort1->InputCount ()) + " octets";
              // Poursuite du traitement en conséquence
             }
            else
             {
              // Non
              Form1->Caption = "Les 5 secondes se sont écoulées";
              // Poursuite du traitement en conséquence
             }
        ComPort1->Connected = false;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btDeconnecClick(TObject *Sender)
    {
    ComPort1->Connected=false;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
    {
        /*unsigned char *recept = new unsigned char [Count];
        ComPort1->Read (recept, Count);
     
        for(int i = 0; i < Count; i++)
        Memo1->Text = Memo1->Text + (recept[i]);
     
            Memo1->Text = Memo1->Text + "\r\n";
     
            delete [] recept;
            recept = NULL;*/
        AnsiString Str;
        Edit1->Text = "Ok";
        ComPort1->ReadStr(Str, Count);
        Memo1->Text = Memo1->Text + Str;
    }
     
    void __fastcall TForm1::btClearClick(TObject *Sender)
    {
    Memo1->Clear();
    Edit1->Clear();
    }
    //---------------------------------------------------------------------------
    Mon probleme est le suivant:
    - je ne recois rien mais le nomnbre d octet s affichent correctement dans le nom de la fiche
    - a priori l evenement ComPort1RxChar ne se lance pas
    - avec des logiciels comme Hyperterminal ou equivalent je reçois sans probleme les informations de mon PIC.

    Merci d avoir lu jusqu ici,

    Mathieu

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Personne pour filer un petit coup de main...

    S il vous manque des infos, dites le, j essairai de preciser.

    Merci d avance,

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Par défaut
    Pour ma part pour de petites lectures, je n'utilise pas de déclancheur car je dois vérifier aussi les timing voici une fonction qui regarde si le Nbr de caractère attendu est présent:
    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
     
    int RxUevAtt(unsigned int MaxAtt, unsigned int NumCar)
        {
        unsigned int NbrBits=0;
        unsigned int Att = 0;
        MaxAtt /=10;  //division par 10
     
        do  {
            NbrBits = Form1->ComPort1->InputCount();
            if (NbrBits < NumCar)
                {
                Sleep(10);     // 10 ms est la résolution max
                Application->ProcessMessages();  // afin de rafraichir l'écran..
                }
            Att++;
            }while ((Att< MaxAtt) && (NbrBits < NumCar));
     
             if (Att < MaxAtt)
                return NbrBits; //OK Nb Bits
            else
                return 0; //pas de car dans le temps ERREUR
        }
    et après je lance la lecture:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Form1->ComPort1->Read(RecData, (RecDataLength);
    et jamais de pb

    Teste sur un com normal puis après sur ton "Usb"

  4. #4
    Membre éprouvé 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
    Par défaut
    Lut,

    tu peux rejeter un coup d'oeil sur ce petit soft :

    http://perso.wanadoo.fr/virtua.area/info/Dial_COM.htm

    tu as les sources avec.
    je l'ai developpé pour débuger mes applis avec les PIC justement

    ++[/url]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Merci pour ces pistes,

    Je teste ca cet aprem, des que je rentre chez moi.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Merci VirtuA pour ton petit soft, il m a permis de regarder le source.

    Je reçois les infos avec ton logiciel, mais par contre je n arrive toujours pas a le reexploiter dans mon programme. J ai l impression qu il me manque quelquechose mais je ne sais pas quoi. J ai passe le week end a essayer de trouver le petit truc mais rien n y fait. L evenement OnRxChar ne se declenche pas dans mon programme, je ne sais pas quoi faire. Pourquoi ca marche pas chez moi ???

    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
     
    unsigned int nbReception=0;
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Button2->Visible = false;
    Button3->Visible = true;
    ComPort1->Connected=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Button3->Visible = false;
    Button2->Visible = true;
    ComPort1->Connected=false;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ComPort1->ShowSetupDialog();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
    {
    unsigned int i;
    nbReception += Count;
    Form1->Caption = "Octet(s) Reçu(s): " + IntToStr(nbReception);
    }
    Je precise je ne fais pas appelle a la methode read pour le moment car j y vais progressivement... mais ca ne m affiche meme pas le nombre d octets transmis.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Bon ca marche maintenant ...
    tout ca parce qu au debut, j ai pas rajoute l evenement par l intermediaire de l inspecteur d objet.

    Merci pour tout.

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

Discussions similaires

  1. [ZF 1.9] probleme de routeur avec utilisation des modules
    Par SergeF dans le forum MVC
    Réponses: 7
    Dernier message: 01/02/2010, 16h06
  2. Probleme avec utilisation de la class SWT Section
    Par L4BiN dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 26/06/2009, 16h37
  3. Probleme avec utilisation des filtres et des modeles
    Par Djolhan dans le forum Thunderbird
    Réponses: 0
    Dernier message: 08/04/2009, 22h30
  4. Probleme de perfs avec utilisation d'un type
    Par Snipah dans le forum SQL
    Réponses: 5
    Dernier message: 07/04/2009, 16h29
  5. Reception avec Tcomport
    Par web-angel dans le forum C++Builder
    Réponses: 16
    Dernier message: 27/01/2004, 16h20

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