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

Visual C++ Discussion :

readfile reçois valeur diférente de celle envoyer


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut readfile reçois valeur diférente de celle envoyer
    Bonjour j'ai un probléme mon readfile revoit une valeur diférente de celle envoyer. j'envoi les valeur grace a un autre ordinateur a l'aide d'un cable qui traduit du RS232 en USB. Et je lit l'usb comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int  buf[16];
    hCom = CreateFile(detail->DevicePath,GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,NULL, NULL);
    bResult=ReadFile(hCom, buf,1, &Read, NULL );
    DWORD test2 = GetLastError();//lecture du port usb
    buf recois la valeur 127 ou 126 si je le déclare en byte ou DWORD sinon il reçois un chifre souvent identique et ne corespondant a rien.
    Read reçois 1 donc on lit bien un octet
    et test2 est égal a 259

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    j'envoi les valeur grace a un autre ordinateur a l'aide d'un cable qui traduit du RS232 en USB
    et ton ordi traduit l usb en RS232


    hCom = CreateFile(detail->DevicePath,GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,NULL, NULL);
    essaie plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    OVERLAPPED osReader = {0};
     
    hCom = CreateFile("COMx:",GENERIC_READ | GENERIC_WRITE , NULL,NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED, NULL);
    osReader.hEvent = CreateEvent(NULL, true, false, NULL);
    ReadFile(hCom, buf,1, &Read, &osReader);
    et buf c est un char tab pas un int tab


    ce que tu peux faire aussi c est de tester avec l'hyperterminal, tu verras bien ce qu il te donnera

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    dans la faq il y a un post complet sur la gestion du port série ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut
    c'est quoi l'hyperterminal et on le trouve ou sinon lire avec le port com ne marche pas il lit tout temps 0 j'avais déjà essayer

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    ce n est pas parce qu il lit o que ça ne marche pas, et je doute que tu puisses lire de l'usb ainsi . Quand tu branches un cable usb (connection avec un device), un nouveau port com apparait sur ton PC (souvent COM4).

    donc pour ouvrir une connection tu peux t y prendre de la maniere suivante :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    hComm = CreateFile("COM4:",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
     
    if (hComm == INVALID_HANDLE_VALUE) 
    {
         return false;
    }
    FillMemory(&dcb, sizeof(dcb), 0);
    dcb.DCBlength = sizeof(dcb);
     
    GetCommState (hComm, &dcb);
     
     
    dcb.BaudRate = baudrate;
    dcb.fBinary = true;
    dcb.fParity = true;
    dcb.fOutxCtsFlow = false;
    dcb.fOutxDsrFlow = false;
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fDsrSensitivity = false;
    dcb.fTXContinueOnXoff = false;
    dcb.fOutX = false;
    dcb.fInX = false;
    dcb.fErrorChar = false;
    dcb.fNull = false;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    dcb.fAbortOnError = false;
    dcb.ByteSize = datanumber;
    dcb.Parity = parity;
    dcb.StopBits = stopbits;
    dcb.XonLim = 0;
    dcb.XoffLim = 0;
    dcb.XonChar = 0;
    dcb.XoffChar = 0;
     
     
    if (!SetCommState(hComm, &dcb))
    {
    	DWORD dwError = GetLastError ();
    	return false;
    }
    else return true;
    ceci est bien sur un exemple, a toi de faire celui qui te correspond le mieux, mais reste ne asynchrone quand même




    puis la réception (juste les élements importants)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    osReader.hEvent = CreateEvent(NULL, true, false, NULL);
     
    if (osReader.hEvent == NULL)
    return false;
     
    if (!ReadFile(hComm, bof, READ_BUF_SIZE,&dwRead,&osReader)) 
    {
    	if (GetLastError() != ERROR_IO_PENDING) return false;
    }
    mon appli marche et le device est raccordé par liaison usb





    mais comme l a dit farscape :

    http://c.developpez.com/faq/vc/?page...WithSerialPort


    ps : l hyperterminal windows permet de faire tout ce que tu veux faire sans que tu l ai a faire

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut
    Alors j'ai bien comprit vos proposition pour lire un port RS232. Afin d'etre plus clair je vais vous dire l'ensemble des test que j'avais déjà fait. Alors j'ai deux ordinateur un qui envoit des information par le port RS232 l'autre qui reçois les information. Si je lit le port RS232 COM 1 du pc2 ça marche si je lit le port usb ça lit toujours la meme chosse et si je lit le lit le port COM3 qui est le port virtuelle qui est créer quand j'envoi avec le pc1 je lit rien par contre si j'envoie une information par le com3 alors le com3 relis l'information qu'il a lui meme enfvoyer il boucle sur lui meme en gros.

Discussions similaires

  1. Problème pour lire une valeur dans une cell
    Par heiriquent dans le forum MATLAB
    Réponses: 4
    Dernier message: 28/07/2013, 23h26
  2. Afficher la valeur d'une CELL avec SPRINTF
    Par TopCao dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/03/2010, 09h08
  3. Réponses: 0
    Dernier message: 06/12/2009, 20h58
  4. Réponses: 8
    Dernier message: 11/05/2007, 11h47
  5. Réponses: 9
    Dernier message: 28/06/2006, 11h11

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