Probléme de communication serial port [Résolu]

Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
- - Dernière réponse : 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?
Afficher la suite 

20/25 réponses

Meilleure réponse
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_lim
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
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
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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.
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
Re

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

ce qui donne CheckForIllegalCrossThreadCalls=False

@+LIM
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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.
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
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
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
Merci, mais ou dois-je mettre la création de l'instance du délégue?

dans le public class form?
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
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
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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é.
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
Re

juste en dessous du délégué


@+LIM
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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.
Commenter la réponse de byllu
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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 !
Commenter la réponse de byllu
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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 !
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
Tu as un message d'erreur ou bien il ne se passe rien ?

@+LIM
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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.
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
Qu'est-ce que tu appelle envoi en continue ?




@+LIM
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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.
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
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
Commenter la réponse de cs_lim
Messages postés
29
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
8 mars 2013
0
Merci
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 !
Commenter la réponse de byllu
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
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
Commenter la réponse de cs_lim