IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment attendre une trame sur le port série ?


Sujet :

C++

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour à tous,

    j'ai écris un programme qui attend et réceptionne bien la trame que je veux, mais pour l'enregistrement de ces données (octets) dans un fichier j'ai un gros problème : les données ne sont pas lisibles dans un fichier texte.

    Je vous poste mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     
     
    #include <vcl.h>
     
    #include <stdio.h>
    #include <io.h>
    #include <fcntl.h>
    #include <sys\stat.h>
     
    #include <ostream.h>
     
     
    #pragma hdrstop
     
    //---------------------------------------------------------------------------
     
    #pragma argsused
     
    void EcrireOctetsEnChaineDecimaleVersFichierOuvert(std::ostream & fich, void const *data, size_t taille);
     
    int main(int argc, char* argv[])
    {
    	HANDLE hdl;
    	DCB dcb;
    	bool etat;
    	COMMTIMEOUTS timeouts={0};
    	unsigned char buf [20];
    	unsigned long nblu;
     
    	int handle;
     
     
    	hdl=CreateFile("COM5",GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
     
    	if (hdl==INVALID_HANDLE_VALUE)
    	{
    		printf("erreur %d\n",GetLastError());
    		Sleep (2000);
    		return (1);
    	}
    	else
    	{
        	SetupComm(hdl,5000,5000);
    		printf ("ouverture reussie !\n\n");
    		etat=GetCommState(hdl, &dcb);
     
    		if (etat==false)
    		{
    			printf ("GetCommState erreur %d\n", GetLastError());
    			return (2);
    		}
    		else
    		{
    			printf ("GetCommState reussie\n\n");
            }
     
     
     
    		dcb.BaudRate = CBR_38400;
    		dcb.ByteSize = 8;
    		dcb.Parity = NOPARITY;
    		dcb.StopBits = ONESTOPBIT;
     
     
    		etat=SetCommState(hdl,&dcb);
     
    		if (etat==false)
    		{
    			printf ("SetCommState erreur %d\n", GetLastError());
    			Sleep (2000);
    			return (3);
    		}
    		else
    		{
    			printf ("Vitesse : %d baud\n", dcb.BaudRate);
    			printf ("Bits de donnees : %d bits\n", dcb.ByteSize);
    			printf ("Parite : %s\n", dcb.Parity);
    			printf ("Bits de stop : 1 bit\n\n");
     
    			printf ("Com serie configuree !\n\n");
    			Sleep (2000);
    		}
     
    		int TimeoutRead=500;
    		timeouts.ReadIntervalTimeout=MAXWORD;
    		timeouts.ReadTotalTimeoutMultiplier=0;
    		timeouts.ReadTotalTimeoutConstant=TimeoutRead;
    		timeouts.WriteTotalTimeoutMultiplier=0;
    		timeouts.WriteTotalTimeoutConstant=0;
     
    		etat=SetCommTimeouts(hdl,&timeouts);
     
    		if (etat==false)
    		{
    			printf ("TimeOuts erreur %d\n", GetLastError());
    			return (4);
    		}
    		else
    		{
    			printf ("TimeOuts initialises\n\n");
     
    		}
     
     
     
     
    		handle = open("fichier.txt", O_APPEND | O_CREAT | O_TEXT | O_RDWR,
    							S_IREAD | S_IWRITE );
    		if (handle==-1)
    		{
    			printf ("Erreur creation fichier : erreur %d\n\n", GetLastError());
     
    		}
    		else
    		{
    			printf ("Creation du fichier reussie\n\n");
     
    		}
     
     
    		printf ("Attente reception\n\n");
     
    		while (1)
    		{
     
    			ReadFile(hdl,&buf,1,&nblu,NULL);
    			if (etat==-1)
    			{
    				printf ("Erreur lecture port : erreur %d\n\n", GetLastError());
    			}
     
     
     
    			int i=0;
    			if (nblu!=0)
    			{
     
    				for (buf [i]; i < 18; i++)
    				{
    					printf ("Octets lus : %X\n\n", buf[i]);
     
    					break;
     
    				}
     
     
    				//unsigned int conv = atoi(&buf[i]);
    				//write(  handle, &conv   , sizeof(conv));
    				write(  handle, &buf[i]  , 1);
     
     
    				printf ("Stockage \n");
    			}
     
    		}
     
     
    		close (handle);
    		CloseHandle(hdl);
     
     
     
     
     
    	}
     
     
     
     
    }
    Si vous pouviez m'aider svp !!!
    Merci et à bientôt !

  2. #22
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    j'ai écris un programme qui attend et réceptionne bien la trame que je veux, mais pour l'enregistrement de ces données (octets) dans un fichier j'ai un gros problème : les données ne sont pas lisibles dans un fichier texte.
    Qu'est ce qui te permet d'être sûr que tes données sont des caractères ASCII alphanumériques? (imprimables lorsqu'on fait "cat" du fichier).
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #23
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Heu !!!
    Et bien, je voudrai pouvoir lire ces données avec le bloc notes par exemple.
    J'utilise hexedit pour savoir si les données sont correctes !!!


  4. #24
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    OK, regardons ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    		while (1)
    		{
    			
    			ReadFile(hdl,&buf,1,&nblu,NULL);
    			if (etat==-1)
    			{
    				printf ("Erreur lecture port : erreur %d\n\n", GetLastError());
    			}
    // Si la taille du buffer est 1, pourquoi s'inquiéter du nombre de caractère lus?		
    
    			int i=0;
    			if (nblu!=0)
    			{
    				
    				for (buf [i]; i < 18; i++)
    				{
    					printf ("Octets lus : %X\n\n", buf[i]);
    					break;
    				}
    // Ca devrait afficher le caractère lu suivi de 17 x0
    // à la sortie i = 18...
     
    				//unsigned int conv = atoi(&buf[i]);
    				//write(  handle, &conv   , sizeof(conv));
    				write(  handle, &buf[i]  , 1);
    // le caractère lu est dans buf[0] alors qu'on écrit buf[18] qui avec
    // un peu de chance sera toujours 0
     
    				printf ("Stockage \n");
    			}
     
    		}
    Hmm, tu as voulu faire quoi?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Oui bon d'accord je me suis emmêlé car en fait je reçois toujours une trame de 18 octets, et j'aimerai pouvoir écrire octet par octet dans le fichier texte pouvant être lu par bloc notes par exemple.




  6. #26
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Il serait sage que ton code lise des trames de 18 bytes (ou de n'importe quelle longueur) et non seulement des bytes.
    Comme tu le disais pus haut, la couche RS232 va lire des bytes... Super...
    Ou est la couche "au dessus" supposée les assembler en trames?

    Sinon pour écrire dans un fichier les bytes lus, cela devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		while (1)
    		{
    			
    			etat = ReadFile(hdl,&buf,1,NULL,NULL);
    			if (etat==-1)
    			{
    				printf ("Erreur lecture port : erreur %d\n\n", GetLastError());
    			}
    
    		        printf ("Octet lu : %X\n\n", buf[0]);
    			write(  handle, &buf[0]  , 1);
    			printf ("Stockage \n");
                     }
    mais cela ne lit pas encore des trames.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #27
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    OK, d'accord ça marche pour lire et stocker le premier octet.
    Mais, ce n'est toujours pas lisible par le bloc notes

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Est-ce qu'au moins, c'est lisible par hexedit ?
    Si c'est lisible par hexedit et correct, ça veut dire qu'on enregistre correctement les données brutes, et qu'il n'y a plus qu'à les convertir de "données brutes" vers le format d'affichage que tu veux.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut Comment est fermé le fichier?
    Tel que écrite, je ne vois pas trop comment on sort du while (1) sans interrompre l'exécution du programme.
    Il n'est pas certain dans ce cas que les données "cachées" du fichier en cours d'écriture aillent sur le disque.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Est-ce qu'au moins, c'est lisible par hexedit ?
    Si c'est lisible par hexedit et correct, ça veut dire qu'on enregistre correctement les données brutes, et qu'il n'y a plus qu'à les convertir de "données brutes" vers le format d'affichage que tu veux.
    Oui, c'est lisible par hexedit !!!

    Et je n'arrive pas à convertir ces "données brutes" en format d'affichage que je veux !!!

  11. #31
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    c'est ton write qu'il faut changer.
    Et c'est à ce genre de moment que tu regrettes d'avoir utiliser open() au lieu de fopen(), car une boucle de fprintf() aurait si facilement résolu l'affaire...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci bien Médinoc, mais là tu me rassure pas !

    Comment aurais je dû faire alors ?

  13. #33
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Eh bien comme je l'ai dit, deux étapes:
    1. Commencer par remplacer open() par fopen(), tes descripteurs par des FILE*, write() par fwrite(), puis vérifie que le fichier obtenu est toujours le même.
    2. Remplace ton fwrite() par une boucle de fprintf() correspondant au format désiré.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #34
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Eh bien comme je l'ai dit, deux étapes:
    1. Commencer par remplacer open() par fopen(), tes descripteurs par des FILE*, write() par fwrite(), puis vérifie que le fichier obtenu est toujours le même.
    2. Remplace ton fwrite() par une boucle de fprintf() correspondant au format désiré.
    Pour autant qu'on souhaiterait stocker les données en hexadécimal, ce serait une solution...
    Si tel est le cas, convertir le buffer lu dans un autre buffer avec un sprintf sans avoir à remplacer open/fopen, etc... et écrire le résultat dans le fichier fait aussi l'affaire avec beaucoup moins de modifications.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #35
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Tu peux. Mais c'est du boulot en plus, je trouve.
    Pourquoi t'obstiner à utiliser open()/write() au lieu de fopen()/fwrite(), alors qu'avec fwrite() tu peux changer quand tu veux (et même faire deux versions dont tu choisis la bonne à l'exécution du prog) ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #36
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    PS: Ou mieux que fopen()/fwrite(), utiliser les streams...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #37
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Tu peux. Mais c'est du boulot en plus, je trouve.
    Pourquoi t'obstiner à utiliser open()/write() au lieu de fopen()/fwrite(), alors qu'avec fwrite() tu peux changer quand tu veux (et même faire deux versions dont tu choisis la bonne à l'exécution du prog) ?
    Pour l'instant, j'essaie de comprendre pourquoi c_boireau n'arrive pas à formater le fichier qu'il a créé.
    La solution peut être de l'écrire dans un autre format (par exemple en hexa).
    Mais cela ne lui est pas complètement inconnu puisqu'il affiche déjà les caractères lus dans ce format...

    Note: S'il s'agit d'enregistrer les données échangées par le protocole en guise d'injection ou de trace, je ne vois pas l'intérêt de convertir quoi que ce soit.
    Par contre, il serait peut être utile de faire un programme qui lise le fichier de trace et en transforme le contenu en quelque chose de manipulable sous editeur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  18. #38
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,
    j'ai essayé d'utiliser fopen() et fwrite() à la place de open() et write() mais mon fwrite() n'est pas correct car il ne stocke pas la même chose que j'avais avec mon write()

    Comment dois je utiliser fwrite() ?

    Voila la fonctions que j'avais écrite write() (qui marche) et la fwrite() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(  handle, &buf[i]  , 1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite (&buf[i], 1 , sizeof (buf[i]), fichier);

    Eh bien comme je l'ai dit, deux étapes:

    1. Commencer par remplacer open() par fopen(), tes descripteurs par des FILE*, write() par fwrite(), puis vérifie que le fichier obtenu est toujours le même.
    2. Remplace ton fwrite() par une boucle de fprintf() correspondant au format désiré.
    Bizarre, je remplace write() par fwrite(), puis je remplace fwrite() par fprintf()



    Donc toujours ce problème de formatage !!!!

    PLEASE !!!

  19. #39
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Je ne comprends pas pourquoi ça ne marche pas avec fwrite().
    Tu ne dois pas passer à la seconde étape (écriture "texte" au lieu de données brutes) tant que l'écriture brute par fwrite() ne marche pas.

    PS: Quels paramètres passes-tu à fopen() ?
    Et as-tu pensé à aussi remplacer close() par fclose() ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Moi non plus je ne comprend pas pourquoi ça ne marche pas car je pense avoir fait ce qu'il fallait !!

    Je poste mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
     
    #include <stdio.h>
    #include <io.h>
    #include <fcntl.h>
    #include <sys\stat.h>
     
    #pragma hdrstop
     
    //---------------------------------------------------------------------------
     
    #pragma argsused
    int main(int argc, char* argv[])
    {
     
    	HANDLE hdl;
    	DCB dcb;
    	bool etat;
    	COMMTIMEOUTS timeouts={0};
    	unsigned char buf [20];
    	unsigned long nblu;
     
     
    	FILE *fichier;
     
    	hdl=CreateFile("COM5",GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
     
    	if (hdl==INVALID_HANDLE_VALUE)
    	{
    		printf("erreur %d\n",GetLastError());
    		Sleep (2000);
    		return (1);
    	}
    	else
    	{
        	SetupComm(hdl,5000,5000);
    		printf ("ouverture reussie !\n\n");
    		etat=GetCommState(hdl, &dcb);
     
    		if (etat==false)
    		{
    			printf ("GetCommState erreur %d\n", GetLastError());
    			return (2);
    		}
    		else
    		{
    			printf ("GetCommState reussie\n\n");
            }
     
     
     
    		dcb.BaudRate = CBR_38400;
    		dcb.ByteSize = 8;
    		dcb.Parity = NOPARITY;
    		dcb.StopBits = ONESTOPBIT;
     
     
    		etat=SetCommState(hdl,&dcb);
     
    		if (etat==false)
    		{
    			printf ("SetCommState erreur %d\n", GetLastError());
    			Sleep (2000);
    			return (3);
    		}
    		else
    		{
    			printf ("Vitesse : %d baud\n", dcb.BaudRate);
    			printf ("Bits de donnees : %d bits\n", dcb.ByteSize);
    			printf ("Parite : %s\n", dcb.Parity);
    			printf ("Bits de stop : 1 bit\n\n");
     
    			printf ("Com serie configuree !\n\n");
    			Sleep (2000);
    		}
     
    		int TimeoutRead=500;
    		timeouts.ReadIntervalTimeout=MAXWORD;
    		timeouts.ReadTotalTimeoutMultiplier=0;
    		timeouts.ReadTotalTimeoutConstant=TimeoutRead;
    		timeouts.WriteTotalTimeoutMultiplier=0;
    		timeouts.WriteTotalTimeoutConstant=0;
     
    		etat=SetCommTimeouts(hdl,&timeouts);
     
    		if (etat==false)
    		{
    			printf ("TimeOuts erreur %d\n", GetLastError());
    			return (4);
    		}
    		else
    		{
    			printf ("TimeOuts initialises\n\n");
     
    		}
     
     
    		fichier = fopen ("fichier.txt","at");
    		if (fichier==NULL)
    		{
    			printf ("Erreur creation fichier : erreur %d\n\n", GetLastError());
     
    		}
    		else
    		{
    			printf ("Creation fichier reussie\n\n");
    		}
     
     
    		while (1)
    		{
    			int i=0;
     
    			ReadFile(hdl,&buf,1,&nblu,NULL);
    			if (etat==-1)
    			{
    				printf ("Erreur lecture port : erreur %d\n\n", GetLastError());
    			}
     
     
    			if (nblu!=0)
    			{
     
    				for (buf [i]; i < 18; i++)
    				{
    					printf ("Octets lus : %X\n\n", buf[i]);
     
    					break;
     
    				}
     
    				fwrite (&buf[i], 1 , sizeof (buf[i]), fichier);
     
     
     
     
    				printf ("Stockage \n");
    			 }
     
    		}
     
     
            fclose (fichier);
    		CloseHandle(hdl);	
     
     
     
    	}
     
    	return 0;
    }
    //---------------------------------------------------------------------------

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/06/2008, 16h12
  2. Comment envoyer une adresse par le port série
    Par christophe_s46 dans le forum WinDev
    Réponses: 3
    Dernier message: 10/09/2007, 01h52
  3. Comment lire une pin sur le port série du pc
    Par KENPACHI dans le forum LabVIEW
    Réponses: 1
    Dernier message: 25/05/2007, 12h56
  4. Réponses: 3
    Dernier message: 18/07/2006, 13h37
  5. [USB]envoyer une trame sur le port USB
    Par ced38100 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/11/2005, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo