Communication avec port COM

Communication avec port COM - C++ - Programmation

Marsh Posté le 27-02-2007 à 03:47:01    

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);
}
//---------------------------------------------------------------------------

Reply

Marsh Posté le 27-02-2007 à 03:47:01   

Reply

Marsh Posté le 27-02-2007 à 09:42:23    

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
Reply

Marsh Posté le 28-02-2007 à 01:39:16    

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

Reply

Marsh Posté le 28-02-2007 à 09:36:36    

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


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

Marsh Posté le 28-02-2007 à 09:37:06    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed