IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Problème avec une liaison série


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut Problème avec une liaison série
    Bonjour,

    Pour une application de configuration de système j'aurais besoin de communiquer entre mon ordinateur et un système équipé d'un microcontrôleur. Pour cela je souhaite utiliser la liaison série présente sur le microcontrôleur et également sur l'ordinateur.

    Mon problème est que je n'arrive pas à utiliser la liaison série de l'ordinateur dans mon application Winform, donc j'aurais voulus savoir si quelqu'un connaissait la classe à utiliser et avais peut être des morceaux de codes pour m'aider.

    Pour l'initialisation du port série j'utilise le morceau de code suivant :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    System::IO::Ports::SerialPort Port;
                //Num. port
                if (comboBox1->Text == L"1")
                    Port.PortName="COM1";
                else if (comboBox1->Text==L"2")
                    Port.PortName="COM2";
                else if (comboBox1->Text==L"3")
                    Port.PortName=="COM3";
                else if (comboBox1->Text==L"4")
                    Port.PortName="COM4";
                //Vitesse
                Port.BaudRate=19200;
                //Bit de parité
                Port.Parity=IO::Ports::Parity::None;
                //Nb de Bits
                Port.DataBits=8;
                //Bit d'arrêt
                Port.StopBits=IO::Ports::StopBits::One;
     
                // Taille des buffers
                Port.ReadBufferSize = 10;
                Port.WriteBufferSize = 10;
     
                if (this->button7->Text=="Connecter")
                 {
                    this->button7->Text="Déconnecter";   
                    //Ouverture du port selectionné
                    Port.Open();
     
                    unsigned char Tab_Temp[3];
                    Tab_Temp[0] = (ADDRE_OLED_VPOL)>>8;
                    Tab_Temp[1] = ADDRE_OLED_VPOL;
                    Tab_Temp[2] = (unsigned char)(this->numericUpDown9->Value);
                    Envoi(0,Tab_Temp,3);
     
                 }

    Pour écrire sur le port j'utilise la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    System::IO::Ports::SerialPort Port;
     
    	        // voir déclaration en haut de la page : //variables non managée
     
    		Buffer_Envoi[ptr_Buffer]='S';
    		ptr_Buffer++;
    		Buffer_Envoi[ptr_Buffer]=0;
    		ptr_Buffer++;
    		Buffer_Envoi[ptr_Buffer]=ordre;
    		ptr_Buffer++;
    		for(int i=0;i<taille;i++)
    		{
    			Buffer_Envoi[ptr_Buffer]=Tab[i];
    			ptr_Buffer++;
    		}
    		Buffer_Envoi[1]=ptr_Buffer+2;
    		ptr_Buffer++;
    		Buffer_Envoi[ptr_Buffer]=CheckSum(Buffer_Envoi);
    		ptr_Buffer++;
    		temp=ptr_Buffer;
    		Buffer_Envoi[ptr_Buffer]='E';
     
    		Port.Write(Buffer_Envoi,0,temp);

    Et à la compilation je me récupère l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    error C2664: 'void System::IO::Ports::SerialPort::Write(cli::array<Type,dimension> ^,int,int)' : impossible de convertir le paramètre 1 de 'unsigned char [45]' en 'cli::array<Type,dimension> ^'
            with
            [
                Type=wchar_t,
                dimension=1
            ]
    Je tiens à préciser je ne connais pas grand chose en Winform, je ne sais pas si c'est du C++ ou autres chose comme language. D'habitude je travail en MFC mais là je reprend un projet. Donc si cela se trouve cela n'est qu'un problème de déclaration de mon tableau ?


    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    c'est du C++/CLI... et s'est juste un problème de conversion.. donc, si tu connais les MFC (et si c le cas, j'ai du mal à voir comment tu ne peux pas voir que le code est du C++, m'enfin passons), faut surement caster ou convertir tes données

    Bref, cherche un peu car l'erreur du compilo est tellement significative par elle même qu'en général, on peut chercher un peu plus
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Merci pour ta réponse.

    En fait je viens juste de découvrir que c'était du C++/CLI je connaissais pas. C'est vrai que ça ressemblait beaucoup à du C++, mais il y avait des choses qui me paraissaient étranges (comme les pointeur en ^ et pas en *), enfin bref.
    edit : Bon ok en fait ^ n'est pas un pointeur, mais handle vers une classe managée, autant pour moi.

    Donc oui j'ai convertis mon unsigned char Buffer_Envoi[45] en array<unsigned char>^ Buffer_Envoi= gcnew array<unsigned char>(45). Et donc maintenant je n'ai plus d'erreurs à ce niveau là. Par contre mon soft plante au moment de l'envoi sur le port série (Port.Write(Buffer_Envoi,0,temp), j'ai pas tout saisie aux classes managées, mais je pense que le fait de déclaré la classe Port (System::IO:orts::SerialPort Port et de la configurer dans une fonction puis de la rappeler de la même manière dans une autre fonction, me parais étrange. Pour moi la personne qui a commencé le code a appeler une fois la classe, la configure et ensuite crée un nouvel objet avec le même nom et ne réutilise pas celui précédement créer. Enfin bref je vais regarder de plus près les cours sur le C++/CLI.

Discussions similaires

  1. [Débutant] Reception de données + Attente avec une Liaison Série (VSB2010)
    Par loicb38 dans le forum VB.NET
    Réponses: 5
    Dernier message: 19/05/2015, 08h21
  2. Problèmes avec une liaison DLNA
    Par PPz78 dans le forum Apple
    Réponses: 0
    Dernier message: 25/01/2009, 09h29
  3. Problème avec une liaison entre table
    Par dominou73 dans le forum Hibernate
    Réponses: 7
    Dernier message: 29/10/2007, 15h29
  4. Réponses: 4
    Dernier message: 30/03/2007, 16h27
  5. Problème avec la liaison série
    Par perchman dans le forum Général Python
    Réponses: 3
    Dernier message: 22/03/2007, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo