begin process at 2012 05 30 12:33:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

WriteFile() et le port série


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

WriteFile() et le port série

mercredi 9 juin 2004 à 14:13:22 | WriteFile() et le port série

oudkaramla

Membre Club

salut tout le monde

j'ai un petit problème avec writefile()

en fait je fais un programme avec paramètres bref je transmis le troisième paramètre à une fonction d'envoie:

WriteCOM(argv[3], (unsigned long)strlen(argv[3]), &nBytesWritten);
/********************WriteCOM()**************/
int WriteCOM(char *text, unsigned long nBytesToWrite, unsigned long* pBytesWritten)
{
strcpy(g_buffer, text);

strcat(g_buffer, "\r\r\n\n");
printf(" le g_buffer:%s\n",g_buffer);

/* écriture sur le port */

WriteFile(g_hCOM, g_buffer, nBytesToWrite, pBytesWritten, NULL);

if(WriteFile(g_hCOM, g_buffer, nBytesToWrite, pBytesWritten, NULL))

{
printf("\nyahooo!!!!!!!!!!!!!!!!\n");
return FUNCOK;
}
else
return FUNCERROR;
}
/************************************************/
le WriteFile échoue je ne sais pas pour q'elle raison!
est ce que quelqu'un peut m'aider?
MERCI
mercredi 9 juin 2004 à 15:03:35 | Re : WriteFile()

oudkaramla

Membre Club

salut News, ça vas?

EN fait j'ai un problème avec WriteFile() dontje ne sai spas l'origine!
j'avais le même problème avec createFile , vous m'avez envoyer un code en c++ pour savoir la cause
est ce que vous pouvez me le renvoyer stp

help
vendredi 11 juin 2004 à 11:27:50 | Re : WriteFile() et le port série

rakma74

Salut, j'ai eu le même problème que toi, YMCA2003 me l'a résolu :
Bon courage ...

/******************************************************************************
TestCOM.c :

fonctions de base pour l'envoi et la réception de donner sur un port
série RS232.
******************************************************************************/

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

/*=============================================================================
Définition de constantes
=============================================================================*/
#define RX_SIZE 4096 /* taille tampon d'entrée */
#define TX_SIZE 4096 /* taille tampon de sortie */
#define MAX_WAIT_READ 5000 /* temps max d'attente pour lecture (en ms) */


/*=============================================================================
Variables globales.
=============================================================================*/

/* Handle du port COM ouvert */
HANDLE g_hCOM = NULL;

/* Délais d'attente sur le port COM */
COMMTIMEOUTS g_cto =
{
MAX_WAIT_READ, /* ReadIntervalTimeOut */
0, /* ReadTotalTimeOutMultiplier */
MAX_WAIT_READ, /* ReadTotalTimeOutConstant */
0, /* WriteTotalTimeOutMultiplier */
0 /* WriteTotalTimeOutConstant */
};

/* Configuration du port COM */
DCB g_dcb =
{
sizeof(DCB), /* DCBlength */
9600, /* BaudRate */
TRUE, /* fBinary */
FALSE, /* fParity */
FALSE, /* fOutxCtsFlow */
FALSE, /* fOutxDsrFlow */
DTR_CONTROL_ENABLE, /* fDtrControl */
FALSE, /* fDsrSensitivity */
FALSE, /* fTXContinueOnXoff */
FALSE, /* fOutX */
FALSE, /* fInX */
FALSE, /* fErrorChar */
FALSE, /* fNull */
RTS_CONTROL_ENABLE, /* fRtsControl */
FALSE, /* fAbortOnError */
0, /* fDummy2 */
0, /* wReserved */
0x100, /* XonLim */
0x100, /* XoffLim */
8, /* ByteSize */
NOPARITY, /* Parity */
ONESTOPBIT, /* StopBits */
0x11, /* XonChar */
0x13, /* XoffChar */
'?', /* ErrorChar */
0x1A, /* EofChar */
0x10 /* EvtChar */
};

/*=============================================================================
Fonctions du module.
=============================================================================*/
BOOL OpenCOM (int nId);
BOOL CloseCOM ();
BOOL ReadCOM (void* buffer, int nBytesToRead, int* pBytesRead);
BOOL WriteCOM (void* buffer, int nBytesToWrite, int* pBytesWritten);

/******************************************************************************
main : point d'entrée du programme.
******************************************************************************/
int main()
{
/* variables locales */
char buffer[256];
int nId, nChoice, nBytesWritten, nBytesRead;

/* demande du numéro du port COM */
printf("Entrez le numero du port COM : ");
scanf("%d", &nId);

/* tentative d'ouverture */
printf("Ouverture et configuration du port COM%d...\r\n", nId);
if(!OpenCOM(nId)) return -1;
printf("...OK\r\n");

/* boucle tant que l'on ne quitte pas */
do
{
/* menu */
printf("\r\n");
printf("1 : Envoyer des donnees.\r\n");
printf("2 : Recevoir des donnees.\r\n");
printf("3 : Quitter.\r\n");
printf("Choix : ");
scanf("%d", &nChoice);

/* enoyer des données */
if(nChoice == 1)
{
printf("\r\n");
printf("Donnees a envoyer :\r\n");
fflush(stdin);
gets(buffer);
printf("\r\n");
printf("Envoi des donnees...\r\n");
if(WriteCOM(buffer, strlen(buffer), &nBytesWritten))
printf("%d octet(s) envoye(s).\r\n", nBytesWritten);
else
printf("Erreur lors de l'envoi.\r\n");
}

/* recevoir des données */
if(nChoice == 2)
{
printf("\r\n");
printf("Reception de donnees...\r\n");
if(ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead))
{
buffer[nBytesRead] = '\0';
printf("%d octet(s) recu(s) :\r\n%s\r\n", nBytesRead, buffer);
}
else
printf("Erreur lors de la réception.\r\n");
}
}while(nChoice != 3);

/* fermeture du port COM et retour */
CloseCOM();
return 0;
}

/******************************************************************************
OpenCOM : ouverture et configuration du port COM.
entrée : nId : Id du port COM à ouvrir.
retour : vrai si l'opération a réussi, faux sinon.
******************************************************************************/
BOOL OpenCOM(int nId)
{
/* variables locales */
char szCOM[16];

/* construction du nom du port, tentative d'ouverture */
sprintf(szCOM, "COM%d", nId);
g_hCOM = CreateFile(szCOM, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
if(g_hCOM == INVALID_HANDLE_VALUE)
{
printf("Erreur lors de l'ouverture du port COM%d", nId);
return FALSE;
}

/* affectation taille des tampons d'émission et de réception */
SetupComm(g_hCOM, RX_SIZE, TX_SIZE);

/* configuration du port COM */
if(!SetCommTimeouts(g_hCOM, &g_cto) || !SetCommState(g_hCOM, &g_dcb))
{
printf("Erreur lors de la configuration du port COM%d", nId);
CloseHandle(g_hCOM);
return FALSE;
}

/* on vide les tampons d'émission et de réception, mise à 1 DTR */
PurgeComm(g_hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
EscapeCommFunction(g_hCOM, SETDTR);
return TRUE;
}

/******************************************************************************
CloseCOM : fermeture du port COM.
retour : vrai si l'opération a réussi, faux sinon.
******************************************************************************/
BOOL CloseCOM()
{
/* fermeture du port COM */
CloseHandle(g_hCOM);
return TRUE;
}

/******************************************************************************
ReadCOM : lecture de données sur le port COM.
entrée : buffer : buffer où mettre les données lues.
nBytesToRead : nombre max d'octets à lire.
pBytesRead : variable qui va recevoir le nombre d'octets lus.
retour : vrai si l'opération a réussi, faux sinon.
-------------------------------------------------------------------------------
Remarques : - la constante MAX_WAIT_READ utilisée dans la structure
COMMTIMEOUTS permet de limiter le temps d'attente si aucun
caractères n'est présent dans le tampon d'entrée.
- la fonction peut donc retourner vrai sans avoir lu de données.
******************************************************************************/
BOOL ReadCOM(void* buffer, int nBytesToRead, int* pBytesRead)
{
return ReadFile(g_hCOM, buffer, nBytesToRead, (DWORD*)pBytesRead, NULL);
}

/******************************************************************************
WriteCOM : envoi de données sur le port COM.
entrée : buffer : buffer avec les données à envoyer.
nBytesToWrite : nombre d'octets à envoyer.
pBytesWritten : variable qui va recevoir le nombre d'octets
envoyés.
retour : vrai si l'opération a réussi, faux sinon.
******************************************************************************/
BOOL WriteCOM(void* buffer, int nBytesToWrite, int* pBytesWritten)
{
/* écriture sur le port */
return WriteFile(g_hCOM, buffer, nBytesToWrite, (DWORD*)pBytesWritten, NULL);
}


Cette discussion est classée dans : buffer, port, unsigned, writefile, writecom


Répondre à ce message

Sujets en rapport avec ce message

ptit probl with:WriteFile() et ReadFile() [ par oudkaramla ] salut tout le monde,J'ai un petit problem avec WriteFile() et ReadFile().lors de la compilation j'ai les deux suivantes erreures:********************* ReadprocessMemory & WriteFile [ par Deimos_ ] Salut à tous, J'ai un petit problème avec les fonctions ReadProcessMemory() et WriteFile() ! En fait, je souhaiterais obtenir dans un fichier texte q Taille buffer port COM [ par DMK04 ] Bonjour,je voudrais savoir si quelqu'un connait la taille du buffer d'un port série ?MerciA+ pb avec les pointeurs [ par oudkaramla ] salut, j'ai un problème dont je ne sais l'origine: en fait j'ai définis la fonction : int EnvoyerAvecReponse(char *g_buffer, unsigned long nBytesToWri aide sur la gestion du buffer d'enbtrée du port serie [ par jojos89 ] Je voudrais savoir comment on peut savoir le nombre d'octet qui se trouve dans le buffer d'entrée, car dans mon programme je recois des valeurs que je Comment forcer le RTS pour une liaison RS232 [ par ancat ] Bonjourje viens de faire un petit prog (grandement inspire de sources du site) mais je ne saisis pas trop le controle du RTS.Celui ci est-il traite pa RS232 [ par th62d ] Bonjour,J'essaie de faire communiquer mon pc via le port serie RS232.....Quand je lance le programme TestCOM.c j'ai l'erreur suivante à la compilation port série et WriteFile ! [ par nanalye ] Bonjour tout le monde !Voilà mon pb : je veux envoyer des entiers par le port série avec WriteFile.Voici le programme que je lance ://ouverture du por E/S sur port série [ par Gaelle ] SalutMon prog (sous VC++6) gère le port serie pour l'envoi et la reception d'info. J'utilise pour cela les fonctions _outp(PORT, int) et _inp(PORT)Mon Buffer editbox multi ligne + récuperer port socket [ par Suisse00 ] Salut ! Encore moi !Comment faire pour écrire dans un EditBox multi ligne en enjoutant une ligne a la suite de l'auter ? (Sa dois être avec le buffer


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,827 sec (3)

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