- プロジェクトの作成
- オブジェクトと変数のリファレンス
- プロジェクトの拡張
- チュートリアル
- グラフィックオブジェクト チュートリアル
例: 要求/応答モードでのプロトコル構成
300 ミリ秒ごとに Modbus コントローラ レジスタの値を読み取るために要求/応答モードを使用するシリアル
Port
オブジェクトに含まれる NetLogic の例。この
WriteBytes
メソッドでは、コマンドはシリアルポートを介して送信され、後続の ReadBytes
メソッドでは、コントローラからの応答を待ちます。Timeout
プロパティで指定された時間内に、コントローラが応答しない場合は、例外が生成され、読み取り/書き込みは失敗します。SerialPortDemoRequestResponseMode.zip からサンプル プロジェクトをダウンロードできます。
public class RuntimeNetlogic1 : BaseNetLogic { private SerialPort serialPort; private PeriodicTask periodicTask; public override void Start() { serialPort = (SerialPort)Owner; periodicTask = new PeriodicTask(Read, 300, Owner); periodicTask.Start(); } private void Read() { try { ReadImpl(); } catch (Exception ex) { Log.Error("Failed to read from Modbus: " + ex); } } private void ReadImpl() { serialPort.WriteBytes(Serialize()); var result = serialPort.ReadBytes(3); if ((result[1] & 0x80) == 0) { result = serialPort.ReadBytes((uint)(result[2] + 2)); Log.Info(Deserialize(result)); } else { Log.Error("Failed to read from Modbus"); } } private byte[] Serialize() { var buffer = new byte[] { 0x01, // UnitId 0x03, // Function code 0x00, // Starting address 0x00, 0x00, // Quantity Of Registers 0x01, 0x84, // CRC 0x0a }; return buffer; } private ushort Deserialize(byte[] buffer) { var first = (ushort)buffer[1]; var second = (ushort)(buffer[0] << 8); return (ushort)(first | second); } }
ご質問やご意見