diff --git a/src/iec61850/server/impl/ied_server.c b/src/iec61850/server/impl/ied_server.c index 783b2376..611a0716 100644 --- a/src/iec61850/server/impl/ied_server.c +++ b/src/iec61850/server/impl/ied_server.c @@ -302,12 +302,27 @@ installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttr int childPosition = strlen(objectReference); int childCompIdPos = strlen(componentId); - DataAttribute* subDataAttribute = (DataAttribute*) dataAttribute->firstChild; + if (dataAttribute->elementCount > 0) { + int subIdx = 0; - while (subDataAttribute != NULL) { - installDefaultValuesForDataAttribute(self, ld, subDataAttribute, objectReference, childPosition, idx, componentId, childCompIdPos); + DataAttribute* subDataAttribute = (DataAttribute*) dataAttribute->firstChild; - subDataAttribute = (DataAttribute*) subDataAttribute->sibling; + while (subDataAttribute != NULL) { + installDefaultValuesForDataAttribute(self, ld, subDataAttribute, objectReference, childPosition, subIdx, componentId, childCompIdPos); + + subIdx++; + + subDataAttribute = (DataAttribute*) subDataAttribute->sibling; + } + } + else { + DataAttribute* subDataAttribute = (DataAttribute*) dataAttribute->firstChild; + + while (subDataAttribute != NULL) { + installDefaultValuesForDataAttribute(self, ld, subDataAttribute, objectReference, childPosition, idx, componentId, childCompIdPos); + + subDataAttribute = (DataAttribute*) subDataAttribute->sibling; + } } } diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index 7dbfb4c4..e49b11b3 100644 Binary files a/tools/model_generator/genmodel.jar and b/tools/model_generator/genmodel.jar differ diff --git a/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java b/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java index 378459f2..2702025b 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java @@ -245,7 +245,7 @@ public class LogicalNode implements DataModelNode { if (subDataAttribute == null) System.out.println("subelement with name " + sdiName + " not found!"); - parseDataAttributeNodes(sdiNode, subDataAttribute); + parseDataAttributeNodes(sdiNode, subDataAttribute, -1); parseSubDataInstances(sdiNode, subDataAttribute); }