diff --git a/tools/model_generator_dotnet/SCLParser/src/DynamicModelGenerator.cs b/tools/model_generator_dotnet/SCLParser/src/DynamicModelGenerator.cs index 18b6e86c..46931d54 100644 --- a/tools/model_generator_dotnet/SCLParser/src/DynamicModelGenerator.cs +++ b/tools/model_generator_dotnet/SCLParser/src/DynamicModelGenerator.cs @@ -553,31 +553,9 @@ namespace IEC61850.SCL } - private void ExportDataAttribute(StreamWriter output, DataAttribute dataAttribute, bool isTransient) - { - output.Write("DA(" + dataAttribute.Name + " "); - output.Write(dataAttribute.Count + " "); - output.Write((int)dataAttribute.AttributeType + " "); - output.Write((int)dataAttribute.Fc + " "); - - if (dataAttribute.Definition.TriggerOptions != null) - { - int trgOpsVal = dataAttribute.Definition.TriggerOptions.GetIntValue(); - - if (isTransient) - trgOpsVal += 128; - - output.Write(trgOpsVal + " "); - } - - - if (dataAttribute.Definition.SAddr != null) - output.Write(dataAttribute.Definition.SAddr); - else - output.Write("0"); - - output.Write(")"); + void printDataAttributes(StreamWriter output, DataAttribute dataAttribute, bool isTransient) + { if (dataAttribute.AttributeType != AttributeType.CONSTRUCTED) { //if (value != null) @@ -591,7 +569,7 @@ namespace IEC61850.SCL SclDOI sclDOI = logicalNode.SclElement.DOIs.Find(x => x.Name == dataObject.Name); SclDAI sclDAI = getDAI(sclDOI, dataAttribute.Name); - if(sclDAI == null) + if (sclDAI == null) { output.WriteLine(";"); @@ -662,7 +640,7 @@ namespace IEC61850.SCL default: Console.WriteLine("Unknown default value for " + dataAttribute.Name + " type: " + dataAttribute.AttributeType); - break; + break; } @@ -685,6 +663,53 @@ namespace IEC61850.SCL output.WriteLine("}"); } + } + + private void ExportDataAttribute(StreamWriter output, DataAttribute dataAttribute, bool isTransient) + { + output.Write("DA(" + dataAttribute.Name + " "); + output.Write(dataAttribute.Count + " "); + output.Write((int)dataAttribute.AttributeType + " "); + output.Write((int)dataAttribute.Fc + " "); + + if (dataAttribute.Definition.TriggerOptions != null) + { + int trgOpsVal = dataAttribute.Definition.TriggerOptions.GetIntValue(); + + if (isTransient) + trgOpsVal += 128; + + output.Write(trgOpsVal + " "); + } + + + if (dataAttribute.Definition.SAddr != null) + output.Write(dataAttribute.Definition.SAddr); + else + output.Write("0"); + + output.Write(")"); + + if (dataAttribute.Count > 0) + { + output.WriteLine("{"); + + for (int i = 0; i < dataAttribute.Count; i++) + { + output.Write("[" + i + "]"); + + printDataAttributes(output, dataAttribute, isTransient); + } + + output.WriteLine("}"); + } + + else + { + + printDataAttributes(output, dataAttribute, isTransient); + } +