Skip to content

Commit fd20a09

Browse files
Merge pull request rossmann-engineering#71 from HowardWhile/feature/delay_method
Feature/delay method
2 parents 9830678 + f290ddd commit fd20a09

File tree

1 file changed

+45
-20
lines changed

1 file changed

+45
-20
lines changed

EasyModbus/ModbusClient.cs

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2828
using System.Reflection;
2929
using System.Text;
3030
using System.Collections.Generic;
31+
using System.Threading;
3132

3233
namespace EasyModbus
3334
{
@@ -941,11 +942,12 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity)
941942
DateTime dateTimeSend = DateTime.Now;
942943
byte receivedUnitIdentifier = 0xFF;
943944

944-
945+
SpinWait sw_delay = new SpinWait();
945946
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
946947
{
947-
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
948-
System.Threading.Thread.Sleep(1);
948+
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
949+
sw_delay.SpinOnce();
950+
949951
data = new byte[2100];
950952
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
951953
receivedUnitIdentifier = data[6];
@@ -1135,10 +1137,13 @@ public bool[] ReadCoils(int startingAddress, int quantity)
11351137
readBuffer = new byte[256];
11361138
DateTime dateTimeSend = DateTime.Now;
11371139
byte receivedUnitIdentifier = 0xFF;
1140+
1141+
SpinWait sw_delay = new SpinWait();
11381142
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
11391143
{
1140-
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1141-
System.Threading.Thread.Sleep(1);
1144+
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1145+
sw_delay.SpinOnce();
1146+
11421147
data = new byte[2100];
11431148

11441149
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
@@ -1326,11 +1331,14 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity)
13261331

13271332
DateTime dateTimeSend = DateTime.Now;
13281333
byte receivedUnitIdentifier = 0xFF;
1334+
1335+
SpinWait sw_delay = new SpinWait();
13291336
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
13301337
{
13311338
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1332-
System.Threading.Thread.Sleep(1);
1333-
data = new byte[2100];
1339+
sw_delay.SpinOnce();
1340+
1341+
data = new byte[2100];
13341342
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
13351343

13361344
receivedUnitIdentifier = data[6];
@@ -1528,12 +1536,14 @@ public int[] ReadInputRegisters(int startingAddress, int quantity)
15281536
readBuffer = new byte[256];
15291537
DateTime dateTimeSend = DateTime.Now;
15301538
byte receivedUnitIdentifier = 0xFF;
1531-
1539+
1540+
SpinWait sw_delay = new SpinWait();
15321541
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
15331542
{
15341543
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1535-
System.Threading.Thread.Sleep(1);
1536-
data = new byte[2100];
1544+
sw_delay.SpinOnce();
1545+
1546+
data = new byte[2100];
15371547
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
15381548
receivedUnitIdentifier = data[6];
15391549
}
@@ -1729,11 +1739,14 @@ public void WriteSingleCoil(int startingAddress, bool value)
17291739
readBuffer = new byte[256];
17301740
DateTime dateTimeSend = DateTime.Now;
17311741
byte receivedUnitIdentifier = 0xFF;
1742+
1743+
SpinWait sw_delay = new SpinWait();
17321744
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
17331745
{
17341746
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1735-
System.Threading.Thread.Sleep(1);
1736-
data = new byte[2100];
1747+
sw_delay.SpinOnce();
1748+
1749+
data = new byte[2100];
17371750
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
17381751
receivedUnitIdentifier = data[6];
17391752
}
@@ -1908,11 +1921,14 @@ public void WriteSingleRegister(int startingAddress, int value)
19081921
readBuffer = new byte[256];
19091922
DateTime dateTimeSend = DateTime.Now;
19101923
byte receivedUnitIdentifier = 0xFF;
1924+
1925+
SpinWait sw_delay = new SpinWait();
19111926
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
19121927
{
19131928
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1914-
System.Threading.Thread.Sleep(1);
1915-
data = new byte[2100];
1929+
sw_delay.SpinOnce();
1930+
1931+
data = new byte[2100];
19161932
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
19171933
receivedUnitIdentifier = data[6];
19181934
}
@@ -2104,11 +2120,14 @@ public void WriteMultipleCoils(int startingAddress, bool[] values)
21042120
readBuffer = new byte[256];
21052121
DateTime dateTimeSend = DateTime.Now;
21062122
byte receivedUnitIdentifier = 0xFF;
2123+
2124+
SpinWait sw_delay = new SpinWait();
21072125
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
21082126
{
21092127
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
2110-
System.Threading.Thread.Sleep(1);
2111-
data = new byte[2100];
2128+
sw_delay.SpinOnce();
2129+
2130+
data = new byte[2100];
21122131
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
21132132
receivedUnitIdentifier = data[6];
21142133
}
@@ -2289,11 +2308,14 @@ public void WriteMultipleRegisters(int startingAddress, int[] values)
22892308
readBuffer = new byte[256];
22902309
DateTime dateTimeSend = DateTime.Now;
22912310
byte receivedUnitIdentifier = 0xFF;
2311+
2312+
SpinWait sw_delay = new SpinWait();
22922313
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
22932314
{
22942315
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
2295-
System.Threading.Thread.Sleep(1);
2296-
data = new byte[2100];
2316+
sw_delay.SpinOnce();
2317+
2318+
data = new byte[2100];
22972319
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
22982320
receivedUnitIdentifier = data[6];
22992321
}
@@ -2492,11 +2514,14 @@ public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRea
24922514
readBuffer = new byte[256];
24932515
DateTime dateTimeSend = DateTime.Now;
24942516
byte receivedUnitIdentifier = 0xFF;
2517+
2518+
SpinWait sw_delay = new SpinWait();
24952519
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
24962520
{
24972521
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
2498-
System.Threading.Thread.Sleep(1);
2499-
data = new byte[2100];
2522+
sw_delay.SpinOnce();
2523+
2524+
data = new byte[2100];
25002525
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
25012526
receivedUnitIdentifier = data[6];
25022527
}

0 commit comments

Comments
 (0)