0

C#、VS2010 を使用して MODBUS デバイスを読み取っています。テレメトリ アプリケーションで作業しています。デバイスには数百のアドレスがあり、現在使用しているアドレス x とアドレス x+130 で何かを読み取る必要があります。次のコードで 135 バイトを読み取ることができますが、必要なのは 2 つのアドレスだけですが、効率的ではありません。1 つの MODBUS 要求を使用して 2 つの別々のアドレスを読み取る方法はありますか? 私の現在のコードは次のとおりです。

bd[0] = Convert.ToByte("01");
bd[1] = Convert.ToByte("03");
bd[2] = Convert.ToByte("00");
bd[3] = Convert.ToByte("135");
bd[4] = Convert.ToByte("00");
bd[5] = Convert.ToByte("87");
bd[6] = Convert.ToByte("180");
bd[7] = Convert.ToByte("29");
port.Write(bd, 0, 8);

これらのバイトを、MODBUS デバイスに接続されている COM ポートに書き込みます。

4

1 に答える 1

3

C# で MODBUS を使用するのに役立つ多くのライブラリがあります (低レベルでバイトを直接処理する特別な理由がない場合)。MODBUS は、レジスターが次々にある場合 (ご存じのとおり)、単一のレジスターまたは複数のレジスターの範囲を読み取ることができますが、1 回の関数呼び出しで連続していないレジスターを読み取ることはできません。そのためには、より多くの関数呼び出しを使用する必要があります。つまり、1 つの関数呼び出しで 135 バイトを読み取るよりも、2 つの関数呼び出しで 2 つのレジスタを読み取る方が効率的です (単純にバイト数が少ないため高速です)。最後に、例で使用した MODBUS 関数 3 は、スレーブ番号 1 のレジスタ 135 から始まる 87 レジスタ (174 バイト) を読み取ります。

于 2012-05-04T14:04:16.810 に答える