Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : E/S sur port série [ Archives / Au secours ] (Gaelle)

lundi 1 avril 2002 à 14:16:59 | E/S sur port série

Gaelle

Salut

Mon 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 prog tourne à peu près sous 98 mais pas du tout sous NT ! Autre problème comment gérer l'envoi d'une chaine de caractère. L'envoi en format int ne pose aucun problème... Donc en castant ma chaine en int (fct atoi(...)) j'obtient toujours 0 comme resultat de reception. J'ai donc changé de méthode mais sans plus de résultat ! Si qq à une petite idée...

Voici les fonctions d'envoi et de reception:

/*Definition des constantes*/
/*-------------------------*/
#define PORT 0x03FF
#define MAX_BUFFER 100

/*-------------------------------------------------------------------------------
Fonction associee au bouton envoyer. Elle recupere la chaine de caractere
saisie dans la fenetre d'envoi et la transmet au port série.
---------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonEnvoyer()
{
/*Initialisation des variables buffer pour recuperation et
cast en type int
----------------------------------------------------------*/
CString buff;
char buffb[MAX_BUFFER];

/*Recuperation du texte et mise à blanc de la zone de saisie*/
/*----------------------------------------------------------*/
m_edit_envoi.GetWindowText(buff);
m_edit_envoi.SetWindowText("");

/*Copie dans le second buffer pour le premier changement de type*/
/*--------------------------------------------------------------*/
strcpy(buffb, buff);

/*Envoi au port série en castant le type au format int*/
/*----------------------------------------------------*/
_outpw(PORT, int(buffb));
}


/*---------------------------------------------------------------------------------
Fonction associée au bouton receptionner. Elle se charge de recuperer les infos
qui sont dans le buffer du port serie.
-----------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonReceptionner()
{
/*Initialisation de variable buffer pour la recuperation
des informations du port.
---------------------------------------------------------*/
int res=1;
char buff[MAX_BUFFER];

/*Recuperation de l'envoi du port. L'infos est de type int*/
/*--------------------------------------------------------*/
res = _inp(PORT);

/*Cast de l'information en chaine de caractères*/
/*---------------------------------------------*/
/*Meme en utilisant itoa(...,10) le resultat decodé est incorrect*/
strcpy(buff,(char*)(res));

/*Affichage des infos dans la fenetre reception*/
/*---------------------------------------------*/
m_edit_reception.SetWindowText (buff);
}

Merci à vous tous bisous bisous, Gaëlle

mercredi 3 avril 2002 à 14:17:11 | Re : E/S sur port série

electrix

Salut Gaelle,

Helas tu utilise les inport et outport d'acces direct au hardware de la machine, hors sous NT comme pour 2000, il y a une couche intermediaire dite "d'abstraction materiel" ou couche "H.A.L" (HardWare Abstract Layer) qui interdit justement tout acces direct au matos !
Par consequent tu doit passer par des fonctions API et d'acces I/O type CreateFile en OVERLAPPED ou NON-OVERLAPPED au choix (le NON-OVERLAPPED dans ton cas).
Je te conseil plusieurs docs html et samples de chez microsoft que j'utilise pour les acces au port serie:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecomm/htm/serial_1.asp

Et Oui, on sait pourquoi le copier/coller existe quand on voit les URLs a rallonge ;c)

bon courage ... et bonne prog :c)
xavier.

vendredi 19 avril 2002 à 16:29:27 | Re : E/S sur port série

bryg





-------------------------------
Réponse au message :
-------------------------------

Salut

Mon 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 prog tourne à peu près sous 98 mais pas du tout sous NT ! Autre problème comment gérer l'envoi d'une chaine de caractère. L'envoi en format int ne pose aucun problème... Donc en castant ma chaine en int (fct atoi(...)) j'obtient toujours 0 comme resultat de reception. J'ai donc changé de méthode mais sans plus de résultat ! Si qq à une petite idée...

Voici les fonctions d'envoi et de reception:

/*Definition des constantes*/
/*-------------------------*/
#define PORT 0x03FF
#define MAX_BUFFER 100

/*-------------------------------------------------------------------------------
Fonction associee au bouton envoyer. Elle recupere la chaine de caractere
saisie dans la fenetre d'envoi et la transmet au port série.
---------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonEnvoyer()
{
/*Initialisation des variables buffer pour recuperation et
cast en type int
----------------------------------------------------------*/
CString buff;
char buffb[MAX_BUFFER];

/*Recuperation du texte et mise à blanc de la zone de saisie*/
/*----------------------------------------------------------*/
m_edit_envoi.GetWindowText(buff);
m_edit_envoi.SetWindowText("");

/*Copie dans le second buffer pour le premier changement de type*/
/*--------------------------------------------------------------*/
strcpy(buffb, buff);

/*Envoi au port série en castant le type au format int*/
/*----------------------------------------------------*/
_outpw(PORT, int(buffb));
}


/*---------------------------------------------------------------------------------
Fonction associée au bouton receptionner. Elle se charge de recuperer les infos
qui sont dans le buffer du port serie.
-----------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonReceptionner()
{
/*Initialisation de variable buffer pour la recuperation
des informations du port.
---------------------------------------------------------*/
int res=1;
char buff[MAX_BUFFER];

/*Recuperation de l'envoi du port. L'infos est de type int*/
/*--------------------------------------------------------*/
res = _inp(PORT);

/*Cast de l'information en chaine de caractères*/
/*---------------------------------------------*/
/*Meme en utilisant itoa(...,10) le resultat decodé est incorrect*/
strcpy(buff,(char*)(res));

/*Affichage des infos dans la fenetre reception*/
/*---------------------------------------------*/
m_edit_reception.SetWindowText (buff);
}

Merci à vous tous bisous bisous, Gaëlle





Salut Gaëlle,

Eh bien voilas,c pas pour dire, mais je suis un peu a cours d'idée, car je dois réaliser un programme un peux similaire au tien. Peux tu m'aide avec un exemple de ton source si il tourne sous NT.
Voila mon E-Mail : Nofrifr@yahoo.fr
Merci.a+


vendredi 19 avril 2002 à 16:31:03 | Re : E/S sur port série

bryg





-------------------------------
Réponse au message :
-------------------------------

Salut

Mon 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 prog tourne à peu près sous 98 mais pas du tout sous NT ! Autre problème comment gérer l'envoi d'une chaine de caractère. L'envoi en format int ne pose aucun problème... Donc en castant ma chaine en int (fct atoi(...)) j'obtient toujours 0 comme resultat de reception. J'ai donc changé de méthode mais sans plus de résultat ! Si qq à une petite idée...

Voici les fonctions d'envoi et de reception:

/*Definition des constantes*/
/*-------------------------*/
#define PORT 0x03FF
#define MAX_BUFFER 100

/*-------------------------------------------------------------------------------
Fonction associee au bouton envoyer. Elle recupere la chaine de caractere
saisie dans la fenetre d'envoi et la transmet au port série.
---------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonEnvoyer()
{
/*Initialisation des variables buffer pour recuperation et
cast en type int
----------------------------------------------------------*/
CString buff;
char buffb[MAX_BUFFER];

/*Recuperation du texte et mise à blanc de la zone de saisie*/
/*----------------------------------------------------------*/
m_edit_envoi.GetWindowText(buff);
m_edit_envoi.SetWindowText("");

/*Copie dans le second buffer pour le premier changement de type*/
/*--------------------------------------------------------------*/
strcpy(buffb, buff);

/*Envoi au port série en castant le type au format int*/
/*----------------------------------------------------*/
_outpw(PORT, int(buffb));
}


/*---------------------------------------------------------------------------------
Fonction associée au bouton receptionner. Elle se charge de recuperer les infos
qui sont dans le buffer du port serie.
-----------------------------------------------------------------------------------*/
void CPortSerieDlg::OnButtonReceptionner()
{
/*Initialisation de variable buffer pour la recuperation
des informations du port.
---------------------------------------------------------*/
int res=1;
char buff[MAX_BUFFER];

/*Recuperation de l'envoi du port. L'infos est de type int*/
/*--------------------------------------------------------*/
res = _inp(PORT);

/*Cast de l'information en chaine de caractères*/
/*---------------------------------------------*/
/*Meme en utilisant itoa(...,10) le resultat decodé est incorrect*/
strcpy(buff,(char*)(res));

/*Affichage des infos dans la fenetre reception*/
/*---------------------------------------------*/
m_edit_reception.SetWindowText (buff);
}

Merci à vous tous bisous bisous, Gaëlle





Salut Gaëlle,

Eh bien voilas,c pas pour dire, mais je suis un peu a cours d'idée, car je dois réaliser un programme un peux similaire au tien. Peux tu m'aide avec un exemple de ton source si il tourne sous NT.
Voila mon E-Mail : Nofrifr@yahoo.fr
Merci.a+




Cette discussion est classé dans : buffer, port, int, envoi, buff


Répondre à ce message

Sujets en rapport avec ce message

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 [ C ] copier ds un tableau apres un read? [ par lcstriker ] bonjour!!!g un leger probleme, que je suis sur vous serai nombreux a pouvoir resoudre:#include #define BUFF_SIZE 42int main(int ac, char **av){ pb pr écouter sur un port... [ par Gendal67 ] Bonsoir all...J'avais envie de créer une application utilisant les sockets liées à une connection TCP/IP qui écoute sur un port précis. Jusque là, pas Création d'un client [ par tomalille ] Bonjour,je viens d'écrire ce code qui cré un client qui se connecte sur un serveur apache. A la compilation (sous visual C++) j'ai 5 erreurs, je ne co 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 Envoi d'entier par le port série [ par nanalye ] Bonjour tout le mondeHelp !!!!Je veux envoyer des entiers par le port série et je voulais savoir si je peux le faire par le WriteFile ou si c seulemen Buffer d'entré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 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 vider buffer port com [ par sdisp ] Bonjour,je voudrais savoir comment vider le buffer du port com, pour y acceder je me suis servie de cette source "cppfrance_source_22441.zip", et je p


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.