Pb RS232:Controle de Flux [Résolu]

Signaler
Messages postés
19
Date d'inscription
mercredi 3 mars 2010
Statut
Membre
Dernière intervention
29 juillet 2010
-
Messages postés
19
Date d'inscription
mercredi 3 mars 2010
Statut
Membre
Dernière intervention
29 juillet 2010
-
Bonjour a tous.

Je me présente Amélie, 21 ans, étudiante en licence mécatronique, j'ai un petit problème avec le contrôle de flux dans une liaison RS232 avec le langage C++.
Enfaite j'aimerais pouvoir transposer ce code sous windows:
                //*** Serial Comm. speed & format
                ControlBlock.BaudRate = nBaudRate;
                ControlBlock.Parity = PARITY;
                ControlBlock.ByteSize = BYTESIZE;
                ControlBlock.StopBits = STOPBITS;

                //*** RTS / CTS
                if (bRTS_CTS==TRUE)
                {
                               ControlBlock.fRtsControl = RTS_CONTROL_HANDSHAKE;
                               ControlBlock.fOutxCtsFlow = TRUE;
                }
                else
                {
                               ControlBlock.fRtsControl = RTS_CONTROL_ENABLE;
                               ControlBlock.fOutxCtsFlow = FALSE;
                }


                //*** DSR/DTS
                ControlBlock.fDtrControl = DTR_CONTROL_ENABLE;
                ControlBlock.fOutxDsrFlow = FALSE;

                //*** XON / XOFF Off
                ControlBlock.fOutX = FALSE;
                ControlBlock.fInX = FALSE;


Vers un code sous linux.
Le problème c'est que je ne trouve pas de fonction permettant de configurer les signaux RTS et DTR. Enfaite je ne trouve pas grand chose a part une fonction dans termios.h:
/* Controle de flux hardware RTS/CTS)*/
Config.c_cflag |= (CREAD | CRTSCTS)
Mais ça ne me permet pas de le mettre en mode HANDSHAKE oua utre.

Je suis complétement bloqué donc si vous avez des idées n'hésitez pas je vous en serais vraiment reconnaissante.

A votre disposition pour d'autre renseignements.

Merci.

Amélie

4 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Le simple fait d'activer l'option c_cflag va permettre de mettre un place le control de flux RTS/CTS. C'est ce qu'on appelle du "hardware handshaking".
Tu as aussi le software handshaking qui s'utilise via l'activation de l'option XON/XOFF, mais il est bcp plus lent.

Le mieux est que tu te fasses un petit projet qui met en oeuvre les elements de base (connexion, envoi de data, reception de data, fermeture de la connexion). Ca t'aidera surement a mieux comprendre comment tout cela fonctionne.


Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Salut,

Je t'invite a consulter ce lien sur lequel tu trouveras surement ton bonheur :
http://www.easysw.com/~mike/serial/serial.html

Pour ce qui est du control de flux il y a un petit passage en bas de page :

[i]Some versions of UNIX support hardware flow control using the CTS (Clear To Send) and RTS (Request To Send) signal lines. If the CNEW_RTSCTS or CRTSCTS constants are defined on your system then hardware flow control is probably supported. Do the following to enable hardware flow control:

options.c_cflag |= CNEW_RTSCTS; /* Also called CRTSCTS */

Similarly, to disable hardware flow control:

options.c_cflag &= ~CNEW_RTSCTS;/i

Bon courage,

Shell
Messages postés
19
Date d'inscription
mercredi 3 mars 2010
Statut
Membre
Dernière intervention
29 juillet 2010
1
Merci beaucoup pour la réponse mais j'avous que j'ai un peu de mal quand même a savoir comment arriver a configurer les signaux en handshake...
Messages postés
19
Date d'inscription
mercredi 3 mars 2010
Statut
Membre
Dernière intervention
29 juillet 2010
1
Alors là! Merci beaucoup beaucoup pour ta réponse simple et clair!

Je comprend mieux tout les tutoriels que je lis depuis quelques jours. Je n'avais pas vraiment compris ça.

Bref encore merci.

Bonne journée a toi.