Exemple : Configuration du protocole en mode événement
Exemple d’un NetLogic contenu dans l’objet
Port
série qui utilise le mode d’événement pour lire les données de manière asynchrone à partir d’un dispositif. La méthode OnClick
, liée à l’événement du clic sur le bouton, vous permet d’arrêter la lecture en cours et d’en démarrer une nouvelle.Pour utiliser le mode événement, vous devez définir la propriété
Timeout
sur 0
. De cette façon, ReadBytes
assurera le blocage tant que les données demandées n’arrivent pas sur le port série.Vous pouvez arrêter la lecture avec la méthode
CancelRead
ou la méthode Close
. Dans les deux cas, une exception ReadCanceledException
est générée. Pour fermer correctement le NetLogic, vous devez terminer toutes les opérations de lecture en attente en appelant la méthode Close
dans le NetLogic Stop
.Vous pouvez télécharger un exemple de projet depuis SerialPortDemoEventMode.zip.
public class RuntimeNetlogic1 : BaseNetLogic { private SerialPort serialPort; private LongRunningTask task; public override void Start() { serialPort = (SerialPort)Owner; serialPort.Timeout = TimeSpan.FromMilliseconds(0.0); task = new LongRunningTask(Run, Owner); task.Start(); } [ExportMethod] public void OnClick() { // Cancel current read serialPort.CancelRead(); task.Cancel(); // Start new read task = new LongRunningTask(Run, Owner); task.Start(); } private void Run() { while(!task.IsCancellationRequested) { try { // Block until 3 bytes arrive on serial var result = serialPort.ReadBytes(3); foreach (var b in result) Log.Info(String.Format("0x{0:x2}", b)); } catch (ReadCanceledException ex) { // In case of read canceled, exit from the loop Log.Info(ex.Message); return; } catch (Exception e) { Log.Error(e.Message); } } } public override void Stop() { // Explicit call to Close to cancel pending read (if any) serialPort.Close(); task.Cancel(); } }
Fournir une réponse