J'utilise la classe .NET SerialPort pour communiquer avec les jauges. Chaque fois qu'un bouton sur une jauge est pressé, une valeur de lecture est envoyée sur le port. Le problème que j'ai, c'est que si le bouton de la jauge est pressé pendant que le programme est éteint, alors quand le programme démarre, il déclenche l'événement de données reçues pour les données existantes. Je ne veux pas de ce comportement - je veux seulement recueillir les lectures effectuées après l'ouverture du port.SerialPort - Effacer les données existantes
J'ai une solution de contournement actuelle en utilisant un Thread.Sleep mais il semble hacky et je me demande si quelqu'un connaît une meilleure solution.
port = New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
port.Open()
port.DtrEnable = True
System.Threading.Thread.Sleep(100)
port.ReadExisting()
AddHandler port.DataReceived, AddressOf PortDataReceived
Si je n'ai pas Thread.Sleep alors l'événement DataReceived est déclenché pour les données de calibre précédentes. Je suppose que c'est parce que le ReadExisting ne bloque pas et donc quand il est appelé immédiatement après un ouvert, il ne lit rien.
Merci
Donc, si vous appelez 'port.BytesToRead() immédiatement après son ouverture zéro. Si vous l'appelez 100ms après avoir ouvert son non-zéro. Je suppose que cela a du sens - il faut du temps après l'ouverture pour lire les données existantes.
Une autre option est d'appeler lire et définir le délai d'attente de lecture, mais qui semble pas différent de Thread.Sleep sauf que vous devez attraper une exception ...
Utilisez-vous Xon/Xoff ou la prise de contact matérielle? –
J'utilise la valeur par défaut pour la classe SerialPort dans .NET. Je vais essayer de comprendre ce que c'est :) – anonymous
également vos périphériques série tamponner le bouton appuyer et renvoyer s'il n'y a pas de communications? –