jcavallo
Messages postés4Date d'inscriptionmardi 13 février 2007StatutMembreDernière intervention18 mai 2007
-
10 mai 2007 à 17:19
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
15 juin 2007 à 23:35
Bonjour à tous,
j'ai un petit problème pour récupérer sur une liaison série avec un pic des données qu'il envoie.
J'arrive à enregistrer les 5 premiers octets qui arrive mais pas les suivants alors qu'avec une liaison PC-PC sa marche très bien ???
De plus, le message s'affiche bien à l'écran (en entier) avec la méthode WriteMessage (que se soit de PC à PC ou de Pic à PC).
Voici la partie de code qui fait la réception:
' This subroutine is fired when the timer event is raised. It writes whatever
' is in the Comm Port buffer to the output window.
Private
Sub tmrReadCommPort_Tick(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles tmrReadCommPort.Tick
Try
' As long as there is information, read one byte at a time and
' output it.
While (m_CommPort.Read(1) <> -1)
' Write the output to the screen.WriteMessage(Chr(m_CommPort.InputStream(0)),
False)'chaîne de caractère qui récupère le message sur la liaison série
trame2 &= Chr(m_CommPort.InputStream(0))
End
While
Catch exc
As Exception
' An exception is raised when there is no information to read.
' Don't do anything here, just let the exception go.
End
Try
End
Sub
Je ne comprends pas d'où sa peux venir.
C'est peut être une histoire de thread, mais je ne suis pas assez bon dans ce domaine pour trouver par moi même (je suis débutant ).
Si vous avez une idée aidé moi, je travaille sur un trojet pour mon école d'ingénieur et ce problème m'empêche de tester le reste du programme. (il me reste peu de temps pour le rendre ).
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 10 mai 2007 à 21:04
Attention, je n'ai pas fait de test, mais connaissant bien les port séries sous VB6, je pense qu'ici c'est pareil.
Lorsque tu lit un caractère dans le buffer, il est automatiquement sorti de celui-ci et tous les caractères restant sont décalés
Donc ici, le caractère que tu vas lire pour trame2, ne sera pas le même que celui pour Writemessage, ça sera le suivant.
Si tu veux que ce soit le même, il te faut le lire qu'une seule fois dans une variable, et ensuite utiliser la variable pour WriteMessage et Trame2
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011 15 juin 2007 à 23:26
un pti conseil :
apres des essaie de dialogue entre le PC et un Motorolla 68HC(T) je sais plus combien qui integre le port serie on se rend compte d'un truc pas drole (a 9600 Bauds) :
si on utilise la methode qui permet de tout lire d'un coup et qui renvoi un String il passe par un encoding a la *** et on perdais des donnée a cause de ca.
Si on tente de lire 1 seul octet a la fois en boucle infinire via le .ReadByte() on se rend compte que ca rame a mort, cc'est due au fait que CHAQUE lecture que ca soit 1 ou plein d'octet initialise qqchs (coté framework) qui prend qq millisecondes mais qui sur des tranction de plusieur Ko deviennent vraiment ABERENTE, la c'est pour un inclinometre qui numerise en boucle des qu'on cogne la table il fallait 25 sec pour voir le programme affiché le changement ...
je me rappelle plus tres exactement comment ca a été resolu mais evite de lire 1 par , lit par gros paquet d'un coup et gere un buffer de ton coté qui aura un acces largement plus rapide