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 :

ouverture port com


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Par défaut ouverture port com
    Bonjour a tous !

    Je fait actuellement un programme qui recoit des donnees sur le port com que le pc doit recuperer et archiver.
    J ai donc commencer tous mon code et tous marche nickel, me manque plus que faire la partie ouverture port com (la plus dure pour moi) mon code se presente comme suis :

    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
    22
    23
    int open_port(char port[10]) {
     
              int fd;
              DCB dcb;
     
        //parameters
        dcb.DCBlength = sizeof(DCB);
        dcb.BaudRate = 9600;
        dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
     
        dcb.fOutxCtsFlow = FALSE;
        dcb.fOutxDsrFlow = FALSE;
        dcb.fDsrSensitivity = FALSE;
        dcb.fTXContinueOnXoff = TRUE;
        dcb.fNull = FALSE;
        dcb.fRtsControl = RTS_CONTROL_ENABLE;
        dcb.fDtrControl = DTR_CONTROL_ENABLE;
        dcb.fAbortOnError = TRUE;
     
        return 1;
    }
    Je voudrais que si le port com( 1 ou 2) s ouvre correctement, un message du type "ouverture reussie!" saffiche. J ai pas reussi a le faire car je connais pas des masses le port com et son fonctionnement.Les donnes que le pc recoit doivent etre archivees je pense pouvoir faire mais si quelqun a une idee elle est la bienvenue!

    sa Sa fait quelques jours que je planche dessus mais rienn y fait!

    Pourriez vous m aider ? merci beaucoup a tous !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Par défaut Une solution et pas nécessairement la meilleure
    Voici la facon que je procède : 1- je recois une string en paramètre et celle-ci est assemblé avec les informations suivantes =
    Bps, (vitesse de transmission)
    BitsDonnees, (nombre de bit a envoyé)
    Parite, (E = paire, N = aucune parité et O = impaire)
    BitArret (1 = ONESTOPBIT, 1.5=ONE5STOPBITS et 2 =TWOSTOPBITS)
    2- je converti en int les données recues et fractionnées
    3- avec le CreateFile, j'essaie d'ouvrir le COM. La variable : m_NomDuPort est un char* contenant le COM1 ou 2


    Jespère que ca pourra aider certaine personne


    /////////////////////////////////////////////////////////////////////////////////////////
    // Initialisation : Ouvre le port et règle les paramètres de la communication. Retourne 0 en
    // cas de résussite et une valeur non nulle (le numéro de l'erreur)
    // en cas d'échec.
    // ****** des fois il y a des problèmes avec le bit d'arret 1.5 tout dépend des ordinateurs ******
    //
    // Intrant : sInitialisation --- la chaine a initialiser
    // Extrant : Reussit --- si ca réussit ou non
    /////////////////////////////////////////////////////////////////////////////////////////
    int CPortSerie::Initialisation( char* sInitialisation )
    {
    char delimiteurs[] = ","; // caractère délimiteur dans la chaine
    char* Bps; // vitesse de transmissions des données
    char* BitsDonnees; // nombre de bits a envoyé a la fois
    char* Parite; // parité, non parité, aucun
    char* BitArret; // 1, 1.5 ou 2
    int iBps; // pour la transformation de string en int
    int iBitsDonnees; // pour la transformation de string en int
    int iParite; // pour la transformation de string en int
    int iBitArret; // pour la transformation de string en int
    char cParite;
    int Reussit = 0; // retourne 0 si les paramètres sont correct
    // séparer les éléments de la string, afin de de pourvoir initialiser le port
    Bps = strtok( sInitialisation, delimiteurs ); // bps
    BitsDonnees = strtok( 0, delimiteurs ); // bitsDonnees
    Parite = strtok( 0, delimiteurs ); // parite
    BitArret = strtok( 0, delimiteurs ); // bitArret
    // transformer en int
    iBps = DecoderInt( Bps ); // decoder la vitesse de transmission
    iBitsDonnees = DecoderInt( BitsDonnees ); // décoder le nombre de bit a envoyé
    iBitArret = DecoderBitArret( BitArret ); // decoder bit d'arret

    // mettre en majuscule
    cParite = MettreEnMajuscule(Parite);
    // transformer en int
    iParite = DecoderParite( cParite );
    PortSerie = CreateFile( m_NomDuPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0 );
    if( PortSerie == INVALID_HANDLE_VALUE )
    {
    TraiterErreur( "Configuration de port. Dans CreateFile", GetLastError() );
    throw CErreur( "Le port est mal initialise" );
    Reussit=1;
    }
    //
    // réglage des paramètres de communication
    //

    // obtention des paramètres courants
    if( !GetCommState( PortSerie, &dcb ) )
    {
    TraiterErreur( "L'obtention de parametre. Dans GetCommState", GetLastError() );
    throw CErreur( "L'ouverture de parametre." );
    Reussit = 1;
    }
    // modification des principaux paramètres
    dcb.BaudRate = iBps;
    dcb.ByteSize = iBitsDonnees;
    dcb.Parity = iParite ;
    dcb.StopBits = iBitArret ;
    // application des nouveaux paramètres
    if( !SetCommState( PortSerie, &dcb ) )
    {
    TraiterErreur( "Initilialisation des parametres, dans SetCommState ", GetLastError() );
    Reussit = 1;
    throw CErreur( "La configuration de nouveau parametre." ); // il y a des problèmes ici des fois avec 1.5
    }
    return Reussit;
    }

  3. #3
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

Discussions similaires

  1. Ouverture de port COM
    Par malloc87 dans le forum Débuter
    Réponses: 2
    Dernier message: 11/07/2012, 11h13
  2. Réponses: 0
    Dernier message: 17/05/2011, 12h48
  3. [WD14] Erreur sur ouverture de Port COM
    Par miripesage dans le forum WinDev
    Réponses: 13
    Dernier message: 24/03/2011, 20h01
  4. Problème d'ouverture de port Com
    Par Fr33dom dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/08/2009, 14h22
  5. pb sur ouverture port com bluetooth
    Par fenderthrice dans le forum Visual C++
    Réponses: 12
    Dernier message: 17/07/2007, 10h41

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