diff --git a/S7.Net.UnitTest/TypeTests/BooleanTests.cs b/S7.Net.UnitTest/TypeTests/BooleanTests.cs
new file mode 100644
index 00000000..3390b791
--- /dev/null
+++ b/S7.Net.UnitTest/TypeTests/BooleanTests.cs
@@ -0,0 +1,38 @@
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Boolean = S7.Net.Types.Boolean;
+
+namespace S7.Net.UnitTest.TypeTests
+{
+ [TestClass]
+ public class BooleanTests
+ {
+ [DataTestMethod]
+ [DataRow(0)]
+ [DataRow(1)]
+ [DataRow(2)]
+ [DataRow(3)]
+ [DataRow(4)]
+ [DataRow(5)]
+ [DataRow(6)]
+ [DataRow(7)]
+ public void TestValidSetBitValues(int index)
+ {
+ Assert.AreEqual(Math.Pow(2, index), Boolean.SetBit(0, index));
+ }
+
+ [DataTestMethod]
+ [DataRow(0)]
+ [DataRow(1)]
+ [DataRow(2)]
+ [DataRow(3)]
+ [DataRow(4)]
+ [DataRow(5)]
+ [DataRow(6)]
+ [DataRow(7)]
+ public void TestValidClearBitValues(int index)
+ {
+ Assert.AreEqual((byte) ((uint) Math.Pow(2, index) ^ uint.MaxValue), Boolean.ClearBit(byte.MaxValue, index));
+ }
+ }
+}
diff --git a/S7.Net/PLC.cs b/S7.Net/PLC.cs
index 8882a138..3a73b4cc 100644
--- a/S7.Net/PLC.cs
+++ b/S7.Net/PLC.cs
@@ -14,7 +14,7 @@ namespace S7.Net
public partial class Plc : IDisposable
{
private const int CONNECTION_TIMED_OUT_ERROR_CODE = 10060;
-
+
//TCP connection to device
private TcpClient? tcpClient;
private NetworkStream? _stream;
diff --git a/S7.Net/PLCHelpers.cs b/S7.Net/PLCHelpers.cs
index 07611cb8..5b2d77fa 100644
--- a/S7.Net/PLCHelpers.cs
+++ b/S7.Net/PLCHelpers.cs
@@ -30,8 +30,8 @@ private static void BuildHeaderPackage(System.IO.MemoryStream stream, int amount
}
///
- /// Create the bytes-package to request data from the PLC. You have to specify the memory type (dataType),
- /// the address of the memory, the address of the byte and the bytes count.
+ /// Create the bytes-package to request data from the PLC. You have to specify the memory type (dataType),
+ /// the address of the memory, the address of the byte and the bytes count.
///
/// MemoryType (DB, Timer, Counter, etc.)
/// Address of the memory to be read
@@ -184,7 +184,7 @@ internal static int VarTypeToByteLength(VarType varType, int varCount = 1)
switch (varType)
{
case VarType.Bit:
- return varCount + 7 / 8;
+ return (varCount + 7) / 8;
case VarType.Byte:
return (varCount < 1) ? 1 : varCount;
case VarType.String:
diff --git a/S7.Net/Types/Boolean.cs b/S7.Net/Types/Boolean.cs
index b83369d4..f7bc83ea 100644
--- a/S7.Net/Types/Boolean.cs
+++ b/S7.Net/Types/Boolean.cs
@@ -14,20 +14,51 @@ public static bool GetValue(byte value, int bit)
}
///
- /// Sets the value of a bit to 1 (true), given the address of the bit
+ /// Sets the value of a bit to 1 (true), given the address of the bit. Returns
+ /// a copy of the value with the bit set.
///
+ /// The input value to modify.
+ /// The index (zero based) of the bit to set.
+ /// The modified value with the bit at index set.
public static byte SetBit(byte value, int bit)
{
- return (byte)((value | (1 << bit)) & 0xFF);
+ SetBit(ref value, bit);
+
+ return value;
}
///
- /// Resets the value of a bit to 0 (false), given the address of the bit
+ /// Sets the value of a bit to 1 (true), given the address of the bit.
+ ///
+ /// The value to modify.
+ /// The index (zero based) of the bit to set.
+ public static void SetBit(ref byte value, int bit)
+ {
+ value = (byte) ((value | (1 << bit)) & 0xFF);
+ }
+
+ ///
+ /// Resets the value of a bit to 0 (false), given the address of the bit. Returns
+ /// a copy of the value with the bit cleared.
///
+ /// The input value to modify.
+ /// The index (zero based) of the bit to clear.
+ /// The modified value with the bit at index cleared.
public static byte ClearBit(byte value, int bit)
{
- return (byte)((value | (~(1 << bit))) & 0xFF);
+ ClearBit(ref value, bit);
+
+ return value;
}
+ ///
+ /// Resets the value of a bit to 0 (false), given the address of the bit
+ ///
+ /// The input value to modify.
+ /// The index (zero based) of the bit to clear.
+ public static void ClearBit(ref byte value, int bit)
+ {
+ value = (byte) (value & ~(1 << bit) & 0xFF);
+ }
}
}