@@ -142,6 +142,8 @@ public class NodeSetToAML
142142 { Enumeration , "xs:int" }
143143 } ;
144144
145+ private bool _runningInstances = false ;
146+
145147 public NodeSetToAML ( ModelManager modelManager )
146148 {
147149 m_modelManager = modelManager ;
@@ -347,6 +349,8 @@ public void CreateAML(string modelPath, string modelName = null)
347349
348350 Utils . LogInfo ( "Creating Instances" ) ;
349351
352+ _runningInstances = true ;
353+
350354 CreateInstances ( ) ; // add the instances for each model
351355
352356 Utils . LogInfo ( "Creating Instances Complete" ) ;
@@ -551,42 +555,42 @@ private void AddMetaModelLibraries(CAEXDocument doc)
551555 // Manually add these to simulate what the AddModifyAttribute would do if it were possible
552556 AttributeType browseNameAttributeType = methodNodeClass . Attribute . Append ( "BrowseName" ) ;
553557 browseNameAttributeType . RefAttributeType = "[" + ATLPrefix + Opc . Ua . Namespaces . OpcUa + "]/[QualifiedName]" ;
554- AttributeType namespaceUriAttributeType = browseNameAttributeType . Attribute . Append ( "NamespaceURI " ) ;
558+ AttributeType namespaceUriAttributeType = browseNameAttributeType . Attribute . Append ( "NamespaceUri " ) ;
555559 namespaceUriAttributeType . AttributeDataType = "xs:anyURI" ;
556560 AttributeType nameAttributeType = browseNameAttributeType . Attribute . Append ( "Name" ) ;
557561 nameAttributeType . AttributeDataType = "xs:string" ;
558562
559563 AddLibraryHeaderInfo ( suc_meta as CAEXBasicObject ) ;
560564 }
561565
562- private void AddBaseNodeClassAttributes ( AttributeSequence seq , UANode uanode , UANode basenode = null )
566+ private void AddBaseNodeClassAttributes ( AttributeSequence seq , UANode uanode )
563567 {
564- // only set the value if different from the base node
565- string baseuri = "" ;
566- if ( basenode != null )
567- baseuri = m_modelManager . ModelNamespaceIndexes [ basenode . DecodedNodeId . NamespaceIndex ] . NamespaceUri ;
568- string myuri = m_modelManager . ModelNamespaceIndexes [ uanode . DecodedNodeId . NamespaceIndex ] . NamespaceUri ;
569-
570568 var nodeId = seq [ "NodeId" ] ;
571569
572570 if ( uanode . DecodedNodeId . IsNullNodeId == false )
573571 {
574- ExpandedNodeId expandedNodeId = new ExpandedNodeId ( uanode . DecodedNodeId , myuri ) ;
572+ ExpandedNodeId expandedNodeId = new ExpandedNodeId ( uanode . DecodedNodeId ,
573+ m_modelManager . ModelNamespaceIndexes [ uanode . DecodedNodeId . NamespaceIndex ] . NamespaceUri ) ;
575574 Variant variant = new Variant ( expandedNodeId ) ;
576575 nodeId = AddModifyAttribute ( seq , "NodeId" , "NodeId" , variant ) ;
577576 }
578577
579- var browse = seq [ "BrowseName" ] ;
578+ AttributeType browse = seq [ "BrowseName" ] ;
580579 if ( browse == null )
581580 {
582581 browse = AddModifyAttribute ( seq , "BrowseName" , "QualifiedName" , Variant . Null ) ;
583582 }
584583
585- if ( myuri != baseuri )
586- {
587- var uriatt = browse . Attribute [ "NamespaceURI" ] ;
584+ // Ensure that NamespaceUri is always present #100
585+ AttributeType uriAttribute = browse . Attribute [ "NamespaceUri" ] ;
586+ uriAttribute . Value =
587+ m_modelManager . ModelNamespaceIndexes [ uanode . DecodedBrowseName . NamespaceIndex ] . NamespaceUri ;
588588
589- uriatt . Value = myuri ;
589+ // Remove the name for everything #100
590+ AttributeType nameSubAttribute = browse . Attribute [ "Name" ] ;
591+ if ( nameSubAttribute != null )
592+ {
593+ browse . Attribute . RemoveElement ( nameSubAttribute ) ;
590594 }
591595
592596 BuildLocalizedTextAttribute ( seq , "DisplayName" , uanode . DisplayName ,
@@ -965,7 +969,7 @@ private AttributeType AddModifyAttribute(AttributeSequence seq, string name, str
965969 QualifiedName qualifiedName = val . Value as QualifiedName ;
966970 if ( qualifiedName != null )
967971 {
968- AttributeType uri = a . Attribute [ "NamespaceURI " ] ;
972+ AttributeType uri = a . Attribute [ "NamespaceUri " ] ;
969973 uri . Value = m_modelManager . ModelNamespaceIndexes [ qualifiedName . NamespaceIndex ] . NamespaceUri ;
970974 AttributeType nameAttribute = a . Attribute [ "Name" ] ;
971975 nameAttribute . Value = qualifiedName . Name ;
@@ -1580,7 +1584,7 @@ static private string BuildLibraryReference(string prefix, string namespaceURI,
15801584
15811585 private string BaseRefFromNodeId ( NodeId nodeId , string LibPrefix , bool UseInverseName = false , bool IsArray = false )
15821586 {
1583- string NamespaceURI = m_modelManager . FindModelUri ( nodeId ) ;
1587+ string NamespaceUri = m_modelManager . FindModelUri ( nodeId ) ;
15841588 var BaseNode = m_modelManager . FindNode < UANode > ( nodeId ) ;
15851589 if ( BaseNode != null )
15861590 {
@@ -1590,16 +1594,16 @@ private string BaseRefFromNodeId(NodeId nodeId, string LibPrefix, bool UseInvers
15901594 if ( refnode . InverseName != null )
15911595 {
15921596 if ( BaseNode . DecodedBrowseName . Name != refnode . InverseName [ 0 ] . Value )
1593- return BuildLibraryReference ( LibPrefix , NamespaceURI , BaseNode . DecodedBrowseName . Name , refnode . InverseName [ 0 ] . Value ) ;
1597+ return BuildLibraryReference ( LibPrefix , NamespaceUri , BaseNode . DecodedBrowseName . Name , refnode . InverseName [ 0 ] . Value ) ;
15941598 }
15951599 }
15961600 if ( IsArray == true )
15971601 {
1598- return BuildLibraryReference ( LibPrefix , NamespaceURI , ListOf + BaseNode . DecodedBrowseName . Name ) ; //add ListOf
1602+ return BuildLibraryReference ( LibPrefix , NamespaceUri , ListOf + BaseNode . DecodedBrowseName . Name ) ; //add ListOf
15991603 }
16001604 else
16011605 {
1602- return BuildLibraryReference ( LibPrefix , NamespaceURI , BaseNode . DecodedBrowseName . Name ) ;
1606+ return BuildLibraryReference ( LibPrefix , NamespaceUri , BaseNode . DecodedBrowseName . Name ) ;
16031607 }
16041608 }
16051609 return "" ;
@@ -2381,7 +2385,7 @@ SystemUnitFamilyType FindOrAddSUC(ref SystemUnitClassLibType scl, ref RoleClassL
23812385 // override any attribute values
23822386
23832387 var basenode = FindNode < NodeSet . UANode > ( BaseNodeId ) ;
2384- AddBaseNodeClassAttributes ( rtn . Attribute , refnode , basenode ) ;
2388+ AddBaseNodeClassAttributes ( rtn . Attribute , refnode ) ;
23852389 switch ( refnode . NodeClass )
23862390 {
23872391 case NodeClass . ObjectType :
@@ -2469,7 +2473,7 @@ SystemUnitFamilyType FindOrAddSUC(ref SystemUnitClassLibType scl, ref RoleClassL
24692473 rtn . AddInstance ( ie ) ;
24702474
24712475 var basenode = FindNode < NodeSet . UANode > ( TypeDefNodeId ) ;
2472- AddBaseNodeClassAttributes ( ie . Attribute , targetNode , basenode ) ;
2476+ AddBaseNodeClassAttributes ( ie . Attribute , targetNode ) ;
24732477 if ( targetNode . NodeClass == NodeClass . Variable )
24742478 { // Set the datatype for Value
24752479 var varnode = targetNode as NodeSet . UAVariable ;
@@ -2786,11 +2790,15 @@ private void ProcessOptionSets(ref AttributeTypeType att, NodeId nodeId)
27862790 }
27872791 else if ( nodeId == QualifiedNameNodeId )
27882792 {
2793+ string namespaceUriPath = BuildLibraryReference ( ATLPrefix , MetaModelName , "NamespaceUri" ) ;
2794+ AttributeFamilyType namespaceUriRoot = m_cAEXDocument . FindByPath ( namespaceUriPath ) as AttributeFamilyType ;
2795+
2796+ AttributeType newNamespaceUri = new AttributeType ( new System . Xml . Linq . XElement ( defaultNS + "Attribute" ) ) ;
2797+ newNamespaceUri . Name = "NamespaceUri" ;
2798+ newNamespaceUri . RecreateAttributeInstance ( namespaceUriRoot ) ;
2799+ att . Attribute . Insert ( newNamespaceUri ) ;
2800+
27892801 att . AttributeDataType = "" ;
2790- AttributeType ns = new AttributeType ( new System . Xml . Linq . XElement ( defaultNS + "Attribute" ) ) ;
2791- ns . Name = "NamespaceURI" ;
2792- ns . AttributeDataType = "xs:anyURI" ;
2793- att . Attribute . Insert ( ns ) ;
27942802 AttributeType n = new AttributeType ( new System . Xml . Linq . XElement ( defaultNS + "Attribute" ) ) ;
27952803 n . Name = "Name" ;
27962804 n . AttributeDataType = "xs:string" ;
0 commit comments