例: イベント モードでのプロトコル構成

例: イベント モードでのプロトコル構成

イベント モードを使用してデバイスから非同期で送信されたデータを読み取るシリアル
Port
オブジェクトに含まれる NetLogic の例。
OnClick
メソッドは、ボタンの押下イベントにリンクされており、現在の読み取りを停止し、新しい読み取りを開始できます。
イベント モードを使用するには、
Timeout
プロパティを
0
に設定する必要があります。これにより、要求されたデータがシリアルポートに到着しない限り、
ReadBytes
はブロックされます。
CancelRead
メソッド、または
Close
メソッドで読み取りを停止できます。どちらの場合も、
ReadCanceledException
例外が生成されます。NetLogic をクリーンに閉じるには、NetLogic
Stop
Close
メソッドを呼び出して、保留中の読取り操作を終了する必要があります。
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(); } }
ご質問やご意見
このドキュメントに関するご質問やご意見は、こちらまでお寄せください。 こちらからご意見をお寄せください。
Normal