【发布时间】:2015-05-15 17:37:51
【问题描述】:
我有一个 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
我似乎走在正确的轨道上,但我不太了解偏移量以及当值返回时如何分离通道。如果有人能对此有所了解,那就太好了,在此先感谢!
【问题讨论】:
标签: c# offset modbus addressing modbus-tcp