begin process at 2012 02 12 13:43:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

probleme rs232


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

probleme rs232

jeudi 22 décembre 2005 à 15:39:15 | probleme rs232

rhumone

j'arrive pas a récupérer la totalitée des données sur ma liaison rs232 je dois recevoir environ 7000 octet j'en recois que 4000 octet.

voila mon source:

e_ErrCom OuvreCom(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits)
{
    g_ErrCom = e_ErrCom_None;

    // On ouvre le port série
    g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);

    if(g_hCom == INVALID_HANDLE_VALUE)
    {
        // Echec
        g_ErrCom=e_ErrCom_Creation;
    }
    else
    {
        // On vide les buffers
        PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);        

        // On paramètre le port série
        g_DCB.DCBlength = sizeof(DCB);
        //Configuration actuelle
        GetCommState(g_hCom, &g_DCB);
        //Modification du DCB
        g_DCB.BaudRate=BaudRate;
        g_DCB.ByteSize=BitsSize;
        g_DCB.Parity=Parity;
        g_DCB.StopBits=StopBits;
        g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
        //Configuration de la liaison serie
        SetCommState(g_hCom,&g_DCB);
    }
    return g_ErrCom;
}

//----------------------------------------------------------------------------
// 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)
{    

    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;
        }
    }
    else
        //Le port n'a pas été ouvert
        g_ErrCom=e_ErrCom_Creation;

    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* Buffer,int nCountMax,int* CountRead)
{
COMSTAT Stat;
DWORD Errors;
int nCarALire;
unsigned long NCarLus=0;

    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,Buffer,nCarALire,&NCarLus,NULL)==0)
            {        
                g_ErrCom=e_ErrCom_Reception;
            }

        }
        *CountRead=NCarLus;
    }
    else
        //Le port n a pas été ouvert
        g_ErrCom=e_ErrCom_Creation;

    //Compte rendu de l'exécution
    return g_ErrCom;

}

//-----------------------------------------------------------------------
// FONCTION    : FermeCom
//-----------------------------------------------------------------------
// DESCRIPTION    :
// Ferme le port série préalablement ouvert avec OuvreCom
//
//-----------------------------------------------------------------------
// PARAMETRES    :
//        Néant
//-----------------------------------------------------------------------
// RETOUR    :Néant
//-----------------------------------------------------------------------
void FermeCom()
{
    if(g_hCom!=NULL)
    {
        CloseHandle(g_hCom);
    }
}


vendredi 23 décembre 2005 à 12:22:20 | Re : probleme rs232

psyko_flex

Réponse acceptée !
Dans la fonction ouvre com,tu doit utiliser des variables globale,
regarde : suivant ta configuration :

        g_DCB.Parity=Parity;
        g_DCB.StopBits=StopBits;

tu as mis koi dans parity et StopBites?

   si tu a un bit stop et une parité par ex met ca au lieu de t 2 ligne

   
   g_DCB.StopBits=ONESTOPBIT 
   g_DCB.Parity=NOPARITY


vendredi 23 décembre 2005 à 14:36:58 | Re : probleme rs232

CurieuxDeSavoir

Réponse acceptée !
      //Pour éviter de gérer un time out
        Sleep(500); 


Ca fait une pause enorme !!!
Mais bon, faut voir avec ton Buffer et nCountMax dans ta reception s'ils sont assez grand pour stocker.
Il faut aussi voir si Sleep(500) n'est pas trop exagéré pour ton g_DCB.BaudRate=BaudRate


       //On effectue la lecture si il y a des caractères présents
        if( (nCarALire>0)&&(nCarALire<=nCountMax) )
        {
            if(ReadFile(g_hCom,Buffer,nCarALire,&NCarLus,NULL)==0)
            {        
                g_ErrCom=e_ErrCom_Reception;
            }

        }
!!!!! ici !!!!! met un else et regarde si tu n'entre pas dedans


vendredi 23 décembre 2005 à 15:02:10 | Re : probleme rs232

rhumone

Réponse acceptée !
en faite je les ai déclaré en variable global donc le probleme vient pas de la.
Parity=NOPARITY
 StopBits=ONESTOPBIT
vendredi 23 décembre 2005 à 15:05:05 | Re : probleme rs232

rhumone

Réponse acceptée !
mon buffer est assez grand c sur mais ncountmax est surement tro petit.
j'avais mis sleep(500) car je pensais qu'il lisez tro vite dans le buffer de la rs232 et donc il lisez pas tout.

je vais essayer ce que tu ma dis
 merci bcps pour ton aide.


Cette discussion est classée dans : port, int, hcom, errcom, dcb


Répondre à ce message

Sujets en rapport avec ce message

port serie [ par maurejac ] bonjour, je dois realiser un petit programme de communication avec une carte par port serie, la plupart du temps il marche tres bien mais de temps en Communication RS232 : Pb de vitesse [ par arb ] Bonjour Je me suis insipiré du code de ymca2003 (Code source N°22441) pour faire un petit programme qui envoie le contenu d'un fichier via une liais ouverture d'un port serie [ par KryztL ] bonjour tout le monde,j aurai besoin d aide pour le projet que je suis entrain de programmer.je souhaite ouvrir un port serie sous visual studio C++, Communication RS232 : Pb de vitesse [ par arb ] Bonjour Je me suis insipiré du code de ymca2003 (Code source N°22441) pour faire un petit programme qui envoie le contenu d'un fichier via une liais SOS reception et affichage sur port serie [ par dgac ] J'ai dévellopé le programme suivant pour recevoir et afficher une chaine de carractére pour un port serie . J'aimerai de l'aide pour recevoir un carra reception et envoi d'une trame sous rs232 [ par fl2010 ] bonjour je suis entrain d'ecrire un programme pour faire la communication entre un PC et un regulateur eurotherm à l'aide du rs232. j'ai fait un progr Reception sur port COM1 sous Builder [ par Ardeje26 ] Bonjour,Je travail sous Borland Builder 5 et j'ai un problème pour récupérer les datas sur mon port COM1 avec le code suivant.Je peut simplement savoi port série [ par cheMoor ] Salut tout le monde,Les questions:1) Comment et quand utiliser la fonction « WaitCommEvent » ?2) Est-ce que l'utilisation des threads se limite seule port série et WriteFile ! [ par nanalye ] Bonjour tout le monde !Voilà mon pb : je veux envoyer des entiers par le port série avec WriteFile.Voici le programme que je lance ://ouverture du por port série thread [:)] [ par cheMoor ] <img src=/imgs2/smile.gif border=0 align="a


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,435 sec (3)

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