Exemplo: Configuração do protocolo no modo de evento
Exemplo de um NetLogic contido no objeto serial
Port
que usa o modo de evento para ler os dados enviados de forma assíncrona de um dispositivo. O método OnClick
, vinculado ao evento de pressionamento do botão, permite parar a leitura do momento e iniciar uma nova leitura.Para usar o modo de evento, defina a propriedade
Timeout
como 0
. Desta forma, ReadBytes
ficará bloqueado até que os dados solicitados cheguem à porta serial.Para interromper a leitura, use o método
CancelRead
ou o Close
. Em ambos os casos, uma exceção ReadCanceledException
será gerada. Para encerrar o NetLogic sem problemas, encerre todas as operações de leituras pendentes chamando o método Close
no Stop
do NetLogic.Você pode baixar uma amostra de projeto de 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(); } }
Dê sua opinião