用一个请求读取多个modbus地址

时间:2012-05-04 04:36:56

标签: c# serial-port modbus

我正在使用C#,VS2010阅读MODBUS设备,我正在使用遥测应用程序,我的设备有几百个地址,我需要读取地址x处的内容和地址x + 130处的另一个,目前我使用以下代码读取135个字节,而我只需要两个地址,但效率不高,有没有办法使用一个MODBUS请求读取两个单独的地址?我目前的代码是:

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端口。

1 个答案:

答案 0 :(得分:3)

many libraries 来帮助您使用C#中的MODBUS(如果没有一些特殊原因可以直接在低级处理字节?)。如果寄存器是一个接一个(如您所知),MODBUS可以读取单个寄存器或多个寄存器范围,但它不允许您在单个函数调用中读取不是一个接一个的寄存器。您必须为此使用更多函数调用。说到这一点,用2个函数调用读取2个寄存器然后使用1个函数调用来读取135个字节(更简单的字节,因此更快)会更有效。最后一点,您在示例中使用的MODBUS函数3从寄存器135开始从从机编号1开始读取87个寄存器(174个字节)。根本不是您所描述的,您希望它执行此操作。