From 8dc89867e9968751e331be2b93e09062bb68315d Mon Sep 17 00:00:00 2001 From: Tim Verwaal Date: Thu, 19 Dec 2019 10:55:51 +0100 Subject: [PATCH] Extended PLCAddress.Parse method --- S7.Net.UnitTest/PLCAddressParsingTests.cs | 156 ++++++++++++++++++++++ S7.Net.UnitTest/S7.Net.UnitTest.csproj | 1 + S7.Net/PLCAddress.cs | 9 +- 3 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 S7.Net.UnitTest/PLCAddressParsingTests.cs diff --git a/S7.Net.UnitTest/PLCAddressParsingTests.cs b/S7.Net.UnitTest/PLCAddressParsingTests.cs new file mode 100644 index 0000000..3c74a9d --- /dev/null +++ b/S7.Net.UnitTest/PLCAddressParsingTests.cs @@ -0,0 +1,156 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using S7.Net.Types; +using System; + +namespace S7.Net.UnitTest +{ + [TestClass] + public class PLCAddressParsingTests + { + [TestMethod] + public void T01_ParseM2000_1() + { + DataItem dataItem = DataItem.FromAddress("M2000.1"); + + Assert.AreEqual(DataType.Memory, dataItem.DataType, "Wrong datatype for M2000.1"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for M2000.1"); + Assert.AreEqual(VarType.Bit, dataItem.VarType, "Wrong vartype for M2000.1"); + Assert.AreEqual(2000, dataItem.StartByteAdr, "Wrong startbyte for M2000.1"); + Assert.AreEqual(1, dataItem.BitAdr, "Wrong bit for M2000.1"); + } + + [TestMethod] + public void T02_ParseMB200() + { + DataItem dataItem = DataItem.FromAddress("MB200"); + + Assert.AreEqual(DataType.Memory, dataItem.DataType, "Wrong datatype for MB200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for MB200"); + Assert.AreEqual(VarType.Byte, dataItem.VarType, "Wrong vartype for MB200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for MB200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for MB200"); + } + + [TestMethod] + public void T03_ParseMW200() + { + DataItem dataItem = DataItem.FromAddress("MW200"); + + Assert.AreEqual(DataType.Memory, dataItem.DataType, "Wrong datatype for MW200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for MW200"); + Assert.AreEqual(VarType.Word, dataItem.VarType, "Wrong vartype for MW200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for MW200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for MW200"); + } + + [TestMethod] + public void T04_ParseMD200() + { + DataItem dataItem = DataItem.FromAddress("MD200"); + + Assert.AreEqual(DataType.Memory, dataItem.DataType, "Wrong datatype for MD200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for MD200"); + Assert.AreEqual(VarType.DWord, dataItem.VarType, "Wrong vartype for MD200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for MD200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for MD200"); + } + + + [TestMethod] + public void T05_ParseI2000_1() + { + DataItem dataItem = DataItem.FromAddress("I2000.1"); + + Assert.AreEqual(DataType.Input, dataItem.DataType, "Wrong datatype for I2000.1"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for I2000.1"); + Assert.AreEqual(VarType.Bit, dataItem.VarType, "Wrong vartype for I2000.1"); + Assert.AreEqual(2000, dataItem.StartByteAdr, "Wrong startbyte for I2000.1"); + Assert.AreEqual(1, dataItem.BitAdr, "Wrong bit for I2000.1"); + } + + [TestMethod] + public void T06_ParseIB200() + { + DataItem dataItem = DataItem.FromAddress("IB200"); + + Assert.AreEqual(DataType.Input, dataItem.DataType, "Wrong datatype for IB200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for IB200"); + Assert.AreEqual(VarType.Byte, dataItem.VarType, "Wrong vartype for IB200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for IB200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for IB200"); + } + + [TestMethod] + public void T07_ParseIW200() + { + DataItem dataItem = DataItem.FromAddress("IW200"); + + Assert.AreEqual(DataType.Input, dataItem.DataType, "Wrong datatype for IW200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for IW200"); + Assert.AreEqual(VarType.Word, dataItem.VarType, "Wrong vartype for IW200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for IW200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for IW200"); + } + + [TestMethod] + public void T08_ParseID200() + { + DataItem dataItem = DataItem.FromAddress("ID200"); + + Assert.AreEqual(DataType.Input, dataItem.DataType, "Wrong datatype for ID200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for ID200"); + Assert.AreEqual(VarType.DWord, dataItem.VarType, "Wrong vartype for ID200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for ID200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for ID200"); + } + + + [TestMethod] + public void T09_ParseQ2000_1() + { + DataItem dataItem = DataItem.FromAddress("Q2000.1"); + + Assert.AreEqual(DataType.Output, dataItem.DataType, "Wrong datatype for Q2000.1"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for Q2000.1"); + Assert.AreEqual(VarType.Bit, dataItem.VarType, "Wrong vartype for Q2000.1"); + Assert.AreEqual(2000, dataItem.StartByteAdr, "Wrong startbyte for Q2000.1"); + Assert.AreEqual(1, dataItem.BitAdr, "Wrong bit for Q2000.1"); + } + + [TestMethod] + public void T10_ParseQB200() + { + DataItem dataItem = DataItem.FromAddress("QB200"); + + Assert.AreEqual(DataType.Output, dataItem.DataType, "Wrong datatype for QB200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for QB200"); + Assert.AreEqual(VarType.Byte, dataItem.VarType, "Wrong vartype for QB200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for QB200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for QB200"); + } + + [TestMethod] + public void T11_ParseQW200() + { + DataItem dataItem = DataItem.FromAddress("QW200"); + + Assert.AreEqual(DataType.Output, dataItem.DataType, "Wrong datatype for QW200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for QW200"); + Assert.AreEqual(VarType.Word, dataItem.VarType, "Wrong vartype for QW200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for QW200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for QW200"); + } + + [TestMethod] + public void T12_ParseQD200() + { + DataItem dataItem = DataItem.FromAddress("QD200"); + + Assert.AreEqual(DataType.Output, dataItem.DataType, "Wrong datatype for QD200"); + Assert.AreEqual(0, dataItem.DB, "Wrong dbnumber for QD200"); + Assert.AreEqual(VarType.DWord, dataItem.VarType, "Wrong vartype for QD200"); + Assert.AreEqual(200, dataItem.StartByteAdr, "Wrong startbyte for QD200"); + Assert.AreEqual(0, dataItem.BitAdr, "Wrong bit for QD200"); + } + } +} diff --git a/S7.Net.UnitTest/S7.Net.UnitTest.csproj b/S7.Net.UnitTest/S7.Net.UnitTest.csproj index 321f0aa..487efa8 100644 --- a/S7.Net.UnitTest/S7.Net.UnitTest.csproj +++ b/S7.Net.UnitTest/S7.Net.UnitTest.csproj @@ -63,6 +63,7 @@ + diff --git a/S7.Net/PLCAddress.cs b/S7.Net/PLCAddress.cs index e78015f..ed542e5 100644 --- a/S7.Net/PLCAddress.cs +++ b/S7.Net/PLCAddress.cs @@ -80,6 +80,7 @@ default: throw new InvalidAddressException(); } + case "IB": case "EB": // Input byte dataType = DataType.Input; @@ -87,6 +88,7 @@ address = int.Parse(input.Substring(2)); varType = VarType.Byte; return; + case "IW": case "EW": // Input word dataType = DataType.Input; @@ -94,6 +96,7 @@ address = int.Parse(input.Substring(2)); varType = VarType.Word; return; + case "ID": case "ED": // Input double-word dataType = DataType.Input; @@ -101,6 +104,7 @@ address = int.Parse(input.Substring(2)); varType = VarType.DWord; return; + case "QB": case "AB": // Output byte dataType = DataType.Output; @@ -108,6 +112,7 @@ address = int.Parse(input.Substring(2)); varType = VarType.Byte; return; + case "QW": case "AW": // Output word dataType = DataType.Output; @@ -115,6 +120,7 @@ address = int.Parse(input.Substring(2)); varType = VarType.Word; return; + case "QD": case "AD": // Output double-word dataType = DataType.Output; @@ -152,6 +158,7 @@ dataType = DataType.Input; varType = VarType.Bit; break; + case "Q": case "A": case "O": // Output @@ -161,7 +168,7 @@ case "M": // Memory dataType = DataType.Memory; - varType = VarType.Byte; + varType = VarType.Bit; break; case "T": // Timer