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 du port s�rie en c++


Sujet :

C++

  1. #1
    Membre confirm�
    Inscrit en
    Octobre 2006
    Messages
    117
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par d�faut ouverture du port s�rie en c++
    pour les besoins de mon application, je cherche le moyen d'initialiser une ouverture au port s�rie via RS232 et d'afficher un message qui me pr�vienne si l'ouverture a �t� faite ou pas.
    je sais qu'il faut passer par un fichier (je ne sais pas pourquoi) et qu'il faut utiliser la fonction createfile() mais je ne sais pas comment faire
    et puis j'au vu qu'il faut utiliser la variable dcb... � quoi elle sert...
    je m'enbrouille...
    aider moi
    merci bp
      0  0

  2. #2
    Membre �clair� Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    D�tails du profil
    Informations personnelles :
    �ge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par d�faut
    http://electrosofts.com/serial/
    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
    24
    25
    #include <bios.h>
    #include <conio.h>
    #define COM1       0
    #define DATA_READY 0x100
    #define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00)
    int main(void)
    {
       int in, out, status;
       bioscom(0, SETTINGS, COM1); /*initialize the port*/
       cprintf("Data sent to you:  ");
       while (1)
       {
          status = bioscom(3, 0, COM1); /*wait until get a data*/
          if (status & DATA_READY)
               if ((out = bioscom(2, 0, COM1) & 0x7F) != 0)  /*input a data*/
                  putch(out);
               if (kbhit())
               {
                  if ((in = getch()) == 27)   /* ASCII of Esc*/
                     break;
                  bioscom(1, in, COM1);   /*output a data*/
               }
       }
       return 0;
    }
    A ta disposition si tu as besoin de traduction
      0  0

  3. #3
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Fait une recherche dans les forums et dans la FAQ VC++.
      0  0

  4. #4
    Membre confirm�
    Inscrit en
    Octobre 2006
    Messages
    117
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par d�faut
    Merci pour ta r�ponse, mais je ne comprend pas vraiment le code.
    je pr�f�re passer par createfile().
    j'ai besoin de savoir que fait cette fonction exactement.
    je l'ai utilis� mais je n'arrive pas � ouvrir le port, est ce qu'il faut l'utiliser avec d'autres fonction...
    je vous envoie mon code :

    void comPort::OpenPort(char *strPort,long BaudRate,int BitsSize,int Parity,int StopBits)
    {
    // on ouvre le port s�rie
    m_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
    if(m_hCom == INVALID_HANDLE_VALUE)
    {
    // Echec
    cout<<"erreur d'initialisation du port serie"<<endl;
    }
    else
    { cout<<"succes de l'initialisation du port serie"<<endl;
    }


    }
    aider moi, toute information est la bienvenue.
    tr�s bonne journ�e
      0  0

  5. #5
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Utilise les balises CODE.
    Il y a un exemple complet avec CreateFile dans la FAQ VC++.
      0  0

  6. #6
    Membre confirm�
    Inscrit en
    Octobre 2006
    Messages
    117
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par d�faut
    merci de me r�pondre...
    je ne comprend pas ce que sont les balises CODE et � quoi �a me servirait de les utiliser...
    j'ai besoin surtout de savoir pourquoi mon code me renvoie "erreur de l'initialisation du port s�rie"...
    merci pour le lien je vais y jeter un coup d'oeil...
      0  0

  7. #7
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Les balises CODE sont expliqu�es dans les r�gles:
    http://club.developpez.com/regles/#L3.4
    il te suffit de cliquer sur le bouton juste au dessus quand tu r�ponds.

    Note aussi que c'est sp�cifique Windows, donc ici ce n'est pas le meilleur forum.
      0  0

  8. #8
    Membre �clair� Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    D�tails du profil
    Informations personnelles :
    �ge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par d�faut
    - Quel est l'accessoire avec lequel tu veux faire communiquer ton PC?
    ---- Vois tu des diodes LED?, parfois le PC reste muet mais les diodes commencent � clignoter.(RS232, c'est le serial qui leurre)
    - Il faut d�finir les vitesses de communication (sortie et entr�e) ( les minitels communiquent en 75/1200) et elle doit �tre la m�me des deux c�t�s
    - Selon le signal que tu veux faire passer, il faut choisir PAIR ou IMPAIR ( odd, even), un stop bit. Les arguments de ta fonction sont tr�s clairs.

    - Si tu as la possibilit�, commence par �tablir la communication en BASIC, c'est beaucoup plus simple, apr�s tu pourras reprendre les param�tres en C++.
      0  0

  9. #9
    Membre confirm�
    Inscrit en
    Octobre 2006
    Messages
    117
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par d�faut
    Merci de m'avoir r�pondu.

    je t'envoie ma d�finition de la classe qui amorce l'ouverture du port s�rie :

    int l_serie::InitComPort(char* port, char* parite, int vitesse, int data, int stopBit)
    {
    DCB dcb;
    HANDLE hCom;
    DWORD dwError;
    BOOL fsuccess;

    /////Ouverture du port/////////
    hCom= CreateFile (port,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

    //////Verifier si le handle a �t� ouvert /////////////
    if (hCom=INVALID_HANDLE_VALUE)
    { cout<<"erreur d'initialisation du port"<<endl;}

    //////Lecture configuration initiale////////
    fSuccess =GetCommState(hCom,&dcb);
    if(!fSuccess)
    {cout<<"erreur lecture configuration"<<endl;
    }

    ///////configuration du port s�rie////////////
    /* Gestion de la vitesse */
    dcb.BaudRate =vitesse;
    /* Gestion du nombre de bits */
    dcb.ByteSize = data;
    /* Gestion de la parit� */
    if (strcmp(parite,"Aucune")==0)

    dcb.Parity = NOPARITY;

    if (strcmp(parite,"Paire")==0)

    dcb.Parity = EVENPARITY;

    if (strcmp(parite,"Impaire")==0)

    dcb.Parity = ODDPARITY;

    /* Gestion du Stop Bit */

    if (stopBit==1)
    dcb.StopBits = ONESTOPBIT;
    if (stopBit==1.5)
    dcb.StopBits = ONE5STOPBITS;
    if (stopBit==2)
    dcb.StopBits = TWOSTOPBITS;
    dcb.DCBlength;
    dcb.BaudRate;
    dcb.fBinary=1;
    dcb.fParity=0;
    dcb.fOutxCtsFlow=0;
    dcb.fOutxDsrFlow=0;
    dcb.fDtrControl=0;
    dcb.fDsrSensitivity=0;
    dcb.fTXContinueOnXoff=0;
    dcb.fRtsControl=0;

    /*-----------------------------------------------*/
    /* Configurer le port */
    /*-----------------------------------------------*/
    fSuccess = SetCommState(hCom, &dcb);
    if (!fSuccess)
    {
    cout<<"erreur lors de la configuration du port"<<endl;
    }

    return(0);

    }


    Comme tu voit, je pense qu'elle est bien d�finie?
    mon programme me renvoit les 3 messages d'erreur!!!

    Je n'ai aucun p�riph�rique branch� au port s�rie de mon ordinateur, c'est pour le boulot et on ne m'a pas encore fournit le mat�riel, est ce que tu me confirme que je ne peux pas tester l'ouverture de mon port s�rie sans mat�riel branch�...
    Je suis novice dans ce genre d'application.

    Merci bp et bonne journ�e
      0  0

  10. #10
    Membre �clair� Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    D�tails du profil
    Informations personnelles :
    �ge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par d�faut
    D�j� une premi�re chose que tu peux faire demain c'est rue Montgallet acqu�rir des c�bles s�rie, parcequ'il existe le branchement direct et/ou le null modem, je ne sais pas trop, � l'�poque les prises s�rie �taient assez grandes pour faire les soudures soi-m�me apr�s test.
    Ensuite essaie de trouver un vieux modem US Robotics ou autre, avec des leds, peu importent les vitesses, parceque l� tu peux voir sans communication si le modem s'initialise, il y un langage de modems genre NZ qui renvoie des signaux que tu peux r�cup�rer.

    A savoir que les anciens PC avaient les ports COM1 COM2 COM3 COM4 pour les interfaces s�ries, je ne sais pas ce qu'il en reste aujourdh'ui.

    Je me demande m�me si on ne pourrait pas lancer une commande DOS c:>copy con COM1, faudrait voir.

    D'apr�s ton source, je dirais qu'une bonne moiti� n'est pas tr�s utile (� moins que ce soit tr�s pointu sur la gestion m�moire et les temps de r�ponse, genre informatique embarqu�e).

    Sinon tu pourrais essayer de r�cup�rer les on clicks d'une souris sur le port s�rie (�a existe encore, je m'en sers pour ma Debian box).

    A+
      0  0

  11. #11
    Membre exp�riment� Avatar de BertrandA
    Inscrit en
    Ao�t 2003
    Messages
    170
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2003
    Messages : 170
    Par d�faut
    1) Merci d'utiliser les balises codes, cf les posts d'Aurelien
    2) C'est pas le bon forum, cf le 2�me post d'Aurelien
    3) Dans la FAQ VC++ se trouve une classe qui fonctionne tr�s bien et qui correspond exactement � ton probl�me, cf le 1er post d'Aurelien
    4) Jean-Benoit essaye de t'aider et c'est tout � son honneur, malheureusement CERTAINS de ses conseils ont 15 ans de retard et ne te seront d'aucune utilit� sous Windows
    5) Un appel � GetLastError() te renseignera sur ce qui ne colle pas. A priori tu passes n'importe quoi � ta fonction, mais comme il manque la moiti� du code, difficile de deviner.
      0  0

  12. #12
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Rien � ajouter, � part fermeture du topic.
      0  0

Discussions similaires

  1. R�ponses: 0
    Dernier message: 09/07/2008, 10h42
  2. ouverture port s�rie?!
    Par Malek_BAKLOUTI dans le forum Composants
    R�ponses: 2
    Dernier message: 04/05/2006, 11h06
  3. probl�me ouverture de port s�rie
    Par philippe13 dans le forum Entr�e/Sortie
    R�ponses: 9
    Dernier message: 26/04/2006, 16h42
  4. ouverture d' un port s�rie
    Par stgi02 dans le forum MFC
    R�ponses: 3
    Dernier message: 07/03/2006, 11h31

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