私は MOXA Modbus TCP モジュール (M-4210 と NA-4010 ネットワーキング モジュールの組み合わせで、他のモジュールも接続されています) を持っています。これは 2 チャンネルのアナログ出力として機能し、それぞれが 0 から 10 ボルトの電圧を持っています。
私の C# アプリケーションでは、これらの出力の現在の値を取得する必要があります。これは、Modbus 全体にまったく慣れていないため、簡単ではありません。
私のコードでは、すでにその仕事をする動作している modbus tcp クライアントがあり、別のデジタル出力モジュールの単一コイルを読み書きしてテストしました。ただし、アナログ出力モジュールは、コイルではなくレジスタで動作するようです。
最初に、このモジュール内の 2 つのチャネルの modbus 設定を次に示します (MOXA ioAdmin ツールから取得)。
およびアドレス:
また、Web インターフェースの別のスクリーンショットを次に示します。
だから私はこのような値を読み取ろうとしました:
ModbusClient c = new ModbusClient();
c.Connect("172.17.6.15", 502);
int[] r = c.ReadHoldingRegisters(2048, 1);
for (int i = 0; i < r.Length; i++)
{
textBox1.Text += r[i].ToString() + System.Environment.NewLine;
}
このコードは 1 つの値を返しますが、次のように変更されています。
チャネル #0 が の (生の) 値に設定されている場合
1139
、返される int 値は次のとおりです。29440
チャネル #0 が に設定されて
1140
いる場合、戻り値は29696
私は正しい軌道に乗っているようですが、オフセットと、値が戻ってきたときにチャネルを分離する方法がよくわかりません。誰かがこれに光を当てることができれば素晴らしいでしょう、事前に感謝します!