begin process at 2012 05 29 23:22:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

liaison serie dev-c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

liaison serie dev-c++

samedi 25 mars 2006 à 14:54:33 | liaison serie dev-c++

jicez

Bonjour à tous !

Voilà, j'essaye désespérement  de mettre en place une laison série sous Dev-c++.
J'ai essayé plusieurs codes récupérés ici et ailleurs, et je m'y prend surement mal mais le résultat est que ça ne marche pas.

Le code ci-dessous a été récupéré ici, c'est celui qui m'a l'air le plus explicite.
J'aimerais envoyé un "long int" ; Je me doute que le pointeur "*TrameRecue" pointe sur l'adresse de l'info à récupérer, mais je reçoit carrément pas l'envoi.

Je sais que j'arrive à recevoir qqch mais j'arrive pas à extraire l'info.
Si vous pouviez m'aider svp, sois en me disant comment bien utiliser ces fonctions, sois en me proposant un autre code.

Merci.


//----------------------------------------------------------------------------
// FONCTION    : EmissionCom
//----------------------------------------------------------------------------
// DESCRIPTION    :
// Emission d'octets sur la liaison série
//
//----------------------------------------------------------------------------
// PARAMETRES    :
//        -lpBuf Pointeur sur les octets a emettre
//        -nCount Nombre d'octet a emettre
//
//----------------------------------------------------------------------------
// RETOUR    :Code d'erreur
//----------------------------------------------------------------------------
e_ErrCom EmissionCom(const void* lpBuf,unsigned int nCount)
{    
    HWND hwnd;
    DWORD NumBytes=0;
 
    if(g_hCom!=NULL)
    {
        // On pari sur pas d'erreur
        g_ErrCom=e_ErrCom_None;
 
        //Emission du buffer
        if(WriteFile(g_hCom,lpBuf,nCount,&NumBytes,NULL)==0)
        {
            g_ErrCom=e_ErrCom_Emission;
            MessageBox(hwnd, "Erreur d'emission", "Erreur", MB_OK | MB_ICONEXCLAMATION);
        }
            MessageBox(hwnd, "emission marche", "Erreur", MB_OK | MB_ICONEXCLAMATION);
    }
    else
        //Le port n'a pas été ouvert

         MessageBox(hwnd, "echec de l'ouverture du port", "Erreur", MB_OK | MB_ICONEXCLAMATION);
 
    return g_ErrCom;
 
}  
//---------------------------------------------------------------------------
// FONCTION    : ReceptionCom
//---------------------------------------------------------------------------
// DESCRIPTION    :
// Reception de caractères sur la liaison série
//
//---------------------------------------------------------------------------
// PARAMETRES    :
//        -lpBuf Pointeur sur le buffer de caractère a lire
//        -nCountMax Nombre maxi de caractère a lire
//        -pCountRead Pointeur sur le nombre de caractères lus
//---------------------------------------------------------------------------
// RETOUR    :Code d'erreur
//---------------------------------------------------------------------------
e_ErrCom ReceptionCom(void *lpBuf,unsigned int nCountMax, unsigned int* pCountRead)
{
COMSTAT Stat;
DWORD Errors;
unsigned int nCarALire;
unsigned long NCarLus=0;
HWND hwnd;

    if(g_hCom!=NULL)
    {
        //on pari sur pas d'erreur
        g_ErrCom=e_ErrCom_None;
 
        //Pour éviter de gérer un time out
        Sleep(500);
 
        //Pour connaitre le nombre d'octets dans le buffer d'entrée
        ClearCommError(g_hCom,&Errors,&Stat);
        nCarALire=Stat.cbInQue;
 
        //On effectue la lecture si il y a des caractères présents
        if( (nCarALire>0)&&(nCarALire<=nCountMax) )
        {
            if(ReadFile(g_hCom,lpBuf,nCarALire,&NCarLus,NULL)==0)
            {        
                g_ErrCom=e_ErrCom_Reception;
                MessageBox(hwnd, "erreur de reception", "Erreur", MB_OK | MB_ICONEXCLAMATION);
            }               
        }
       
        *pCountRead=NCarLus;
    }
    else
        //Le port n a pas été ouvert
     
        MessageBox(hwnd, "echec de l'ouverture du port", "Erreur", MB_OK | MB_ICONEXCLAMATION);
    //Compte rendu de l'exécution
    return g_ErrCom;
 
}

samedi 25 mars 2006 à 15:14:25 | Re : liaison serie dev-c++

Tekila48

que te revoit la fonction ReceptionCom ? *pCountRead est-il égal à 0 ? Comment essaies-tu de lire lpBuf ? Comment sais-tu que tu arrives à recevoir quelquechose ? nCarALire != 0 ? En passant : pourquoi n'utilises-tu pas directement pCountRead dans la fonction ReadFile ?
samedi 25 mars 2006 à 15:29:11 | Re : liaison serie dev-c++

jicez

Ah oui, je parle du pointeur "*TrameRecue" mais je ne dit pas où je l'utilise désolé.

Pour l'émission je fais :

      OuvreCom(PORT2,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);

      int i = 50;
      unsigned char test[250];
      sprintf (test , %d ,i);           
      EmissionCom(test,1); //le 1 pour envoyer un seul octet

Pour la réception :

      unsigned char* TrameRecue[100];
      unsigned int NbMaxCar=100;
      unsigned int NbCarRecus;

      OuvreCom(PORT1,V9600,BITS_8,PARITE_PAIRE,BIT_DE_STOP_1);

      ReceptionCom(TrameRecue,NbMaxCar,NbCarRecus);
     
      if(TrameRecue != NULL)  // je rentre bien ici
       {
           // traitement
       }

J'ai déjà essayé en mettant dans un "unsigned int" ce que pointe "*TrameRecue" mais je reçoit un truc pas logique.

Pour te répondre ce que renvoie les fonctions ce n'est qu'un code d'erreur qui est traité ailleurs. Le truc c'est que je n'est pas de message box qui me m'indique une erreur, donc c'est que qqch est envoyé et réceptionné. En tout cas merci de te pencher sur mon probleme.
dimanche 26 mars 2006 à 10:21:07 | Re : liaison serie dev-c++

Tekila48

sprintf(test, %d, i); //==> Test = "50" donc Test[0] = '5' Test[1] = '0' Test[2] = '\0' En envoyant un seul octet, tu n'envoies que le 5. En récupérant un unsigned int, tu vas récuperer le code ASCII de 5, soit 53 (ou 0x35). Est-ce que ca colle avec ce que tu recois ?
dimanche 26 mars 2006 à 20:01:11 | Re : liaison serie dev-c++

max12

Administrateur CodeS-SourceS
Tu es sûr que le SetCommState s'est fait comme il faut ? Parce que perso j'ai eu bien des problèmes rendus là :$

[ Lien ]
MSN : x_men_40(
lundi 27 mars 2006 à 18:51:56 | Re : liaison serie dev-c++

jicez

salut !!

Merci d'avoir prêter attention à mon problème.
En convertissant mon "int" en "char" avec "sprintf" et en le reconvertissant en "int" à la réception, jarrive à transmettre mes données !!!!

Je sais que pour convertir mon "char" en "int" il faut que je mette un caractère de fin de chaine (\0) mais lors de l'envoie le caractère se met automatiquement puisque c'est un "char" ??

Mon programme est un petit pong que j'essaie de mettre en série. J'ai un maitre qui envoie des coordonnées et un esclave qui récupère et qui fait que afficher. Donc j'envoie que des "int" par série. En ce moment je suis bien en galère car ça plante malgrè une bonne connexion, mais le truc c'est que je ne sais pas pourquoi...lol

Est-ce à cause du temps de transmission, ou est-ce que les données se croisent...

Je vais bien trouver !! En tout cas merci encore.
jeudi 26 mars 2009 à 18:25:41 | Re : liaison serie dev-c++

phoenix_2406


Bonjour à tous !! Voila je viens de lire ce code et je me pose une petite question, j'aimerai pouvoir envoyer par le port série le mot binaire suivant : 01010101! Cependant comment faire pour trouver le i correspondant  dans cette partie de code :
int i= 50;
      unsigned char test[250];
      sprintf (test , %d ,i);           
      EmissionCom(test,1); //le 1 pour envoyer un seul octet
J'aimerai que l'on m'explique la méthode
Merci d'avance

phoenix


Cette discussion est classée dans : erreur, hwnd, errcom, mb, lpbuf


Répondre à ce message

Sujets en rapport avec ce message

Gestion d'erreurs WinINet [ par Gab23 ] Bonjour,Je débute en C++ et en programmation API. J'ai un petit soucis avec la librarie WinINet. Voilà, j'ai un programme qui se connecte à l'internet port série thread [:)] [ par cheMoor ] <img src=/imgs2/smile.gif border=0 align="a HELP ME PLEASE!!!! PROBLEME KE JE NE COMPRENDS PAS!!!!!!! [ par bouba ] Bonjour, je rencontre un gros problème dans mon programme que je n'arrive pas a résoudre,je ne comprends vraiment pas!!!1. std::string strcat2(LPSTR c Ou est mon erreur.... [ par ordy ] Bonjour, est ce que quelqu'un peut dire ou se trouve mon erreur.car dans l'execution de mon application il n'execute cette tache, mais il ne demarre p erreur LNK2001 [ par biscot19 ] j'ai une erreur de LNK 2001 sur la fonction suivanteSNMPAPI_STATUS CALLBACK cbFunc (HSNMP_SESSION hSession, HWND hWnd, UINT wMsg, WPARAM wParam, Probleme de toolbar [win32 dev-cpp] [ par julien_boss ] Bonjour,c'est pas la premiere fois que j'inclus une toolbar dans une source mais là, byzarrement, elle ne s'affiche pas, et aucun des messages d'erreu probleme de connexion odbc [ par neofenix ] salut tout le monde voila j'ai recupéré un code de connnexion odbc sur cppfrance mais le probleme c'est que je n'arrive pas a me connecter a ma base d [directX] matrices de visualisation [ par SnOOpss ] Bonjour je galere pour rendre une application compatible sur plusieurs ordis. En fait elle marche nickel sur mon ordi (celui ou j'ai le compilateur) m Sous classer plusieurs controles dans une classe [ par julien_boss ] Bonjour,je vous détail l'ossature de ma classe, qui crée une fenetre :jappelle une methode Create() qui va ... créer la fenetre, je fais passer dans l MessageBox [ par jlg75 ] Bonjour, J'utilise une MessageBox de la façon suivante: if (MessageBox(hWnd, (LPCWSTR) "Voulez vous vraiment quitter?", NULL


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,504 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales