Télécharger le zip
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.
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"
tu n'aurais pas oublié un #endif ou un ; après une déclaration de class / struct / enum ?
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;}
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?
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
en tout cas je te remercie poue ta rapidité et pour ton aide :)
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
merci bcp :) a demain ^^
il manque #include "StdAfx.h" au début du .cppcette include DOIT être le PREMIER de tous les fichiers sources sous VC++ a moins de choisir un projet VIDE.
Merci bien pour ta réponse :)
Ah ça, les MFC, connaissais pas moi ^^.
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
Vous n'auriez pas la meme chose sous linux ???
salut ton programme il est trop topj'ai un projet en cours.ce que j'aurais voulu c'est juste le module de lecture de la liaison.merci
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
Bravo pour le codeUne petite remarque, tu as oublié les {} du else dans la fonction void Console::MnuOuvrirCOM() du console.cppdu coup il indique tout le temps l'erreur, alors qu'il n'y en a pas.Voila
Les convention aurait du être un peu mieu respecter ... Et puis les variables globale sont a proscrire.
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 directoryfatal error C1083: Cannot open include file: 'LiaisonRS232.h': No such file or directoryfatal error C1083: Cannot open include file: 'LiaisonRS232.h': No such file or directoryfatal error C1083: Cannot open include file: 'Application.h': No such file or directoryLa 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.cpppouvez vous m'aider please
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!!!!
Excellent code.Juste 2 petites remarques : Comme DOPEMAX l'a déjà dit, il manque des accolades dans console.cppPour 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, ...).
Merci beaucoup,j'ai essayé le code il marche à merveille
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 872 883 membres 42 nouveaux aujourd'hui 16 151 membres club