RS 232

Résolu/Fermé
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 12 août 2006 à 18:25
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 22 août 2006 à 13:47
bonjour a tous.


Voila quelques jour que j'ai realiser un petit montage (lecteur de puces RFID) me permetant de recuperer sous la forme de 11 octets les donnees enregistrer dans la puce (dons le code identifiant) et ce sur n'importe quel port serie RS 232 d'un pc.
apres une recherche aprofondie sur internet et sur le site j'ai ete decus du peu de resultat explicant comment "cree une liaison RS 232, recuperer des donnees sur le prot RS 232 ...".

par concequent, je m'en refaire a vous pour m'expliquer tous cela.

je vous remerci par avance.

13 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 août 2006 à 20:17
Salut,

tu utilise quelle techno pour faire ta comme RS232?

si tu utilise celle de sun voici un petit exemple :
SerialConnectionException represente une exception herité de Exception

public final class RS232{

    private CommPortIdentifier portId = null;
    private SerialPort sPort = null;
    private boolean open = false;
    private OutputStream os = null;
    private InputStream is = null;
    private boolean available = true;
    private int timeoutRx = 0;

   
    protected RS232(String deviceName, int bitRate, int dataBits,
            int stopBits, int hanshake, int timeoutRx, int timeoutTx) {
        if (open) return;
        try {
            portId = CommPortIdentifier.getPortIdentifier(deviceName);
        } catch (NoSuchPortException e) {
            try {
                throw new SerialConnectionException(e.getMessage());
            } catch (SerialConnectionException e1) {
                return;
            }
        }

        try {
            sPort = (SerialPort) portId.open("MonRS232", timeoutTx);
        } catch (Exception e) {
            try {
                throw new SerialConnectionException(e.getMessage());
            } catch (SerialConnectionException e1) {
                return;
            }
        }

        try {
            setConnectionParameters(bitRate, dataBits, stopBits, hanshake);
        } catch (SerialConnectionException e) {
            sPort.close();
            return;
        }

        sPort.notifyOnFramingError(false);
        sPort.notifyOnOverrunError(false);
        sPort.notifyOnParityError(false);
        sPort.notifyOnDataAvailable(true);
        sPort.notifyOnOutputEmpty(true);
        sPort.notifyOnBreakInterrupt(true);

        try {
            sPort.enableReceiveTimeout(timeoutRx);
        } catch (UnsupportedCommOperationException e) {
            return;
        }

       
        try {
            os = sPort.getOutputStream();
            is = sPort.getInputStream();
        } catch (IOException e) {
            sPort.close();
            try {
                throw new SerialConnectionException("Error opening i/o streams");
            } catch (SerialConnectionException e1) {
                return;
            }
        }
        this.timeoutRx = timeoutRx;
        open = true;
    }

    protected final void setConnectionParameters(int bitRate, int dataBits,
            int stopBits, int hanshake) throws SerialConnectionException {

        try {
            sPort.setSerialPortParams(bitRate, dataBits, stopBits,
                    SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {
            throw new SerialConnectionException("Unsupported parameter");
        }

        try {
            int tmp = sPort.getFlowControlMode();
            if (hanshake != tmp)
                sPort.setFlowControlMode(hanshake);
        } catch (Exception e) {
            throw new SerialConnectionException("Unsupported flow control");
        }
    }

    /**
     * Ferme le port et libere les elements associé
     */
    protected final boolean close() {

        //si open = false c'est que le port et deja fermé
        if (!open) return true;

        // Le port est bien ouvert?
        if (sPort != null) {
            try {
                // fermeture des i/o stream
                os.close();
                is.close();
                // farmeture du port
                portId = null;
                sPort.close();
                sPort.removeEventListener();
                sPort = null;
                open = false;
                return true;
            } catch (IOException e) {
                return false;
            }
        } else {
            return true;
        }
    }

    /**
     * Recuperation de la liste des ports dispo
     */
    protected final Vector<String> getPortList() {
        Enumeration portList = CommPortIdentifier.getPortIdentifiers();
        Vector<String> list = new Vector<String>();
        while (portList.hasMoreElements()) {
            CommPortIdentifier cpi = ((CommPortIdentifier) portList.nextElement());
            if (cpi.getPortType() == CommPortIdentifier.PORT_SERIAL)
                list.add(cpi.getName());
        }
        return list;
    }

    /**
     * Envoi une seconde de pause.
     */
    protected final void sendBreak() {
        sPort.sendBreak(1000);
    }

    /**
     * Lit ce qu'il y a dans le socket (c'est une lecture de chaine donc a adapter )
     */
    protected final String read() {
        if (is == null)
            return null;
        String nl = System.getProperty("line.separator");
        try {
            Thread.sleep(100);
            Scanner sc = new Scanner(is);
            String str = "";
            while(sc.hasNext()) str += sc.nextLine() + nl;
            sc.close();
            return str;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * Ecrit des data dans le socket
     */
    protected final boolean write(String data) {
        if (os == null)
            return false;
        String tmpData = data + '\r';
        byte[] tmp = tmpData.getBytes();
        try {
            os.write(tmp, 0, tmp.length);
        } catch (IOException e) {
            return false;
        }
        return true;
    }

    /**
     * Pour savoir si le socket est ouvert ou non
     */
    protected final boolean isClosed() {
        return open;
    }
}

dsl pour le manque de commentaire mais j'ai du faire le menage dans le code donc supprimer des commentaire (la fleme de les remettre sinon tu as la java doc pour savoir qui fait quoi

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
22 août 2006 à 12:31
Salut,

oki je veux bien mais les paramètres sont spécifique au device que tu mets au bout de ton câble donc faudra surement que tu adapte :

String deviceName = "/dev/ttyS0"; // pour linux (ttyS0, ttyS1, ttyS2, etc...)
String deviceName = "COM0"; //pour Windows (COM0, COM1, COM2, etc...)

RS232 rs232 = new RS232(deviceName, 9600, javax.comm.SerialPort.DATABITS_8,
                    javax.comm.SerialPort.STOPBITS_1, javax.comm.SerialPort.FLOWCONTROL_NONE, 1000, 1000);

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
22 août 2006 à 13:01
Salut,

Ce sont des choses que tu te dois de connaitre avant d'utiliser le port série !

9600= pour la vitesse de transmission de donnees (9600 bauds)
javax.comm.SerialPort.DATABITS_8 = Bit de donnees (8 bit)
javax.comm.SerialPort.STOPBITS_1 =  Bit d'arret (1 bit)
javax.comm.SerialPort.FLOWCONTROL_NONE =  Controle de flux Aucun (a quoi casert ?)
1000 = c'est le timeout d'emission et reception

dans le code plus haut sort la parity pour pouvoir la changer dynamiquement

try {
            sPort.setSerialPortParams(bitRate, dataBits, stopBits,
                    SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {
            throw new SerialConnectionException("Unsupported parameter");
        }

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
22 août 2006 à 13:47
salut,


bah ou tu veux exemple :


protected RS232(String deviceName, int bitRate, int dataBits,

            int stopBits, int hanshake, int parity, int timeoutRx, int timeoutTx) {

        if (open) return;

        try {

            portId = CommPortIdentifier.getPortIdentifier(deviceName);

        } catch (NoSuchPortException e) {

            try {

           
    throw new SerialConnectionException(e.getMessage());

            } catch (SerialConnectionException e1) {

                return;

            }

        }


        try {

            sPort = (SerialPort) portId.open("MonRS232", timeoutTx);

        } catch (Exception e) {

            try {

           
    throw new SerialConnectionException(e.getMessage());

            } catch (SerialConnectionException e1) {

                return;

            }

        }


        try {

            setConnectionParameters(bitRate, dataBits, stopBits, hanshake, parity);

        } catch (SerialConnectionException e) {

            sPort.close();

            return;

        }


        sPort.notifyOnFramingError(false);

        sPort.notifyOnOverrunError(false);

        sPort.notifyOnParityError(false);

        sPort.notifyOnDataAvailable(true);

        sPort.notifyOnOutputEmpty(true);

        sPort.notifyOnBreakInterrupt(true);


        try {

            sPort.enableReceiveTimeout(timeoutRx);

        } catch (UnsupportedCommOperationException e) {

            return;

        }


       

        try {

            os = sPort.getOutputStream();

            is = sPort.getInputStream();

        } catch (IOException e) {

            sPort.close();

            try {

           
    throw new SerialConnectionException("Error opening
i/o streams");

            } catch (SerialConnectionException e1) {

                return;

            }

        }

        this.timeoutRx = timeoutRx;

        open = true;

    }


    protected final void setConnectionParameters(int bitRate, int dataBits,

            int stopBits, int hanshake, int parity) throws SerialConnectionException {


        try {

            sPort.setSerialPortParams(bitRate, dataBits, stopBits, parity);

        } catch (UnsupportedCommOperationException e) {

            throw new SerialConnectionException("Unsupported parameter");

        }


        try {

            int tmp = sPort.getFlowControlMode();

            if (hanshake != tmp)

                sPort.setFlowControlMode(hanshake);

        } catch (Exception e) {

            throw new SerialConnectionException("Unsupported flow control");

        }

    }

.....


et a l'utilisation :


String deviceName = "/dev/ttyS0"; // pour linux (ttyS0, ttyS1, ttyS2, etc...)

String deviceName = "COM0"; //pour Windows (COM0, COM1, COM2, etc...)


RS232 rs232 = new RS232(deviceName, 9600, javax.comm.SerialPort.DATABITS_8,

           
        javax.comm.SerialPort.STOPBITS_1,
javax.comm.SerialPort.FLOWCONTROL_NONE, SerialPort.PARITY_NONE, 1000, 1000);


Bref un minimum de reflexion stp :D

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3

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

Posez votre question
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
14 août 2006 à 11:48
je ne comprend pas "tu utilise quelle techno pour faire ta comme RS232?" tu veux dire quelle technologie electronique ou informatique?

j'ai pas tous compris dans le code mais dans quelle(s) variable(s) sont stocker les donnees recus?

merci ++
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 août 2006 à 12:14
Salut,

Quand je te parle de techno je parle d'api :
    tu utilise l'api de sun ou une api proprio?

la classe si dessus permet de lire et d'ecrire des data dans un socket rs232 donc ce n'est stoqué null par c'est a toi de la stoquer

exemple d'utilisation
RS232 rs232 = new RS232(..........);
rs232.write("toto");
System.out.println(rs232.read());
rs232.close();

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
21 août 2006 à 21:52
et si non y a un truc que je ne comprend pas bien c'est quest ce que tu met entre tes parentheses ("RS232 rs232 = new RS232(..........);")

merci
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 août 2006 à 22:59
Salut,

les parametres que tu dois rensigner pour l'utiliser soit la config RS232 qui est dans le constructeur de la classe RS232 bref que des choses que tu te doit de savoir avant de faire une comm. RS232

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
22 août 2006 à 11:57
ok, mais je comprend mieux par l'exemple donc pourrai tu me donnés un exemple ( juste 1 ligne )
RS232 rs232 = new RS232(un exemple de chaques parametres popssible);
c'est pour, egalement, savoir comment je dois les declarer, mais aussi savoir quelles sont ces parametre
STP
je te remerci.
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
22 août 2006 à 12:52
merci donc cela donne "RS232 rs232 = new RS232(deviceName, 9600, javax.comm.SerialPort.DATABITS_8,
                    javax.comm.SerialPort.STOPBITS_1, javax.comm.SerialPort.FLOWCONTROL_NONE, 1000, 1000);"
avec

9600= pour la vitesse de transmission de donnees (9600 bauds)
javax.comm.SerialPort.DATABITS_8 = Bit de donnees (8 bit)
javax.comm.SerialPort.STOPBITS_1 =  Bit d'arret (1 bit)
javax.comm.SerialPort.FLOWCONTROL_NONE =  Controle de flux Aucun (a quoi casert ?)
1000 = ???
Y a t il la gestion des bite de parite (generalement null)

je te remerci de bien vouloire verifier cette liste et de la completter .
merci.
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
22 août 2006 à 13:20
et j'oubliais quelque soit l'ordre dans le quelle on met tous ca ca march quand meme?
merci.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
22 août 2006 à 13:27
Salut,


ba nan tu dois respecter la signature du constructeur sinon tu vas modifier les valeur exemple si tu fais


String deviceName = "/dev/ttyS0"; // pour linux (ttyS0, ttyS1, ttyS2, etc...)

String deviceName = "COM0"; //pour Windows (COM0, COM1, COM2, etc...)


RS232 rs232 = new RS232(deviceName, 9600, javax.comm.SerialPort.DATABITS_8,

           
        javax.comm.SerialPort.STOPBITS_1,
javax.comm.SerialPort.FLOWCONTROL_NONE, 1000, 1000);


la tu met tous dans le bon ordre mais si tu fais


String deviceName = "/dev/ttyS0"; // pour linux (ttyS0, ttyS1, ttyS2, etc...)

String deviceName = "COM0"; //pour Windows (COM0, COM1, COM2, etc...)


RS232 rs232 = new RS232(deviceName, javax.comm.SerialPort.DATABITS_8, 9600,

           
        javax.comm.SerialPort.STOPBITS_1,
javax.comm.SerialPort.FLOWCONTROL_NONE, 1000, 1000);


la tu auras un bite de donnée de 9600 et un baud de 8 ce qui risque de ne jamais fonctionner

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
22 août 2006 à 13:35
mais alors le bit de parité je le met où ???


 
0
Rejoignez-nous