From ddfedaa17e72905068f742127d93289a03e294a0 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 8 Jun 2018 10:22:42 +0200 Subject: [PATCH 1/2] Typo in Exception string --- S7.Net/PLCHelpers.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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; From 1b22badea1440d8e251483abd0cf2ac89b9bb3c9 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 8 Jun 2018 10:26:52 +0200 Subject: [PATCH 2/2] Fixed ErrorCode.ReadData for specific methods --- S7.Net.UnitTest/S7NetTestsSync.cs | 15 +++++++++++++++ S7.Net/PlcAsynchronous.cs | 4 ++-- S7.Net/PlcSynchronous.cs | 13 +++++++------ 3 files changed, 24 insertions(+), 8 deletions(-) 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/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; } }