begin process at 2012 02 09 08:25:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > COMMUNICATION PORT SÉRIE RS232

COMMUNICATION PORT SÉRIE RS232


 Information sur la source

Note :
5,8 / 10 - par 5 personnes
5,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Niveau :Débutant Date de création :24/03/2005 Vu / téléchargé :35 655 / 7 170

Auteur : Ruben_Manu

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

 Description

Ce code vous permet de choisir le Port Com de l'ouvrir, d'y faire une lecture et une écriture et de le fermer.
On peut l'utiliser pour receptionner des trames gps ou météorologique ou autres...



 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


 Sources de la même categorie

Source avec Zip Source avec une capture RS232 ET PORT // par morphixx
Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE par victorcoasne
Source avec Zip Source avec une capture FAIRE GLISSER LA SOURIS par shorzy
Source avec Zip COMMUNICATION RS232 VIA PORT COM par MadMax1024
Source avec Zip Source avec une capture EXTINCTION ET REDEMARRAGE DE VOTRE MONITEUR À UNE HEURE PRÉC... par Yost

Commentaires et avis

Commentaire de Kirua le 25/03/2005 10:27:35

Tu devrais, je pense, appeler CloseCOM() dans le destructeur de la classe de liaison rs232.

Aussi, tu mélanges l'ensemble windows.h BOOL TRUE FALSE et l'ensemble standard (intégré au langage) bool true false. Fais ton choix :)

Sinon, merci pour ce code. Faudrait que je me mette à l'électronique un de ces jours.

Commentaire de Pendary le 07/05/2005 13:53:31

Salut je viens de décourvir ton code , et je ten remercie c'est ce que je cherchais :)

je viens de m'en servir mais j'obitent une erreur : voici le bout de programme que j'ai tapé

void CMesurePlaneiteDlg::OnConfiguration()
{
LiaisonRS232 *Liaison = new LiaisonRS232();
int init = Liaison->OpenCOM(1);
if (init) m_sTrame="initialisation ok!";
UpdateData(FALSE);

char *Trame;
int *nb_envoi;
sprintf(Trame, "%s%s%s%s", 0x50, 0x4C, 0x2C, 0x31);

Liaison->WriteCOM(Trame,strlen(Trame),nb_envoi);
Liaison->CloseCOM();
}

et j'obtient ceci comme erreur lors de la compilation, si tu pouvais m'aider :) ca serai sympa :)

"fatal error C1010: unexpected end of file while looking for precompiled header directive"

Commentaire de Kirua le 07/05/2005 13:58:16

tu n'aurais pas oublié un #endif ou un ; après une déclaration de class / struct / enum ?

Commentaire de Pendary le 07/05/2005 14:05:43

et bien en faite l'erreur provient du fichier LiaisonRS232.cpp donc c'est pas mon programme en faite ;)

Le problème vient donc du ficheir que je vien de dl

Pourrais tu me dire si tu vois une faute dans le programme stp ? :)

Merci d'avance

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include "LiaisonRS232.h"

using namespace std;

#define RX_SIZE         4096    /* taille tampon d'entrée  */
#define TX_SIZE         4096    /* taille tampon de sortie */
#define MAX_WAIT_READ   5000    /* temps max d'attente pour lecture (en ms) */
int nId;
int nBytesWritten;
int nBytesRead;

LiaisonRS232::LiaisonRS232()
{
//configuration du temps d'attente
g_cto.ReadIntervalTimeout = MAX_WAIT_READ;
g_cto.ReadTotalTimeoutMultiplier = 0;
g_cto.ReadTotalTimeoutConstant = MAX_WAIT_READ;
g_cto.WriteTotalTimeoutMultiplier = 0;
g_cto.WriteTotalTimeoutConstant = 0;

//Configuration du Port
g_dcb.DCBlength = sizeof(DCB);
g_dcb.BaudRate = 9600;
g_dcb.fBinary = true;
g_dcb.fParity = false;
g_dcb.fOutxCtsFlow = false;
g_dcb.fOutxDsrFlow = false;
g_dcb.fDtrControl = DTR_CONTROL_ENABLE;
g_dcb.fDsrSensitivity = false;
g_dcb.fTXContinueOnXoff = false;
g_dcb.fOutX = false;
g_dcb.fInX = false;
g_dcb.fErrorChar = false;
g_dcb.fNull = false;
g_dcb.fRtsControl = RTS_CONTROL_ENABLE;
g_dcb.fAbortOnError = false;
g_dcb.fDummy2 = 0;
g_dcb.wReserved = 0;
g_dcb.XonLim = 0x100;
g_dcb.XoffLim = 0x100;
g_dcb.ByteSize = 8;
g_dcb.Parity = NOPARITY;
g_dcb.StopBits = ONESTOPBIT;
g_dcb.XonChar = 0x11;
g_dcb.XoffChar = 0x13;
g_dcb.ErrorChar = '?';
g_dcb.EofChar = 0x1A;
g_dcb.EvtChar = 0x10;
}

LiaisonRS232::~LiaisonRS232()
{
}

bool LiaisonRS232::OpenCOM(int nId)
{
char szCOM[5];

    /* construction du nom du port, tentative d'ouverture */
    sprintf(szCOM, "COM%d", nId);

    g_hCOM = CreateFile(szCOM, GENERIC_READ|GENERIC_WRITE, 0, NULL,
                        OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
    if(g_hCOM == INVALID_HANDLE_VALUE)

    {
        printf("Erreur lors de l'ouverture du port COM%d", nId);
        return FALSE;
    }

    /* affectation taille des tampons d'émission et de réception */
    SetupComm(g_hCOM, RX_SIZE, TX_SIZE);

    /* configuration du port COM */
    if(!SetCommTimeouts(g_hCOM, &g_cto) || !SetCommState(g_hCOM, &g_dcb))
    {
        //printf("Erreur lors de la configuration du port COM%d", nId);
        CloseHandle(g_hCOM);
        return FALSE;
    }

    /* on vide les tampons d'émission et de réception, mise à 1 DTR */
    PurgeComm(g_hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
    EscapeCommFunction(g_hCOM, SETDTR);
    return TRUE;
}

bool LiaisonRS232::ReadCOM(void* buffer, int nBytesToRead, int* pBytesRead)
{
return ReadFile(g_hCOM, buffer, nBytesToRead, (LPDWORD)pBytesRead, NULL);
}

bool LiaisonRS232::WriteCOM(void* buffer, int nBytesToWrite, int* pBytesWritten)
{
    return WriteFile(g_hCOM, buffer, nBytesToWrite, (LPDWORD)pBytesWritten, NULL);
}

bool LiaisonRS232::CloseCOM()
{
    CloseHandle(g_hCOM);
    return true;
}

Commentaire de Kirua le 07/05/2005 14:07:42

non, tu ne m'as pas compris, je pense qu'il y a une erreur dans le .h du controlleur rs232. tu peux le taper ici?

Commentaire de Pendary le 07/05/2005 14:09:43

voila :)


#ifndef _LIAISONRS232__H_
#define _LIAISONRS232__H_
#include <windows.h>

class LiaisonRS232
{
public:
LiaisonRS232();
~LiaisonRS232();
bool OpenCOM(int nId);
bool ReadCOM(void* buffer, int nBytesToRead, int* pBytesRead);
bool WriteCOM(void* buffer, int nBytesToWrite, int* pBytesWritten);
bool CloseCOM();
private:
HANDLE g_hCOM;
COMMTIMEOUTS g_cto;
DCB g_dcb;
};
#endif

Commentaire de Pendary le 07/05/2005 14:10:36

en tout cas je te remercie poue ta rapidité et pour ton aide :)

Commentaire de Kirua le 07/05/2005 14:12:33

malheureusement, tu me remercies un tantnet trop vite, parce que je vois pas ... enfin, c'est pas ce que je pensais du moins. manque de bol, je dois partir maintenant, mais si demain matin c'est tjs pas réglé ton souci, envois moi un mail avec ton code, et je regarde quand je suis debout (tard ;)):

kirua at coder-studio . com

Commentaire de Pendary le 07/05/2005 14:15:22

merci bcp :) a demain ^^

Commentaire de ymca2003 le 10/05/2005 08:45:01

il manque #include "StdAfx.h" au début du .cpp

cette include DOIT être le PREMIER de tous les fichiers sources sous VC++ a moins de choisir un projet VIDE.

Commentaire de Pendary le 14/05/2005 21:58:04

Merci bien pour ta réponse :)

Commentaire de Kirua le 15/05/2005 00:44:12

Ah ça, les MFC, connaissais pas moi ^^.

Commentaire de berenger_R le 22/02/2006 17:56:53

Bonjour,
Il est dit que ce programme peut receptionner des trames GPS.
Est ce que quelqu'un pourrait m'explique comme il fonctionne. Parce que c'est exactement ce que je doit faire mais, je ne suis pas un spécialiste du C++.
Pour résumer, il me faut récupérer en temps réel les differentes trames GPS qui proviennent d'un recepteur pour les traiter et ranger toutes les données utiles (contenu dans ces trames) dans une structure. Ceci me permetra ensuite de faire des calculs avec ces données.
De plus si quelqu'un sait aussi comment passer des trames récupérées à un type struct.
Je vous remercie par avance

Commentaire de KaYaStar le 09/03/2006 13:07:39

Vous n'auriez pas la meme chose sous linux ???

Commentaire de saoufe972 le 24/03/2006 12:26:14

salut ton programme il est trop top
j'ai un projet en cours.

ce que j'aurais voulu c'est juste le module de lecture de la liaison.
merci

Commentaire de ben_34_ le 30/03/2006 15:55:07

Salut,

D'abord félicitations pour ce code qui est très clair et qui fonctionne bien.

Cependant j'ai un petit problème:
Je souhaite m'en servir pour recevoir et envoyer des données, mais je suis limité dans les données: par exemple si j'envoi "00" en hexa, ça ne marche pas, pareil pour "20" (un espace en ASCII). C'est sûrement parceque certains caractères sont interprétés comme des fins de transmission ou je ne sais quoi, sans doute une fonctionnalité du contrôle de flux.
Je pense qu'en modifiant un paramètre dans com.h je doit pouvoir résoudre mon problème.

Aurais-tu une idée sur le paramètre à changer? Ou est-ce que ce n'est pas si simple?

En te remerciant

Commentaire de dopemax le 30/08/2006 12:03:46

Bravo pour le code
Une petite remarque, tu as oublié les {} du else dans la fonction void Console::MnuOuvrirCOM() du console.cpp
du coup il indique tout le temps l'erreur, alors qu'il n'y en a pas.
Voila

Commentaire de Mr.X le 17/06/2007 03:06:39

Les convention aurait du être un peu mieu respecter ... Et puis les variables globale sont a proscrire.

Commentaire de muuller le 22/06/2007 18:39:16

salut,j'ai utilisé ton code il est vraiment top,mais j'ai 4 erreurs qui sont :
fatal error C1083: Cannot open include file: 'LiaisonRS232.h': No such file or directory
fatal error C1083: Cannot open include file: 'LiaisonRS232.h': No such file or directory
fatal error C1083: Cannot open include file: 'LiaisonRS232.h': No such file or directory
fatal error C1083: Cannot open include file: 'Application.h': No such file or directory
La primère est localisée dans Application.cpp ,la deuxième est dans  Console.cpp, la troisième se trouve dans Liaison RS232.cpp et la 4éme est dans source.cpp

pouvez vous m'aider please

Commentaire de muuller le 22/06/2007 18:43:26

Au fait ce que je voudrai faire c'est piloter une grille de commutation à 4 entrées et 4 sorties à partir du port RS232 d'un pc.
J'aimerai envoyer 4 bytes qui sont respectivement : l'instruction, l'entrée choisie, la sortie choisie,et le n° de machine.Et je voudrai voir le résultat sur l'afficheur 7 segment de ma grille.

Si quelqu'un peut m'aider, je lui en serait trés reconnaissant.
Merci!!!!

Commentaire de Pico12 le 12/02/2008 12:38:06

Excellent code.

Juste 2 petites remarques :
Comme DOPEMAX l'a déjà dit, il manque des accolades dans console.cpp

Pour ceux qui voudrais utiliser des ports supérieur à 10 :
char szCOM[20];
sprintf(szCOM, "\\\\.\\COM%d", nId);
//(cf. MSDN)
C'est utile par exemple pour dialoguer avec un composant USB qui est émulé comme un port serie (microcontroleur, ...).

Commentaire de devinfos le 24/03/2011 17:10:06

Merci beaucoup,j'ai essayé le code il marche à merveille  

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,466 sec (3)

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