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 :

SR232 CodeGear C++Builder2007


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut SR232 CodeGear C++Builder2007
    Salut tout le monde,

    Bon voila : J'ai reussi a programmer un PortCom avec une Interface graphique avec un Code chope sur le net et l'aide d'un ami.
    J'utilise CodeGear C++Builder.
    Mais je ne suis pas au bout de mes difficultes car j'ai encore 3 a 4 ptits problemes:

    1. J'ai cree un TMemo ou je recois les donnees envoyees par cet appareil de mesure via le port com. J'ai aussi eu a creer un StringGrid( tableau) toujours sur l'interface dont voici le code:

    void __fastcall TConnectionSR232App:: FormCreate(TObject *Sender)
    { int i;
    Serial = new TConnectSR232();
    Serial->ReturnMethod=ReturnMethod;
    AdjustDevicesNames(Serial->GetAvailableDevicesNames(true,false,NULL));
    AdjustInterface();
    //Receive_Memo->Clear();
    StringGrid1->Cells[0][0]="";
    //StringGrid1->Cells[0][1]= StringGrid1->Cells[0][0]+StringGrid1->Cells[1][0];
    StringGrid1->Cells[1][0]= "Date/Heure";
    StringGrid1->Cells[2][0]= "Lot.Nr";
    StringGrid1->Cells[3][0]= "Utilisateur";
    StringGrid1->Cells[4][0]= "Valeur 1";
    StringGrid1->Cells[5][0]= "Valeur 2";
    StringGrid1->Cells[6][0]= "Valeur 2 - Valeur 1";
    StringGrid1->Cells[7][0]= "Const";
    StringGrid1->Cells[8][0]= "Resultat*Const";
    StringGrid1->Cells[9][0]= "Observation";

    for (i = 1; i < StringGrid1->RowCount; i++) {
    StringGrid1->Cells[0][i]= IntToStr(i);
    }
    }
    Et voici le code du TMemo:

    void TConnectionSR232App::ReturnMethod(AnsiString NewData)
    {
    Receive_Memo->Text=Receive_Memo->Text+NewData;
    }

    Je veux rendre le Memo invisible(ca c facile) afin que des donnees recues precises(Date/Heure, Valeur 1, Valeur 2, Valeur 2- Valeur 1) s'affichent automatiquement dans le tableau.
    Ceci est l'une de mes difficultes...Quelqu'un a-t-il une idee?
    Merci

    P.S : Date et Heure doivent être celles du PC... et non celles recues de l'appareil.

  2. #2
    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
    Salut,

    Deux trois petites infos:
    - l'heure du PC n'est pas fiable à la ms près
    - il existe un composant TComport qui gère la communication série, sinon les API Windows font ca aussi, je ne connais pas le TConnectionSR232App.
    - De quel type sont tes informations ?

    Si tes information sont (comme je le pense) sous forme de texte, il te suffira de les extraires une par une pour les stocker dans le TStringList:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void TConnectionSR232App::ReturnMethod(AnsiString NewData)
    { 
        static int ligne;                // ligne dans le tableau en static pour le garder
        ligne++;                         // en mémoire, incrémenté à chaque réception
        AnsiString Date = NewData.SubString(...); //extractions des infos
        AnsiString Lot   = NewData.SubString(...);
        AnsiString Utilis = NewData.SubString(...);
        ...
        StringGrid1->Cells[1][ligne]= Date;    //inscription dans le tableau
        StringGrid1->Cells[2][ligne]= Lot;
        StringGrid1->Cells[3][ligne]= Utilis;
        ....
    }
    à toi de voir comment sont séparés les information pour les déchiffrer. Utilise les commande lié aux variables AnsiString (.Pos(), .Delete(), .SubString() ...)
    Si tu veux d'autres infos, précise et on te renseignera.

    Bon courage

  3. #3
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut SR232
    Salut Bandit boy:

    t'a raison de pas connaitre le TConnectionSR232App puisque c un nom que j'ai donne moi mm....
    Je crois que ta methode fonctionnera, je me suis renseigner entre temps et les reponse recuiellies vont dans la mm direction que ce que tu proposes....Je le testerais demain...
    Bon ma question est la suivante...je suis bien conscient que l'heure du Pc n'est pas fiable...mais l'heure affiche sur l'appareil donne ne l'est pas aussi...on voudrais juste eviter des futures erreurs lies a la non mise a jour reguliere de l'heure afficher dans cet appareil.....

    Peut tu donc me montrer comment l'on fait pour afficher la date et l'heure de la machine dans le dit tableau?
    Merci

  4. #4
    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
    Salut, tu peux faire un truc dans le style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AnsiString s = DateTimeToStr(Now());
    //s est de la forme 28/08/07 09:50:06
    //la date et l'heure sont séparée par un espace
    Label1->Caption = s.SubString(1,s.Pos(" "));                      //récupère la date (avant l'espace)
    Label2->Caption = s.SubString(s.Pos(" ")+1,s.Length()-s.Pos(" "));//récupère l'heure (après l'espace)
    là j'ai mis dans des TLabel, mais c'est pareil pour les cases du StringGrid, tu remplace Label1 par StringGrid1->Cells[...][...].

  5. #5
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut
    Citation Envoyé par bandit boy Voir le message
    à toi de voir comment sont séparés les information pour les déchiffrer. Utilise les commande lié aux variables AnsiString (.Pos(), .Delete(), .SubString() ...)
    Si tu veux d'autres infos, précise et on te renseignera.

    Bon courage
    Salut Bandit;

    justement j'ai des problemes pour utiliser AnsiString Date = NewData.SubString(...);
    Si tu peux me dire exactement ce que ca fais, ce serais genial....

    Ah oui, je recois des donnees textes sous la forme:

    06.08.2007 13:34:00 1944812 Receive : <13><10>
    06.08.2007 13:34:00 1944859 Receive : <13><10>
    06.08.2007 13:34:00 1945125 Receive : DR/4000U S
    06.08.2007 13:34:00 1945562 Receive : ER.NR.: 0310U0005217 2.40<13><10>
    06.08.2007 13:34:01 1945968 Receive : 06-AUG-07 13:52:16 MULTI-WELLENLANGE<13><10>
    06.08.2007 13:34:01 1946250 Receive : Gruppe 0022 Probe 0001 <13><10>
    06.08.2007 13:34:01 1946375 Receive : -0.001 ABS<13><10>
    06.08.2007 13:34:01 1946500 Receive : A=K1A1+K2A2<13><10>
    06.08.2007 13:34:02 1946890 Receive : 277.0 nm -0.000 ABS K1: 1.0000<13><10>
    06.08.2007 13:34:02 1947281 Receive : 300.0 nm -0.000 ABS K2: 1.0000<13><10>
    06.08.2007 13:36:05 2070546 Receive : <13><10>
    06.08.2007 13:36:06 2070578 Receive : <13><10>
    et les donnees a recuperer sont:
    A1= 277.0 nm, A2= 300.0 nm et A. La constante K doit etre manuellement donnee par l'utilisateur <---- ceci etait mon prochain probleme : une case ou l'on entre une valeur, on accepte avec ok et cette valeur est ajoutee dans le tableau...

  6. #6
    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
    SubString permet d'extraire une chaine de l'AnsiString, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AnsiString data = "06.08.2007 13:34:00 1944812 Receive : <13><10>";
    AnsiString date = data.SubString(1,data.Pos(" "));
    date vaudra "06.08.2007". On extrait les caractères entre le premier (d'où le 1) et jusqu'à " ". La fonction demande un index de départ et un nombre de caractères.

    .Pos permet de renvoyer l'index du premier caractère(s) dans la chaine.

    La touche F1 permet d'afficher l'aide, les explications y seront surement plus claires que les miennes.

  7. #7
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut
    Le Probleme avec l'heure est resolue j'ai utilise ton code est un peu bastonne :
    ca donne ceci :

    void TConnectionSR232App::ReturnMethod(AnsiString NewData)

    {

    static int Ligne; // ligne dans le tableau en static pour le garder
    Ligne++; // en mémoire, incrémenté à chaque réception

    Receive_Memo->Text=Receive_Memo->Text+NewData;

    StringGrid1->Cells[1][StringGrid1->Row] = DateToStr(Now())+"/"+TimeToStr(Now());

    (....)
    }
    Bon premier pour les cases suivantes : j'ai 9 lignes que je recois comment aller seulement a la ligne 8 et 9 ensuite prendre les infos dont j'ai besoin?

    Dans le TMemo j'ai le malheur que les lignes recues se collent et c un chaos total....

  8. #8
    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
    La réponse se trouve sur ton autre post.

    Comment écrire une nouvelle ligne dans un TMemo, et comment accéder à n'importe qu'elle ligne de ce TMemo.

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

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