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 :

envoi d'une trame via rs232 avec SOH CR LF


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    apprenti ingénieur en informatique et réseaux
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti ingénieur en informatique et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 73
    Points
    73
    Par défaut envoi d'une trame via rs232 avec SOH CR LF
    Bonjour à tous,

    Je bloque sur un problème à mon avis pas hyper compliqué, mais je ne trouve (ou comprends^^) pas de solution sur le forum et internet...

    La situation : J'ai une balance (Precia Molen) connecté via rs232 à mon PC. Lorsque celle-ci est configurée en mode Maitre (elle envoie de façon périodique le poids) je réceptionne l'information. Cependant, en mode Esclave, il faut que je lui envoi une trame afin qu'elle me retourne le poids. Cette trame est composé de SOH - CR - LF (Ctrl+A,Ctrl+M,Ctrl+J dans un hyperterminal). Voici le code où je souhaite passer la trame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       printf("\r\n");
                printf("Donnees a envoyer :\r\n");
                fflush(stdin);
                gets(buffer);
                // keybd_event() // à voir pour simuler les touches...
                //buffer[0] = 0x01; // correspond à SOH
                //buffer[1] = 0x0D; //CR
                //buffer[2] = 0x0A; //LF
                //printf("%c", buffer);
                WriteCOM(buffer, strlen(buffer), &nBytesWritten);
                ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead);
                buffer[nBytesRead] = '\0';
                printf("%d octet(s) recu(s) :\r\n%s\r\n", nBytesRead, buffer);
    J'ai essayé de créer 3 variable Char a = 1, b = 10 et c= 13 mais sans succès...

    Si quelqu'un peut apporter de l'eau à mon moulin, j'en serait très reconnaissant ! Merci

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Bonjour,
    Je ne peut aider que pour l'erreur classique.

    fflush(stdin) est un comportement indéfini, susceptible (en substance) de détruire ta table de partition, bruler ton processeur ou ne rien faire du tout.

    Pour le reste, je ne sais pas vraiment.

    fflush ne peut purger que les flux de sortie.

  3. #3
    Membre régulier
    Homme Profil pro
    apprenti ingénieur en informatique et réseaux
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti ingénieur en informatique et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 73
    Points
    73
    Par défaut
    ha ok merci, je viens de le supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                printf("\r\n");
                printf("Donnees a envoyer :\r\n");
                gets(buffer);
                //keybd_event()
                //printf("\r\n");
                //buffer[0] = 0x01;
                //buffer[1] = 0x0D;
                //buffer[2] = 0x0A;
                //printf("%c", buffer);
                WriteCOM(buffer, strlen(buffer), &nBytesWritten);
                ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead);
                buffer[nBytesRead] = '\0';
                printf("%d octet(s) recu(s) :\r\n%s\r\n", nBytesRead, buffer);
    J'ai essayé avec ^A^M^J mais sans succès....

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Pardonne-moi.
    Pardonnez-moi, vous aussi, autres membres du forum.

    N'utilise jamais gets().
    Cette fonction est une grave cause de faille système
    Comme il n'y a pas de controle sur la mémoire lue, cette fonction permet à qui l'utilise d'écrire n'importe où dans la mémoire.

  5. #5
    Membre régulier
    Homme Profil pro
    apprenti ingénieur en informatique et réseaux
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : apprenti ingénieur en informatique et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 73
    Points
    73
    Par défaut
    he merci, j'avoue être parti d'un sample sur internet....

    du coup comme ça c'est mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                printf("\r\n");
                printf("Donnees a envoyer :\r\n");
                scanf("%c",buffer);
                //keybd_event()
                //printf("\r\n");
                //buffer[0] = 0x01;
                //buffer[1] = 0x0D;
                //buffer[2] = 0x0A;
                //printf("%c", buffer);
                WriteCOM(buffer, strlen(buffer), &nBytesWritten);
                ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead);
                buffer[nBytesRead] = '\0';
                printf("%d octet(s) recu(s) :\r\n%s\r\n", nBytesRead, buffer);
    par contre j'arrive pas à trouver solution à mon problème :/

Discussions similaires

  1. Envoi d'une Trame Hexa en RS232
    Par Crokflo dans le forum VB.NET
    Réponses: 9
    Dernier message: 23/03/2011, 09h14
  2. Envoi d'une trame via liaison série
    Par Fabien50 dans le forum C++
    Réponses: 48
    Dernier message: 29/04/2009, 09h59
  3. Affichage incomplet après réception d'une trame via RS232
    Par sroge dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/02/2008, 15h50
  4. Problème avec l'envoi d'une trame TCP
    Par fredoBreton dans le forum API, COM et SDKs
    Réponses: 14
    Dernier message: 17/11/2005, 20h19

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