Skip to content

Commit ce7de2b

Browse files
committed
update modbusRTU
1 parent 358cc05 commit ce7de2b

File tree

5 files changed

+29
-8
lines changed

5 files changed

+29
-8
lines changed
-3.5 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.

SCADA/Program/ModbusDriver/ModbusRTUDriver.cs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.IO;
66
using System.IO.Ports;
77
using System.Text;
8+
using System.Threading;
89

910
namespace ModbusDriver
1011
{
@@ -209,13 +210,15 @@ public int WriteSingleCoils(int id, int startAddress, bool OnOff)
209210
{
210211
OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode)));
211212
}
213+
Thread.Sleep(10);
212214
return -1;
213215
}
214216
else//正确需8字节
215217
{
216218
numBytesRead = 0;
217219
while (numBytesRead < 3)
218220
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead);
221+
Thread.Sleep(10);
219222
return 0;
220223
}
221224
}
@@ -256,13 +259,15 @@ public int WriteMultipleCoils(int id, int startAddress, ushort numBits, byte[] v
256259
{
257260
OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode)));
258261
}
262+
Thread.Sleep(10);
259263
return -1;
260264
}
261265
else//正确需9字节
262266
{
263267
numBytesRead = 0;
264268
while (numBytesRead < 4)
265269
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead);
270+
Thread.Sleep(10);
266271
return 0;
267272
}
268273
}
@@ -299,13 +304,15 @@ public int WriteSingleRegister(int id, int startAddress, byte[] values)
299304
{
300305
OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode)));
301306
}
307+
Thread.Sleep(10);
302308
return -1;
303309
}
304310
else//正确需8字节
305311
{
306312
numBytesRead = 0;
307313
while (numBytesRead < 3)
308314
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead);
315+
Thread.Sleep(10);
309316
return 0;
310317
}
311318
}
@@ -347,13 +354,15 @@ public int WriteMultipleRegister(int id, int startAddress, byte[] values)
347354
{
348355
OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode)));
349356
}
357+
Thread.Sleep(10);
350358
return -1;
351359
}
352360
else//正确需8字节
353361
{
354362
numBytesRead = 0;
355363
while (numBytesRead < 3)
356364
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead);
365+
Thread.Sleep(10);
357366
return 0;
358367
}
359368
}
@@ -467,19 +476,31 @@ public byte[] ReadBytes(DeviceAddress address, ushort size)
467476
{
468477
byte[] header = func < 3 ? CreateReadHeader(address.Area, address.Start * 16, (ushort)(16 * size), func) :
469478
CreateReadHeader(address.Area, address.Start, size, func);
470-
_serialPort.Write(header, 0, header.Length);
471-
byte[] frameBytes = new byte[size * 2 + 5];
472-
byte[] data = new byte[size * 2];
473-
int numBytesRead = 0;
474479
lock (_async)
475480
{
476-
while (numBytesRead != frameBytes.Length)
477-
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead);
478-
if (frameBytes[0] == address.Area && Utility.CheckSumCRC(frameBytes))
481+
byte[] frameBytes = new byte[size * 2 + 3];//size * 2 +
482+
byte[] data = new byte[size * 2];
483+
_serialPort.Write(header, 0, header.Length);
484+
int numBytesRead = 0;
485+
while (numBytesRead < 2)
486+
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 2 - numBytesRead);
487+
if (frameBytes[1] == address.DBNumber)
479488
{
480-
Array.Copy(frameBytes, 3, data, 0, data.Length);
489+
numBytesRead = 0;
490+
while (numBytesRead != frameBytes.Length)
491+
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead);
492+
Array.Copy(frameBytes, 1, data, 0, data.Length);
493+
Thread.Sleep(10);
481494
return data;
482495
}
496+
else
497+
{
498+
numBytesRead = 0;
499+
while (numBytesRead < 3)
500+
numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead);
501+
Thread.Sleep(10);
502+
}
503+
483504
}
484505
return null;
485506
}

SCADA/dll/ModbusDriver.dll

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)