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++ Discussion :

reception de donnee par COM


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut reception de donnee par COM
    Bonjour,
    alors voila, je communique avec un appareil branche sur le port serie de mon ordi. J'arrive a lui envoyer des instructions, mais je n'arrive pas a recevoir ce qu'il m'envoie ( enfin je les recois, mais c totalement incomprehensible).
    Il doit m'envoyer des donne sous forme de BYTE. J'ai defini un buffer en BYTE * buf2 . Meme avec ca, je recois n'importe quoi quand j'envoie les donne dans un fichier texte.
    Il faudrait sans doute que je fasse une conversion quelque part, mais je sais pas comment faire. Avez vous une idee, car je seche, desole.
    Voici mon programme :

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    #include <windef.h>
    #include <stdlib.h>





    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused
    int main()
    {

    HANDLE handle,hStdout,handle_FILE_TEXT;
    DCB dcb;
    COMMTIMEOUTS timeouts={0};
    BOOL fSuccess;
    int ExitRemoteMode=255;
    int EnterRemoteModeNow=70;
    BOOL bResult,PortReady;

    BYTE*buf2[2000]={0};
    DWORD nblu,nbecrit;

    int tosend2,tosend1;





    /*--------------------------------------------------------------------*/
    /* Ouverture du port de communication pour l'ANALYSEUR DE SPECTRE */
    /*--------------------------------------------------------------------*/
    hStdout=GetStdHandle(STD_OUTPUT_HANDLE);



    handle_FILE_TEXT = CreateFile(
    "c:\\\\TEST.txt",
    GENERIC_WRITE | GENERIC_READ,
    0,
    NULL,
    CREATE_ALWAYS,
    FILE_ATTRIBUTE_SYSTEM,
    NULL
    ) ;
    if(handle_FILE_TEXT == INVALID_HANDLE_VALUE)
    {
    printf("Impossible to open the port (error %d)\n", GetLastError());
    return 0;

    getchar();
    }



    handle = CreateFile(
    "COM1",
    GENERIC_READ | GENERIC_WRITE ,
    0,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
    ) ;


    /*-----------------------------------------------------------*/
    /* Verifier si handle ouvert correctement */
    /*-----------------------------------------------------------*/


    if(handle == INVALID_HANDLE_VALUE)
    {
    printf("Impossible to open the port (error %d)\n", GetLastError());
    return 0;


    }


    /*-----------------------------------------------------------*/
    /* Ajustement des parametres */
    /*-----------------------------------------------------------*/


    PortReady=SetupComm(handle,5000,5000);
    fSuccess = GetCommState(handle, &dcb);

    if (!fSuccess)
    {
    printf("problem 1");

    getchar();
    }



    dcb.BaudRate = CBR_9600 ; /* speed */
    dcb.ByteSize =8 ;
    dcb.Parity=NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.fNull=FALSE;
    dcb.fRtsControl=RTS_CONTROL_DISABLE;
    dcb.fInX=FALSE;
    dcb.fOutX=FALSE;
    dcb.fDtrControl=DTR_CONTROL_DISABLE;



    PortReady=SetCommState(handle,&dcb);

    if(!SetCommState(handle,&dcb))
    {
    printf("problem 2");
    getchar();

    }





    /*-----------------------------------------------------------*/
    /* Les timeouts */
    /*-----------------------------------------------------------*/

    timeouts.ReadIntervalTimeout=500;
    timeouts.ReadTotalTimeoutMultiplier=550;
    timeouts.ReadTotalTimeoutConstant=550;
    timeouts.WriteTotalTimeoutMultiplier=550;
    timeouts.WriteTotalTimeoutConstant=550;


    SetCommTimeouts(handle,&timeouts);


    if(!SetCommTimeouts(handle,&timeouts))
    {
    printf("Problem for timeouts (erreur %d)\n", GetLastError());
    return 0;
    }




    /*-----------------------------------------------------------*/
    /* reception de donnees */
    /*-----------------------------------------------------------*/

    tosend1=17;
    tosend2=0;






    /* je dois lui envoyer une serie de byte pour lui dire de m'envoyer les !)% BYTE qui m'enteressent */

    WriteFile(handle,&EnterRemoteModeNow,1,&nbecrit,NULL);
    WriteFile(handle,&tosend1,1,&nbecrit,NULL);
    WriteFile(handle,&tosend2,1,&nbecrit,NULL);


    /*Receive Data from the spectrum analyser*/
    ReadFile(handle,&buf2,1998,&nblu,NULL);




    /*Write to the screen*/
    WriteFile(hStdout,buf2,1998,&nbecrit,NULL);


    /* save in TEXT.txt what the spectrum analyser has sent*/
    WriteFile(handle_FILE_TEXT,buf2,1998,&nbecrit,NULL);


    WriteFile(handle,&ExitRemoteMode,1,&nbecrit,NULL);


    CloseHandle(handle_FILE_TEXT);
    CloseHandle(handle);
    CloseHandle(hStdout);
    getchar();

    return(fSuccess);
    }
    //---------------------------------------------------------------------------



    et voila ce que je recois:
     оノテ€ ・ ォ?
    ヤ '・・・・・ ー #( ー#x~ ー#x~ ーGG・ ーGG・ ーk ーk ー朱 ー朱 ーイミ^ ー #( ー#x~ ー#x~ ーGG・ ーGG・ ーk ーk ー朱 ー朱 ーイミ^ ー u0 ・ c  2ネNone ー ゥ* 0 鰆 ・ ・ 赳  茴 鵈 諤  ・ ロフ 綛 豢 ・ 璧 牴 纔 絮 褸 ・ ・ ヨ, ・ ル ラャ ユ@ ・ 赶 罟 弴 籤 ン ゚タ 磑 ルク 籵 笨 ヤワ ゙P マワ 謖 跖 ユ| ・ ヨ レ ・ ロ リt ・ ユ 雕 ゚ ミ ヨx ヘ0 ・ ホシ ゙ ゙ 犇 レエ ・ レ< ハエ モ4 ラャ ミ` ゙4 リ ホX ワミ ワミ 濾 ・ ユ@ ワL ゙ー ラミ ・ ミp ヘ レネ ロ< ン モ、 ン レト ユ` ゚ ユー ン, ン ラ ヨ< ユ ミ8 レt ラ, メ€ ン ヘタ ヒ リャ ミ ロ ヨh ルp 菎 ン メ$ 犇 レ ン` レ、 ノト ンp 饅 リt ワ ユエ ユL モ モ ワ ラX ハ ムl ユ ロ( ルX モ 罧 ユ@ ゚( ゙ ヨp レ, ヨャ マ ロL マ< ロp  レL ワ` レ ホD 猜 ラ ヒク ミヤ ルヤ ゙ヤ ゙ ヨ$ タ 网 ヨ ホ( ン ヤd ワ\ ロ ゚ ル ミフ ナ モ@ ミ マ| レd ロ< ロ ユタ 猜 フp レ ンネ ミ€ ホ ム ヌ€ リ ・ ムx モ ヘャ ゙ リ ナト ヨ レp ユ マ@ マl サp ハ ヤリ レP ム ロタ ラ@ ヨH ヒ ヤ` ヤL ム` ラ レ` ヘ8 ゚ マ< ラ ヨ\ ワ4 ・ フt ラx メィ ハ ル| ム ムャ モ ワ ヤP ニシ フエ ロ ラ, ロ$ ヤク フ ラP リ ヒ トー  レ8 レ リt ンリ リ ハ リ ハ4 レ ゚ ヨl ワ\ ホ ・ ハ ユク ラ マ< ラ、 レシ ミ ヤ タh ノ ヘx ミL メ ・ モl ヌt リク ヒx ミ ルh リヤ ムィ ミp 瀾 螟 ム ヨ マP ム0 ラ リィ モH ンT ラ ヤH ムャ ル ユ\ ネ ン\ リ ヤ 罧 レ、 メp リク ユミ リ` ・ フワ メ ミリ メh ラ0 ユシ 蚪 マL メ ミ ・ レ ム ・ ヤ ユ レH マ< マ ヨ( ム ミ、 ツ 皃 ヤd 篶 ネ、 ホX ゚ ンワ マX ヤ ゙ク 畊 ヨト ルl ハd リ ゚D フh ミx リ ムエ ミ ムィ ム ヨク ルX ゙8 ノL ム レ レ レ マ ヨL ホp ラ8 ユt ヤ リフ ル ラィ モ ゙ ヨ ン\ ミ ミフ ナ€ ゚ ン ロ ヨ ワx ロト モト リ ユ ヒフ 酳 ムエ ミ ム0 ナh ヒ ムエ ヒ、 ユ@ トT ヨ< ムX ラ ルエ ン< メ レ モ0

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    1. buf2 n'est pas un tableau de bytes, mais un tableau de pointeurs. Vu ce que tu dis, je serais étonné que ce soit normal...
    2. Tu écris les données directement en binaire. Si tu veux les afficher sous forme compréhensible, essaie en formattant chaque octet en hexadécimal...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut
    merci de m'avoir repondu ,
    comment je fais pour former les octet en hexadecimal Vraiment desolé, je suis un gros debutant

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Jette un oeil à la FAQ C++

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut
    mon probleme maintenant est que j'arrive a afficher ce que je recois, il y a le bon nombre. J'affiche en hexa en forcant avec printf(" %x",buf2[i]), mais il me les affiche 4 par 4, par exemple : ff4a541a .
    Mais comment faire pour envoyer ca dans un fichier texte? Car j'ai l'impression que le writefile envoie n'importe quoi
    Pour convertir un nombre en hexa en binaire c'est plutot facile, mais comment je fais pour decomposer mon ff4a541a en ff 4a 54 1a pour que je puisse traiter chaque nombre en hexa independamment ?

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut
    ou plutot la question serait : comment ecrire les donnees directement en binaire dans le fichier texte ?? Si j'ai ca, ca sera ok apres je pense

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

Discussions similaires

  1. [Débutant] Problème Envoi/reception de donnee par socket
    Par Kisskool83 dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/06/2011, 13h11
  2. Probleme reception de donnees par Socket
    Par herrs dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 10/07/2008, 11h29
  3. Envoyer des données par la méthode POST
    Par sorry60 dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2006, 15h10
  4. [Oracle 8i] Présentation des données par lignes
    Par simof1977 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/05/2006, 18h42
  5. Sauvegarde de base de donnée par SSH
    Par onet dans le forum Réseau
    Réponses: 2
    Dernier message: 05/03/2006, 22h42

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