- プロジェクトの作成
- オブジェクトと変数のリファレンス
- プロジェクトの拡張
- チュートリアル
- グラフィックオブジェクト チュートリアル
例: イベント モードでのプロトコル構成
イベント モードを使用してデバイスから非同期で送信されたデータを読み取るシリアル
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(); } }
ご質問やご意見