Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1926 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Communication avec port COM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Communication avec port COM

n°1520652
seignseife​r
Posté le 27-02-2007 à 03:47:01  profilanswer
 

Bonjour tout le monde,  
aidez moi s'il vous plait et si vous avez le temps, je vais craquer.
Alorss voila, je veux communiquer avec un analyseur de spectre branche sur le COM1.
J'ai reussi a taper un petit programme. J'arrive a lui envoyer des informations ( par exemple a changer la langue de l'analyseur en envoyant les bits 16 puis 3)
Jusque la tout va bien. Mais le probleme est que je n'arrive pas du tout a lire les infos qu'il m'envoie.  
Quand il faut qu'il m'envoie des series de BYTE, j'ai rien du tout.
Je vous donne un exemple :
Pour avoir l'etat de sa batterie, je dois envoyer le BYTE 78, puis le BYTE 3. il devrait me renvoyer 5 BYTE normalement, mais j'ai rien :'(.
Voila mon programme :( je code sous Borland C++6.0)
 
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#include <windef.h>
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
 
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main()
{
 
 HANDLE handle;
 DCB dcb;
 COMMTIMEOUTS timeouts={0};
 BOOL fSuccess;
 
 
 unsigned long nBytesRead;
 int NbOctet;
 
 char c;
 int i;
 BOOL bResult,PortReady;
 
 char buf2[1024];
 DWORD nblu,nbecrit;
 
 int aenvoyer2,aenvoyer3;
 
 
 
 /*--------------------------------------------------------------------*/
 /*   Ouverture du port de communication pour l'ANALYSEUR DE SPECTRE   */
 /*--------------------------------------------------------------------*/
 
 
 handle = CreateFile(
    "COM1",
    GENERIC_READ | GENERIC_WRITE , // acces pour lire et ecrire sur le port
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL
    ) ;
 
 
 if(handle == INVALID_HANDLE_VALUE)
  {
   printf("Impossible d'ouvrir le port  (erreur %d)\n", GetLastError());
    return 0;
  }
 
 
PortReady=SetupComm(handle,5000,5000);
fSuccess = GetCommState(handle, &dcb);
 
 if (!fSuccess)
  {
    printf("probleme 1" );
 
      getchar();
  }
 
 
 
dcb.BaudRate = CBR_9600 ;  
dcb.ByteSize =8 ;  
dcb.Parity=NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fNull=FALSE;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.fInX=FALSE;
dcb.fOutX=FALSE;
dcb.fDtrControl=DTR_CONTROL_ENABLE;
 
 
PortReady=SetCommState(handle,&dcb);
 
if(!SetCommState(handle,&dcb))
{
   printf("probleme 1" );
      getchar();
 
}
 
 
 
 
 
/*-----------------------------------------------------------*/
/*                  Les timeouts                             */
/*-----------------------------------------------------------*/
 
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutMultiplier=8;
timeouts.ReadTotalTimeoutConstant=8;
timeouts.WriteTotalTimeoutMultiplier=8;
timeouts.WriteTotalTimeoutConstant=8;
 
 
 SetCommTimeouts(handle,&timeouts);
if(!SetCommTimeouts(handle,&timeouts))
                {
                  printf("Impossible d'initialiser les timeouts  (erreur %d)\n", GetLastError());
                  return 0;
                }
/*-----------------------------------------------------------*/
/*                  envoi de donnees et reception                           */
/*-----------------------------------------------------------*/
 
aenvoyer2=78;
aenvoyer3=3;
 
WriteFile(handle,&aenvoyer2,1,&nbecrit,NULL);
WriteFile(handle,&aenvoyer3,1,&nbecrit,NULL);
 
ReadFile(handle,buf2,13,&nblu,NULL);
 
 printf("\n char2= %s \n ",buf2);
 
getchar();
 
CloseHandle(handle);
 
 
 return(fSuccess);
}
//---------------------------------------------------------------------------

mood
Publicité
Posté le 27-02-2007 à 03:47:01  profilanswer
 

n°1520696
nlc
Le mieux est l'ennemi du bien
Posté le 27-02-2007 à 09:42:23  profilanswer
 

Essaye de dévalider le controle de flux

 

RTS_CONTROL_DISABLE et DTR_CONTROL_DISABLE j'imagine


Message édité par nlc le 27-02-2007 à 09:43:01
n°1521347
seignseife​r
Posté le 28-02-2007 à 01:39:16  profilanswer
 

merci de ta reponse.
Je viens d'essayer mais ca ne marche pas, je ne recoit toujours rien... :(

n°1521394
_darkalt3_
Proctopathe
Posté le 28-02-2007 à 09:36:36  profilanswer
 

Tu ne te sers pas de buildcommdcb ... à tester pour configurer proprement ta structure dcb.


---------------
Töp of the plöp
n°1521396
_darkalt3_
Proctopathe
Posté le 28-02-2007 à 09:37:06  profilanswer
 

un vieux bout de code:

Code :
  1. CManagedSerial::BuildCommDCB("baud=115200 parity=N data=8 stop=1",&CommSettings);
  2. CManagedSerial::SetCommState(mHandle, &CommSettings);


Message édité par _darkalt3_ le 28-02-2007 à 09:37:19

---------------
Töp of the plöp

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Communication avec port COM

 

Sujets relatifs
transmission de donnees via le port serielecture du port serie dans test bench vhdl
[Matlab/Comsol] communication entre les deuxEmuler un rebranchement sur le port USB
Passages C++/VBA en XLL/COM Questions[WAS]Ip et port du server pour déploiement Axis
Communication PROFIBUSCommunication RS-485
libre/écrire un port USBCommunication avec un port COM
Plus de sujets relatifs à : Communication avec port COM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR