Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions TiaCodegen/CodeGen/KopCodeHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ private void AddWires(IOperationOrSignal op)
}
else
{
_sb.AppendLine("<NameCon UId=\"" + sng.Children.Last().OperationId + "\" Name=\"out\" />");
_sb.AppendLine("<NameCon UId=\"" + (sng.Children.Any() ? sng.Children.Last().OperationId : sng.OperationId) + "\" Name=\"out\" />");
}
}
_sb.AppendLine("<NameCon UId=\"" + op.OperationId + "\" Name=\"" + intf.Key + "\" />");
Expand All @@ -527,7 +527,7 @@ private void AddWires(IOperationOrSignal op)
{
_sb.AppendLine("<Wire UId=\"" + _currentId + "\">" + (debug ?? ("<!-- Wire 3 FunctionCall -->")));
_sb.AppendLine("<NameCon UId=\"" + op.OperationId + "\" Name=\"eno\" />");
_sb.AppendLine("<NameCon UId=\"" + sng.Children.Last().OperationId + "\" Name=\"in\" />");
_sb.AppendLine("<NameCon UId=\"" + (sng.Children.Any() ? sng.Children.Last().OperationId : sng.OperationId) + "\" Name=\"in\" />");
_sb.AppendLine("</Wire>");
_currentId++;
}
Expand Down Expand Up @@ -781,7 +781,7 @@ void ImportChildOrs (Or childOr)
if (op.Children[1] is Signal)
ch = op.Children[1];
else
ch = op.Children[1].Children.Last();
ch = op.Children[1].Children.Any() ? op.Children[1].Children.Last() : op.Children[1];

if (op.Children[1] is Or || op.Children[1] is CompareOperator || op.Children[1] is Move || op.Children[1] is Convert || op.Children[1] is S_Move || op.Children[1] is ICoil)
{
Expand Down
2 changes: 1 addition & 1 deletion TiaCodegen/Commands/BaseOperationOrSignal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public override string ToString()

public IOperationOrSignal GetFirstChildNotAnd()
{
if (this is And)
if (this is And && Children.Count > 0)
{
var ch1 = ((And)this).Children[0];
if (ch1 is BaseOperationOrSignal)
Expand Down
6 changes: 3 additions & 3 deletions TiaCodegen/Commands/Functions/Arithmetic/AddCall.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

namespace TiaCodegen.Commands.Functions.Arithmetic
{
public class MulCall : VariableArithmeticCall
public class AddCall : VariableArithmeticCall
{
public MulCall(string type,
public AddCall(string type,
IOperationOrSignal in1,
IOperationOrSignal in2,
IOperationOrSignal in3 = null,
Expand Down Expand Up @@ -58,7 +58,7 @@ public MulCall(string type,
IOperationOrSignal in49 = null,
IOperationOrSignal in50 = null,
IOperationOrSignal out1 = null,
IOperationOrSignal eno = null) : base("Mul", eno)
IOperationOrSignal eno = null) : base("Add", eno)
{
DisableEno = true;
Type = type;
Expand Down
6 changes: 3 additions & 3 deletions TiaCodegen/Commands/Functions/Arithmetic/MulCall.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

namespace TiaCodegen.Commands.Functions.Arithmetic
{
public class AddCall : VariableArithmeticCall
public class MulCall : VariableArithmeticCall
{
public AddCall(string type,
public MulCall(string type,
IOperationOrSignal in1,
IOperationOrSignal in2,
IOperationOrSignal in3 = null,
Expand Down Expand Up @@ -58,7 +58,7 @@ public AddCall(string type,
IOperationOrSignal in49 = null,
IOperationOrSignal in50 = null,
IOperationOrSignal out1 = null,
IOperationOrSignal eno = null) : base("Add", eno)
IOperationOrSignal eno = null) : base("Mul", eno)
{
DisableEno = true;
Type = type;
Expand Down
2 changes: 1 addition & 1 deletion TiaCodegen/Commands/Move.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ public Move(params IOperationOrSignal[] operationOrSignals)
: base(operationOrSignals)
{ }

public override int Cardinality { get { return Children.Count() - 1; } }
public override int Cardinality { get { return Children.Any() ? Children.Count() - 1 : 0; } }
}
}
24 changes: 15 additions & 9 deletions TiaCodegen/Commands/Signals/Signal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,10 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
{
sb.AppendLine("<Access Scope=\"GlobalVariable\" UId=\"" + id + "\">" + " <!-- P1: " + Name + " -->");
sb.AppendLine("<Symbol>");
for (int i = 0; i < Escape(Name).Split('.').Length; i++) // Aufsplitten von a.b.c in einzel Elemente
var nameParts = Escape(Name).Split('.');
for (int i = 0; i < nameParts.Length; i++) // Aufsplitten von a.b.c in einzel Elemente
{
var part = Unescape(Escape(Name).Split('.')[i]);
var part = Unescape(nameParts[i]);

var idx = part.IndexOf("[") + 1; // Aufsplitten von Arrays
if (idx > 0)
Expand All @@ -213,7 +214,7 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
{
var p1 = part.Substring(idx, part.Length - idx);
var accessType = "GlobalVariable";
if (p1[0] == '#')
if (p1.Length > 0 && p1[0] == '#')
{
p1 = p1.Substring(1);
accessType = "LocalVariable";
Expand All @@ -224,7 +225,9 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
while (p1 != null)
{
i++;
p1 = Unescape(Escape(Name).Split('.')[i]);
if (i >= nameParts.Length)
break;
p1 = Unescape(nameParts[i]);
if (p1.Contains("]"))
{
sb.AppendLine("<Component Name=\"" + p1.Substring(0, p1.Length - 1) + "\" />");
Expand Down Expand Up @@ -328,12 +331,13 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
sb.AppendLine("<Access Scope=\"GlobalVariable\" UId=\"" + id + "\">" + " <!-- P3: " + Name + " -->");
}
sb.AppendLine("<Symbol>");
var cnt = Escape(LocalName).Split('.').Length;
var localNameParts = Escape(LocalName).Split('.');
var cnt = localNameParts.Length;
if (this is FixedSignal)
cnt = 1;
for (int i = 0; i < cnt; i++) // Aufsplitten von a.b.c in einzel Elemente
{
var part = Unescape(Escape(LocalName).Split('.')[i]);
var part = Unescape(localNameParts[i]);
if (this is FixedSignal)
part = LocalName;

Expand All @@ -354,7 +358,7 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
{
var p1 = part.Substring(idx, part.Length - idx);
var accessType = "GlobalVariable";
if (p1[0] == '#')
if (p1.Length > 0 && p1[0] == '#')
{
p1 = p1.Substring(1);
accessType = "LocalVariable";
Expand All @@ -366,7 +370,9 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
while (p1 != null)
{
i++;
p1 = Unescape(Escape(LocalName).Split('.')[i]);
if (i >= localNameParts.Length)
break;
p1 = Unescape(localNameParts[i]);
if (p1.Contains(","))
{
var innerParts = p1.Split(',');
Expand Down Expand Up @@ -397,7 +403,7 @@ public void AddXmlToStringBuilder(ulong id, StringBuilder sb)
sb.AppendLine("</Access>");

var accessTypePne = "GlobalVariable";
if (pNe[0] == '#')
if (pNe.Length > 0 && pNe[0] == '#')
{
pNe = pNe.Substring(1);
accessTypePne = "LocalVariable";
Expand Down