我有一个MOXA Modbus TCP模块(M-4210与NA-4010网络模块相结合,也有一些其他模块连接),可用作2通道模拟输出,每个模拟输出的电压范围为0到10伏。如何从此Modbus地址获取正确的值?
在我的C#应用程序中,我需要获取这些输出的当前值,这并不像我对整个Modbus的新东西那么简单。
在我的代码中,我已经有一个可以工作的modbus tcp客户端,我通过读写另一个数字输出模块的单线圈来测试它。模拟输出模块似乎可以用寄存器而不是线圈工作。
要从头开始,这是此模块中的两个通道(从MOXA ioAdmin工具采取)的MODBUS设置:
和地址:
这里是从网络界面的另一个截图:
所以我试图读出的值是这样的:
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
我似乎是在正确的轨道上,但我不太明白的偏移和如何分离的信道当值回来。如果有人能够对此提出一些看法,那就太好了!