Skip to content

Commit 51bce7d

Browse files
committed
[modify]
A delay method with faster response and no CPU performance...
1 parent 3f1f609 commit 51bce7d

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

EasyModbus/ModbusClient.cs

Lines changed: 29 additions & 18 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
{
@@ -74,6 +75,7 @@ public enum RegisterOrder { LowHigh = 0, HighLow = 1 };
7475

7576
NetworkStream stream;
7677

78+
private SpinWait sw_delay = new SpinWait();
7779
/// <summary>
7880
/// Constructor which determines the Master ip-address and the Master Port.
7981
/// </summary>
@@ -944,8 +946,9 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity)
944946

945947
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
946948
{
947-
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
948-
System.Threading.Thread.Sleep(1);
949+
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
950+
this.sw_delay.SpinOnce();
951+
949952
data = new byte[2100];
950953
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
951954
receivedUnitIdentifier = data[6];
@@ -1137,8 +1140,9 @@ public bool[] ReadCoils(int startingAddress, int quantity)
11371140
byte receivedUnitIdentifier = 0xFF;
11381141
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
11391142
{
1140-
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1141-
System.Threading.Thread.Sleep(1);
1143+
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1144+
this.sw_delay.SpinOnce();
1145+
11421146
data = new byte[2100];
11431147

11441148
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
@@ -1329,8 +1333,9 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity)
13291333
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
13301334
{
13311335
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1332-
System.Threading.Thread.Sleep(1);
1333-
data = new byte[2100];
1336+
this.sw_delay.SpinOnce();
1337+
1338+
data = new byte[2100];
13341339
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
13351340

13361341
receivedUnitIdentifier = data[6];
@@ -1532,8 +1537,9 @@ public int[] ReadInputRegisters(int startingAddress, int quantity)
15321537
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
15331538
{
15341539
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1535-
System.Threading.Thread.Sleep(1);
1536-
data = new byte[2100];
1540+
this.sw_delay.SpinOnce();
1541+
1542+
data = new byte[2100];
15371543
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
15381544
receivedUnitIdentifier = data[6];
15391545
}
@@ -1732,8 +1738,9 @@ public void WriteSingleCoil(int startingAddress, bool value)
17321738
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
17331739
{
17341740
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1735-
System.Threading.Thread.Sleep(1);
1736-
data = new byte[2100];
1741+
this.sw_delay.SpinOnce();
1742+
1743+
data = new byte[2100];
17371744
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
17381745
receivedUnitIdentifier = data[6];
17391746
}
@@ -1911,8 +1918,9 @@ public void WriteSingleRegister(int startingAddress, int value)
19111918
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
19121919
{
19131920
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
1914-
System.Threading.Thread.Sleep(1);
1915-
data = new byte[2100];
1921+
this.sw_delay.SpinOnce();
1922+
1923+
data = new byte[2100];
19161924
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
19171925
receivedUnitIdentifier = data[6];
19181926
}
@@ -2107,8 +2115,9 @@ public void WriteMultipleCoils(int startingAddress, bool[] values)
21072115
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
21082116
{
21092117
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
2110-
System.Threading.Thread.Sleep(1);
2111-
data = new byte[2100];
2118+
this.sw_delay.SpinOnce();
2119+
2120+
data = new byte[2100];
21122121
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
21132122
receivedUnitIdentifier = data[6];
21142123
}
@@ -2292,8 +2301,9 @@ public void WriteMultipleRegisters(int startingAddress, int[] values)
22922301
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
22932302
{
22942303
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
2295-
System.Threading.Thread.Sleep(1);
2296-
data = new byte[2100];
2304+
this.sw_delay.SpinOnce();
2305+
2306+
data = new byte[2100];
22972307
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
22982308
receivedUnitIdentifier = data[6];
22992309
}
@@ -2495,8 +2505,9 @@ public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRea
24952505
while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
24962506
{
24972507
while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout))
2498-
System.Threading.Thread.Sleep(1);
2499-
data = new byte[2100];
2508+
this.sw_delay.SpinOnce();
2509+
2510+
data = new byte[2100];
25002511
Array.Copy(readBuffer, 0, data, 6, readBuffer.Length);
25012512
receivedUnitIdentifier = data[6];
25022513
}

0 commit comments

Comments
 (0)