From a4b6a360fea5133b8ab556108f0b460f16f840c7 Mon Sep 17 00:00:00 2001 From: Serge Camille Date: Sun, 6 Jun 2021 22:16:59 +0200 Subject: [PATCH] ParseDataIntoDataItems needs to always align the response address to a even value after each data item. --- S7.Net.UnitTest/S7NetTestsAsync.cs | 10 ++++++++-- S7.Net/PLCHelpers.cs | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/S7.Net.UnitTest/S7NetTestsAsync.cs b/S7.Net.UnitTest/S7NetTestsAsync.cs index fc44522..5ebbf4a 100644 --- a/S7.Net.UnitTest/S7NetTestsAsync.cs +++ b/S7.Net.UnitTest/S7NetTestsAsync.cs @@ -958,19 +958,25 @@ namespace S7.Net.UnitTest { Assert.IsTrue(plc.IsConnected, "Before executing this test, the plc must be connected. Check constructor."); + var db = 2; + // First write a sensible S7 string capacity + await plc.WriteBytesAsync(DataType.DataBlock, db, 0, new byte[] {5, 0}); + + // Read two data items, with the first having odd number of bytes (7), + // and the second has to be aligned on a even address var dataItems = new List { new DataItem { DataType = DataType.DataBlock, - DB = 2, + DB = db, VarType = VarType.S7String, Count = 5 }, new DataItem { DataType = DataType.DataBlock, - DB = 2, + DB = db, VarType = VarType.Word, } }; diff --git a/S7.Net/PLCHelpers.cs b/S7.Net/PLCHelpers.cs index 5b2d77f..7715922 100644 --- a/S7.Net/PLCHelpers.cs +++ b/S7.Net/PLCHelpers.cs @@ -242,8 +242,8 @@ namespace S7.Net // next Item offset += byteCnt; - // Fill byte in response when bytecount is odd - if (dataItem.Count % 2 != 0 && (dataItem.VarType == VarType.Byte || dataItem.VarType == VarType.Bit)) + // Always align to even offset + if (offset % 2 != 0) offset++; } }