C# nmodbus读保持寄存器冻结
我试图从COM端口读取modbus寄存器,我使用的是NModbus4寄存器,但当使用readHoldingRegister时,它将在那里冻结。 这是我的源代码:C# nmodbus读保持寄存器冻结,c#,modbus,C#,Modbus,我试图从COM端口读取modbus寄存器,我使用的是NModbus4寄存器,但当使用readHoldingRegister时,它将在那里冻结。 这是我的源代码: public static void ModbusSerialAsciiMasterReadRegisters() { using (SerialPort port = new SerialPort("COM4")) { // configure serial port
public static void ModbusSerialAsciiMasterReadRegisters()
{
using (SerialPort port = new SerialPort("COM4"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
var adapter = new SerialPortAdapter(port);
var factory = new ModbusFactory();
// create modbus master
IModbusSerialMaster master = factory.CreateAsciiMaster(adapter);
byte slaveId = 1;
ushort startAddress = 8193;
ushort numRegisters = 5;
// read five registers
try
{
ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
for (int i = 0; i < numRegisters; i++)
{
Console.WriteLine($"Register {startAddress + i}={registers[i]}");
}
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
publicstaticvoid modbusseialascimasterreadregisters()
{
使用(SerialPort端口=新的SerialPort(“COM4”))
{
//配置串行端口
波特率=9600;
port.DataBits=8;
端口奇偶性=奇偶性。无;
port.StopBits=StopBits.One;
port.Open();
var适配器=新的SerialPortAdapter(端口);
var工厂=新的ModbusFactory();
//创建modbus主机
IModbusSerialMaster master=factory.CreateAsciiMaster(适配器);
字节slaveId=1;
ushort startAddress=8193;
ushort numRegisters=5;
//读取五个寄存器
尝试
{
ushort[]registers=master.ReadHoldingRegisters(slaveId、startAddress、numRegisters);
对于(int i=0;i
设置读超时和写超时。在我的情况下,我使用200毫秒
port.ReadTimeout = 200;
port.WriteTimeout= 200;
对于我的用例,如果通信需要200毫秒以上,那是因为没有硬件。根据您使用的通信硬件,必须更改此值
编辑:只是一个离题的改进:IModbusSerialMaster是可识别的。使用块将其放入一个
希望这有帮助