Esempio: configurazione protocollo in modalità evento

Un esempio di NetLogic contenuto nell'oggetto
Port
seriale che utilizza la modalità evento per leggere i dati inviati in modo asincrono da un dispositivo. Il metodo
OnClick
collegato all'evento di pressione pulsante consente di interrompere la lettura corrente e di avviare una nuova lettura.
Per utilizzare la modalità evento, è necessario impostare la proprietà
Timeout
su
0
. In questo modo,
ReadBytes
manterrà il blocco attivo finché i dati richiesti non arriveranno sulla porta seriale.
È possibile interrompere la lettura con il metodo
CancelRead
o il metodo
Close
. In entrambi i casi si genera un'eccezione
ReadCanceledException
. Per effettuare una chiusura pulita della NetLogic, è necessario terminare tutte le operazioni di lettura in sospeso richiamando il metodo
Close
nella NetLogic
Stop
.
È possibile scaricare un esempio di progetto da 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(); } }
Fornire un feedback
Hai domande o feedback su questa documentazione? invia il tuo feedback qui.