diff --git a/src/Meadow.Modbus/Clients/ModbusRtuClient.cs b/src/Meadow.Modbus/Clients/ModbusRtuClient.cs index f50a5b3..e129236 100644 --- a/src/Meadow.Modbus/Clients/ModbusRtuClient.cs +++ b/src/Meadow.Modbus/Clients/ModbusRtuClient.cs @@ -88,9 +88,12 @@ protected override async Task ReadResult(ModbusFunction function) while (_port.BytesToRead < 5) { - await Task.Delay(10); t += 10; - if (_port.ReadTimeout.TotalMilliseconds > 0 && t > _port.ReadTimeout.TotalMilliseconds) throw new TimeoutException(); + if (_port.ReadTimeout.TotalMilliseconds > 0 && t > _port.ReadTimeout.TotalMilliseconds) + { + throw new TimeoutException(); + } + await Task.Delay(10); } int headerLen = function switch @@ -118,7 +121,7 @@ protected override async Task ReadResult(ModbusFunction function) read = 0; while (read < 2) { - _port.Read(errpacket, 3 + read, 2 - read); + read += _port.Read(errpacket, 3 + read, 2 - read); } var errorCode = (ModbusErrorCode)errpacket[2]; @@ -136,7 +139,11 @@ protected override async Task ReadResult(ModbusFunction function) // read the remainder of the header if (headerLen > 3) { - _port.Read(header, 3, headerLen - 3); + read = 0; + while (read < headerLen - 2) + { + read += _port.Read(header, 3, headerLen - 3); + } } int bufferLen; @@ -191,7 +198,7 @@ protected override async Task ReadResult(ModbusFunction function) var result = new byte[resultLen]; Array.Copy(buffer, headerLen, result, 0, result.Length); - return await Task.FromResult(result); + return result; } /// diff --git a/src/Meadow.Modbus/Meadow.Modbus.csproj b/src/Meadow.Modbus/Meadow.Modbus.csproj index 20f1eef..e1fb438 100644 --- a/src/Meadow.Modbus/Meadow.Modbus.csproj +++ b/src/Meadow.Modbus/Meadow.Modbus.csproj @@ -23,6 +23,6 @@ - +