Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : construire une trame de données en c++ [ Divers / Débutant(e) ] (salsou34)

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é 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 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 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 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 Trame Reseau c onception [ par Spiffou ] bonjour à tous, je fais un programme utilisant winsok2.h et donc le réseau (tcp/ip). je souhaiterais envoyer entre les 2 modules une trame qui est c


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.