C# 通过一个请求读取多个modbus地址

C# 通过一个请求读取多个modbus地址,c#,serial-port,modbus,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] =

我正在使用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端口

可以帮助您使用C#中的MODBUS(如果您没有特殊原因直接在低级别处理字节的话?)。如果寄存器一个接一个(如您所发现),MODBUS可以读取单个寄存器或多个寄存器范围,但它不允许您在单个函数调用中读取非一个接一个的寄存器。为此,您必须使用更多的函数调用。这么说来,使用2个函数调用读取2个寄存器比使用1个函数调用读取135个字节更有效(字节数更少,因此速度更快)。最后一句话,您在示例中使用的MODBUS函数3从1号从机的寄存器135开始读取87个寄存器(174字节)。完全不是您所描述的您想要它做的。

可以帮助您使用C#中的MODBUS(如果您没有特殊原因直接在低级别处理字节的话)。如果寄存器一个接一个(如您所发现),MODBUS可以读取单个寄存器或多个寄存器范围,但它不允许您在单个函数调用中读取非一个接一个的寄存器。为此,您必须使用更多的函数调用。这么说来,使用2个函数调用读取2个寄存器比使用1个函数调用读取135个字节更有效(字节数更少,因此速度更快)。最后一句话,您在示例中使用的MODBUS函数3从1号从机的寄存器135开始读取87个寄存器(174字节)。完全不是你描述的你想要它做的。

谢谢,我想我犯了一个错误!你是对的,但整个场景就是我所描述的,正如你所说的,这是不正确的,我将测试一些建议的库,因为没有理由直接使用com端口。我认为我犯了一个错误!您是对的,但整个场景就是我所描述的,正如您所说的,这是不正确的,我将测试您建议的一些库,因为没有理由直接使用com端口