我有一个 MOXA Modbus TCP 模块(M-4210 与 NA-4010 网络模块相结合,还连接了一些其他模块)用作 2 通道模拟输出,每个电压从 0 到 10 伏。
在我的 C# 应用程序中,我需要获取这些输出的当前值,这并不像我对整个 Modbus 事物很陌生那样容易。
在我的代码中,我已经有一个工作的 modbus tcp 客户端来完成它的工作,我通过读取和写入另一个数字输出模块的单个线圈来测试它。然而,模拟输出模块似乎使用寄存器而不是线圈。
从头开始,这些是此模块中两个通道的 modbus 设置(取自 MOXA ioAdmin Tool):
和地址:
这是来自网络界面的另一个屏幕截图:
所以我试图读取这样的值:
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;
}
此代码返回一个值,更改如下:
当通道 #0 设置为 的(原始)值时
1139
,返回的 int 值为29440
当通道 #0 设置为
1140
时,返回值为29696
我似乎走在正确的轨道上,但我不太了解偏移量以及当值返回时如何分离通道。如果有人能对此有所了解,那就太好了,在此先感谢!