Skip to content

Commit 43b2982

Browse files
committed
Release S7NetPlus 0.16.0
Release highlights: - Fix UInt32 reads in classes - Add string support for classes
2 parents d99d0d0 + 6aa0133 commit 43b2982

File tree

7 files changed

+143
-60
lines changed

7 files changed

+143
-60
lines changed

.github/workflows/test.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ jobs:
1414
DOTNET_NOLOGO : 1
1515
strategy:
1616
matrix:
17-
os: [windows-latest, ubuntu-latest, macos-latest]
17+
os: [windows-latest, ubuntu-20.04, macos-latest]
1818
test-framework: [netcoreapp3.1, net5.0]
1919
include:
20-
- os: ubuntu-latest
20+
- os: ubuntu-20.04
2121
test-framework: netcoreapp3.1
2222
installSnap7: true
2323
dotnet-sdk: '3.1.x'
24-
- os: ubuntu-latest
24+
- os: ubuntu-20.04
2525
test-framework: net5.0
2626
installSnap7: true
2727
dotnet-sdk: '5.0.x'
@@ -48,7 +48,7 @@ jobs:
4848
- uses: actions/checkout@v2
4949

5050
- name: Install Snap7 Linux
51-
if: ${{ matrix.installSnap7 && matrix.os == 'ubuntu-latest' }}
51+
if: ${{ matrix.installSnap7 && matrix.os == 'ubuntu-20.04' }}
5252
run: |
5353
sudo add-apt-repository ppa:gijzelaar/snap7
5454
sudo apt-get update

S7.Net.UnitTest/Helpers/TestClass.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
using S7.Net.Types;
3+
24
namespace S7.Net.UnitTest.Helpers
35
{
46
class TestClass
@@ -51,5 +53,16 @@ class TestClass
5153
/// DB1.DBD16
5254
/// </summary>
5355
public ushort DWordVariable { get; set; }
56+
57+
/// <summary>
58+
/// DB1.DBX20.0
59+
/// </summary>
60+
[S7String(S7StringType.S7WString, 10)]
61+
public string WStringVariable { get; set; }
62+
/// <summary>
63+
/// DB1.DBX44.0
64+
/// </summary>
65+
[S7String(S7StringType.S7String, 10)]
66+
public string StringVariable { get; set; }
5467
}
5568
}

S7.Net.UnitTest/S7NetTestsAsync.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using S7.UnitTest.Helpers;
88
using System.Threading.Tasks;
99
using System.Threading;
10+
using System.Security.Cryptography;
1011

1112
#endregion
1213

@@ -154,7 +155,9 @@ public async Task Test_Async_ReadAndWriteClass()
154155
IntVariable = -15000,
155156
LRealVariable = -154.789,
156157
RealVariable = -154.789f,
157-
DWordVariable = 850
158+
DWordVariable = 850,
159+
WStringVariable = "ÄÜÉÊéà",
160+
StringVariable = "Hallo"
158161
};
159162

160163
await plc.WriteClassAsync(tc, DB2);
@@ -168,6 +171,8 @@ public async Task Test_Async_ReadAndWriteClass()
168171
Assert.AreEqual(tc.LRealVariable, tc2.LRealVariable);
169172
Assert.AreEqual(tc.RealVariable, tc2.RealVariable);
170173
Assert.AreEqual(tc.DWordVariable, tc2.DWordVariable);
174+
Assert.AreEqual(tc.WStringVariable, tc2.WStringVariable);
175+
Assert.AreEqual(tc.StringVariable, tc2.StringVariable);
171176
}
172177

173178
[TestMethod]
@@ -580,7 +585,9 @@ public async Task Test_Async_ReadClassIgnoresNonPublicSetters()
580585
IntVariable = -15000,
581586
LRealVariable = -154.789,
582587
RealVariable = -154.789f,
583-
DWordVariable = 850
588+
DWordVariable = 850,
589+
WStringVariable = "ÄÜÉÊéà",
590+
StringVariable = "Hallo"
584591
};
585592

586593
await plc.WriteClassAsync(tc, DB2);
@@ -628,7 +635,10 @@ public async Task Test_Async_ReadClassWithGenericReturnsSameResultAsReadClassWit
628635
IntVariable = -15000,
629636
LRealVariable = -154.789,
630637
RealVariable = -154.789f,
631-
DWordVariable = 850
638+
DWordVariable = 850,
639+
WStringVariable = "ÄÜÉÊéà",
640+
StringVariable = "Hallo"
641+
632642
};
633643

634644
await plc.WriteClassAsync(tc, DB2);
@@ -646,6 +656,9 @@ public async Task Test_Async_ReadClassWithGenericReturnsSameResultAsReadClassWit
646656
Assert.AreEqual(Math.Round(tc2.LRealVariable, 3), Math.Round(tc2Generic.LRealVariable, 3));
647657
Assert.AreEqual(tc2.RealVariable, tc2Generic.RealVariable);
648658
Assert.AreEqual(tc2.DWordVariable, tc2Generic.DWordVariable);
659+
Assert.AreEqual(tc2.WStringVariable, tc2Generic.WStringVariable);
660+
Assert.AreEqual(tc2.StringVariable, tc2Generic.StringVariable);
661+
649662
}
650663

651664
[TestMethod]
@@ -671,7 +684,9 @@ public async Task Test_Async_ReadClassWithGenericAndClassFactoryReturnsSameResul
671684
IntVariable = -15000,
672685
LRealVariable = -154.789,
673686
RealVariable = -154.789f,
674-
DWordVariable = 850
687+
DWordVariable = 850,
688+
WStringVariable = "ÄÜÉÊéà",
689+
StringVariable = "Hallo"
675690
};
676691

677692
await plc.WriteClassAsync(tc, DB2);
@@ -686,6 +701,8 @@ public async Task Test_Async_ReadClassWithGenericAndClassFactoryReturnsSameResul
686701
Assert.AreEqual(Math.Round(tc2Generic.LRealVariable, 3), Math.Round(tc2GenericWithClassFactory.LRealVariable, 3));
687702
Assert.AreEqual(tc2Generic.RealVariable, tc2GenericWithClassFactory.RealVariable);
688703
Assert.AreEqual(tc2Generic.DWordVariable, tc2GenericWithClassFactory.DWordVariable);
704+
Assert.AreEqual(tc2Generic.WStringVariable, tc2GenericWithClassFactory.WStringVariable);
705+
Assert.AreEqual(tc2Generic.StringVariable, tc2GenericWithClassFactory.StringVariable);
689706
}
690707

691708
[TestMethod]
@@ -792,7 +809,9 @@ public async Task Test_Async_ReadClassReturnsNumberOfReadBytesFromThePlc()
792809
IntVariable = -15000,
793810
LRealVariable = -154.789,
794811
RealVariable = -154.789f,
795-
DWordVariable = 850
812+
DWordVariable = 850,
813+
WStringVariable = "ÄÜÉÊéà",
814+
StringVariable = "Hallo"
796815
};
797816
plc.WriteClass(tc, DB2);
798817

S7.Net.UnitTest/S7NetTestsSync.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using S7.Net.UnitTest.Helpers;
66
using S7.Net.Types;
77
using S7.UnitTest.Helpers;
8+
using System.Security.Cryptography;
89

910
#endregion
1011

@@ -183,6 +184,9 @@ public void T04_ReadAndWriteClass()
183184
tc.LRealVariable = -154.789;
184185
tc.RealVariable = -154.789f;
185186
tc.DWordVariable = 850;
187+
tc.WStringVariable = "ÄÜÉÊéà";
188+
tc.StringVariable = "Hallo";
189+
186190
plc.WriteClass(tc, DB2);
187191
TestClass tc2 = new TestClass();
188192
// Values that are read from a class are stored inside the class itself, that is passed by reference
@@ -194,6 +198,8 @@ public void T04_ReadAndWriteClass()
194198
Assert.AreEqual(tc.LRealVariable, tc2.LRealVariable);
195199
Assert.AreEqual(tc.RealVariable, tc2.RealVariable);
196200
Assert.AreEqual(tc.DWordVariable, tc2.DWordVariable);
201+
Assert.AreEqual(tc.WStringVariable, tc2.WStringVariable);
202+
Assert.AreEqual(tc.StringVariable, tc2.StringVariable);
197203
}
198204

199205
/// <summary>
@@ -577,6 +583,8 @@ public void T12_ReadClassIgnoresNonPublicSetters()
577583
tc.LRealVariable = -154.789;
578584
tc.RealVariable = -154.789f;
579585
tc.DWordVariable = 850;
586+
tc.WStringVariable = "ÄÜÉÊéà";
587+
tc.StringVariable = "Hallo";
580588

581589
plc.WriteClass(tc, DB2);
582590

@@ -622,6 +630,8 @@ public void T14_ReadClassWithGenericReturnsSameResultAsReadClassWithoutGeneric()
622630
tc.LRealVariable = -154.789;
623631
tc.RealVariable = -154.789f;
624632
tc.DWordVariable = 850;
633+
tc.WStringVariable = "ÄÜÉÊéà";
634+
tc.StringVariable = "Hallo";
625635

626636
plc.WriteClass(tc, DB2);
627637

@@ -637,6 +647,8 @@ public void T14_ReadClassWithGenericReturnsSameResultAsReadClassWithoutGeneric()
637647
Assert.AreEqual(Math.Round(tc2.LRealVariable, 3), Math.Round(tc2Generic.LRealVariable, 3));
638648
Assert.AreEqual(tc2.RealVariable, tc2Generic.RealVariable);
639649
Assert.AreEqual(tc2.DWordVariable, tc2Generic.DWordVariable);
650+
Assert.AreEqual(tc2.WStringVariable, tc2Generic.WStringVariable);
651+
Assert.AreEqual(tc2.StringVariable, tc2Generic.StringVariable);
640652
}
641653

642654
[TestMethod, ExpectedException(typeof(PlcException))]
@@ -665,6 +677,8 @@ public void T16_ReadClassWithGenericAndClassFactoryReturnsSameResultAsReadClassW
665677
tc.LRealVariable = -154.789;
666678
tc.RealVariable = -154.789f;
667679
tc.DWordVariable = 850;
680+
tc.WStringVariable = "ÄÜÉÊéà";
681+
tc.StringVariable = "Hallo";
668682

669683
plc.WriteClass(tc, DB2);
670684

@@ -679,6 +693,8 @@ public void T16_ReadClassWithGenericAndClassFactoryReturnsSameResultAsReadClassW
679693
Assert.AreEqual(Math.Round(tc2Generic.LRealVariable, 3), Math.Round(tc2GenericWithClassFactory.LRealVariable, 3));
680694
Assert.AreEqual(tc2Generic.RealVariable, tc2GenericWithClassFactory.RealVariable);
681695
Assert.AreEqual(tc2Generic.DWordVariable, tc2GenericWithClassFactory.DWordVariable);
696+
Assert.AreEqual(tc2Generic.WStringVariable, tc2GenericWithClassFactory.WStringVariable);
697+
Assert.AreEqual(tc2Generic.StringVariable, tc2GenericWithClassFactory.StringVariable);
682698
}
683699

684700
[TestMethod, ExpectedException(typeof(PlcException))]
@@ -837,6 +853,9 @@ public void T21_ReadClassReturnsNumberOfReadBytesFromThePlc()
837853
tc.LRealVariable = -154.789;
838854
tc.RealVariable = -154.789f;
839855
tc.DWordVariable = 850;
856+
tc.WStringVariable = "ÄÜÉÊéà";
857+
tc.StringVariable = "Hallo";
858+
840859
plc.WriteClass(tc, DB2);
841860

842861
int expectedReadBytes = (int)Types.Class.GetClassSize(tc);

S7.Net.UnitTest/TypeTests/ClassTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@ public void GetClassSizeTest()
1717
Assert.AreEqual(Class.GetClassSize(new TestClassUnevenSize(3, 17)), 10);
1818
}
1919

20+
/// <summary>
21+
/// Ensure Uint32 is correctly parsed through ReadClass functions. Adresses issue https://github.com/S7NetPlus/s7netplus/issues/414
22+
/// </summary>
23+
[TestMethod]
24+
public void TestUint32Read()
25+
{
26+
var result = new TestUint32();
27+
var data = new byte[4] { 0, 0, 0, 5 };
28+
var bytesRead = Class.FromBytes(result, data);
29+
Assert.AreEqual(bytesRead, data.Length);
30+
Assert.AreEqual(5u, result.Value1);
31+
}
32+
2033
private class TestClassUnevenSize
2134
{
2235
public bool Bool { get; set; }
@@ -29,5 +42,10 @@ public TestClassUnevenSize(int byteCount, int bitCount)
2942
Bools = new bool[bitCount];
3043
}
3144
}
45+
46+
private class TestUint32
47+
{
48+
public uint Value1 { get; set; }
49+
}
3250
}
3351
}

0 commit comments

Comments
 (0)