begin process at 2010 02 10 09:38:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

SQL

 > 

transmission de donnees via port serie


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

transmission de donnees via port serie

jeudi 22 février 2007 à 06:33:57 | transmission de donnees via port serie

seignseifer

Bonjour tout le monde,
j'ai fait un petit programme en  C++ sous Borland C++6.0, car je veux envoyer via le port serie, des information a un analyseur de sprectre. Le but est de pouvoir le commander a partir de l'ordi. ( et apres de recevoir les info qu'il envoie)
Par exemple, la doc de programmation de l'analyseur , me dit " Send the enter remotemode Byte #69, to the spectrum analyser to enter remote mode.
Donc j'ai tape la ligne de code suivante :
 WriteFile(handle,"69",2,&nbecrit,NULL);

Mais rien ne se passe.L'analyseur de spectre ne bouge pas d'un pouce...
AVez vous des idees ?

Mon programme en entier donne ca :
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#include <windef.h>
#include <stdlib.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main()
{

 HANDLE handle;
 DCB dcb;
 COMMTIMEOUTS timeouts={0};
 BOOL fSuccess;


 unsigned long nBytesRead;
 int NbOctet;
 char c;
 BOOL bResult,PortReady;
 char *inBuffer;
 
 /* pour le remote mode */
 char buf[56];
 char buf2[56];
 DWORD nblu=0,nbecrit;

 

 /*--------------------------------------------------------------------*/
 /*   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;


  }
  
/*-----------------------------------------------------------*/
/*                  Ajustement des parametres                */
/*-----------------------------------------------------------*/


PortReady=SetupComm(handle,5000,5000);


fSuccess = GetCommState(handle, &dcb);

 if (!fSuccess)
  {
    printf("probleme 1");

      getchar();
  }

     
dcb.BaudRate = CBR_9600 ;   /*  vitesse */
dcb.ByteSize =8 ; /* nombre de bits */
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;


/*-----------------------------------------------------------*/
/*     on applique les changements au port COM1              */
/*-----------------------------------------------------------*/
PortReady=SetCommState(handle,&dcb);

if(!SetCommState(handle,&dcb))
{
   printf("probleme 1");
      getchar();

}

 

 

/*-----------------------------------------------------------*/
/*                  Les timeouts                             */
/*-----------------------------------------------------------*/

timeouts.ReadIntervalTimeout=MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier=0;
timeouts.ReadTotalTimeoutConstant=0;
timeouts.WriteTotalTimeoutMultiplier=0;
timeouts.WriteTotalTimeoutConstant=0;

/* On applique ces changements au port COM1*/
 SetCommTimeouts(handle,&timeouts);
if(!SetCommTimeouts(handle,&timeouts))
                {
                  printf("Impossible d'initialiser les timeouts  (erreur %d)\n", GetLastError());
                  return 0;
                }

                     

  
/*-----------------------------------------------------------*/
/*             test du remote mode                           */
/*-----------------------------------------------------------*/


 WriteFile(handle,"69",2,&nbecrit,NULL);


 getchar();
        CloseHandle(handle);
 return(fSuccess);
}
//---------------------------------------------------------------------------

vendredi 23 février 2007 à 11:06:09 | Re : transmission de donnees via port serie

HCJarod

salut la doc te dit d'envoyé le BYTE 69 (l'octet 0x69) et pas la chaine "69".
essai plutot :  WriteFile(handle,'\x69',1,&nbecrit,NULL);

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
lundi 26 février 2007 à 01:42:38 | Re : transmission de donnees via port serie

seignseifer

ok merci, ca marche . L'analyseur de spectre se met bien en mode remote. Mais maintenant, le probleme est qu'il devrait me renvoyer son numero de serie ( entre autre : MDS234598) quand je lui dit de se mettre en remote mode. Mais mon programme m'affiche n'inporte quoi.
Il doit y avoir un probleme avec mon "buf2", mais j'arrive pas a voir quoi.
Merci 
lundi 26 février 2007 à 01:46:52 | Re : transmission de donnees via port serie

seignseifer

ah j'ai oublie d'ajouter la ligne dans mon programme du dessous, desole :



/*-----------------------------------------------------------*/
/*             test du remote mode                           */
/*-----------------------------------------------------------*/

aenvoyer=69;

WriteFile(handle,&aenvoyer,3,&nbecrit,NULL);

ReadFile(handle,buf2,56,&nblu,NULL);

printf("\n char2= %s \n ",buf2);
getchar();
CloseHandle(handle);



Cette discussion est classée dans : port, handle, include, dcb, timeouts


Répondre à ce message

Sujets en rapport avec ce message

C++ communication avec port COM [ par seignseifer ] Bonjour tout le monde, aidez moi s'il vous plait et si vous avez le temps, je vais craquer. JE pense que c'est assez basique, mais je suis debutant, d inclure un thread dans une classe C++ [ par savate83 ] Bonjour a tous, mon probleme est le suivant : je dois realiser une classe qui me permette d'executer un thread de reception a chaque instance car g pl Lire sur port parallèle! [ par tof0256 ] Bonjour,J'aimerais lire des données sur le port parallèle. J'aimerai utiliser les 8 bit de donnée pour cela. J'ai une fiche DB25 ou j'ai relié les PIn handle de port paralelle [ par antoinec ] Ya til moyen d accéder au CONTROL et STATUS port en ayant ouvert une communication par un handle sur"LPT1" sans utiliser # define DATA 0x378 etc?Antoi pb avec communication rs232 [ par kekenobi ] salut a tous et a toutes!voila j'ai un petit pb avec mon programme portant sur la communication RS232:en fait je reçoit une trame de 19 caractères et Reception sur port COM1 sous Builder [ par Ardeje26 ] Bonjour,Je travail sous Borland Builder 5 et j'ai un problème pour récupérer les datas sur mon port COM1 avec le code suivant.Je peut simplement savoi pb bind pour un serveur avec djgpp/gcc [ par Guillaume of IUT ] Salut à tous, j'ai un problème. Voici le code du serveur en C. C'est pratiquement l'exemple qui est livré avec les librairies tcp lsck073b. Le problem Création d'une socket .. [ par bubbless ] Bonjour !à l'aide !! J'ai programmé tout un systèle réseau / client, que j'ai enfin pu tester grâce à l'aide d'une âme charitable sur ce forum, et je Dossier [ par angsthase ] Bonjour à tous! Voici un petit bout de programme que j'ai recupérer sur 'msdn' et  que je n'arrive pas à faire fonctionner. C'est dû au paramètre qui [C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales