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

Windows Forms Discussion :

[C#][FW2.0] Liaison rs-232


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut [C#][FW2.0] Liaison rs-232
    Bonjour,
    Suite a un logiciel que j'avai developper a l'epoque en c++ API, qui dialoguer avec un appareil via Port RS485 et des convertisseur RS232 <-> RS485.
    J'ai du remettre au gout du jour ce logiciel avec C#.
    J'ai donc abandonner les API qui sont trop grossière à écrire pour me concentrer sur la classe System.IO.Ports.SerialPort
    Que j'utilise déja pour un appreil en RS485.
    Le probleme est le suivant. La trame que j'envoie (dont voici le code) n'est pas reelement envoyée. en fait je ne reçoit que 23 octets au lieu des 26 octets et les 2 premier octets sont erronés.
    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
                SerialPort Port; // objet du type port COM
                Port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); // Definition du port : 9600 baudrate, pas de parité, 8 bits et 1 bit de stop
                Port.ReadTimeout = 100; // 100 ms de temps pour lire le buffer
                Port.WriteTimeout = 100; // 100 ms de temps d'ecriture du buffer
                Port.Open();
                Port.DiscardInBuffer(); // vide le buffer d'entree (lecture)
                Port.DiscardOutBuffer(); // vide le buffer de sortie (ecriture)
    //////////////////////////////////////////////////////
                byte[] REQ = new byte[26];
                REQ[0] = 0xAA;
                REQ[1] = 0x00;
                REQ[2] = 0x82;
                REQ[3] = 0x02;
                REQ[4] = 0x00;
                REQ[5] = 0x00;
                REQ[6] = 0x00;
                REQ[7] = 0x00;
                REQ[8] = 0x00;
                REQ[9] = 0x00;
                REQ[10] = 0x00;
                REQ[11] = 0x00;
                REQ[12] = 0x00;
                REQ[13] = 0x00;
                REQ[14] = 0x00;
                REQ[15] = 0x00;
                REQ[16] = 0x00;
                REQ[17] = 0x00;
                REQ[18] = 0x00;
                REQ[19] = 0x00;
                REQ[20] = 0x00;
                REQ[21] = 0x00;
                REQ[22] = 0x00;
                REQ[23] = 0x00;
                REQ[24] = 0x00;
                REQ[25] = 0x2E;
                Port.Write(REQ, 0, REQ.Length);
    Donc physiquement a quoi ressemble ma trame ?
    Et bien la voici :
    AA 00 82 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E
    Grace a un pc espion qui fonctionne bien (test avec mon ancien logiciel code en API) et qui recupere ma trame je vous montre ce que je récupere :
    82 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E
    ça c'est dans le meilleur des cas (car on a 24 octets) dans le pire des cas le début de la trame est aléatoire (et on a que 23 octets) :
    C1 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E
    ou encore :
    0B 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E
    Voila je vous remercie en ésperant l'avis de ce qui ont developper un logiciel avec dialogue rs232.

    Car je pense qu'il s'agit d'un probleme de configuration

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    Je viens de trouver la solution où plutot la raison de ce bug qui est un gros problème pour plus de 10 personens sur le forum (j'ai vu leur post et personen n'a repondu pour donner une solution).
    Je vous donne la solution ici en espérant aider les autres programmeur de rs-232 :
    il faut tout simplement mettre DtrEnabled a true :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                Port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); // Definition du port : 9600 baudrate, pas de parité, 8 bits et 1 bit de stop
                Port.ReadTimeout = 100; // 100 ms de temps pour lire le buffer
                Port.WriteTimeout = 100; // 100 ms de temps d'ecriture du buffer
                Port.DtrEnable = true; // c'est cet appel qui manquait
                Port.Open();
                Port.DiscardInBuffer(); // vide le buffer d'entree (lecture)
                Port.DiscardOutBuffer(); // vide le buffer de sortie (ecriture)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. liaison RS 232 entre un laser et labview
    Par fiore dans le forum LabVIEW
    Réponses: 3
    Dernier message: 09/06/2015, 21h48
  2. Réponses: 1
    Dernier message: 01/06/2010, 11h40
  3. Liaison RS 232
    Par sepym dans le forum LabVIEW
    Réponses: 1
    Dernier message: 05/05/2010, 10h51
  4. Réponses: 4
    Dernier message: 03/07/2006, 18h13
  5. Liaison de police
    Par arno_ dans le forum Flash
    Réponses: 11
    Dernier message: 06/07/2005, 22h58

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