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. #21
    Membre �m�rite
    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
    Par d�faut
    Re,
    Ta trame est affich�e dans un TEdit (texte de type AnsiString), � partir de l� il faut faire le d�coupage, voici un exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //recopie de la trame dans le Edit1
    Edit1->Text = "153014-02173847 403100100F10619181428 00\'12\" 3B0040101 00023084";
    AnsiString Trame = Edit1->Text;
     
    Edit2->Text = Trame.SubString(1,4);//prend les 4 premiers caractères (le n°)
    Trame.Delete(1,4);//supprime les caractères lus
    Edit3->Text = Trame.SubString(1,5);//prend les 5 suivants (la date)
    Trame.Delete(1,5);
    Edit4->Text = Trame.SubString(1,6);//prend les 6 suivants (l'heure)
    Trame.Delete(1,6);
    Tes bloques seront toujours de taille fixe? si oui la m�thode fonctionnera tout le temps, sinon il faut savoir ce que d�fini la taille.

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par d�faut
    �a fonctionne... jusqu'a un certain point...
    je peut sans probl�me r�cup�rer la date, l'heure, le poste appelant et le num�ro mais la taille des trames n'es pas fixe, donc �a ne marche pas � chaque fois...
    par exemple le num�ro peut �tre plus cour (exemple 118 218 ne fait pas 10 caract�res) et la dur�e de l'appel peut �tre plus longue (si on d�passe une heure on passe alors de 6 � 9 caract�res)

    la taille des 2 derni�re trames est fixe et je peut de toute fa�on les vir�es
    car elle ne me servent pas.
    y a t'il moyen de venir r�cuperer des donn�es en partant de la fin?

    autre probl�me, lors de l'�mission de plusieurs appels... cel� arrive � la fin du Edit1.
    ce n'est pas vraiment un probl�me car � la fin, mon programme envera directement tout dans une bases de donn�es
    on vera � ce moment l�

    merci
    tibo

  3. #23
    Membre �m�rite
    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
    Par d�faut
    Bien sur, on peut commencer par la fin en utilisant la m�thode AnsiString.Length() qui renvoie la taille de la chaine:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    AnsiString SixDernierCar = Trame.SubString(Trame.Length()-5,6);
    Tu peux faire pareil pour les supprimer, sinon il existe aussi la m�thode .Pos qui te permet de conna�tre la position d'une chaine ou d'un caract�re dans ta chaine.

    Je ne comprend pas "cel� arrive � la fin du Edit1" ? tu affiches tout dans un seul TEdit, les trames les unes � la suite des autres ? Autant les afficher dans un TMemo, tu les stockera ligne par ligne.

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par d�faut
    Oubli l'histoire du Edit1, c'est une histoire de passage de ligne.
    j'essai juste pour l'instant de r�cuperer mes variables, on vera la suite apr�s.

    j'ai essayer de virer les 30 dernier caract�res (les 2 dernier blocs plus les espaces entre le 3 et le 4�me bloc) pour simplifier ma trame mais �a ne marche pas:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    trame.Delete(trame.Length()-30,30);
    mais �a me donne rien...

    il y a aussi 12 espace entre le num�ro et la dur�e de l'appel (bloc 2 et 3).
    je me demande si lorsque �a passe � plus d'une heure, les 3 caract�re en plus (01h) ne prennent pas sur ces espace...

    n'y a t'il pas un moyen plus simple de faire en sorte qu'il reconnaisse chaque bloc sans tenir compte de la taille qu'elle font mais des donn�es qu'elle contiennents?

    A+
    merci
    tibo

  5. #25
    Membre �m�rite
    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
    Par d�faut
    sit tu fais le code suivant:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Edit1->Text = trame;
    trame.Delete(trame.Length()-29,30);
    Edit2->Text = trame;
    Je pense que ca dois changer et bien supprimer les 30 derniers caract�res.

    Il faut se poser la bonne question pour le d�coupage de tes bloques: Comment sont ils d�finis ? dans la d�finition du protocole n'y a t il pas plus d'information ?

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par d�faut
    j'ai entrer ce que tu as marqu� dans ton post pr�cedant mais �a a fait l'effet inverse: �a a garder que ce que je voulais supprimer.

    pour ce qui est de la trame, voi�i comment une trame ce compose:
    -premier bloc
    -tout d'abord 4 chiffres qui constitue le num�ro de l'appel dans le compteur du PABX. ici ces donn�es ne m'interessent pas.
    -ensuite je jour en 2 chiffres, un tir�, et le mois en 2 chiffres
    -puis 2 chiffres pour l'heure, 2 pour les minutes, et 2 pour les secondes

    -2�me bloc
    -les 3 chiffres du poste interne qui passe l'appel
    -8 carat�res dont je ne connait pas la signification et que je n'utilise pas
    -les chiffres du num�ro appel: peut vari� en fonction du num�ro qu'on appel

    -3�me bloc
    -la dur�e de l'appel: dans tous mes exemple mm'ss" mais je pense que cel� dois augement lorsque l'ont d�passe une heure

    -4�me et 5�me bloc: je ne m'en sert pas.

    une trame type:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    153014-02173847 403100100F10619181428           00'12"          3B0040101   00023084
    A+
    merci
    tibo

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par d�faut on avance
    j'ai continuer d'afficher les trames dans un Memo avec ce code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
    {
    AnsiString Str;
    ComPort1->ReadStr(Str, Count);
    Memo1->Text=Memo1->Text + Str;
    }
    voyant que �a ne pass� pas � la ligne j'ai transformer la derni�re ligne en
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Memo1->Text=Memo1->Text + Str + "\n";
    grossi�re erreur me direz vous? pas forcement car je me suis apper�u que la trame est alors compos�e de 10 ligne de 9 caract�res suivit d'une ligne de 5 caract�res.

    je me suis aussi appe�u qu'en fait, en conditions r��les, le PABX finisait sa trame par \n (car il passe � la ligne)

    enfin bref est-ce que mes hypoth�ses son bonnes?
    le syst�me actuellement en place a encore plant� aujourd'hui et j'ai vraiment besoin d'avancer

    A+
    tibo

  8. #28
    Membre confirm� Avatar de LotfiB
    Inscrit en
    Ao�t 2004
    Messages
    117
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 117
    Par d�faut
    strtok est ta d�livrance

    je te donne un exmple qui lit plusieurs lignes de donn�es s�par�es par des ;
    ds ton cas, le separateur peut etre un espace ou une sequence particuliere, tu peux les cumuler...
    Donc lit tte ta ligne sur la RS232 puis strtok l�..
    Ciao

    __________
    1;Message pour la gloire;dummy comment
    2;Message 2 pour la gloire;dummy comment2
    __________
    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
      ifstream ImageTxtFile( DlgSelYearCalendar->OpenDialogImages->FileName.c_str(), ios::in);
      if ( !ImageTxtFile) {
              AnsiString ss="File open error "+DlgSelYearCalendar->OpenDialogImages->FileName;
              Application->MessageBox( ss.c_str(),"Error", MB_OK+MB_ICONSTOP);
              return;
              }
      i=0;
      while ( !ImageTxtFile.eof())
       {
       if (::GetAsyncKeyState(VK_ESCAPE) & 0x8000 )  break;
                // ie sort de la boucle
       ImageTxtFile.getline( Comment, 200, '\n');
       p=strtok(Comment,";");
       ImgIndex[i]=StrToInt(p);
       p=strtok(NULL,";");
       ImageComments[i]=AnsiString(p);
       p=strtok(NULL,";");
       dummy=AnsiString(p);
       if (i++==12) break;
       }
      ImageTxtFile.close();

  9. #29
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par d�faut
    Salut

    strtok est peut-�tre la solution mais je ne vois pas comment l'utiliser dans mon cas.
    il n'y a pas vraiment de s�parateur.

    le probl�me n'es pas l� non plus
    il faudrai que mon programme reconnaisse les trames en fonction de certains param�tres autres que la taille

    j'ai relancer une prise d'echantions pour voir ce que �a donne avec des communications de plus d'une heure
    en attenandant, c'est dingue le nombre de personnes qui oublient de taper la fin de leur num�ro

  10. #30
    Membre confirm� Avatar de LotfiB
    Inscrit en
    Ao�t 2004
    Messages
    117
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 117
    Par d�faut
    ceux qui ne tappent pas leur numeros en entier ne vont pas avoir d'appels aboutis !

    tu as qd meme des "espaces" ou des sequences d�finies "F1..." ds ta s�quences que la fonction peut rep�rer...

    ciao

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    30
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par d�faut
    "aboutis" tu peut dire "abruti"
    il s'agit d'un PABX dans une maison de retraite.
    alors la mamie qui tape pas son num�ro ass� vite... je sais bien qu'elle ira pas loins

    la s�quence F1 dont tu parle ne se r�pette pas � chaque fois.

    de meme pour les espaces, j'attend d'avoir plus d'�chantillons pour en dire plus.

    merci quand meme, cette commande va m'�tre tout de suite utile pour un autre programme

    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