[VB -> C++]Connection port RS232

Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011 - 19 oct. 2011 à 15:49
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 24 oct. 2011 à 09:44
bonjour, je suis a la recherche d'un code programme en .net pour acquérir des données d'une sonde qui est reliée a un afficheur qui lui a une sortie RS232. je veux stocker dans un fichier exel pour pouvoir les utiliser apres.
Merci

16 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2011 à 17:26
Salut

Pas assez de détail.
Les trames d'infos envoyées par ton afficheur doivent avoir une structure - un codage - un protocole, en plus des informations d'usage liées à la comm elle même : vitesse, parité, stop bit ...
Tout ceci doit être décrit dans la doc de ton afficheur.

Sans ces éléments, impossible de te répondre.
En supposant que l'afficheur envoie des caractères ASCII, tu peux déjà essayer de le connecter à ton PC avec les bons réglages de vitesse et regarder ce qui arrive.
Si tu ne sais pas gérer une comm RS232, commence par regarder dans l'aide ET parmi les codes/questions forum du site.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
19 oct. 2011 à 22:26
Merci pour ta réponse,
alors, c'est justement ce que je voulais savoir, moi je suis novice dans le domaine de la programmation j'ai trouvé un programme sur internet en c qui assure la liaison entre l'afficheur et l'ordinateur. il y a les parametres de parité, nombre de bits et bits de stop ... a introduire, ce que je veux savoir, si ces parametres c'est l'afficheur qui les impose ou je peux mettre ce que je veux.
le programme que j'ai trouvé crée un fichier txt et le stock les informations dessus, moi je récupere a chaque essai 3 caracteres illisibles. pourtant il me marque bien que le port et ouvert et ceci quelque soit la vitesse que je choisie ou la longueur de la trame....
PS; j'ai rien trouvé dans la doc de afficheur.
svp j'ai vraiment besoin d'aide il faut absolument que j'arrive a acquérir les données de cet afficheur.
merci d'avance


// FICHIERS D'INCLUSION
//------------------------------------------------------------------------------
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
// CONSTANTES
//-------------------------------------------------------------------------------
// Codes de retour génériques
#define TRUE 1
#define FALSE 0
// PROTOTYPES
//----------------------------------------------------------------------------
int OuvrirCom(char *NomPort,int Vitesse,int Taille,char *Parite,int StopBits);
int EnvoyerCom (char*Chaine);
int RecevoirCom(char *Chaine,int nCountMax,int *pCountRead);
int MenuPort (char*) ;
int MenuVitesse (int*) ;
int MenuTaille (int*) ;
int MenuParite (char*) ;
int MenuStopBits (int*) ;
int MenuRecevoirEnvoyer () ;
int FermerCom();
// VARIABLES GLOBALES
//-----------------------------------------------------------------------------
DCB g_DCB; // structure dcb du port
HANDLE g_hCom = 0; // handle de la com
int main ()
{
int Sortie1 ;
int SortieVitesse ;
int SortieTaille ;
int SortieParite ;
int SortieStopBits ;
/* Valeur retour menu */
int ValeurMenuPort = 0;
int ValeurMenuVitesse = 0 ;
int ValeurMenuTaille = 0;
int ValeurMenuParite = 0;
int ValeurMenuStopBits = 0;
int ValeurMenuRecevoirEnvoyer = TRUE ;
/* Reels valeurs */
char ValeurPort[10] ;
int ValeurVitesse = 0;
int ValeurTaille = 0 ;
char ValeurParite[10] ;
int ValeurStopBits = 0;
/* Supplement */
//int LongueurPort = 0 ;
while (Sortie1)
{
/*** Initialisation des valeurs de sortie ***/
Sortie1 = TRUE ;
SortieVitesse = TRUE ;
SortieTaille = TRUE ;
SortieParite = TRUE ;
SortieStopBits = TRUE ;
/*** Configuration Port ***/
ValeurMenuPort = MenuPort (ValeurPort) ;
if (ValeurMenuPort == 0)
Sortie1 = FALSE ;
else if (ValeurMenuPort == 3 )
{
sleep(1000) ;
/*** Ouverture COM1 deja parametre ***/
if ( OuvrirCom("COM1", 9600, 8, "Aucune", 1 ) )
{
printf("\n Ouverture du port effectuee.\n") ;
ValeurMenuRecevoirEnvoyer = MenuRecevoirEnvoyer () ;
if (ValeurMenuRecevoirEnvoyer == 0 )
Sortie1 = FALSE ;
else if ( (ValeurMenuRecevoirEnvoyer 3) || (ValeurMenuRecevoirEnvoyer 4))
break ;
}
else
printf("\n Erreur ouverture port.\n") ;
}
else if (ValeurMenuPort == 4 )
{
sleep(1000) ;
/*** Ouverture COM2 deja parametre ***/
if ( OuvrirCom("COM2", 9600, 8, "Aucune", 1 ) )
{
printf("\n Ouverture du port effectuee.\n") ;
ValeurMenuRecevoirEnvoyer = MenuRecevoirEnvoyer () ;
if (ValeurMenuRecevoirEnvoyer == 0 )
Sortie1 = FALSE ;
else if ( (ValeurMenuRecevoirEnvoyer 3) || (ValeurMenuRecevoirEnvoyer 4))
break ;
}
else
printf("\n Erreur ouverture port.\n") ;
}
else
{
while (SortieVitesse)
{
SortieTaille = TRUE ;
/*** Configuration Vitesse ***/
ValeurMenuVitesse = MenuVitesse (&ValeurVitesse) ;
if (ValeurMenuVitesse == 5)
SortieVitesse = FALSE ;
else if (ValeurMenuVitesse == 0)
{
Sortie1 = FALSE ;
SortieVitesse = FALSE ;
}
else
{
while (SortieTaille)
{
SortieParite = TRUE ;
/*** Configuration Taille ***/
ValeurMenuTaille = MenuTaille (&ValeurTaille) ;
if (ValeurMenuTaille == 5)
SortieTaille = FALSE ;
else if(ValeurMenuTaille == 0)
{
Sortie1 = FALSE ;
SortieVitesse = FALSE ;
SortieTaille = FALSE ;
}
else
{
while (SortieParite)
{
SortieStopBits = TRUE ;
/*** Configuration Parite ***/
ValeurMenuParite = MenuParite (ValeurParite) ;
if (ValeurMenuParite == 4)
SortieParite = FALSE ;
else if (ValeurMenuParite == 0)
{
Sortie1 = FALSE ;
SortieVitesse = FALSE ;
SortieTaille = FALSE ;
SortieParite = FALSE ;
}
else
{
while (SortieStopBits)
{
/*** Configuration Stop Bits ***/
ValeurMenuStopBits = MenuStopBits (&ValeurStopBits) ;
if (ValeurMenuStopBits == 3)
SortieStopBits = FALSE ;
else if (ValeurMenuStopBits == 0)
{
Sortie1 = FALSE ;
SortieVitesse = FALSE ;
SortieTaille = FALSE ;
SortieParite = FALSE ;
SortieStopBits = FALSE ;
}
else
{
SortieVitesse = FALSE ;
SortieTaille = FALSE ;
SortieParite = FALSE ;
SortieStopBits = FALSE ;
/*** Recapitulatif ***/
printf("\nRecapitulatif de la configuration de la liaison serie RS-232.\n") ;
printf("\n Port : %s \n", ValeurPort) ;
printf(" Vitesse : %d bits/s \n", ValeurVitesse) ;
printf(" Taille : %d bits\n", ValeurTaille);
printf(" Parite : %s \n", ValeurParite) ;
printf(" Stop bits : %d bit(s) stop\n", ValeurStopBits) ;
sleep (1000) ;
if ( OuvrirCom(ValeurPort, ValeurVitesse,ValeurTaille, ValeurParite, ValeurStopBits) )
{
printf("\n Ouverture du port effectuee.\n") ;
ValeurMenuRecevoirEnvoyer = MenuRecevoirEnvoyer () ;
if (ValeurMenuRecevoirEnvoyer == 0 )
Sortie1 = FALSE ;
else if ( (ValeurMenuRecevoirEnvoyer 3) || (ValeurMenuRecevoirEnvoyer 4))
{
SortieVitesse = FALSE ;
SortieTaille = FALSE ;
SortieParite = FALSE ;
SortieStopBits = FALSE ;
}
}
else
printf("\n Erreur ouverture port.\n") ;
}
}
}
}
}
}
}
}
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
//------------------------------------------------------------------------------
// FONCTION : OuvrirCom
//------------------------------------------------------------------------------
int OuvrirCom(char *NomPort,int Vitesse,int Taille,char* Parite,int StopBits)
{
// On ouvre le port série
g_hCom = CreateFile( NomPort, GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE)
{
return FALSE ;
}
else
{
// on vide les tampons d'émission et de réception, mise à 1 DTR
PurgeComm( g_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
// On paramètre le port série
g_DCB.DCBlength = sizeof(DCB);
//Configuration actuelle
GetCommState(g_hCom, &g_DCB);
//Modification du DCB
g_DCB.BaudRate = Vitesse ;
g_DCB.ByteSize = Taille;
g_DCB.fDtrControl = DTR_CONTROL_ENABLE; // (DISABLE)
// Gestion de la parité parmi paire, impaire et aucune
if (strcmp(Parite,"Aucune")==0)
g_DCB.Parity = NOPARITY;
if (strcmp(Parite,"Paire")==0)
g_DCB.Parity = EVENPARITY;
if (strcmp(Parite,"Impaire")==0)
g_DCB.Parity = ODDPARITY;
// Gestion du Stop Bit
if ( StopBits == 1 )
g_DCB.StopBits = ONESTOPBIT;
//if ( StopBits == 1.5 )
//dcb.StopBits = ONE5STOPBITS;
if ( StopBits == 2 )
g_DCB.StopBits = TWOSTOPBITS;
//Configuration de la liaison serie
SetCommState(g_hCom, &g_DCB);
return TRUE ;
}
}
//----------------------------------------------------------------------------
// FONCTION : EnvoyerCom
//----------------------------------------------------------------------------
int EnvoyerCom(char* Chaine)
{
DWORD NumBytes=0;
int TailleChaine = strlen(Chaine) ;
printf("\n Taille de la chaine : %d \n", TailleChaine) ;
if(g_hCom != NULL)
{
//Emission de la Chaine
if (WriteFile(g_hCom,Chaine, TailleChaine,&NumBytes,NULL)==0)
{
printf ("\n Erreur emission.\n") ;
return FALSE ;
}
else
{
printf("\n Chaine envoyee : %s.\n", Chaine) ;
return TRUE ;
}
}
else
return FALSE ;
}
//---------------------------------------------------------------------------
// FONCTION : RecevoirCom
//---------------------------------------------------------------------------
int RecevoirCom(char *Chaine,int nCountMax, int* pCountRead)
{
COMSTAT Stat;
DWORD Errors;
int nbCarALire;
long NCarLus=0;
int b_Retour ;
if(g_hCom!=NULL)
{
FILE* FFichier ;
if ( (FFichier fopen ("essai.txt", "w")) NULL )
printf ("Ouverture fichier impossible\n") ;
else
{
// printf ("Ouverture fichier avec succes\n") ;
fprintf ( FFichier, "Ecriture dans le fichier...") ;
}
//Pour éviter de gérer un time out
Sleep(100);
//Pour connaitre le nombre d'octets dans le buffer d'entrée
ClearCommError(g_hCom,&Errors,&Stat);
nbCarALire=Stat.cbInQue;
//On effectue la lecture si il y a des caractères présents
if( (nbCarALire>0)&&(nbCarALire<=nCountMax) )
{
//Reception de la Chaine
if(ReadFile(g_hCom,Chaine,nbCarALire,&NCarLus,NULL)==0)
{
printf ("\n Erreur reception.\n") ;
return FALSE ;
}
}
//Finition de la Chaine
*pCountRead = NCarLus;
Chaine[NCarLus] = '\0' ;
//Ecriture dans le Fichier preouvert
fprintf ( FFichier,"%s", Chaine) ;
}
else
return FALSE ;
}
//-----------------------------------------------------------------------
// FONCTION : FermerCom
//-----------------------------------------------------------------------
int FermerCom()
{
if(g_hCom!=NULL)
{
CloseHandle(g_hCom);
return TRUE ;
}
}
//-----------------------------------------------------------------------
// FONCTION : MenuPort
//-----------------------------------------------------------------------
int MenuPort ( char* ValeurPort )
{
int Choix1 ;
printf ("\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t------- ** Liaison Serie RS-232 ** -------\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t- -\n") ;
printf ("\t- Entrez l'adresse du port : -\n") ;
printf ("\t- -\n") ;
printf ("\t- 1 - COM1 -\n") ;
printf ("\t- 2 - COM2 -\n") ;
printf ("\t- 3 - COM1 PAR DEFAUT -\n") ;
printf ("\t- 4 - COM2 PAR DEFAUT -\n") ;
printf ("\t- 0 - Quitter -\n") ;
printf ("\t- -\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t Votre Choix : ");
scanf ("%d", &Choix1) ;
system("cls") ;
switch(Choix1)
{
case 0:
printf ("\n Vous avez decider de quitter le programme, aurevoir..\n\n") ;
return Choix1 ;
break;
case 1:
printf("\n Vous avez selectionne le port COM1.\n") ;
strcpy (ValeurPort, "COM1") ;
return Choix1 ;
case 2:
printf("\n Vous avez selectionne le port COM2.\n") ;
strcpy (ValeurPort, "COM2") ;
return Choix1 ;
case 3:
printf("\n Vous avez selectionne le port COM1 deja parametre.\n") ;
printf(" -- Informations parametrage --\n") ;
printf(" Port : COM1 \n") ;
printf(" Vitesse : 9600 bits/s \n") ;
printf(" Taille : 8 bits\n");
printf(" Parite : Aucune \n") ;
printf(" Stop bits : 1 bit stop\n") ;
return Choix1 ;
case 4:
printf("\n Vous avez selectionne le port COM1 deja parametre.\n") ;
printf(" -- Informations parametrage --\n") ;
printf(" Port : COM2 \n") ;
printf(" Vitesse : 9600 bits/s \n") ;
printf(" Taille : 8 bits\n");
printf(" Parite : Aucune \n") ;
printf(" Stop bits : 1 bit stop\n") ;
return Choix1 ;
default:
system("cls");
printf("\n Mauvaise touche, essayer de nouveau !! \n") ;
break ;
}
}
//-----------------------------------------------------------------------
// FONCTION : MenuVitesse
//-----------------------------------------------------------------------
int MenuVitesse (int *ValeurVitesse)
{
int Choix1 ;
printf ("\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t------- ** Liaison Serie RS-232 ** -------\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t- -\n") ;
printf ("\t- Entrez la vitesse en bits/s : -\n") ;
printf ("\t- -\n") ;
printf ("\t- 1 - 2400 -\n") ;
printf ("\t- 2 - 4800 -\n") ;
printf ("\t- 3 - 9600 -\n") ;
printf ("\t- 4 - 19200 -\n") ;
printf ("\t- 5 - Retour -\n") ;
printf ("\t- 0 - Quitter -\n") ;
printf ("\t- -\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t Votre Choix : ");
scanf ("%d", &Choix1) ;
system("cls") ;
switch(Choix1)
{
case 0:
printf ("\n Vous avez decide de quitter le programme, aurevoir..\n\n") ;
return Choix1 ;
break;
case 1:
case 2400:
printf("\n Vous avez selectionne une vitesse de 2400 bits/s.\n") ;
*ValeurVitesse = 2400 ;
return Choix1 ;
case 2:
case 4800:
printf("\n Vous avez selectionne une vitesse de 4800 bits/s.\n") ;
*ValeurVitesse = 4800 ;
return Choix1 ;
case 3:
case 9600:
printf("\n Vous avez selectionne une vitesse de 9600 bits/s.\n") ;
*ValeurVitesse = 9600 ;
return Choix1 ;
case 4:
case 19200:
printf("\n Vous avez selectionne une vitesse de 19200 bits/s.\n") ;
*ValeurVitesse = 19200 ;
return Choix1 ;
case 5:
printf("\n Vous avez decide de revenir au menu precedent.\n") ;
return Choix1 ;
default:
system("cls");
printf("\n Mauvaise touche, essayer de nouveau !! \n") ;
break ;
}
}
//-----------------------------------------------------------------------
// FONCTION : MenuTaille
//-----------------------------------------------------------------------
int MenuTaille ( int* ValeurTaille)
{
int Choix1 ;
printf ("\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t------- ** Liaison Serie RS-232 ** -------\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t- -\n") ;
printf ("\t- Entrez la taille de la donnee : -\n") ;
printf ("\t- -\n") ;
printf ("\t- 1 - 5 bits -\n") ;
printf ("\t- 2 - 6 bits -\n") ;
printf ("\t- 3 - 7 bits -\n") ;
printf ("\t- 4 - 8 bits -\n") ;
printf ("\t- 5 - Retour -\n") ;
printf ("\t- 0 - Quitter -\n") ;
printf ("\t- -\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t Votre Choix : ");
scanf ("%d", &Choix1) ;
system("cls") ;
switch(Choix1)
{
case 0:
printf ("\n Vous avez decide de quitter le programme, aurevoir..\n\n") ;
return Choix1 ;
break;
case 1:
printf("\n Vous avez selectionne une taille de 5 bits.\n") ;
*ValeurTaille = 5 ;
return Choix1 ;
case 2:
printf("\n Vous avez selectionne une taille de 6 bits.\n") ;
*ValeurTaille = 6 ;
return Choix1 ;
case 3:
printf("\n Vous avez selectionne une taille de 7 bits.\n") ;
*ValeurTaille = 7 ;
return Choix1 ;
case 4:
case 8:
printf("\n Vous avez selectionne une taille de 8 bits.\n") ;
*ValeurTaille = 8 ;
return Choix1 ;
case 5:
printf("\n Vous avez decide de revenir au menu precedent.\n") ;
return Choix1 ;
default:
system("cls");
printf("\n Mauvaise touche, essayer de nouveau !! \n") ;
break ;
}
}
//-----------------------------------------------------------------------
// FONCTION : MenuParite
//-----------------------------------------------------------------------
int MenuParite (char* ValeurParite)
{
int Choix1 ;
printf ("\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t------- ** Liaison Serie RS-232 ** -------\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t- -\n") ;
printf ("\t- Entrez la parite desiree : -\n") ;
printf ("\t- -\n") ;
printf ("\t- 1 - Aucune -\n") ;
printf ("\t- 2 - Paire -\n") ;
printf ("\t- 3 - Impaire -\n") ;
printf ("\t- 4 - Retour -\n") ;
printf ("\t- 0 - Quitter -\n") ;
printf ("\t- -\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t Votre Choix : ");
scanf ("%d", &Choix1) ;
system("cls") ;
switch(Choix1)
{
case 0:
printf ("\n Vous avez decide de quitter le programme, aurevoir..\n\n") ;
return Choix1 ;
break;
case 1:
printf("\n Vous avez selectionne la presence d'aucune parite.\n") ;
strcpy (ValeurParite,"Aucune" ) ;
return Choix1 ;
case 2:
printf("\n Vous avez selectionne la presence d'une parite paire.\n") ;
strcpy (ValeurParite,"Paire" ) ;
return Choix1 ;
case 3:
printf("\n Vous avez selectionne la presence d'une parite impaire.\n") ;
strcpy (ValeurParite,"Impaire" ) ;
return Choix1 ;
case 4:
printf("\n Vous avez decide de revenir au menu precedent.\n") ;
return Choix1 ;
default:
system("cls");
printf("\n Mauvaise touche, essayer de nouveau !! \n") ;
break ;
}
}
//-----------------------------------------------------------------------
// FONCTION : MenuStopBits
//-----------------------------------------------------------------------
int MenuStopBits ( int* ValeurStopBits)
{
int Choix1 ;
printf ("\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t------- ** Liaison Serie RS-232 ** -------\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t- -\n") ;
printf ("\t- Entrez le nombre de bit(s) stop : -\n") ;
printf ("\t- -\n") ;
printf ("\t- 1 - 1 bit stop -\n") ;
printf ("\t- 2 - 2 bits stop -\n") ;
printf ("\t- 3 - Retour -\n") ;
printf ("\t- 0 - Quitter -\n") ;
printf ("\t- -\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t Votre Choix : ");
scanf ("%d", &Choix1) ;
system("cls") ;
switch(Choix1)
{
case 0:
printf ("\n Vous avez decide de quitter le programme, aurevoir..\n\n") ;
return Choix1 ;
break;
case 1:
printf("\n Vous avez selectionne la presence d'un bit stop.\n") ;
*ValeurStopBits = 1 ;
return Choix1 ;
case 2:
printf("\n Vous avez selectionne la presence de deux bits stop.\n") ;
*ValeurStopBits = 2 ;
return Choix1 ;
case 3:
printf("\n Vous avez decide de revenir au menu precedent.\n") ;
return Choix1 ;
default:
system("cls");
printf("\n Mauvaise touche, essayer de nouveau !! \n") ;
break ;
}
}
//-----------------------------------------------------------------------
// FONCTION : MenuRecevoirEnvoyer
//-----------------------------------------------------------------------
int MenuRecevoirEnvoyer ()
{
int Choix1 ;
int Sortie = TRUE ;
int SortieRetour ;
while (Sortie)
{
printf ("\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t------- ** Liaison Serie RS-232 ** -------\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t- -\n") ;
printf ("\t- Que voulez-vous faire : -\n") ;
printf ("\t- -\n") ;
printf ("\t- 1 - Envoyer -\n") ;
printf ("\t- 2 - Recevoir -\n") ;
printf ("\t- 3 - Fermer le port -\n") ;
printf ("\t- 4 - Retour -\n") ;
printf ("\t- 0 - Quitter -\n") ;
printf ("\t- -\n") ;
printf ("\t----------------------------------------------\n") ;
printf ("\t Votre Choix : ");
scanf ("%d", &Choix1) ;
system("cls") ;
switch(Choix1)
{
case 0:
printf ("\n Vous avez decide de quitter le programme, aurevoir..\n") ;
if (FermerCom())
printf ("\n Fermeture du port avec succes.\n\n") ;
SortieRetour = 0 ;
Sortie = FALSE ;
return SortieRetour ;
break;
case 1:
printf("\n Vous avez selectionne l'envoi de donnees sur le port.\n") ;
char *Chaine ;
Chaine = malloc (128) ;
printf("\n Veuillez saisir votre message: ") ;
scanf("%s", Chaine) ;
if ( EnvoyerCom(Chaine) )
printf (" Trame envoyee correctement.\n") ;
else
printf(" Erreur envoi trame.\n") ;
break ;
case 2:
printf("\n Vous avez selectionne la reception de donnees sur le port.\n") ;
printf ("\n Pour sortir du mode reception, veuillez entrer la lettre 'q'.\n") ;
/*** Reception boucle infini -> sortir en entrant le caractere 'q' ***/
char UnCaractere = ' ' ;
char Chaine1[30] = " Ordre Plateau 1 Ok " ;
char Chaine2[30] = " Ordre Plateau 2 Ok " ;
char Chaine3[30] = " Ordre Plateau 3 Ok " ;
char Chaine4[30] = " Ordre Plateau 4 Ok " ;
char Chaine5[30] = " Ordre Plateau 5 Ok " ;
char Chaine6[30] = " Ordre Plateau 6 Ok " ;
char Chaine7[30] = " Ordre Plateau 7 Ok " ;
char Chaine8[30] = " Ordre Plateau 8 Ok " ;
while ( (UnCaractere != 'Q') && (UnCaractere != 'q') )
{
printf (" ") ;
char ChaineRecue[100] ;
int nbMaxCar = 100 ;
int nbCarRecus ;
if ( RecevoirCom(ChaineRecue, nbMaxCar, &nbCarRecus ) )
{
if ( nbCarRecus != 0 )
{
printf (" Trame recue correctement.\n") ;
//printf ("Nombre de caractere recus : %d\n", nbCarRecus) ;
if (strcmp (ChaineRecue, "Plateau 1") == 0 )
EnvoyerCom(Chaine1) ;
else if (strcmp (ChaineRecue, "Plateau 2") == 0 )
EnvoyerCom(Chaine2) ;
else if (strcmp (ChaineRecue, "Plateau 3") == 0 )
EnvoyerCom(Chaine3) ;
else if (strcmp (ChaineRecue, "Plateau 4") == 0 )
EnvoyerCom(Chaine4) ;
else if (strcmp (ChaineRecue, "Plateau 5") == 0 )
EnvoyerCom(Chaine5) ;
else if (strcmp (ChaineRecue, "Plateau 6") == 0 )
EnvoyerCom(Chaine6) ;
else if (strcmp (ChaineRecue, "Plateau 7") == 0 )
EnvoyerCom(Chaine7) ;
else if (strcmp (ChaineRecue, "Plateau 8") == 0 )
EnvoyerCom(Chaine8) ;
else
printf (" Message recu : %s\n", ChaineRecue ) ;
}
}
else
printf("\n Erreur envoi trame.\n") ;
UnCaractere = getchar() ;
}
break ;
case 3:
printf("\n Vous avez decide de fermer le port de communication.\n") ;
if (FermerCom())
printf ("\n Fermeture du port avec succes.\n\n") ;
else
printf("\n Fermeture du port echouee.\n\n") ;
Sortie = FALSE ;
return SortieRetour ;
break ;
case 4:
printf("\n Vous avez decide de revenir au menu precedent.\n") ;
if (FermerCom())
printf ("\n Fermeture du port avec succes.\n\n") ;
else
printf("\n Fermeture du port echouee.\n\n") ;
Sortie = FALSE ;
return SortieRetour ;
break ;
default:
system("cls");
printf("\n Mauvaise touche, essayer de nouveau !! \n") ;
break ;
}
}
}
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2011 à 23:33
Imposé côté afficheur : Disons qu'il faut que les deux interfaces aient les mêmes réglages, c'est tout.

As-tu essayé le <convertisseur de code C# vers .Net > ?
Je n'y connais rien en C.
Ce que je vois est
"COM1", 9600, 8, "Aucune", 1
Donc, Port COM1, à 9600 bauds, 8 bits de données, Pas de parité, 1 Bit de stop.
C'est déjà un début.

Maintenant, la comm peut envoyer des codes décimaux et pas des codes ASCII.
Il faudrait analyser chaque chiffre reçu pour le savoir. A toi de les attraper - Il doit bien y avoir une source sur le site qui parle de RS232 ...
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
20 oct. 2011 à 13:05
Merci pour ta reponse,
admettons que la configuration est Port COM1, à 9600 bauds, 8 bits de données, Pas de parité, 1 Bit de stop. pourquoi quand je mets ces reglages, j'ai des caractere illisible qui s'affiche? aurais tu un programme en .net qui marche bien et qui peut m'afficher sur l'ordinateur ce que je vois sur l'ecran. merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 oct. 2011 à 13:44
Bonjour,

C'est parce que les données envoyées sont en binaire et pas en texte, je pense (pas regardé le code source).
Dans ce cas, il faut afficher la valeur de l'octet reçu et non pas sa traduction en caractère.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
20 oct. 2011 à 17:36
je fais comment svp pour afficher la valeur de l'octet reçu?? merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 oct. 2011 à 19:13
Bonjour,

Quel code utilises-tu pour lire la réception ? (regardes le point 2 qui suit)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
20 oct. 2011 à 22:15
excuses moi mais j'ai pas compris ta question quesque ça ve dire code??je veux utiliser .net
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 oct. 2011 à 00:14
Bonjour,

Quel code as-tu testé pour dire :
"j'ai des caractere illisible qui s'affiche" ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
21 oct. 2011 à 08:50
ah dsl, le code que je viens de posté la haut avec dev c++. merci pour ton aide
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 oct. 2011 à 12:42
Bonjour,

Dans ce cas, je ne connais pas assez C++ pour lire le code (non colorisé) et le comprendre assez vite.

Sinon, en .NET, la classe de gestion du port COM est dans : System.IO.Ports.SerialPort

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 oct. 2011 à 12:48
Pour en revenir aux bases des protocoles, une machine ne peut envoyer au travers d'une liaison série que des chiffres (bytes = octets, de 0 à 255 = &H00 à &HFF).
Ces chiffres peuvent avoir plusieurs significations et c'est là que tu dois faire les recherches :
- Les octets peuvent représenter des lettres=codes ASCII.
En lisant les données sous forme de String, c'est la conversion implicite que tu fais.
- Ils peuvent aussi être lus sous forme de chiffres dans des variables de type Byte
Leurs valeurs peuvent être les indications chiffrées que tu attends.
Mais ces valeurs peuvent être combinées par paquet de plusieurs bytes. Il devient alors plus facile de travailler avec leur représentation hexadécimale, exemple :
Tu reçois 2 bytes : le premier vaut 101, le second 60.
En hexa, ces bytes s'affichent &H65 et &H3C.
Pour convertir ce chiffre à "2 digits" en un seul, il suffit de concaténer les deux représentations hexa : &H653C
Une fois reconvertie en décimal, cela te donnera 25916.

As-tu chargé et analysé les sources en .Net qui parlent de "RS232" ?
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
23 oct. 2011 à 13:30
finalement j'ai pu modifier un petit truc dans le code et au lieu de m'afficher un caractere il m'affiche des zéro maintenant. quelqu'un peut essayer ce code pour moi et me dire pourquoi je ne reçoit que des zéro? merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
23 oct. 2011 à 17:35
Bonjour,

Quel est le code utilisé donc ?
Je te rappel que tu es ici dans la section VB.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
Belha1987 Messages postés 11 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 24 octobre 2011
24 oct. 2011 à 01:53
Je suis toujours en C. je cherche a traduire le programme en vb.NET pour avoir l'interfacage mais juste avant quelqu'un pourra t il m aider a comprendre pourquoi je ne reçoit que des zéros? merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
24 oct. 2011 à 09:44
Bonjour,

Sans connaitre les modifications apportées, impossible de te répondre. De plus, si c'est du C, je te conseil d'aller d'abord sur le bon forum (Cppfrance), donc, je déplace ton message.

Si tu veux le convertir ensuite (pourquoi ne pas le coder tout de suite ? ), reviens sur VBFrance ensuite.

0
Rejoignez-nous