Browse Source

update modbusRTU

pull/13/merge
Gavin 8 years ago
parent
commit
ce7de2b36b
  1. BIN
      SCADA/Program/.vs/DataExchange/v15/.suo
  2. BIN
      SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide
  3. BIN
      SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide
  4. 37
      SCADA/Program/ModbusDriver/ModbusRTUDriver.cs
  5. BIN
      SCADA/dll/ModbusDriver.dll

BIN
SCADA/Program/.vs/DataExchange/v15/.suo

Binary file not shown.

BIN
SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide

Binary file not shown.

BIN
SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide

Binary file not shown.

37
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;
}

BIN
SCADA/dll/ModbusDriver.dll

Binary file not shown.
Loading…
Cancel
Save