Lire des caractères à partir du port série en c#
Bonjour, je suis en utilisant la méthode Read() pour lire les 10 personnages disent 0123456789 de port série. En fait les personnages sont envoyés par un Micro-contrôleur PIC.
Voici mon code:
serialPort1.PortName = "com4";
serialPort1.BaudRate = 9600;
serialPort1.Open();
char[] result = new char[10];
serialPort1.Read(result, 0, result.Length);
string s = new string(result);
MessageBox.Show(s);
serialPort1.Close();
Lorsque j'exécute le code, une boîte de message s'affiche et affiche uniquement le premier caractère. "0" seul est affiché dans la boîte de message.
Où ai-je mal tourné ??
Débogage et de voir ce qui est dans votre variable résultat.
Vous avez à lire en premier msdn.microsoft.com/en-us/library/... ce stackoverflow.com/questions/8704329/...
Votre contrôleur de seulement envoyé un caractère? (
Pas le contrôleur envoyé 10 caractères.
On vous envoi les valeurs null entre les deux? Qui mettrait fin à la chaîne.
Vous avez à lire en premier msdn.microsoft.com/en-us/library/... ce stackoverflow.com/questions/8704329/...
Votre contrôleur de seulement envoyé un caractère? (
serialPort1.Read
retourne le nombre d'octets lus)Pas le contrôleur envoyé 10 caractères.
On vous envoi les valeurs null entre les deux? Qui mettrait fin à la chaîne.
OriginalL'auteur softleaks | 2013-03-21
Vous devez vous connecter pour publier un commentaire.
Ce que vous faites mal, c'est de ne pas prêter attention à la valeur de retour de Read(). Qui vous indique combien d'octets ont été lus.
Les ports série sont très lents des appareils, à une typique réglage du débit en bauds 9600 il prend un millième de seconde pour obtenir un octet transféré. C'est une énorme quantité de temps pour un processeur moderne, il peut facilement exécuter plusieurs millions d'instructions en une milliseconde. La méthode Read() retourne dès que certains octets sont disponibles, vous obtenez seulement 10 d'entre eux si vous faites votre programme artificiellement lente de sorte que le conducteur obtient assez de temps pour recevoir toutes.
Une solution simple est de garder l'appel Read() jusqu'à ce que vous les avez tous:
Une autre solution est d'envoyer un caractère unique pour indiquer la fin des données. Un saut de ligne ('\n') est un très bon choix pour qui. Maintenant, il devient beaucoup plus simple:
Qui prend également en charge arbitraire réponse longueurs. Assurez-vous que les données ne contiennent également un saut de ligne.
OriginalL'auteur Hans Passant