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