begin process at 2012 05 28 22:03:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Communication Série RS232 - Pb d'affichage de caractères


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

Communication Série RS232 - Pb d'affichage de caractères

mercredi 30 janvier 2008 à 12:07:10 | Communication Série RS232 - Pb d'affichage de caractères

bracqjean

Bonjour,

Je suis débutant en C. J'ai besoin de transmettre des données sur le port COM d'un PC, à destination d'un variateur. Le but est d'envoyer une chaîne de caractères.
Le programme (que j'ai récupéré et modifié) n'envoyait à l'origine qu'un seul caractère. Je l'ai modifié pour en envoyer plusieurs, mais je me retrouve avec un problème d'affichage.
Quelqu'un pourrait il m'aider ?

D'avance merci.
mercredi 30 janvier 2008 à 12:09:02 | Re : Communication Série RS232 - Pb d'affichage de caractères

bracqjean

Ci dessous le progarmme :

/*--------------------------------------------------------------------------*/
/* Travaux Pratiques  : Communication entre PC et un port série             */
/*--------------------------------------------------------------------------*/
/* Nom du programme : serie.cpp                                             */
/* Auteur :           D.PAYON                                               */
/* Date de création : 15/09/2005                                            */
/* Version :            2.1                                                 */
/* Modifications : -> La programmation du 8250 par les API de Windows       */
/*--------------------------------------------------------------------------*/
#include <iostream.h>  // pour CIN & COUT
#include <iomanip.h>  // pour le format de ces flux
#include <windows.h>  // pour utiliser les API32
#include <stdio.h>   // pour exploiter les Entrées/Sorties standards
#include <conio.h>   // pour exploiter les Entrées/Sorties standards

#define aaxan 0x85 //Symbole du "à" en code page 437
#define aigu 0x82 //Symbole du "é" en code page 437
#define grave 0x8A //Symbole du "è" en code page 437
#define cdie 0x87 //Symbole du "ç" en code page 437

//********************************************************************
// INITIALISATION DU PORT
//********************************************************************
void Initialiser(HANDLE hCom,BYTE NbDonnees,BYTE NbStops,BYTE Parite, DWORD Vitesse)
{

 BOOL retour;
 DCB dcb; //Une structure "Device-Control Block" definit l'initialisation
    // d'un périphérique de communications.
 retour = GetCommState(hCom,&dcb);  // Lecture des paramétres physiques.
 if (retour == 0) return;    // Si rien, alors pas de  périphérique.
 else         // Si présence port, alors définir :
 {
  dcb.ByteSize=NbDonnees;    // -Nombre de bits de Données
  dcb.StopBits=NbStops;    // -Nombre de bit(s) de Stop
  dcb.Parity=Parite;     // -Type de parité
  dcb.BaudRate=Vitesse;    // -Vitesse de transfert des données
  retour = SetCommState(hCom,&dcb); // Ecriture de ces paramètres.
 }
}

//********************************************************************
// Test des API32 de gestion du port série
//********************************************************************
void main(void)
{
// int touche;
 int NbDonnees=8;
 int Vitesse=9600;
 unsigned char Parite;
 char NomPort[4+1];
 int NoPort  ;
 BOOL retour;
 COMSTAT EtatCom;
 DWORD CodeErreur , NbOctetsEcrits , NbOctetsALire, NbOctetsLus, i ;
 char octet;
 BYTE Nbstop=1;
 BYTE BufferOut[10]={1,5,9,11,18,14,55,127,19,24};
 BYTE *BufferIn;
 HANDLE hCom;  // le port est référencé avec un identifiant de type HANDLE

 printf("\nEntrer le numero du port serie (par exemple 1 pour COM1) ",aigu,aigu);
 scanf("%d",&NoPort);


 //----------- Ouverture du port ------------------

 sprintf(NomPort,"COM%d",NoPort);
 hCom=CreateFile(NomPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING ,0,NULL);
 if (hCom == INVALID_HANDLE_VALUE) return;


 //------------Config du port----------------------

 cout<<"\n\t\t\t\t CONFIG DU PORT "<<endl<<flush;


 //-------------- Initialisation -----------------------------

 Initialiser(hCom,NbDonnees,Nbstop,Parite,Vitesse);

 cout<<endl<<"La configuration du port est : ";
 cout<<"\t- "<<Vitesse<<" bauds"<<endl;
 cout<<"\t\t\t\t- "<<NbDonnees<<" bits de donnees"<<endl;
 printf("\t\t\t\t- %d",Nbstop);
 printf(" bit(s) de stop\n");


 // ------------ECRITURE D'UN CARACTÈRE SUR LE PORT------------
 
 fflush(stdin);
 cout<<endl<<"Entrer une chaine de caracteres a envoyer : "<<flush;
 scanf("%s",&octet);
 printf("\nAffichage de la valeur contenue dans octet : ");
 printf(&octet,"\n");
 printf("\nAppuyer sur une touche pour continuer\n");
 getch();

 
 //------- Lecture du nombre de caractères présents dans le buffer d'entrée -----
 
 retour=WriteFile(hCom,&octet,10,&NbOctetsEcrits,NULL);
 printf("\nValeur contenue dans NbOctetsEcrits :  ");
 printf("%i",NbOctetsEcrits);
 printf("\n");
 retour=ClearCommError(hCom,&CodeErreur,&EtatCom);
 printf("\nValeur de retour : si = 0, le prog fait un return -- Ici, retour = ");
 cout<<(retour)<<endl;
 printf("Appuyez sur une touche pour continuer");
 getch();
 if ( ! retour) return ;
  else NbOctetsALire = NbOctetsEcrits;
 
 printf("\n\nAffichage de la variable NbOctetsALire : ");
 cout<<(NbOctetsALire)<<endl;

 //--------- Lecture de tous les octets reçus et stockage dans le tableau BufferIn---
 
 BufferIn=new BYTE[NbOctetsALire];      // Allocation dynamique
 retour=ReadFile(hCom , BufferIn , NbOctetsALire , &NbOctetsLus , NULL);
    
 //--------- Affichage des octets reçus ---------
 
 printf("\nAffichage des octets recus : ");
 for (i=0;i<NbOctetsLus;i++)
  {
  printf("%c",BufferIn[i]);
  }
 printf("\n\n");
 delete [] BufferIn;     // libération mémoire
 CloseHandle(hCom);     // Fermeture du Handle hCom.
}

jeudi 31 janvier 2008 à 11:17:26 | Re : Communication Série RS232 - Pb d'affichage de caractères

Pistol_Pete

Salut
Regarde ta definition de octect  : char octet;
Tu ne peux mettre qu'UN seul caractere dans cette variable! Or tu essaies d'en mettre plusieurs...

Fait deja une declaration correcte: char octet[20];

Mon site internet : [ Lien ]

jeudi 31 janvier 2008 à 11:28:15 | Re : Communication Série RS232 - Pb d'affichage de caractères

bracqjean

Bonjour,

J'ai finalement réussi à commander le variateur avec une autre source.
Merci de votre aide.


Cette discussion est classée dans : série, affichage, communication, rs232, caractères


Répondre à ce message

Sujets en rapport avec ce message

Liaison série RS232 [ par NerOcrO ] Je cherche des programmes pour m'aider à programmer sur la liaison série RS232 en DOS. Affichage d'une chaîne de caractères [ par kalf2000 ] bonjour,j'ai un petit souci, je réussit à récupérer à partir d'un fichier texte une chaîne de caractère et à la mettre dans un tableau de caractère (c communication série en C++ Builder [ par angeva ] Bonjours à tous!je suis en train de bosser sur mon thème de 2eme année en BTS IRIS. Je dois faire une comm série sous C++Builder pour le moment versio communication port COM [ par nmeunier ] Bonjour à tous !Je suis actuellement en stage dans une entreprise ou personne ne peut vraiment m'aider...;-(J'ai récupéré des sources en turbo C d'un Communication Port serie RS232 [ par freddy766 ] Bonjour, J'ai un petit probleme concernant la communication RS232 (port serie) en c++. Afin de tester mon programme sur des appareils et etablir des c Besoin d'aide communication série et threads [ par zincben ] Bonjour, je suis depuis peu de temps sur un projet qui consiste a faire passer une application 16 bits en (sous visual c++ principalement ) en 32 bi Communication RS232 [ par philochon ] salut,je voudrais piloter un port RS232 à une vitesse bien précise qui n'est pas un multiple 9600, 19200 kb/s, ma vitesse c'est250 kb/s, est ce que c' Simulateur de communication RS232 [ par gordon13 ] Bonjour,Je dois réaliser un composant de communication avec un appareil connecté au PC via le port série. Comme j'ai pas l'appareil, je voudrais simul communication rs232 [ par sdisp ] Bonjour,J'ai fait un programme qui envoie des données ( trame de 12 octets ) sur un module de transmition wifi via le port com.Mon probleme est que lo communication entre modem et port RS232 du PC [ par mustaphaham2005 ] <TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UN


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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

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