-
probleme avec SerialPort
Bonjour,
Je veux écrire des bytes sur le port COM1.
Pour cela j'utilise l'objet SerialPort.
Voici un exemple très simple:
SerialPort Port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
byte[] buf = new byte[4];
buf[0] = 1;
buf[1] = 2;
buf[2] = 3 ;
Port.Open();
Port.Write(buf, 0, 3);
Port.ReadByte();
Port.Close();
Tout se passe bien si la dernière valeur de mon tableau n'est pas 0:le champ BytesToRead contient une valeur > 0 et je peut utiliser la méthode ReadByte().
Par contre si la dernière valeur de mon tableau est 0 (buf(2) = 0), alors BytesToRead = 0 et la méthode ReadByte ne marche pas.
J'ai essayé de jouer sur tous les attributs de l'objet SerialPort mais sans succès.
Comment faire pour que ca marche avec un 0 dans le dernier élément du tableau?
-
salut
excuses, mais tu confonds tout !
Quand tu fais ReadByte, tu lis les données reçus et disponible sur le port série.
Donc, le contenu dépend de l'appareil qui se trouve en bout de ligne... et qui réagit peut-être différemment quand on lui émet des 0 ?
The Monz, Toulouse
-
En fait j'ai migré un ancien code fait sur framework 1.1, époque ou l'objet SerialPort n'existait pas.
J'utilisais alors l'API windows (CreateFile, PurgeComm, SetCommState, ...)
Mon appareil en bout de ligne gère très bien les 0 avec l'ancien code.
Par contre ca se passe mal avec l'objet SerialPort, sachant que j'envoie les memes bytes sur le port COM qu'avec mon ancien code.
Je rappelle, que mon problème survient uniquement si le dernier byte de mon tableau est 0. S'il y a des 0 ailleurs dans le tableau, ca ne pose pas de problème.
Si je met le champ databits=7 au lieu de databits=8, ca marche mais ca ne me satisfait pas.
Merci
-
Il est possible que ce soit à cause du "StopBits.One" (cf instanciation de l'objet SerialPort).
En effet, le bit d'arrêt étant "0" et comme tu mets un "0" en fin de message, il est possible que le contrôleur de port le détecte en tant que bit d'arrêt.
Essaye avec "StopBits.None".
-
StopBits.None n'est pas supporté (indiqué dans la doc), une exception est levée.