diff --git a/TiaCodeGen.Tests/SampleTests.cs b/TiaCodeGen.Tests/SampleTests.cs index c161b39..dac9d01 100644 --- a/TiaCodeGen.Tests/SampleTests.cs +++ b/TiaCodeGen.Tests/SampleTests.cs @@ -1,568 +1,602 @@ -using NUnit.Framework; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using TiaCodegen.Blocks; -using TiaCodegen.Commands; -using TiaCodegen.Commands.Coils; -using TiaCodegen.Commands.Comparisons; -using TiaCodegen.Commands.Functions; -using TiaCodegen.Commands.Functions.Base; -using TiaCodegen.Commands.Signals; -using TiaCodegen.Enums; -using TiaCodegen.Interfaces; - -namespace TiaCodegen.Samples -{ - [TestFixture] - public class SampleTests - { - const string TestInterface = @" - - -
- - - Initial call of this OB - - - - - =True, if remanent data are available - - -
-
- - - - - - - - - - - - - - -
-
- -"; - - [Test] - public void CreateBlock1() - { - var codeblock = new CodeBlock(); - var nw = new Network("Test1", "Test1en"); - - nw.Add( - new And( - new Signal("#Bool1"), - new Distributor - ( - new RCoil(new Signal("#Bool2")), - new Coil(new Signal("#Bool3")) - ))); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void CreateBlock2() - { - var codeblock = new CodeBlock(); - - var nw = new Network("Test2", "Test2en"); - nw.Add( - new And( - new Signal("#Bool1"), - new Signal("#Bool2"), - new Convert( - new Signal("#Real1", SignalType.Real), - new Signal("#Dint2", SignalType.DInt) - ), - new Distributor( - new And( - new Move( - new Signal("#Real3"), - new Signal("#Real4") - ), - new SCoil(new Signal("#Bool3")) - ), - new And( - new Gt( - new Signal("#Real1", SignalType.Real), - new Signal("#Real2", SignalType.Real) - ), - new SCoil(new Signal("#Bool4")) - ) - ) - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - var xml = block.GetCode(); - block.Interface = TestInterface; - } - - [Test] - public void CreateBlock3() - { - var codeblock = new CodeBlock(); - - var nw = new Network("Test2", "Test2en"); - nw.Add( - new Coil( - new Signal("#Bool1"), - new And( - new Signal("#Bool2"), - new Or( - new Signal("#Bool3"), - new And( - new Signal("#Bool1"), - new Signal("#Bool4") - ) - ) - ) - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void DynamicSample1() - { - var codeblock = new CodeBlock(); - - var signals = new List() { "#Bool1", "#Bool2", "#Bool3" }; - var and = new And(); - foreach (var s in signals) - and.Add(new Signal(s)); - - var nw = new Network("Test2", "test2en"); - nw.Add( - new Coil( - new Signal("#Bool4"), - and - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void TestCallWithOr() - { - var codeblock = new CodeBlock(); - - var nw = new Network("Test2", "Test2en"); - - var f = new FunctionBlockCall("CheckContour", "CheckContourInstance"); - f.Interface["BoolPar"] = new IOperationOrSignalDirectionWrapper(new Or(new Signal("P1"), new Signal("P2")), Direction.InOut); - f.Children.AddRange(f.Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal)); - nw.Add(f); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void TestDistributor() - { - var codeblock = new CodeBlock(); - - var nw = new Network("Test2", "Test2en"); - nw.Add( - new And( - new Not(new Signal("Tag_9")), - new Distributor( - new And( - new Coil(new Signal("#monitoringSignal")) - ), - new And( - new TONCall("OnDelaySafetyDoorSDA11N13", pt: new Signal("T#60s", SignalType.ConstantTime), q: null) - ) - ) - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void TestCallWithInRange() - { - var codeblock = new CodeBlock(); - - var nw = new Network("Test2", "Test2en"); - - var f = new InRangeCall(new Signal(1), new Signal(2), new Signal(3), new Coil(new Signal("MW0", SignalType.Int))); - nw.Add(f); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void TestCallWithTOn() - { - var codeblock = new CodeBlock() { Safety = true }; - - var nw = new Network("Test2", "Test2en"); - - var f = new TONCall("Hallo", pt: new Signal("T#4m", SignalType.ConstantTime)); - nw.Add(f); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void TestCallWithCTU() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("Test2", "Test2en"); - - var f = new And(new Signal("aa"), new CTUCall("Hallo", r: new Signal("bbb", SignalType.Bool), pv: new Signal("2", SignalType.ConstantInt), q: new Coil(new Signal("ccc", SignalType.Bool)))); - nw.Add(f); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void TestCallWithTPAndDistributor() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("Test2", "Test2en"); - var and = - new And( - new Signal("#aaa"), - new TPCall("PulseStartPrint", - pt: new Signal("T#100ms", SignalType.ConstantTime), - q: new Distributor( - new Coil(new Signal("#bbbb")), - new RCoil(new Signal("#cccc")), - new SCoil(new Signal("#dddd")) - ) - ) - ); - - nw.Add(and); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void DistributorWithOr() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("Test2", "Test2en"); - nw.Add( - new And( - new Signal("asd"), - new Distributor( - new SCoil(new Signal("x")), - new And( - new Or( - new And( - new Signal("a"), - new Signal("h") - ), - new And( - new Signal("b"), - new Signal("f") - ) - ), - new SCoil(new Signal("c")) - ) - ) - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void MultipleOr() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("Test2", "Test2en"); - nw.Add( - new Coil( - new Signal("a"), - new And( - new Signal("1"), - new Or( - new And( - new Or( - new Signal("b"), - new Signal("c") - ), - new Signal("d") - ), - new Signal("e") - ) - ) - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void PeripheryFixedSignal() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("Test3", "Test3en"); - nw.Add( - new Coil( - new FixedPeripherySignal("=PBG10.6+FBG11-BV1:4"), - new And( - new Signal("1") - ) - ) - ); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void ComplexVariableAccessTest1() - { - var sb = new StringBuilder(); - var s = new Signal("#A.B.C[#D.E.F, 1]"); - s.AddXmlToStringBuilder(1, sb); - var xml = sb.ToString(); - Assert.AreEqual("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nDInt\r\n1\r\n\r\n\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); - } - - [Test] - public void ComplexVariableAccessTest2() - { - var sb = new StringBuilder(); - var s = new Signal("#A.B.C[#D.E.F, #G.H.I]"); - s.AddXmlToStringBuilder(1, sb); - var xml = sb.ToString(); - Assert.AreEqual("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); - } - - [Test] - public void TestConstant() - { - var sb = new StringBuilder(); - var s = new Signal("AAA", SignalType.Constant); - s.AddXmlToStringBuilder(1, sb); - var xml = sb.ToString(); - Assert.AreEqual("\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); - } - - [Test] - public void SystemFunctionDPXX_DAT() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("TestDPXX_DAT", "TestDPXX_DATen"); - - var sf1 = new SystemFunctionCall("DPRD_DAT"); - sf1.Interface["LADDR"] = new IOperationOrSignalDirectionWrapper(new Signal("#Configuration.GeneralMoviC.ModuleHardwareID"), Direction.Input); - sf1.Interface["RET_VAL"] = new IOperationOrSignalDirectionWrapper(new Signal("#retVal"), Direction.Output); - sf1.Interface["RECORD"] = new IOperationOrSignalDirectionWrapper(new Signal("#PeripheryInputsMoviC"), Direction.Output); - sf1.Children.AddRange(sf1.Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal)); - - nw.Add(sf1); - - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - - //Assert.AreEqual("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nDInt\r\n1\r\n\r\n\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); - } - - [Test] - public void ComplexOr() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("T1", "T1"); - - nw.Add( - new Coil( - new Signal("Test11"), - new Or( - new And( - new Signal("Test1"), - new Or( - new And( - new Signal("Test2"), - new Or( - new Signal("Test3"), - new Signal("Test4") - ) - { DebugInfo = "aaa" } - ), - new Signal("Test5") - ) - { DebugInfo = "bbb" } - ), - new And( - new Signal("Test6"), - new Or( - new And( - new Signal("Test7"), - new Or( - new Signal("Test8"), - new Signal("Test9") - ) - { DebugInfo = "ccc" } - ), - new Signal("Test10") - ) - { DebugInfo = "ddd" } - ) - ) - { DebugInfo = "eee" } - ) - ); - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - [Test] - public void ComplexOr2() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("T1", "T1"); - - nw.Add( - new Coil( - new Signal("Test11"), - new Or( - new Signal("Test12"), - new Or( - new And( - new Signal("Test1"), - new Or( - new And( - new Signal("Test2"), - new Or( - new Signal("Test3"), - new Signal("Test4") - ) - ), - new Signal("Test5") - ) - ), - new And( - new Signal("Test6"), - new Or( - new And( - new Signal("Test7"), - new Or( - new Signal("Test8"), - new Signal("Test9") - ) - ), - new Signal("Test10") - ) - ) - ) - ) - ) - ); - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - - - [Test] - public void Complex3() - { - var codeblock = new CodeBlock() { Safety = false }; - - var nw = new Network("T1", "T1"); - - nw.Add( - new Coil( - new Signal("Test11"), - new And( - new Signal("Test1"), - new Or( - new Signal("Test2") - ) - ) - ) - ); - codeblock.Add(nw); - - var block = new Block("Test", "blabla", codeblock); - block.Interface = TestInterface; - var xml = block.GetCode(); - } - } -} +using NUnit.Framework; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using TiaCodegen.Blocks; +using TiaCodegen.Commands; +using TiaCodegen.Commands.Coils; +using TiaCodegen.Commands.Comparisons; +using TiaCodegen.Commands.Functions; +using TiaCodegen.Commands.Functions.Base; +using TiaCodegen.Commands.Signals; +using TiaCodegen.Enums; +using TiaCodegen.Interfaces; + +namespace TiaCodegen.Samples +{ + [TestFixture] + public class SampleTests + { + const string TestInterface = @" + + +
+ + + Initial call of this OB + + + + + =True, if remanent data are available + + +
+
+ + + + + + + + + + + + + + +
+
+ +"; + + [Test] + public void CreateBlock1() + { + var codeblock = new CodeBlock(); + var nw = new Network("Test1", "Test1en"); + + nw.Add( + new And( + new Signal("#Bool1"), + new Distributor + ( + new RCoil(new Signal("#Bool2")), + new Coil(new Signal("#Bool3")) + ))); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void CreateBlock2() + { + var codeblock = new CodeBlock(); + + var nw = new Network("Test2", "Test2en"); + nw.Add( + new And( + new Signal("#Bool1"), + new Signal("#Bool2"), + new Convert( + new Signal("#Real1", SignalType.Real), + new Signal("#Dint2", SignalType.DInt) + ), + new Distributor( + new And( + new Move( + new Signal("#Real3"), + new Signal("#Real4") + ), + new SCoil(new Signal("#Bool3")) + ), + new And( + new Gt( + new Signal("#Real1", SignalType.Real), + new Signal("#Real2", SignalType.Real) + ), + new SCoil(new Signal("#Bool4")) + ) + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + var xml = block.GetCode(); + block.Interface = TestInterface; + } + + [Test] + public void CreateBlock3() + { + var codeblock = new CodeBlock(); + + var nw = new Network("Test2", "Test2en"); + nw.Add( + new Coil( + new Signal("#Bool1"), + new And( + new Signal("#Bool2"), + new Or( + new Signal("#Bool3"), + new And( + new Signal("#Bool1"), + new Signal("#Bool4") + ) + ) + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void DynamicSample1() + { + var codeblock = new CodeBlock(); + + var signals = new List() { "#Bool1", "#Bool2", "#Bool3" }; + var and = new And(); + foreach (var s in signals) + and.Add(new Signal(s)); + + var nw = new Network("Test2", "test2en"); + nw.Add( + new Coil( + new Signal("#Bool4"), + and + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void TestCallWithOr() + { + var codeblock = new CodeBlock(); + + var nw = new Network("Test2", "Test2en"); + + var f = new FunctionBlockCall("CheckContour", "CheckContourInstance"); + f.Interface["BoolPar"] = new IOperationOrSignalDirectionWrapper(new Or(new Signal("P1"), new Signal("P2")), Direction.InOut); + f.Children.AddRange(f.Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal)); + nw.Add(f); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void TestDistributor() + { + var codeblock = new CodeBlock(); + + var nw = new Network("Test2", "Test2en"); + nw.Add( + new And( + new Not(new Signal("Tag_9")), + new Distributor( + new And( + new Coil(new Signal("#monitoringSignal")) + ), + new And( + new TONCall("OnDelaySafetyDoorSDA11N13", pt: new Signal("T#60s", SignalType.ConstantTime), q: null) + ) + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void TestCallWithInRange() + { + var codeblock = new CodeBlock(); + + var nw = new Network("Test2", "Test2en"); + + var f = new InRangeCall(new Signal(1), new Signal(2), new Signal(3), new Coil(new Signal("MW0", SignalType.Int))); + nw.Add(f); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void TestCallWithTOn() + { + var codeblock = new CodeBlock() { Safety = true }; + + var nw = new Network("Test2", "Test2en"); + + var f = new TONCall("Hallo", pt: new Signal("T#4m", SignalType.ConstantTime)); + nw.Add(f); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void TestCallWithCTU() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("Test2", "Test2en"); + + var f = new And(new Signal("aa"), new CTUCall("Hallo", r: new Signal("bbb", SignalType.Bool), pv: new Signal("2", SignalType.ConstantInt), q: new Coil(new Signal("ccc", SignalType.Bool)))); + nw.Add(f); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void TestCallWithTPAndDistributor() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("Test2", "Test2en"); + var and = + new And( + new Signal("#aaa"), + new TPCall("PulseStartPrint", + pt: new Signal("T#100ms", SignalType.ConstantTime), + q: new Distributor( + new Coil(new Signal("#bbbb")), + new RCoil(new Signal("#cccc")), + new SCoil(new Signal("#dddd")) + ) + ) + ); + + nw.Add(and); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void DistributorWithOr() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("Test2", "Test2en"); + nw.Add( + new And( + new Signal("asd"), + new Distributor( + new SCoil(new Signal("x")), + new And( + new Or( + new And( + new Signal("a"), + new Signal("h") + ), + new And( + new Signal("b"), + new Signal("f") + ) + ), + new SCoil(new Signal("c")) + ) + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void MultipleOr() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("Test2", "Test2en"); + nw.Add( + new Coil( + new Signal("a"), + new And( + new Signal("1"), + new Or( + new And( + new Or( + new Signal("b"), + new Signal("c") + ), + new Signal("d") + ), + new Signal("e") + ) + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void PeripheryFixedSignal() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("Test3", "Test3en"); + nw.Add( + new Coil( + new FixedPeripherySignal("=PBG10.6+FBG11-BV1:4"), + new And( + new Signal("1") + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void ComplexVariableAccessTest1() + { + var sb = new StringBuilder(); + var s = new Signal("#A.B.C[#D.E.F, 1]"); + s.AddXmlToStringBuilder(1, sb); + var xml = sb.ToString(); + Assert.AreEqual("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nDInt\r\n1\r\n\r\n\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); + } + + [Test] + public void ComplexVariableAccessTest2() + { + var sb = new StringBuilder(); + var s = new Signal("#A.B.C[#D.E.F, #G.H.I]"); + s.AddXmlToStringBuilder(1, sb); + var xml = sb.ToString(); + Assert.AreEqual("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); + } + + [Test] + public void TestConstant() + { + var sb = new StringBuilder(); + var s = new Signal("AAA", SignalType.Constant); + s.AddXmlToStringBuilder(1, sb); + var xml = sb.ToString(); + Assert.AreEqual("\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); + } + + [Test] + public void SystemFunctionDPXX_DAT() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("TestDPXX_DAT", "TestDPXX_DATen"); + + var sf1 = new SystemFunctionCall("DPRD_DAT"); + sf1.Interface["LADDR"] = new IOperationOrSignalDirectionWrapper(new Signal("#Configuration.GeneralMoviC.ModuleHardwareID"), Direction.Input); + sf1.Interface["RET_VAL"] = new IOperationOrSignalDirectionWrapper(new Signal("#retVal"), Direction.Output); + sf1.Interface["RECORD"] = new IOperationOrSignalDirectionWrapper(new Signal("#PeripheryInputsMoviC"), Direction.Output); + sf1.Children.AddRange(sf1.Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal)); + + nw.Add(sf1); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + + //Assert.AreEqual("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nDInt\r\n1\r\n\r\n\r\n\r\n\r\n\r\n".Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); + } + + [Test] + public void ComplexOr() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("T1", "T1"); + + nw.Add( + new Coil( + new Signal("Test11"), + new Or( + new And( + new Signal("Test1"), + new Or( + new And( + new Signal("Test2"), + new Or( + new Signal("Test3"), + new Signal("Test4") + ) + { DebugInfo = "aaa" } + ), + new Signal("Test5") + ) + { DebugInfo = "bbb" } + ), + new And( + new Signal("Test6"), + new Or( + new And( + new Signal("Test7"), + new Or( + new Signal("Test8"), + new Signal("Test9") + ) + { DebugInfo = "ccc" } + ), + new Signal("Test10") + ) + { DebugInfo = "ddd" } + ) + ) + { DebugInfo = "eee" } + ) + ); + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void ComplexOr2() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("T1", "T1"); + + nw.Add( + new Coil( + new Signal("Test11"), + new Or( + new Signal("Test12"), + new Or( + new And( + new Signal("Test1"), + new Or( + new And( + new Signal("Test2"), + new Or( + new Signal("Test3"), + new Signal("Test4") + ) + ), + new Signal("Test5") + ) + ), + new And( + new Signal("Test6"), + new Or( + new And( + new Signal("Test7"), + new Or( + new Signal("Test8"), + new Signal("Test9") + ) + ), + new Signal("Test10") + ) + ) + ) + ) + ) + ); + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + + [Test] + public void Complex3() + { + var codeblock = new CodeBlock() { Safety = false }; + + var nw = new Network("T1", "T1"); + + nw.Add( + new Coil( + new Signal("Test11"), + new And( + new Signal("Test1"), + new Or( + new Signal("Test2") + ) + ) + ) + ); + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + block.Interface = TestInterface; + var xml = block.GetCode(); + } + + [Test] + public void DoubleCarrierTest() + { + var codeblock = new CodeBlock() { Safety = false }; + var nw = new Network("Test", "Testen"); + + nw.Add( + new And( + new Eq(new Signal("#Configuration.General.SingleDoubleCarrier", SignalType.Int), new Signal(2)), + new Distributor( + new And( + new Or( + new Signal("#DoubleCarrier.Sensors.V[#Configuration.General.CoordinationAxisConveyor, 1]"), + new Signal("#DoubleCarrier.Sensors.R[#Configuration.General.CoordinationAxisConveyor, 1]") + ), + new Coil(new Signal("#CarrierGeneral.States.CarriageOccupied[2]")) + ), + new And( + new Signal("#DoubleCarrierData.MOrder.DataPresent"), + new Coil(new Signal("#CarrierGeneral.States.CarriageDataPresent[2]")) + ) + ) + ) + ); + + codeblock.Add(nw); + + var block = new Block("Test", "blabla", codeblock); + var xml = block.GetCode(); + + var expectedXml = @" General 1.0 Optimized Test LAD DInt2DInt2DInt1DInt1Int2Int2 LADde-DEen-GBde-DETesten-GBTesten de-DE blabla en-GB de-DE en-GB "; + Assert.AreEqual(expectedXml.Replace("\n", "").Replace("\r", ""), xml.Replace("\n", "").Replace("\r", "")); + } + } +} \ No newline at end of file diff --git a/TiaCodegen-ts/.gitignore b/TiaCodegen-ts/.gitignore new file mode 100644 index 0000000..1eae0cf --- /dev/null +++ b/TiaCodegen-ts/.gitignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ diff --git a/TiaCodegen-ts/package-lock.json b/TiaCodegen-ts/package-lock.json index ccbaed7..7b561a4 100644 --- a/TiaCodegen-ts/package-lock.json +++ b/TiaCodegen-ts/package-lock.json @@ -46,6 +46,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", diff --git a/TiaCodegen-ts/src/Blocks/Block.ts b/TiaCodegen-ts/src/Blocks/Block.ts index 332f632..6ffc3a5 100644 --- a/TiaCodegen-ts/src/Blocks/Block.ts +++ b/TiaCodegen-ts/src/Blocks/Block.ts @@ -71,7 +71,7 @@ export class Block { en-GB - ${this.titleEnglish} + ${this.titleEnglish ?? ''} @@ -81,13 +81,13 @@ export class Block { de-DE - ${this.comment} + ${this.comment ?? ''} en-GB - ${this.commentEnglish} + ${this.commentEnglish ?? ''} diff --git a/TiaCodegen-ts/src/CodeGen/KopCodeHelper.ts b/TiaCodegen-ts/src/CodeGen/KopCodeHelper.ts index 2d1ae42..118f9d4 100644 --- a/TiaCodegen-ts/src/CodeGen/KopCodeHelper.ts +++ b/TiaCodegen-ts/src/CodeGen/KopCodeHelper.ts @@ -818,14 +818,14 @@ export class KopCodeHelper { idRef.value++; this._sb.appendLine(''); this._sb.appendLine('de-DE'); - this._sb.appendLine(`${network.description}`); + this._sb.appendLine(`${network.description ?? ''}`); this._sb.appendLine(''); this._sb.appendLine(''); this._sb.appendLine(``); idRef.value++; this._sb.appendLine(''); this._sb.appendLine('en-GB'); - this._sb.appendLine(`${network.descriptionEnglish}`); + this._sb.appendLine(`${network.descriptionEnglish ?? ''}`); this._sb.appendLine(''); this._sb.appendLine(''); this._sb.appendLine(''); diff --git a/TiaCodegen-ts/tests/SampleTests.test.ts b/TiaCodegen-ts/tests/SampleTests.test.ts index ac7f8db..7d04ad3 100644 --- a/TiaCodegen-ts/tests/SampleTests.test.ts +++ b/TiaCodegen-ts/tests/SampleTests.test.ts @@ -12,6 +12,7 @@ import { Signal, FixedSignal, FixedPeripherySignal } from '../src/Commands/Signa import { Coil } from '../src/Commands/Coils/Coil'; import { SCoil } from '../src/Commands/Coils/SCoil'; import { RCoil } from '../src/Commands/Coils/RCoil'; +import { Eq } from '../src/Commands/Comparisons/Eq'; import { Gt } from '../src/Commands/Comparisons/Gt'; import { InRangeCall } from '../src/Commands/Comparisons/InRangeCall'; import { FunctionBlockCall } from '../src/Commands/Functions/Base/FunctionBlockCall'; @@ -344,4 +345,37 @@ describe('SampleTests', () => { const xml = block.getCode(); expect(xml).toBeTruthy(); }); -}); + + test('DoubleCarrierTest', () => { + const codeblock = new CodeBlock(); + codeblock.safety = false; + const nw = new Network('Test', 'Testen'); + + nw.add( + new And( + new Eq(new Signal('#Configuration.General.SingleDoubleCarrier', SignalType.Int), new Signal(2)), + new Distributor( + new And( + new Or( + new Signal('#DoubleCarrier.Sensors.V[#Configuration.General.CoordinationAxisConveyor, 1]'), + new Signal('#DoubleCarrier.Sensors.R[#Configuration.General.CoordinationAxisConveyor, 1]'), + ), + new Coil(new Signal('#CarrierGeneral.States.CarriageOccupied[2]')), + ), + new And( + new Signal('#DoubleCarrierData.MOrder.DataPresent'), + new Coil(new Signal('#CarrierGeneral.States.CarriageDataPresent[2]')), + ), + ), + ), + ); + + codeblock.add(nw); + + const block = new Block('Test', 'blabla', codeblock); + const xml = block.getCode(); + + const expectedXml = ' General 1.0 Optimized Test LAD DInt2DInt2DInt1DInt1Int2Int2 LADde-DEen-GBde-DETesten-GBTesten de-DE blabla en-GB de-DE en-GB '; + expect(xml.replace(/\r?\n/g, '')).toEqual(expectedXml.replace(/\r?\n/g, '')); + }); +}); \ No newline at end of file