Skip to content

Commit 51e4a4e

Browse files
committed
support safety times
1 parent 1ccebfe commit 51e4a4e

File tree

7 files changed

+61
-1
lines changed

7 files changed

+61
-1
lines changed

TiaCodeGen.Tests/SampleTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using TiaCodegen.Commands;
66
using TiaCodegen.Commands.Coils;
77
using TiaCodegen.Commands.Comparisons;
8+
using TiaCodegen.Commands.Functions;
89
using TiaCodegen.Commands.Functions.Base;
910
using TiaCodegen.Commands.Signals;
1011
using TiaCodegen.Enums;
@@ -201,5 +202,22 @@ public void TestCallWithInRange()
201202
block.Interface = TestInterface;
202203
var xml = block.GetCode();
203204
}
205+
206+
[Test]
207+
public void TestCallWithTOn()
208+
{
209+
var codeblock = new CodeBlock() { Safety = true };
210+
211+
var nw = new Network("Test2", "Test2en");
212+
213+
var f = new TONCall("Hallo", pt: new Signal("T#4m", SignalType.ConstantTime));
214+
nw.Add(f);
215+
216+
codeblock.Add(nw);
217+
218+
var block = new Block("Test", "blabla", codeblock);
219+
block.Interface = TestInterface;
220+
var xml = block.GetCode();
221+
}
204222
}
205223
}

TiaCodegen/CodeGen/KopCodeHelper.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using DotNetProjects.TiaCodegen.Extensions;
2+
using System;
23
using System.Collections.Generic;
34
using System.Linq;
45
using System.Text;
@@ -273,6 +274,10 @@ private void AddContactDefinitions(Network network, CodeBlock block)
273274
if (fc.TemplateValueName != null)
274275
{
275276
_sb.AppendLine("<TemplateValue Name=\"" + fc.TemplateValueName + "\" Type=\"" + fc.TemplateValueType + "\">" + fc.TemplateValue + "</TemplateValue>");
277+
if (!string.IsNullOrEmpty(fc.SafetyTemplateString) && fc.TryGetParent<CodeBlock>()?.Safety == true)
278+
{
279+
_sb.AppendLine(fc.SafetyTemplateString);
280+
}
276281
}
277282

278283
if (_block.Safety && fc.AdditionalSafetyTemplateValues != null)
@@ -920,6 +925,7 @@ private void SetParent(IOperationOrSignal s)
920925
}
921926
}
922927

928+
923929
public string GetXml(ref int id)
924930
{
925931
FixChildAndsAndSingleOr(_block);

TiaCodegen/Commands/Functions/Base/FunctionCall.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ namespace TiaCodegen.Commands.Functions.Base
77
{
88
public class FunctionCall : IOperationOrSignal
99
{
10+
public string SafetyTemplateString { get; set; }
11+
1012
public string DebugInfo { get; set; }
1113

1214
public bool DisableEno { get; set; }

TiaCodegen/Commands/Functions/TOFFCall.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public TOFFCall(string instanceName,
2121
TemplateValue = "Time";
2222
HasNoEn = true;
2323

24+
SafetyTemplateString = @" <TemplateValue Name=""f_user_card"" Type=""Cardinality"">1</TemplateValue>
25+
<TemplateValue Name=""f_image_card"" Type=""Cardinality"">0</TemplateValue>
26+
<TemplateValue Name=""f_imageclassic_card"" Type=""Cardinality"">0</TemplateValue>
27+
<TemplateValue Name=""f_imageplus_card"" Type=""Cardinality"">0</TemplateValue>";
28+
2429
Children.AddRange(Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal));
2530
}
2631
}

TiaCodegen/Commands/Functions/TONCall.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public TONCall(string instanceName,
2121
TemplateValue = "Time";
2222
HasNoEn = true;
2323

24+
SafetyTemplateString = @" <TemplateValue Name=""f_user_card"" Type=""Cardinality"">1</TemplateValue>
25+
<TemplateValue Name=""f_image_card"" Type=""Cardinality"">0</TemplateValue>
26+
<TemplateValue Name=""f_imageclassic_card"" Type=""Cardinality"">0</TemplateValue>
27+
<TemplateValue Name=""f_imageplus_card"" Type=""Cardinality"">0</TemplateValue>";
28+
2429
Children.AddRange(Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal));
2530
}
2631
}

TiaCodegen/Commands/Functions/TONRCall.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public TONRCall(string instanceName,
2323
TemplateValue = "Time";
2424
HasNoEn = true;
2525

26+
SafetyTemplateString = @" <TemplateValue Name=""f_user_card"" Type=""Cardinality"">1</TemplateValue>
27+
<TemplateValue Name=""f_image_card"" Type=""Cardinality"">0</TemplateValue>
28+
<TemplateValue Name=""f_imageclassic_card"" Type=""Cardinality"">0</TemplateValue>
29+
<TemplateValue Name=""f_imageplus_card"" Type=""Cardinality"">0</TemplateValue>";
30+
2631
Children.AddRange(Interface.Values.Where(x => x.OperationOrSignal != null).Select(x => x.OperationOrSignal));
2732
}
2833
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using TiaCodegen.Interfaces;
2+
3+
namespace DotNetProjects.TiaCodegen.Extensions
4+
{
5+
public static class OperationOrSignalExtensions
6+
{
7+
public static T TryGetParent<T>(this IOperationOrSignal op) where T : IOperationOrSignal
8+
{
9+
var chk = op.Parent;
10+
while (chk != null)
11+
{
12+
if (chk is T)
13+
return (T)chk;
14+
chk = chk.Parent;
15+
}
16+
return default(T);
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)