@Bluedeep
Ce n'est pas le constructeur, mais le nom de l'une des méthode que comprend la classe. :?
D'où la confusion de nom!
Version imprimable
@Bluedeep
Ce n'est pas le constructeur, mais le nom de l'une des méthode que comprend la classe. :?
D'où la confusion de nom!
Le programme ce lance ! mais il y a des confusions avec les changements que l'ont a fait ;) je vais essayer de voir ça
Si vous ne démarrez pas le thread, avez vous un message d'erreur ?
Vous devriez pouvoir utiliser votre bouton 1 pour connecter normalement.
Même en ayant le port connecté en fait, 'Lire' ne va pas faire grand chose à part une nouvelle erreur si le thread essaye de changer le valeur d'un label.
Le code vous à été fourni et vous devez faire afficher l'état des LED sur un écran ?
Précisez le code fourni et celui que vous avez ajouté ainsi que le but, cela permettra de voir plus clair.
Voilà ce que j'ai :
Je me connecte au port COM9 ou ce situ ma µChameleon
http://img846.imageshack.us/img846/162/pb5.png
Je clique sur le Bouton1...
http://img196.imageshack.us/img196/314/pb6y.png
Et voilà l'erreur :
http://img840.imageshack.us/img840/5846/pb4m.png
Une partie du code a été fournis par le professeur pour un projet antérieur j'ai donc récupéré celui-ci affin de garder les fonctions relier à la µChameleon qui me permet de lire les entrées des Pins, le but de cette partie du projet et de géré 8 capteurs indépendants ( tout ou rien ).
Ici je voudrais voir les états des capteurs " en live " pour trouver un éventuelle mal fonctionnement du système : voir tout simplement quels capteurs sont actif ou non.
Les parties de code que j'ai moi même crée et/ou changer sont : la création du thread ainsi que sa methode Lire() , la méthodeet j'ai ensuite changer le tableau suivantCode:public int LireEntreeTOR(int NumeroPin)
avant Pin étais à 18 au lieu de 100 puis quelque référence concernant ComUSB.Code:Pin[] Bornier = new Pin[100];
Revenez sur votre code d'origine en désactivant le thread déjà, les modifications faites sur une partie du code que le programme n'atteignait jamais pose surement problème.
Alors, j'ai repris le code à part j'ai réalisé quelque modifications :
Serie n'avais rien a faire dans le code, erreur de ma part Serie = Com en faite.
Maintenant quand je lance l'application ( sans le thread ) ça tourne je peut donc me connecter au port COM9 et vérifier si la carte µchameleon répond grâce a la led.
mais une fois le thread en place la même erreur surgitça dois donc venir de mon thread, je vais éplucher ça ;)Citation:
Le port est fermé
peut être du au faite que j'ai mis la méthode du thread :en public et non en static ?Code:public void Lire()
mais quand je la passe en static il ne reconnait pasdans l'instruction :Code:this
Code:this.label9.Text = "OK";
Pour ce qui est de votre code dans un premier temps:
- Un petit tour sur les tuto. à propos des threads en particulier sur les methodes pour modifier un label (ou autre) dans la form.
- Votre fonction Lire doit tester à intervale régulière les led ? il va falloir revoir la conception car elle le fait pas.
- Dans 'LireEntreeTOR' vous n'utilisez pas le port ouvert fait par votre bouton de connexion, ce qui ne pourra donc pas fonctionner.
Etes vous certains de l'utilité de passer le test dans un thread séparé ?
ma fonction Lire dois afficher "OK" dans le label "Pas de Capteur" quand il y a présence d'un capteur (TOR, comme un interrupteur en faite )
je vais me renseigner pour modifier un label car j'ai un doute aussi ;)
Non, cela ne vient pas de la déclaration de Lire qui peut rester private dans votre cas.
Je vous conseil de lire un cours sur le fonctionnement de public, private, static, etc . . .
Un petit coup d'oeil au passage sur 'this'.
Suffisamment d'information sur le site pour cela.
Bonjour,
ou conseillez vous de mettre mon thread ?
Le thread est en fait le dernier de vos soucis, avant de vouloir l'utiliser il va falloir revoir vos bases.
Vous ne semblez pas comprendre la différence entre les variables locales et globales. Avant de poursuivre je vous invite à reprendre vos cours sur le c# pour comprendre ce qui ne va pas et revenir avec quelques correction sur votre code.
Quelques annotations pour piste.
Code:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 public partial class Form1 : Form { // Variable Globale private CSerie Serie; private bool EtatConnexion; private CChameleon CarteChameleon; public Form1() { InitializeComponent(); CSerie Serie = new CSerie(); // Inutile de créer une variable locale ici que vous n'utilisez pas. CChameleon CarteChameleon = new CChameleon(); // Idem Inutile de créer une variable locale ici que vous n'utilisez pas. Thread th = new Thread(Lire); // Toujours pas certains de l'intéret de passer par un thread, mais bon c'est juste un avis. A voir une fois le reste terminé. th.Start(); } public void Lire() { int i = 1; int retour; int GestionCapteurs = 1; CChameleon CarteChameleon = new CChameleon(); // Pourquoi créer encore une variable locale ? Sans l'initialiser correctement pour une connexion en plus. retour = CarteChameleon.LireEntreeTOR(i); // Utilisation de la variable locale !? if (retour == 1) { switch (GestionCapteurs) { case 1: i++; // Pourquoi incrémenter i que vous n'utilisez jamais ? this.label9.Text = "OK"; break; case 2: i++; this.label10.Text = "OK"; break; case 3: i++; this.label11.Text = "OK"; break; case 4: i++; this.label12.Text = "OK"; break; case 5: i++; this.label13.Text = "OK"; break; case 6: i++; this.label14.Text = "OK"; break; case 7: i++; this.label15.Text = "OK"; break; case 8: i++; this.label16.Text = "OK"; break; } } } }
Code:
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
37
38
39
40
41
42
43
44
45
46 class CChameleon { CSerie ComUSB; Pin[] Bornier = new Pin[100]; struct Pin{ public int Config; public int Valeur; }; public enum ConfigPin { Entree = 0, Sortie = 1 } public CChameleon() { ComUSB = null; } public CChameleon(CSerie Ref) { ComUSB = Ref; this.InitialisationDefaut(); } public int LireEntreeTOR(int NumeroPin) { string Trame; string TrameReponse; int Etat = -1; CSerie ComUSB = new CSerie(); // A nouveau, pourquoi créer encore une variable locale ? Sans l'initialiser correctement pour une connexion en plus. if (this.Bornier[NumeroPin - 1].Config == 0) /* Si configurer en entree */ { Trame = "pin " + NumeroPin + " state"; ComUSB.Envoi_Trame(Trame); // Utilisation de la variable locale !? TrameReponse = ComUSB.Recevoir_Trame(); // Utilisation de la variable locale !? Etat = this.DecoderEtatEntreeTOR(TrameReponse); this.Bornier[NumeroPin - 1].Valeur = Etat; } return Etat; } }