cs_calvinethobbes
Messages postés6Date d'inscriptionvendredi 30 novembre 2007StatutMembreDernière intervention27 novembre 2008
-
17 nov. 2008 à 02:54
cs_calvinethobbes
Messages postés6Date d'inscriptionvendredi 30 novembre 2007StatutMembreDernière intervention27 novembre 2008
-
27 nov. 2008 à 14:33
Bonjour à tous
Je viens de downloader VB net 2008. Pas simple à première vue compte tenu que je n'ai pas programmé depuis des années.. Je trouve que l'information Microsoft n'est pas à la hauteur.
J'ai réalisé par ailleurs un appareil de mesure avec un micro contrôleur et j'ai 5 Octets à récupérer en série asynchrone toutes les quelques dizaines de millisecondes. Je peux programmer le contrôleur comme je veux en assembleur. Ca c'est dans mes cordes.
Par contre, dans la forêt d'informations disponibles, je suis incapable de trouver le bout de code qui me permettrait de récupérer l'info tranquillement en RS232. Je n'ai pas bien compris les quelques références au sujet sur ce forum. Elles semblent inadaptées à VBNET 2008.
Si quelqu'un pouvait m'aider ? C'est un projet urgent, je ne m'en sors pas et je suis las des explications incompréhensibles (pour moi seul peut être) de l'aide Microsoft.
Merci.
cs_calvinethobbes
Messages postés6Date d'inscriptionvendredi 30 novembre 2007StatutMembreDernière intervention27 novembre 2008 17 nov. 2008 à 10:17
Merci de répondre.
En fait, dans l'aide VBnet, il n'y a aucune entrée sur RS232 ni sur serial sauf serialisation, serialportname et serial number. Rien d'utile.
Si je vais chercher sur le net, je trouve des bouts de code en visual C ou en VB6 ou même en VB net 2005 qui, une fois transposés donne des erreurs de syntaxe. Je trouve aussi des bouts de code qui posent problème au dire de leurs auteurs, donc pas très utiles. Peut-être ne vais-je pas chercher là où il faut ?
Je n'ai pas trouvé non plus comment configurer le port ( Baud, parity, stop bit, etc..)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 17 nov. 2008 à 11:45
Fait une recherche ici, sur le site avec RS232 et en cochant uniquement les codes .Net. Il y en a au moins une qui pourra te servir, et les autres aussi surrement
cs_calvinethobbes
Messages postés6Date d'inscriptionvendredi 30 novembre 2007StatutMembreDernière intervention27 novembre 2008 18 nov. 2008 à 23:21
Bonjour.
Bon! J'ai travaillé un peu. J'ai trouvé comment paramétrer le port série. Et j'ai le bout de code ci-dessous. Tout se passe bien tant que je n'envoie pas de signal. Dès que j'envoie un signal sur le port série, ça se plante. Donc la réception fonctionne. C'est une bonne nouvelle. Mais je n'arrive pas à récupérer les infos à cause d'une erreur que je ne comprends pas. Je suppose que cela doit être très stupide mais je ne vois pas où est le problème. Pour le moment, il n'y a qu'un formulaire dans le projet.
Private
Sub SerialPort_DataReceived(
ByVal sender
As
Object,
ByVal e
As System.IO.Ports.SerialDataReceivedEventArgs)
Handles SerialPort1.DataReceived
Dim chaine
As
String =
""
Dim nb
As
Integer = SerialPort1.BytesToRead
Dim toget(nb)
As
Byte
Dim i
As
IntegerSerialPort1.Read(toget, 0, nb - 1)
For i = 0
To nb - 1chaine = chaine + Chr(toget(i))
'3 octets transferes a la fois.
Next
Me.TextBox1.Text = chaine
' genere une erreur : Operation inter-threads non valide :
'le(controle) 'TextBox1' a fait l'objet d'un acces a partir d'un thread autre que celui
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 nov. 2008 à 09:49
C'est pas vraiment stupide, ton erreur est due à un mécanisme pas évident à comprendre.
En gros, la fonction DataReceive ne s'execute pas dans le même processus que le reste du programme, elle ne peut donc pas acceder directement aux composants de ton écran.
cs_calvinethobbes
Messages postés6Date d'inscriptionvendredi 30 novembre 2007StatutMembreDernière intervention27 novembre 2008 26 nov. 2008 à 01:18
Salut.
Juste pour te dire que je travaille toujours sur le truc. J'essaye de comprendre mais pour le moment c'est assez obscur. Les infos sur Delegate parlent de passage d'une fonction au lieu de valeurs ou d'adresses. Ca, je peux comprendre. Mais j''ai du mal à admettre qu'il faille faire un truc aussi compliqué dans un langage évolué pour retrouver des données ou accéder à des objets.
En fait je peux récupérer les données dans des variables même sans delegate, mais impossible d'accéder à la propriété text des textboxes ou labels alors que l'on peut facilement accéder aux propriétés telles que backcolor. Dingue !
Pour le moment j'ai réussi à faire mes graphiques avec ou sans delegate. Je peux manipuler les gains et les offsets de mon graphique avec des numericupdown. Mais toujours impossible d'afficher les valeurs numériques dans les textboxes, du moins si j'envoie des données sur le port série; sinon pas de problème. Pas très génant pour mon application mais très énervant et toujours incompréhensible (pour moi s'entend).
Cependant, dans le code suivant donné sur le lien que tu m'as proposé :
Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
Me.Invoke(New _Affiche_reception(AddressOf Affiche_reception), RS232.ReadExisting) End Sub
Private Sub Affiche_reception(ByVal donnee As String)
Label1.Text = "Interuption en fonction"
Label2.Text = donnee 'On affiche les données à l'écran
End Sub
Peut-on sans rien changer à la ligne Me.Invoke ...... utiliser la ligne suivante :
Private Sub Affiche_reception(ByVal octet1 As Byte, ByVal octet2 As Byte, ByVal octet3 As Byte). J'ai en effet une erreur de nombre de données
Le constructeur utilise le nom de la routine précédé de _. Est-ce utile ou juste une habitude ?
Merci encore si tu as un peu de temps à me consacrer.
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 27 nov. 2008 à 12:57
Bonjour,
"Le constructeur utilise le nom de la routine précédé de _. Est-ce utile ou juste une habitude ?"
Ce n'est pas le constructeur, mais le gestionnaire d'évènement. Il s'agit de faciliter le repérage du nom de l'objet et du nom de l'évènement.
Si tu parle de "Me.Invoke(New _Affiche_reception(AddressOf Affiche_reception), RS232.ReadExisting)", c'est ton Delegate qui est nommé de cette manière, et non un constructeur, ce nom est libre, mais doit quand même rester compréhensible (pour la relectutre du prog par un autre dev).
Cette ligne créé une instance d'un Delegate.
Si tu change la signature du gestionnaire d'evenement (prarmètres), tu DOIS adapter ton Delegate (ou en faire un nouveau), et si besoin modifier son appel, donc dans ton cas, il faudra changer la ligne de l'Invoke.
"J'ai en effet une erreur de nombre de données", Quelles erreurs ?
cs_calvinethobbes
Messages postés6Date d'inscriptionvendredi 30 novembre 2007StatutMembreDernière intervention27 novembre 2008 27 nov. 2008 à 14:33
En gros, mon système fonctionne, même sans la procédure Invoke etc.... Je ne peux pas encore afficher la valeur numérique mais le graphe suffit pour l'instant. Je vais donc utiliser ces dernières informations dans la prochaine version.
Je te remercie infiniment.