Ejemplo: Configuración de protocolo en modo de evento
Un ejemplo de un NetLogic contenido en el objeto en serie
Port
que utiliza el modo de evento para leer los datos enviados de forma asíncrona desde un dispositivo. El método OnClick
, vinculado al evento de pulsación del botón, le permite detener la lectura actual e iniciar una lectura nueva.Para utilizar el modo de evento, debe establecer la propiedad
Timeout
en 0
. De esta forma, ReadBytes
se bloqueará siempre y cuando los datos solicitados no lleguen al puerto serie.Puede detener la lectura con el método
CancelRead
o Close
. En ambos casos, se genera una excepción ReadCanceledException
. Para realizar una limpieza cerca del NetLogic, debe terminar cualquier operación de lectura pendiente invocando el método Close
en el Stop
del NetLogic.Puede descargar un proyecto de ejemplo desde 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(); } }
Entregue su opinión