begin process at 2012 05 27 16:41:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > GESTION DU PORT SÉRIE AVEC SURVEILLANCE DES PAQUETS POUR QT

GESTION DU PORT SÉRIE AVEC SURVEILLANCE DES PAQUETS POUR QT


 Information sur la source

Note :
Aucune note
Catégorie :Système Classé sous :serie, port, liaison, RS232, QT Niveau :Initié Date de création :15/06/2010 Date de mise à jour :15/06/2010 16:12:41 Vu / téléchargé :5 079 / 426

Auteur : samoura969

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Bonjour bonjour,

Ca fait un moment que je cherche une bonne bibliothèque pour gérer le port série avec QT.
N'en ayant pas trouvée, je l'ai faite moi même.
Pour ceux qui n'ont pas envie de se prendre la tête, ou ceux qui veulent améliorer, et pour tout le monde
en général, voici le fruit de mon travail.

Par contre, je vous demande une chose, si vous la modifiez (en mieux) mettez le header à jour et faites moi en part,
ainsi que tout le monde. Se serai vraiment sympa.

Si il y a des choses à améliorer je suis là.

PS : Si certains ne veulent pas de QT J'ai aussi, mais y'a plus le thread

++

Source

  • #ifndef _RS232
  • #define _RS232
  • #include <windows.h>
  • #include <QThread>
  • #include <QMutex>
  • #include <QWaitCondition>
  • //ATTENTION : Toutes les lectures retournent un pointeur vers un signed char
  • class RS232 : public QThread
  • {
  • Q_OBJECT
  • private:
  • //Variables de la communication
  • DCB configuration;
  • HANDLE port_handle;
  • COMMTIMEOUTS temps_attente;
  • //var des threads
  • QMutex mutex;
  • QMutex fini;
  • int sortir;
  • int taille_donnee; //taille maximale de la donnee un octets
  • public:
  • int creation_ok;
  • RS232(char *Port="COM1",char *Parite="Aucune",int Vitesse=9600,int Data=8,char *StopBit="1",int TimeOut=500);
  • ~RS232(){CloseHandle(port_handle);}
  • int envoi_chaine(char *Chaine,char *EolChar = "$");
  • int envoi(unsigned int nombre);
  • int recevoir(char *ChaineRecue);
  • virtual void run();
  • void fin_thread();
  • signals:
  • void event_new(char *reception);
  • };
  • #endif
#ifndef _RS232
#define _RS232

#include <windows.h>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>

//ATTENTION : Toutes les lectures retournent un pointeur vers un signed char

class RS232 : public QThread
{
    Q_OBJECT
private:
    //Variables de la communication
    DCB configuration;
    HANDLE port_handle;
    COMMTIMEOUTS temps_attente;

    //var des threads
    QMutex mutex;
    QMutex fini;
    int sortir;

    int taille_donnee;      //taille maximale de la donnee un octets

public:

    int creation_ok;

    RS232(char *Port="COM1",char *Parite="Aucune",int Vitesse=9600,int Data=8,char *StopBit="1",int TimeOut=500);
    ~RS232(){CloseHandle(port_handle);}
    int envoi_chaine(char *Chaine,char *EolChar = "$");
		
    int envoi(unsigned int nombre);
		
    int recevoir(char *ChaineRecue);

    virtual void run();

    void fin_thread();

signals:
    void event_new(char *reception);
};
#endif


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

15 juin 2010 15:13:18 :
C'est plus simple de voir le header directement
15 juin 2010 15:27:48 :
J'ai rajouté pour un compilo C++ sans QT
15 juin 2010 16:12:41 :
Premier code publie, g pas encore l habitude. Je l ai rendu plus lisible.

 Sources de la même categorie

Source avec Zip Source avec une capture INFORMATION PROCESSEUR (CPUID) par Devils_Tiger
Source avec Zip Source avec une capture LECTURE TEMPÉRATURE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture LECTURE FRÉQUENCE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DEBUG DEVEL par alphaone
Source avec Zip LIAISON SERIE RS-232 par yovotsa
Source avec Zip CLASS DE DIALOGUE RS485 / RS232 SOUS LINUX par Astalavista
Source avec Zip CLASSE DE CONTRÔLE DES PORTS COM par gergalp
Source avec Zip CLASSE RS232 AVEC DECODAGE DE TRAME SERIE EN MODE BINAIRE ( ... par ludolechinois

Commentaires et avis

Commentaire de samoura969 le 15/06/2010 16:13:22

Il est plus detaille dans le zip/

Commentaire de samoura969 le 17/06/2010 18:06:24

Je serai curieux d'avoir des feedbacks, ça marche pour ceux qui ont téléchargé?
Si ce n'est pas le cas, sites le moi.

Commentaire de CptPingu le 18/06/2010 17:38:24 administrateur CS

Étant sous Linux, impossible de tester ton code, mais ce n'est pas ma question.
En fait, je m'interroge sur le choix des technos. QT a été pensé pour être multiplateforme, donc c'est un peu étrange de mettre quelque chose de très spécifique à Windows avec QT.
D'après ce que j'ai compris, tu utilises QT pour faire du threading. Si tu es sur de ne faire que du Windows, alors c'est très très lourd d'incorporer du QT juste pour ça. Autant directement utiliser les API Windows pour faire le threading.

Juste au niveau du code:
- En C++, on préfère très largement du std::string à du char* (et donc du const std::string& en argument)
- Si tu veux utiliser des types pour un choix, utilise un enum plutôt qu'une chaîne de caractères ! (Ex: Parite devrait être un enum)
- En C++, on préfère les std::stringstream au sprintf.
- Si du C est nécessaire, alors on inclue les headers avec un "c" devant. Ex: #include <stdio.h> => #include <cstdio>
- Si ton buffer est de taille fixe, inutile de faire un new. Ex: "inBuffer = new ..." devrait être "inBuffer[TAILLE];", ainsi que "Message"

Commentaire de samoura969 le 19/06/2010 17:57:59

je tiendrais compte de se que tus dis, j'ai fait pas mal de C pour mes etudes, mais encore peu de C++, j'ai des reflexes à prendre.
Il es tvrai que j'aurai pu faire ça avec les API, il faut encore que je me renseigne sur comment faire.
Ici le tout s'incorpore dans une interface graphique, c'est pourquoi j'ai pris QT, je ne connais pas trop les enum, si tu as un lien expliquant bien se que s'est je suis prenneur.

Merci de tes remarques, j'en tiendrais compte pour améliorer mon code.

Commentaire de fil1234 le 20/06/2010 19:11:23

C'est déjà bien. As tu un exemple avec l'affichage d'un graphe y=f(x) (qui utilise QWT) qui affiche en temps réel les valeurs numériques retournées par la RS232, si par exemple elle est connectée à une balance.
Merci

Commentaire de samoura969 le 20/06/2010 19:51:33

Euh, non j'ai pas, pour le tester, je sélectionne une valeur, je l'envoie sur le port, de l'autre coté j'ai un pic qui me renvoie la valeur lorsque j'appuie sur un bouton.

Je suis pas trop connaisseur en QT, je pense que tu devrais regarder sur leur site, toutes les possibilités et les fonctions sont explicitées.

Commentaire de fil1234 le 20/06/2010 23:03:30

Ca m'interesse d'avoir ton test avec le bouton

Commentaire de CptPingu le 21/06/2010 09:50:27 administrateur CS

Enum:
http://www.pps.jussieu.fr/~rifflet/enseignements/LC4/cours2.html
http://c.developpez.com/cours/bernard-cassagne/node92.php

Commentaire de samoura969 le 22/06/2010 15:29:57

J'ai regardé le type enum, intéressant. Je vais voir comment m'en servir...

Commentaire de CodeSteph le 20/10/2011 00:31:48

Salut,
J'ai un probleme de avec le signal, qui ne me connect pas à mon slot.
A la reception d'un octet, je tombe bien dans le thread je passe dans le if(nBytesRead) (point d'arret) mais quand je mets un point d'arret dans le slot qui est connecté au signal.... ben j'y tombe jamais. Je precise que je debute sur QT donc il est probable que l'erreur soit dans mon code, mais un peu de support me ferait du bien

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lecture d'un port serie (RS232) sous LINUX [ par DjBouch ] Je suis en BTS informatique industriel et mon projet consiste à lire les trames d'une station météo (wmr918) à travers un port série (RS232) sous Linu Communication Port serie RS232 [ par freddy766 ] Bonjour, J'ai un petit probleme concernant la communication RS232 (port serie) en c++. Afin de tester mon programme sur des appareils et etablir des c demande d'aide Cherche interception sur RS232 port serie [ par chemins_hermes ] Bonjour tout le monde.je cherche a pouvoir intercepter tout ce qui sort ou rentre par le port RS232 (port serie). et a le mettre dans un fichier log.c Liaison serie rs232 [ par Adri_52 ] Quelqu'un pourrait m expliquer comment fait on pour ouvrir et envoyer sur une liaison serie rs232 dans un environnement DOS.(sans windows.h)Merci port serie (RS232) [ par njinya ] Salut à tout le monde je m'intéresse à l'informatique industriel et j'aimerais manipuler les ports serie(ou parallèles) pour allumer une led par exemp Différence entre un port serie et un port PCI [ par wallie0703 ] Est ce quelqu'un connait les différences entre un port série et un port PCI? Merci.Bien à vous... utilisation du port serie sou linux qt en c++ [ par zemil ] Bonjour!!  j'ai besoin utilisé le port serie 1 et de pouvoir changer étas des sortie tx, dtr, rts, a 1 ou a 0  et eventuelment lire les entrées et je liaison base de données [ par lola0608 ] Salut tout le monde, voilà ça fait un baille que je cherche comment établir une liaison en local avec ma base de données. j'ai une interface faite ave Lire sur RS232 [ par Torhi ] Bonjour,je fais un projet et je dois lire dans le port RS232 des données envoyées par un accéléromètre.J'utilise DevC++ et j'aimerais savoir si il y a lire des données sur le port RS232 [ par Torhi ] Bonjour,je fais un projet et je dois lire dans le port RS232 des données envoyées par un accéléromètre.J'utilise DevC++ et j'aimerais savoir si il y a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales