fixed issue in displaying DA values and two digit representation in RC block

v1.6
unknown 3 months ago
parent de5f7356b3
commit a960fa442e

@ -9,6 +9,7 @@
using IEC61850.SCL.DataModel;
using System;
using System.IO;
using System.Runtime.InteropServices.ComTypes;
namespace IEC61850.SCL
{
@ -81,7 +82,7 @@ namespace IEC61850.SCL
for (int i = 0; i < maxInstances; i++)
{
string index = (i + 1).ToString("X");
string index = (i + 1).ToString("00");
PrintRCBInstance(output, rcb, index);
}
}
@ -390,9 +391,138 @@ namespace IEC61850.SCL
}
private void ExportDataAttribute(StreamWriter output, DataAttribute dataAttribute, bool isTransient)
//private void printDataAttributeValue(StreamWriter output, DataAttribute dataAttribute, bool isTransient)
//{
// if (dataAttribute.AttributeType != AttributeType.CONSTRUCTED)
// {
// SclVal value = dataAttribute.Definition.GetVal();
// /* if no value is given use default value for type if present */
// if (value == null)
// {
// value = dataAttribute.Definition.GetVal();
// //if (value != null)
// // if (value.Value == null)
// // value.updateEnumOrdValue(ied.getTypeDeclarations());
// }
// if (value != null)
// {
// switch (dataAttribute.AttributeType)
// {
// case AttributeType.ENUMERATED:
// case AttributeType.INT8:
// case AttributeType.INT16:
// case AttributeType.INT32:
// case AttributeType.INT64:
// output.Write("=" + value.Value());
// break;
// case AttributeType.INT8U:
// case AttributeType.INT16U:
// case AttributeType.INT24U:
// case AttributeType.INT32U:
// output.Write("=" + value.getLongValue());
// break;
// case AttributeType.BOOLEAN:
// {
// Boolean boolVal = (Boolean)value.getValue();
// if (boolVal.booleanValue())
// output.print("=1");
// }
// break;
// case AttributeType.UNICODE_STRING_255:
// output.print("=\"" + value.getValue() + "\"");
// break;
// case AttributeType.CURRENCY:
// case AttributeType.VISIBLE_STRING_32:
// case AttributeType.VISIBLE_STRING_64:
// case AttributeType.VISIBLE_STRING_129:
// case AttributeType.VISIBLE_STRING_255:
// case AttributeType.VISIBLE_STRING_65:
// output.Write("=\"" + value.getValue() + "\"");
// break;
// case AttributeType.FLOAT32:
// case AttributeType.FLOAT64:
// output.Write("=" + value.getValue());
// break;
// case AttributeType.TIMESTAMP:
// case AttributeType.ENTRY_TIME:
// output.Write("=" + value.getLongValue());
// break;
// default:
// System.out.println("Unknown default value for " + dataAttribute.getName() + " type: " + dataAttribute.getType());
// break;
// }
// }
// output.Write(";");
// }
// else
// {
// output.Write("{");
// foreach (DataAttribute subDataAttribute in dataAttribute.subDataAttributes)
// {
// ExportDataAttribute(output, subDataAttribute, isTransient);
// }
// output.Write("}");
// }
//}
SclDAI getDAI(object parent, string name)
{
if (parent == null)
return null;
if (parent is SclDOI sclDOI)
return sclDOI.SclDAIs.Find(x => x.Name == name);
else if (parent is SclSDI sclSDI)
return sclSDI.SclDAIs.Find(x => x.Name == name);
else
return null;
}
DataObject findDOParent(DataAttribute dataAttribute)
{
DataObject parentObject = null;
//DataObjectOrAttribute obj = null;
while(!(dataAttribute.Parent is DataObject))
{
dataAttribute = dataAttribute.Parent as DataAttribute;
}
parentObject = dataAttribute.Parent as DataObject;
return parentObject;
}
LogicalNode findLNParent(DataObject dataObject)
{
LogicalNode parentObject = null;
//DataObjectOrAttribute obj = null;
while (!(dataObject.Parent is LogicalNode))
{
dataObject = dataObject.Parent as DataObject;
}
parentObject = dataObject.Parent as LogicalNode;
return parentObject;
}
private void ExportDataAttribute(StreamWriter output, DataAttribute dataAttribute, bool isTransient)
{
output.Write("DA(" + dataAttribute.Name + " ");
output.Write(dataAttribute.Count + " ");
output.Write((int)dataAttribute.AttributeType + " ");
@ -401,7 +531,7 @@ namespace IEC61850.SCL
if (dataAttribute.Definition.TriggerOptions != null)
{
int trgOpsVal = dataAttribute.Definition.TriggerOptions.GetIntValue();
if (isTransient)
trgOpsVal += 128;
@ -418,23 +548,42 @@ namespace IEC61850.SCL
if (dataAttribute.AttributeType != AttributeType.CONSTRUCTED)
{
SclVal value = dataAttribute.Definition.GetVal();
//if (value != null)
//{
DataObject dataObject = findDOParent(dataAttribute);
//DataObject dataObject = dataAttribute.Parent as DataObject;
//LogicalNode logicalNode = dataObject.Parent as LogicalNode;
LogicalNode logicalNode = findLNParent(dataObject);
SclDOI sclDOI = logicalNode.SclElement.DOIs.Find(x => x.Name == dataObject.Name);
SclDAI sclDAI = getDAI(sclDOI, dataAttribute.Name);
if(sclDAI == null)
{
output.WriteLine(";");
return;
}
string value = sclDAI.Val;
if (value != null)
{
switch (dataAttribute.AttributeType)
{
case AttributeType.ENUMERATED:
string EnumType = dataAttribute.Definition.Type;
SclEnumType sclEnumType;
if (EnumType != null)
SclEnumType sclEnumType = sclDocument.DataTypeTemplates.GetEnumType(dataAttribute.Definition.Type);
if (sclEnumType != null)
{
sclEnumType = sclDocument.DataTypeTemplates.GetEnumType(EnumType);
if (sclEnumType != null)
if (sclEnumType.EnumValues.Count > 0)
{
SclEnumVal sclEnumVal = sclEnumType.EnumValues.Find(x => x.SymbolicName == value.Value);
SclEnumVal sclEnumVal = sclEnumType.EnumValues[0];
int value1 = sclEnumVal.Ord;
output.Write("=" + sclEnumVal.Ord);
}
}
break;
@ -443,24 +592,22 @@ namespace IEC61850.SCL
case AttributeType.INT16:
case AttributeType.INT32:
case AttributeType.INT64:
output.Write("=" + value.Value);
break;
case AttributeType.INT8U:
case AttributeType.INT16U:
case AttributeType.INT24U:
case AttributeType.INT32U:
output.Write("=" + value.Value);
output.Write("=" + value);
break;
case AttributeType.BOOLEAN:
if (value.Value == "true")
if (value == "true")
output.Write("=1");
else
output.Write("=0");
break;
case AttributeType.UNICODE_STRING_255:
output.Write("=\"" + value.Value + "\"");
output.Write("=\"" + value + "\"");
break;
case AttributeType.CURRENCY:
@ -469,27 +616,32 @@ namespace IEC61850.SCL
case AttributeType.VISIBLE_STRING_129:
case AttributeType.VISIBLE_STRING_255:
case AttributeType.VISIBLE_STRING_65:
output.Write("=\"" + value.Value + "\"");
Console.WriteLine("1111");
output.Write("=\"" + value + "\"");
break;
case AttributeType.OCTET_STRING_64:
output.Write("=\"" + value.Value + "\"");
output.Write("=\"" + value + "\"");
break;
case AttributeType.FLOAT32:
case AttributeType.FLOAT64:
output.Write("=" + value.Value);
output.Write("=" + value);
break;
default:
Console.WriteLine("Unknown default value for " + dataAttribute.Name + " type: " + dataAttribute.AttributeType);
break;
break;
}
//}
}
output.WriteLine(";");
}
else
{
output.WriteLine("{");
@ -502,6 +654,82 @@ namespace IEC61850.SCL
output.WriteLine("}");
}
output.WriteLine(";");
//if (value != null)
//{
// switch (dataAttribute.AttributeType)
// {
// case AttributeType.ENUMERATED:
// string EnumType = dataAttribute.Definition.Type;
// SclEnumType sclEnumType;
// if (EnumType != null)
// {
// sclEnumType = sclDocument.DataTypeTemplates.GetEnumType(EnumType);
// if (sclEnumType != null)
// {
// SclEnumVal sclEnumVal = sclEnumType.EnumValues.Find(x => x.SymbolicName == value.Value);
// output.Write("=" + sclEnumVal.Ord);
// }
// }
// break;
// case AttributeType.INT8:
// case AttributeType.INT16:
// case AttributeType.INT32:
// case AttributeType.INT64:
// output.Write("=" + value.Value);
// break;
// case AttributeType.INT8U:
// case AttributeType.INT16U:
// case AttributeType.INT24U:
// case AttributeType.INT32U:
// output.Write("=" + value.Value);
// break;
// case AttributeType.BOOLEAN:
// if (value.Value == "true")
// output.Write("=1");
// else
// output.Write("=0");
// break;
// case AttributeType.UNICODE_STRING_255:
// output.Write("=\"" + value.Value + "\"");
// break;
// case AttributeType.CURRENCY:
// case AttributeType.VISIBLE_STRING_32:
// case AttributeType.VISIBLE_STRING_64:
// case AttributeType.VISIBLE_STRING_129:
// case AttributeType.VISIBLE_STRING_255:
// case AttributeType.VISIBLE_STRING_65:
// output.Write("=\"" + value.Value + "\"");
// break;
// case AttributeType.OCTET_STRING_64:
// output.Write("=\"" + value.Value + "\"");
// break;
// case AttributeType.FLOAT32:
// case AttributeType.FLOAT64:
// output.Write("=" + value.Value);
// break;
// default:
// Console.WriteLine("Unknown default value for " + dataAttribute.Name + " type: " + dataAttribute.AttributeType);
// break;
// }
//}
//output.WriteLine(";");
//}
}
private static String toMmsString(String iecString)

Loading…
Cancel
Save