Rechercher : dans
Par :

Probleme de lecture sur le port serie

Dernière réponse le 16 jan 2009 à 03:25:37 jackyjacky, le 16 mar 2004 à 15:48:10 
 Signaler ce message aux modérateurs

Salut à tous
Je travaille avec VisualC++ 6.0 sous winNT
J'essaye de lire le port série, mais je n'arrive pas à lire son contenu en une seul fois.
Je pense que l'ideal serait de detecter le dernier caractere du fichier afin de stopper la lecture, mais ma variable de stockage est de type void* est donc je n'arrive pas à l'utiliser..

#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>

#define PORT1	"COM1"
#define PORT2	"COM2"

#define V1200	CBR_1200
#define V2400	CBR_2400
#define V4800	CBR_4800
#define V9600	CBR_9600

#define BITS_7	7
#define BITS_8	8

#define BIT_DE_STOP_1	ONESTOPBIT
#define BIT_DE_STOP_15	ONE5STOPBITS
#define BIT_DE_STOP_2	TWOSTOPBITS

#define PAS_DE_PARITE	NOPARITY
#define PARITE_IMPAIRE	ODDPARITY
#define PARITE_PAIRE	EVENPARITY

#define OK	1
#define KO	0

#define LG_TRAME	1

int ouvrecom(char *strPort,long Baudrate,int Bitsize,int parite,int bitstop);
int reception(void *lpbuf,unsigned int ncountmax,unsigned int *pcountread);
void fermecom();
int recup();

DCB g_DCB;
HANDLE g_hCom=0;

void main(void)
{
	char lpbuf[LG_TRAME];
	unsigned int countread=0;
	HANDLE handle;
	DWORD byte=0;
	int nCarALire;
	
	
	handle=CreateFile("fabien.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
	ouvrecom(PORT1,V9600,BITS_7,PAS_DE_PARITE,BIT_DE_STOP_1);
	for(;;){
		nCarALire=reception(lpbuf,LG_TRAME,&countread);
		printf("%s",lpbuf);
		WriteFile(handle,lpbuf,nCarALire,&byte,NULL);
		CloseHandle(handle);
		recup();

	}

}

int ouvrecom(char *strPort,long Baudrate,int Bitsize,int parite,int bitstop)
{
	g_hCom=CreateFile(strPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH|FILE_FLAG_NO_BUFFERING,NULL);
	PurgeComm(g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
	g_DCB.DCBlength=sizeof(DCB);
	GetCommState(g_hCom,&g_DCB);
	g_DCB.BaudRate=Baudrate;
	g_DCB.ByteSize=Bitsize;
	g_DCB.Parity=parite;
	g_DCB.StopBits=bitstop;
	g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
	SetCommState(g_hCom,&g_DCB);
	return 0;
}

int reception(void *lpbuf,unsigned int ncountmax,unsigned int *pcountread)
{
	COMSTAT Stat;
	DWORD Errors;
	unsigned int nCarALire;
	unsigned long NCarLus=0;
	int i=0;

	Sleep(500);
	ClearCommError(g_hCom,&Errors,&Stat);
	nCarALire=Stat.cbInQue;

	while(nCarALire==0)
	{
		ClearCommError(g_hCom,&Errors,&Stat);
		Sleep(500);
		nCarALire=Stat.cbInQue;
	}
	ReadFile(g_hCom,lpbuf,nCarALire,&NCarLus,NULL);
return nCarALire;
}

int recup()
{
	FILE *recept;
	char code[25];
	
	recept=fopen("fabien.txt","rb");
	fgets(code,20,recept);
	printf("\n%s\n",code);
	fclose(recept);
	strcat(code,".txt");
	printf("\n%s\n",code);
	rename("fabien.txt",code);
	return 0;
}

merci d'avance pour votre aide

Meilleures réponses pour « probleme de lecture sur le port serie » dans :
Port série et port parallèle VoirIntroduction aux ports d'entrée-sortie Les ports d'entrée-sortie sont des éléments matériels de l'ordinateur, permettant au système de communiquer avec des éléments extérieurs, c'est-à-dire d'échanger des données, d'où l'appellation d'interface...

1

Younes, le 4 mar 2008 à 12:28:23

Slt,je veux faire un programme sous matlab qu'il fai l'acquisition en temps réel via le port série RS232
et affiche les signaux en temps réel.merci d'avance

Répondre à Younes

2

mouraddd, le 26 mai 2008 à 21:27:36

Je vais faire mem truc appel moi stp
mourad.memo@hotmail.com

Répondre à mouraddd

3

 unseulensemble, le 16 jan 2009 à 03:25:37

Voici un code matlab qui affiche un 'A' sur le port RS232 (windows)

% Reference: http://cnx.org/content/m12062/latest/
%%
%% Reinitialisation
close all
clear all
%clc
%% TEST
data = 65;
%% Initialisation du port serie
% PortCom - BaudRate - Parity - Data - Stop
!mode com1:9600,n,8,1
fid = fopen('com1:','w');
fwrite(fid,data,'int8');
%ICI = fread(fid,1);

% close com port connection
fclose(fid);

Je cherche presentement à le faire sur linux

Répondre à unseulensemble