Probléme de communication serial port

Résolu
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013 - 16 févr. 2010 à 14:40
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013 - 18 févr. 2010 à 09:26
bonjour,

j'ai développer une apllication en VB pour un appareil fonctionnant sous Windows CE, j'arrive bien à emmetre des trame à partir de mon appareil, mais je ne reçoi rien.
De plus aprés plusieur envoi, j'ai une erreur dans le degogueur qui apparait.

voici mon code:

Public Class Form1
Dim recoi As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
SerialPort1.Write("hello world")
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim buf(20) As Byte
SerialPort1.Read(buf, 0, buf.Length)
recoi = buf(0).ToString & buf(1).ToString & buf(2).ToString
Label1.Text = recoi
Erase buf


End Sub
End Class

et l'erreur est: Control.Invoke must be used to interact with controls created on a separate thread.

savez vous pourquoi cela ne fonctionne pas? et pourquoi aprés plusieurs envoi ou mon programme fait rien, j'ai cet erreur?
A voir également:

25 réponses

cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 08:53
RE

A moins qu'il ne manque un imports System. quelquechose.

Je regarde et essaye de te retrouver un exemple avec un delegué. Car la méthode qui consiste à mettre CheckForIllegalCrossThreadCalls à false n'est pas conseillée.


@+LIM
3
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
16 févr. 2010 à 16:36
Salut,

Cette erreur arrive car SerialPort n'est pas ThreadSafe. C'est à dire qu'il ne peut pas interagir avec ta form.

Pour pourvoir interagir avec ta form (qui est un thread) un autre thread doit invoquer un délégué.
D'ou le controle.invoke must be....

Soit tu force le 'threadsafe' avec
CheckForIllegalCorssThreadCalls=False

Soit tu crée un délegué que ton thread serialport va invoquer pour écrire dans ton label.

En espérant avoir été assez clair.


@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
16 févr. 2010 à 17:46
Merci, oui vous avez été clair, mais lorque je colle cette ligne dans le form.load, j'ai une erreur qui apparait, il me dit que :Erreur Le nom 'CheckForIllegalCorssThreadCalls' n'est pas déclaré.


Je précise que je suis dans un porjet pour smart device pour windows CE.
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 08:12
Re

J'ai fait unr faute de frappe c'est pas Corss mais Cross

ce qui donne CheckForIllegalCrossThreadCalls=False

@+LIM
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 08:40
même avec la correction de la faute de frappe, il y à toujours l'erreur.

Est-ce peut être parce que je suis dans un projet smart device?

Car je sais plusiuers choses changent, comme pour le démarage du timer.
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 09:08
Re

Je ne trouve pas pour CheckForIllegalCrossThreadCalls si c'est compatible ou pas avec SmartDevice.


Pour Faire un délegué

'Une sub qui affiche du texte dans un label
Private sub AffiTexte(Byval msg as String)
label1.text=msg
end sub


'Creation du délégué (il doit avoir les mêmes paramètres que la fonction qu'il va délégué)
Delegate sub UpdateTxtDelegate(Byval msg as string)

'Creation de l'instance du délégué
Public UpdateTextInstance as UpdateTxtDelegate = New UpdateTextDelegate(Addressof AffiTexte)



'Dans ton SerialPortDataReceive tu remplaces label1.text=recoi
'On invoque le délégué pour pouvoir écrire dans le thread de la form
Me.Invoke(UpdateTextInstance, New Object() {recoi})

En espérant ne pas avoir fait de fautes de frappe

@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 09:18
Merci, mais ou dois-je mettre la création de l'instance du délégue?

dans le public class form?
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 09:28
Re

Oui, je suppose que tu as une form avec un objet serial port

donc ton code commence comme çà

Public Class Form1
'Déclaration du délélgué
Delegate sub UpdateTxtDelegate(Byval msg as string)
.....


end Class

@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 09:53
ce n'est pas le délégue que je ne sais pas ou mettre, mais la création de l'instance du délégué.
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 10:03
Re

juste en dessous du délégué


@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 10:08
d'accord merci !

j'ai juste une erreur que j'ai corriger avec l'aide de visual studio.

c'est que:

Public UpdateTextInstance as UpdateTxtDelegate = New UpdateTextDelegate(Addressof AffiTexte)
doit être remplacer par

Public UpdateTextInstance As UpdateTxtDelegate = New UpdateTxtDelegate(AddressOf AffiTexte)

je n'ai pas d'erreur de compilation, cela fonctionne en simulant un pot com sur mon PC, je vais donc essayer sur mon périphérique smart device.
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 10:45
Ca fonctionne !!!!

Merci beaucoup! j'ai eu un petit souci c'est que la m'affichait une valuer tout les 20 envoi, j'ai donc réduit la taille dem on tableau et maintenat c'est bon merci !
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 11:43
en fait ce ne marche que sur mon PC, lorsque je branche tout sur mon smart device cela fonctionne toujours pas!

je ne comprend vraiment pas !
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 12:16
Tu as un message d'erreur ou bien il ne se passe rien ?

@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 14:42
j'ai bien analyser le probléme, lorsque j'envoi 1 trame (2bit en hexa), celà fonctionne, pour 2/3 trames etc ca fonctionne, mais des que j'envoi des données en continue, le programme n'affiche plus rien et lorsque je veux réemettre une seule trame il n'affihce plus rein, et je n'ai pas d'erreur dans le dégogueur.
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 15:26
Qu'est-ce que tu appelle envoi en continue ?




@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 16:10
ce que j'appel un envoi en continue, est que mon périphérique Rs232 envoi une trame toutes les 700ms en 115200 bauds.

j'ai essayer avec le petit programme que j'ai dévellopé pour tester la RS232, ca fonctionne sans probléme aprés avoir défini que le srailport, devait scrutter la lecture toutes les 700ms.

Mais dans mon projet complet, cela ne fonctionne pas. car j'execute le programme en topmost (plein écran) et mon lorsque monsysteme sous windows CE, recoi des trames j'ai la barre de menu avec le bouton start qui apparait et mon projet plante.
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
17 févr. 2010 à 16:26
Ok,

Ta communication est seulement une lecture du port de com ou est-ce que tu envoi une demande et reçoit une réponse ?
Ton programme ne fait que çà (portcom) ou bien il fait autre chose en même temps ?

Comment as tu défini la vitesse de scrutation de ton serialport ?

As-tu tester la uniquement communication portcom sous Wince (sans tout les reste de ton projet) ? Si oui que se passe-t-il?

@+LIM
0
byllu Messages postés 29 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 8 mars 2013
17 févr. 2010 à 16:38
ma communication, fonctionne de la manierre suivante:

mon porgramme envoi des trames afin de configuer un écran avec une dalle tactille (appel de boutons, définition deszones tactilee,s et l'activation de la dalle tactille)



une fois activé, la dalle envoi une trame toute les 700ms pour dire qu'elle zone est appuyer, on relacher.

c'est ces trames que je n'aarrives pas à voir, avec le petit programme, que j'ai poster sur le forum, cela fonctionne, sans probléme, grâce à votre aide.

Mais lorsque je l'intégre a mon programme complet, celà ne fonctionne pas, et c'est à ce moment là que j'ai la barre de tache avec le bouton start qui apparai.

Pour le test de la communication sous windows Ce, oui je l'ai tester avec le programme que j'ai poster sur le forum.

J'avoue sécher !
0
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
18 févr. 2010 à 08:32
Bonjour,

Pour le peu que j'ai utilisé des écrans tactiles c'est Windows et le driver qui gère l'écran et pas un programme que j'ai developpé.
Pourkoi avoir besoin de gérer un écran tactile par toi-même ?
Au niveau de Win CE : ne peut-il pas gérer l'écran tactile et toi faire juste une ihm pleine écran ?

Quel est le but rechercher avec ton programme ? Quelle est ta configuration hard et soft ?.

Désolé de ne poser plus de questions ue de réponses mais plus tu m'expliques ce que tu fais plus cela devient obscurs pour moi.

@+LIM
0
Rejoignez-nous