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 :

Port série et Base de données


Sujet :

Windows Forms

  1. #1
    Invité
    Invité(e)
    Par défaut Port série et Base de données
    Bonjour à tous, je suis venu il y a environ 2 semaines pour une question sur les Random, ayant trouvé une solution, je reviens ici pour reposer quelques questions .

    Concernant le port série, j'ai un problème d'initialisation, voici mon code :

    Code se trouvant dans la classe principale (Form1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void buttonOuvrir_Click(object sender, EventArgs e)
            {
                CSeries Ouvrir = new CSeries();
                Ouvrir.OuvrirPort();
            }
    Code se trouvant dans la classe CSeries :

    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
    public void OuvrirPort()
        {
            Port.PortName = "COM1";
            Port.BaudRate = 9600;
            Port.Parity = 0;
            Port.DataBits = 8;
     
            Port.Handshake = Handshake.RequestToSend;
     
            Port.DtrEnable = true;
            Port.RtsEnable = true;
     
            Port.ReadTimeout = 100;
            Port.WriteTimeout = 100;
            Port.Open();
        }
    Et l'erreur retournée :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Et je n'ai aucune idée de ce que c'est.
    Car quand je met la fonction OuvrirPort dans le Form1, ça marche nickel.


    En ce qui concerne la base de données, j'aimerais récupérer des valeurs d'une table pour les stocker dans un tableau ou autre, mais je ne sais pas comment faire :/.

    Pour le moment, je les stocke dans un comboBox, mais j'aimerais pouvoir utiliser ces valeurs automatiquement, sans les sélectionner manuellement.

    Voilà ce que je souhaiterais faire :
    Je créé par exemple 4 threads.
    Pour chaque thread, j'aimerais sélectionner une valeur de la table et l'associer à ce thread.

    Je vous remercie d'avance .

  2. #2
    Invité
    Invité(e)
    Par défaut
    Vérifie que "Port" soit bien instancié, lorsque tu utilises OuvrirPort().

  3. #3
    Invité
    Invité(e)
    Par défaut
    Effectivement, je n'avais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private SerialPort Port;
    Ca devait être pour ça, merci .

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai un autre problème avec le port série.
    Je l'ouvre avec cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void BoutonConnexionSerie_Click(object sender, EventArgs e)
            {
                try
                {
                    MonPort.OuvrirPort();
                    LabelPort.Text = "Port ouvert";
                }
                catch (Exception ExceptionOuverturePort)
                {
                    MessageBox.Show(ExceptionOuverturePort.Message, "Erreur lors de l'ouverture du port série");
                }
            }
    Mais lorsque j'essaye d'envoyer quelque chose depuis une autre fonction, comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void CreationTrames()
            {
                   Port.Write("ARTHURE " + Trame + "\n\n");
            }
    Cela me met que le port est fermé, et je n'ai aucune idée de pourquoi.

    Voilà ma classe CSeries :

    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
    public class CSeries
    {
        public SerialPort Port = new SerialPort();
     
        public CSeries()
        {
     
        }
     
        ~CSeries()
        {
        }
     
        public void OuvrirPort()
        {
            Port.PortName = "COM1"; // Nom du port
            Port.BaudRate = 9600;   // Vitesse de transfert en Bauds
            Port.Parity = 0;        // Parité
            Port.DataBits = 8;
     
            Port.Handshake = Handshake.RequestToSend;
     
            Port.DtrEnable = true;
            Port.RtsEnable = true;
     
            Port.ReadTimeout = 100;
            Port.WriteTimeout = 100;
            Port.Open();
        }
     
        public void FermerPort()
        {
            Port.Close();
        }
    }
    Cependant, lorsque je met le code de la fonction OuvrirPort() directement dans la fonction CreationTrames(), cela fonctionne parfaitement.

    Quelqu'un pourrait-il m'éclairer ?

    Merci d'avance

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Tu devrais déjà utiliser les énumération pour initialiser ton port et ne pas mettre des valeurs directes.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu pourrais nous mettre le code où tu appelles la Méthode CreationTrame()

  7. #7
    Invité
    Invité(e)
    Par défaut
    Finalement, mon prof m'a aidé à trouvé la solution, merci quand même

    Je mets le code, au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void BoutonCreer_Click(object sender, EventArgs e)
            {
                int k;
                Convert.ToInt64(TextBoxNombreCamions.Text.Trim());
                Thread[] ThreadCamions = new Thread[20];
                for (k = 0; k < NbCamions; k++)
                {
                    ThreadCamions[k] = new Thread(new ThreadStart(CreationTrames));
                    ThreadCamions[k].Start();
                    System.Threading.Thread.Sleep(2000);
                    ThreadCamions[k].Join();
                }
            }
    J'ai juste un problème avec mes threads, mais je vais règler ça

    Et je n'ai toujours aucune idée de comment stocker des valeurs d'une table d'une base de données dans un tableau, donc je les ai stockées dans un ComboBox, le problème, c'est que j'aimerais que chaque valeur soit associée à un thread :/

    Edit : En fait, j'aimerais par exemple récupérer la 3ème valeur d'un ComboBox, mais directement dans le code, sans que l'utilisateur soit obligée de la choisir.
    Dernière modification par Invité ; 30/05/2012 à 15h32.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/07/2011, 17h34
  2. Réponses: 5
    Dernier message: 07/08/2010, 21h51
  3. Réponses: 13
    Dernier message: 24/05/2006, 10h27
  4. [VB6]Réception de données sur port série
    Par lindecker dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/03/2006, 06h48
  5. Recevoir données port série
    Par Vodkha dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/09/2005, 11h45

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