diff --git a/S7.Net.UnitTest/S7NetTestsSync.cs b/S7.Net.UnitTest/S7NetTestsSync.cs
index 5948171..6daa9f7 100644
--- a/S7.Net.UnitTest/S7NetTestsSync.cs
+++ b/S7.Net.UnitTest/S7NetTestsSync.cs
@@ -897,6 +897,21 @@ namespace S7.Net.UnitTest
Assert.AreEqual(tc.Bool1, tc2.Bool1);
}
+ [TestMethod]
+ public void T29_Read_Write_ExceptionHandlingWhenPlcIsNotReachable()
+ {
+ // leave plc Open
+ S7TestServer.Stop();
+
+ double test_value = 55.66;
+ plc.Write("DB1.DBD0", test_value);
+ Assert.AreEqual(plc.LastErrorCode, ErrorCode.WriteData, "No Write Error.");
+
+ var helper = plc.Read("DB1.DBD0");
+ Assert.AreEqual(helper, null, "Value in Read.");
+ Assert.AreEqual(plc.LastErrorCode, ErrorCode.ReadData, "No Read Error.");
+ }
+
#endregion
#region Private methods
diff --git a/S7.Net/PLCHelpers.cs b/S7.Net/PLCHelpers.cs
index 7525ff2..ab59d2c 100644
--- a/S7.Net/PLCHelpers.cs
+++ b/S7.Net/PLCHelpers.cs
@@ -154,7 +154,7 @@ namespace S7.Net
varType = VarType.Counter;
return;
default:
- throw new InvalidAddressException(string.Format("{0} is not av valid address", address.Substring(0, 1)));
+ throw new InvalidAddressException(string.Format("{0} is not a valid address", address.Substring(0, 1)));
}
string txt2 = address.Substring(1);
@@ -248,7 +248,7 @@ namespace S7.Net
///
private object ParseBytes(VarType varType, byte[] bytes, int varCount, byte bitAdr = 0)
{
- if (bytes == null)
+ if (bytes == null || bytes.Length == 0)
return null;
switch (varType)
@@ -352,10 +352,10 @@ namespace S7.Net
}
- ///
- /// Sets the to and to .
- ///
- public void ClearLastError()
+ ///
+ /// Sets the to and to .
+ ///
+ public void ClearLastError()
{
LastErrorCode = ErrorCode.NoError;
LastErrorString = string.Empty;
diff --git a/S7.Net/PlcAsynchronous.cs b/S7.Net/PlcAsynchronous.cs
index efaab86..ec5d18a 100644
--- a/S7.Net/PlcAsynchronous.cs
+++ b/S7.Net/PlcAsynchronous.cs
@@ -234,12 +234,12 @@ namespace S7.Net
}
catch (SocketException socketException)
{
- LastErrorCode = ErrorCode.WriteData;
+ LastErrorCode = ErrorCode.ReadData;
LastErrorString = socketException.Message;
}
catch (Exception exc)
{
- LastErrorCode = ErrorCode.WriteData;
+ LastErrorCode = ErrorCode.ReadData;
LastErrorString = exc.Message;
}
return dataItems;
diff --git a/S7.Net/PlcSynchronous.cs b/S7.Net/PlcSynchronous.cs
index b0ddcbd..892d58b 100644
--- a/S7.Net/PlcSynchronous.cs
+++ b/S7.Net/PlcSynchronous.cs
@@ -272,7 +272,8 @@ namespace S7.Net
ErrorCode lastError = WriteBitWithASingleRequest(dataType, db, startByteAdr, bitAdr, value);
if (lastError != ErrorCode.NoError)
{
- return lastError; }
+ return lastError;
+ }
return ErrorCode.NoError;
}
@@ -388,13 +389,13 @@ namespace S7.Net
}
catch (SocketException socketException)
{
- LastErrorCode = ErrorCode.WriteData;
+ LastErrorCode = ErrorCode.ReadData;
LastErrorString = socketException.Message;
return null;
}
catch (Exception exc)
{
- LastErrorCode = ErrorCode.WriteData;
+ LastErrorCode = ErrorCode.ReadData;
LastErrorString = exc.Message;
return null;
}
@@ -525,7 +526,7 @@ namespace S7.Net
{
package.Add(CreateReadDataRequestPackage(dataItem.DataType, dataItem.DB, dataItem.StartByteAdr, VarTypeToByteLength(dataItem.VarType, dataItem.Count)));
}
-
+
stream.Write(package.Array, 0, package.Array.Length);
var s7data = COTP.TSDU.Read(stream); //TODO use Async
@@ -536,12 +537,12 @@ namespace S7.Net
}
catch (SocketException socketException)
{
- LastErrorCode = ErrorCode.WriteData;
+ LastErrorCode = ErrorCode.ReadData;
LastErrorString = socketException.Message;
}
catch (Exception exc)
{
- LastErrorCode = ErrorCode.WriteData;
+ LastErrorCode = ErrorCode.ReadData;
LastErrorString = exc.Message;
}
}