diff --git a/SCADA/Program/.vs/DataExchange/v15/.suo b/SCADA/Program/.vs/DataExchange/v15/.suo index a49facf..b135fc5 100644 Binary files a/SCADA/Program/.vs/DataExchange/v15/.suo and b/SCADA/Program/.vs/DataExchange/v15/.suo differ diff --git a/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide b/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide index 0df9ca2..cbf7e55 100644 Binary files a/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide and b/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide differ diff --git a/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide b/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide index d04ae13..114c9d0 100644 Binary files a/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide and b/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide differ diff --git a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs index f2b4b0c..e7d87f1 100644 --- a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs @@ -5,6 +5,7 @@ using System.ComponentModel; using System.IO; using System.IO.Ports; using System.Text; +using System.Threading; namespace ModbusDriver { @@ -209,6 +210,7 @@ namespace ModbusDriver { OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); } + Thread.Sleep(10); return -1; } else//正确需8字节 @@ -216,6 +218,7 @@ namespace ModbusDriver numBytesRead = 0; while (numBytesRead < 3) numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + Thread.Sleep(10); return 0; } } @@ -256,6 +259,7 @@ namespace ModbusDriver { OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); } + Thread.Sleep(10); return -1; } else//正确需9字节 @@ -263,6 +267,7 @@ namespace ModbusDriver numBytesRead = 0; while (numBytesRead < 4) numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + Thread.Sleep(10); return 0; } } @@ -299,6 +304,7 @@ namespace ModbusDriver { OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); } + Thread.Sleep(10); return -1; } else//正确需8字节 @@ -306,6 +312,7 @@ namespace ModbusDriver numBytesRead = 0; while (numBytesRead < 3) numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + Thread.Sleep(10); return 0; } } @@ -347,6 +354,7 @@ namespace ModbusDriver { OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); } + Thread.Sleep(10); return -1; } else//正确需8字节 @@ -354,6 +362,7 @@ namespace ModbusDriver numBytesRead = 0; while (numBytesRead < 3) numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + Thread.Sleep(10); return 0; } } @@ -467,19 +476,31 @@ namespace ModbusDriver { byte[] header = func < 3 ? CreateReadHeader(address.Area, address.Start * 16, (ushort)(16 * size), func) : CreateReadHeader(address.Area, address.Start, size, func); - _serialPort.Write(header, 0, header.Length); - byte[] frameBytes = new byte[size * 2 + 5]; - byte[] data = new byte[size * 2]; - int numBytesRead = 0; lock (_async) { - while (numBytesRead != frameBytes.Length) - numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); - if (frameBytes[0] == address.Area && Utility.CheckSumCRC(frameBytes)) + byte[] frameBytes = new byte[size * 2 + 3];//size * 2 + + byte[] data = new byte[size * 2]; + _serialPort.Write(header, 0, header.Length); + int numBytesRead = 0; + while (numBytesRead < 2) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 2 - numBytesRead); + if (frameBytes[1] == address.DBNumber) { - Array.Copy(frameBytes, 3, data, 0, data.Length); + numBytesRead = 0; + while (numBytesRead != frameBytes.Length) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); + Array.Copy(frameBytes, 1, data, 0, data.Length); + Thread.Sleep(10); return data; } + else + { + numBytesRead = 0; + while (numBytesRead < 3) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + Thread.Sleep(10); + } + } return null; } diff --git a/SCADA/dll/ModbusDriver.dll b/SCADA/dll/ModbusDriver.dll index d6ae616..e5d498e 100644 Binary files a/SCADA/dll/ModbusDriver.dll and b/SCADA/dll/ModbusDriver.dll differ