Accueil > Forum > > > > construire une trame de données en c++
construire une trame de données en c++
vendredi 11 mai 2007 à 14:11:47 |
construire une trame de données en c++

salsou34
|
Bonjour,
J'essai depuis plusieurs jours de créer une trame de données afin de l'envoyer sur un port serie.
Ma trame serait constitué de 45 octets;
Début de trame = 1 octet;
6 float de 4 octet = 24 octets;
et le CRC = 20 octets;
j'ai créer une structure Trame avec mes données mais le souci c'est que
ma fonction WriteCom me dit qu'elle attends un float et qu'elle ne peut
pas convertir struct to float:
error C2664: 'WriteCOM' : cannot convert parameter 2 from 'struct Trame' to 'float'.
A l'aide, merci
|
|
vendredi 11 mai 2007 à 18:33:46 |
Re : construire une trame de données en c++

luhtor
|
Bas mets le code en question. Car la c'est évident que t'as une erreur de type, mais dire par quoi corriger, ca va etre difficile :)
|
|
samedi 12 mai 2007 à 18:48:08 |
Re : construire une trame de données en c++

emmatopiak
|
Salut,
Tu pourrais aussi dire quelle est la librairie que tu utilises car je trouve pas sur google ta fonction writeCom ou ses arguments..
Une autruche ne se cuit pas aux petits lardons.
|
|
lundi 14 mai 2007 à 13:25:02 |
Re : construire une trame de données en c++

salsou34
|
Bonjour, Merci les gars de vous soucier de mon probleme, mais j'ai réussi a le résoudre, il fallait juste changer le type de données à envoyer dans la fonction writecom: fonction initiale-> int WriteCOM(char *Port,float TrameToSend) fonction corrigée-> int WriteCOM(char *Port,Trame TrameToSend) mais maintenant j'ai un autre souci il faut que je construise le Controle de Redondance Cyclique a partir de cette trame c'est a dire le Debut de trame et les 6 floattants. N.B. emmatopiak il suffit de regarder des sources concernant la gestion du port serie (rs 232).
|
|
lundi 14 mai 2007 à 14:04:54 |
Re : construire une trame de données en c++

emmatopiak
|
Salut,
les sources concernant le port serie ? les sources de quoi ? du noyau linux ? _ je regarde pas des sources pour voir les entetes des fonctions, je regarde de la documentation _ et j'en ai pas trouve' sur writeCOM de mon cote :p
Une autruche ne se cuit pas aux petits lardons.
|
|
lundi 14 mai 2007 à 14:08:31 |
Re : construire une trame de données en c++

emmatopiak
|
RE
Sinon, pour ta seconde question:
Il faut que tu saches quel est l'algo de CRC utilisé puis tu construis une structure juste avec les champs voulus (le debut de la trame et les 6 flottants) et tu passes ton algo dessus regarde dans les sources vu que l'algo changera pas, ca t'evitera les erreurs :p
Une autruche ne se cuit pas aux petits lardons.
|
|
lundi 14 mai 2007 à 14:15:38 |
Re : construire une trame de données en c++

salsou34
|
Salut, Voici le programme sur lequel je bosse:
#include <windows.h> #include <conio.h> #include <shlwapi.h> #include <stdio.h> #include "structure.h"
/*---------------------------------------------------------------------------------------------*/ /* DECLARATION DE LA FONCTION DE CONFIGURATION DU PORT RS232 */ /*---------------------------------------------------------------------------------------------*/ int InitCOM(char *,char *,char *,char *,char *); /*---------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------*/ /* DECLARATION DE LA FONCTION D'ECRITURE */ /*---------------------------------------------------------------------------------------------*/ int WriteCOM(char *,Trame); /*---------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------*/ /* DECLARATION DE LA FONCTION DE LECTURE */ /*---------------------------------------------------------------------------------------------*/ int ReadCOM(char *); /*---------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------*/ /* FONCTION DE CONFIGURATION DU PORT RS232 */ /*---------------------------------------------------------------------------------------------*/ int InitCOM(char *Port,char *Parite,char *Vitesse,char *Data,char *StopBit) { DCB dcb; //Déclaration d'une variable contenant la configuration du port HANDLE hCom; //Déclaration d'un HANDLE DWORD dwError; //Numéro de l'erreur BOOL fSuccess; //Tout s'est bien passé
/*----------------------------------------------------*/ /* Ouverture du port COM */ /*----------------------------------------------------*/ hCom=CreateFile( Port, //Choix du Port "COMx" GENERIC_READ|GENERIC_WRITE, //Accès pour lire et écrire sur le port 0, //Accès exclusif au port COM NULL, //Sécurité par défaut OPEN_EXISTING, //Doit être à cette valeur car ce n'est pas un fichier 0, // NULL); //Mode synchrone /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Vérifier que le handle est ouvert correctement */ /*----------------------------------------------------*/ if(hCom==INVALID_HANDLE_VALUE) { dwError=GetLastError(); //On récupère le numéro de l'erreur } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Récupération de la configuration existante */ /*----------------------------------------------------*/ fSuccess=GetCommState(hCom,&dcb); if(!fSuccess) { //Ecrire ici le programme qui gère les erreurs } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Définition des paramètres */ /*----------------------------------------------------*/ dcb.DCBlength=sizeof(DCB); //Taille de la structure
dcb.BaudRate=StrToInt(Vitesse); //Définition de la vitesse
dcb.fBinary=TRUE; //Mode binaire dcb.fParity=FALSE; //Sans vérification de la parité dcb.fOutxCtsFlow=FALSE; dcb.fOutxDsrFlow=FALSE; dcb.fDtrControl=FALSE; dcb.fDsrSensitivity=FALSE; dcb.fTXContinueOnXoff=FALSE; dcb.fRtsControl=FALSE;
dcb.ByteSize=StrToInt(Data); //Définition de la taille de la trame
if(strcmp(Parite,"Aucune")==0) // dcb.Parity=NOPARITY; // if(strcmp(Parite,"Paire")==0) //Definition de la parité dcb.Parity=EVENPARITY; // if(strcmp(Parite,"Impaire")==0) // dcb.Parity=ODDPARITY; //
if(strcmp(StopBit,"1")==0) // dcb.StopBits=ONESTOPBIT; // if(strcmp(StopBit,"1.5")==0) //Définition du nombre de bits de stop dcb.StopBits=ONE5STOPBITS; // if(strcmp(StopBit,"2")==0) // dcb.StopBits=TWOSTOPBITS; // /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Mise à jour du port */ /*----------------------------------------------------*/ fSuccess=SetCommState(hCom,&dcb); if(!fSuccess) { //Ecrire ici le programme qui gère les erreurs } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Fermeture du port COM */ /*----------------------------------------------------*/ getch(); CloseHandle(hCom); /*----------------------------------------------------*/
return 0; } /*---------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------*/ /* FONCTION D'ECRITURE */ /*---------------------------------------------------------------------------------------------*/ int WriteCOM(char *Port,Trame TrameToSend) { HANDLE hCom; //Déclaration d'un HANDLE DWORD dwError; //Numéro de l'erreur DWORD dwNumBytesWritten; //Variable qui contiendra le nombre d'octets écrit dans le buffer BOOL WriteError;
/*----------------------------------------------------*/ /* Ouverture du port COM */ /*----------------------------------------------------*/ hCom=CreateFile( Port, //Choix du Port "COMx" GENERIC_READ|GENERIC_WRITE, //Accès pour lire et écrire sur le port 0, //Accès exclusif au port COM NULL, //Sécurité par défaut OPEN_EXISTING, //Doit être à cette valeur car ce n'est pas un fichier 0, // NULL); //Mode synchrone /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Vérifier que le handle est ouvert correctement */ /*----------------------------------------------------*/ if(hCom==INVALID_HANDLE_VALUE) { dwError=GetLastError(); //On récupère le numéro de l'erreur } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Envoi des données */ /*----------------------------------------------------*/ WriteError=WriteFile( hCom, //Instance d'accès du port série &TrameToSend, //Pointeur sur la donnée à envoyer 25, //Nombre d'octets à envoyer &dwNumBytesWritten, //Adresse d'une variable 32 bits dans laquelle Windows fera une copie NULL); if(!WriteError) { //Ecrire ici le programme qui gère les erreurs } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Fermeture du port COM */ /*----------------------------------------------------*/ CloseHandle(hCom); /*----------------------------------------------------*/
return 0; } /*---------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------*/ /* FONCTION DE LECTURE */ /*---------------------------------------------------------------------------------------------*/ int ReadCOM(char *Port) { int TrameReceived; HANDLE hCom; //Déclaration d'un HANDLE DWORD dwError; //Numéro de l'erreur DWORD dwBytesTransferred; DWORD dwCommStatus; BOOL ReadError;
/*----------------------------------------------------*/ /* Ouverture du port COM */ /*----------------------------------------------------*/ hCom=CreateFile( Port, //Choix du Port "COMx" GENERIC_READ|GENERIC_WRITE, //Accès pour lire et écrire sur le port 0, //Accès exclusif au port COM NULL, //Sécurité par défaut OPEN_EXISTING, //Doit être à cette valeur car ce n'est pas un fichier 0, // NULL); //Mode synchrone /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Vérifier que le handle est ouvert correctement */ /*----------------------------------------------------*/ if(hCom==INVALID_HANDLE_VALUE) { dwError=GetLastError(); //On récupère le numéro de l'erreur } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Définition du masque d'événements */ /*----------------------------------------------------*/ SetCommMask( hCom, EV_RXCHAR); //Ici EV_RXCHAR indique que l'on va détecter la réception de données /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Attente d'un événement définit dans le masque */ /*----------------------------------------------------*/ WaitCommEvent( hCom, &dwCommStatus, 0); /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Réception des données */ /*----------------------------------------------------*/ ReadError=ReadFile( hCom, //Instance d'accès au port COM &TrameReceived, //Pointeur sur la donnée à envoyer 25, //Nombre d'octets à recevoir &dwBytesTransferred, //Adresse d'une variable 32 bits dans laquelle Windows fera une copie NULL); if(!ReadError) { //Ecrire ici le programme qui gère les erreurs } /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Affichage de la trame reçue */ /*----------------------------------------------------*/ //printf("La trame recue est : %l\n",TrameReceived); /*----------------------------------------------------*/
/*----------------------------------------------------*/ /* Fermeture du port COM */ /*----------------------------------------------------*/ CloseHandle(hCom); /*----------------------------------------------------*/
return (TrameReceived); } /*---------------------------------------------------------------------------------------------*/
En esperant que ça réponde a ta question, sinon peut tu être plus explicite sur ta réponse concernant le crc. merci :)
|
|
lundi 14 mai 2007 à 14:55:15 |
Re : construire une trame de données en c++

emmatopiak
|
RE
1) je te demande pour writeCOM et tu me dis de voir les sources. Tu me demandes pour CRC je te dis de voir les sources 2) tu dois faire un calcul de CRC sur quelques champs. Il faut mettre tous ces champs dans une structure commune 3) quand tu auras mis tout dans la structure commune, lance la fonction de calcul de CRC. Deux possibilites la: 3a) tu sais faire la fonction de CRC. Ben du coup tu la fais :p (3b) tu ne sais pas faire la fonction de CRC et tu ne la trouves pas dans les sources. Si c'est le cas, cherche sur google quel est l'algo de CRC pour les liaisons series et implemente le.
*Mais c'est forcement dans les sources donc tu vas trouver en cherchant bien. Une autruche ne se cuit pas aux petits lardons.
|
|
Cette discussion est classée dans : données, octets, construire, trame, float
Répondre à ce message
Sujets en rapport avec ce message
communication rs232 [ par sdisp ]
Bonjour,J'ai fait un programme qui envoie des données ( trame de 12 octets ) sur un module de transmition wifi via le port com.Mon probleme est que lo
compression données [ par pic22 ]
Bonjour J’ai besoin de stocker des chaînes de 40 caractères numérique dans une eeprom de 512k et il faut compresser au maximum la chaîne de 40 octets
Recuperer les 4 octets d un float en hexadecimal ou en binaire [ par salsou34 ]
Bonjour,Afin de faire un crc32 j'aurai besoin de recuperer les octets de 6 floattants, je n'ai trouvé des solutions de crc que sur des int, et je ne p
Envoie de données [ par ZIHO ]
Bonjour, Je developpe une application en C pour communiquer entre deux modules de tansmission sans fils les Zigbee. je dois envoyer d'un module à un
inverser les octets d'un type double [ par totoscill ]
Bonjour,Je souhaite tourner les octets de données de type double (probleme de big endian/ little endian).Pour des données de type long ou short pas de
decomposer float en octets [ par Saros ]
Bonjour ;Je sais qu'un float prend sur mon pc 4 octets, et je souhaiterais avoir la composition exacte de chacun d'eux.J'ai tenté un code, mais je ne
Erreur: invalid use of `this' in non-member function & `int' is not an aggregate type [ par GrosTony ]
Bonjour,J'ai un problème avec une Classe C++, voici le tracé des erreurs :$ makeg++ -c -O4 -W -g -Wall -o Nuage.o Nuage.cppNuage.cpp:4: ISO C++ forbid
port com [ par celine1664 ]
Bonjour,J'ai à réaliser en C un programme qui envera des donnée ( uniquement des réels ) sous forme de trame sur le port com avec utilisation de CRC p
Comment stocker des données depuis un fichier dans un tableau [ par Jarod1980 ]
Bonjour tout le monde,En fait, mon fichier se compose de 3 colonnes distinctes qui contiennent chacune des chiffres. Je voudrais savoir comment stocke
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|