/// <summary> /// Creates the NodeId for the specified node. /// </summary> /// <param name="context">The context.</param> /// <param name="mode">Type or instance</param> /// <param name="node">The node.</param> /// <returns>The new NodeId.</returns> public NodeId New(ISystemContext context, AasUaBaseEntity.CreateMode mode, NodeState node) { if (mode == AasUaBaseEntity.CreateMode.Type) { uint id = Utils.IncrementIdentifier(ref m_lastUsedId); return(new NodeId(id, m_typeNamespaceIndex)); } else { uint id = Utils.IncrementIdentifier(ref m_lastUsedId); return(new NodeId(id, m_namespaceIndex)); } }
public NodeId NewType(ISystemContext context, AasUaBaseEntity.CreateMode mode, NodeState node, uint preferredNumId = 0) { uint id = preferredNumId; if (id == 0) id = Utils.IncrementIdentifier(ref m_lastUsedTypeId); // this is thought to be a BUG in the OPCF code //// return new NodeId(preferredNumId, m_typeNamespaceIndex); if (mode == AasUaBaseEntity.CreateMode.Type) return new NodeId(id, m_typeNamespaceIndex); else return new NodeId(id, m_namespaceIndex); }
//// Objects // /// <summary> /// Helper to create an Object-Node. Note: __NO__ NodeId is created by the default! Must be done by outer /// functionality!! /// </summary> /// <param name="parent">Parent node</param> /// <param name="mode">Type or instance</param> /// <param name="browseDisplayName">Name displayed in the node tree</param> /// <param name="referenceTypeFromParentId"></param> /// <param name="typeDefinitionId">Type of the Object</param> /// <param name="modellingRule">Modeling Rule, if not None</param> /// <param name="extraName"></param> /// <returns>The node</returns> public BaseObjectState CreateAddObject( NodeState parent, AasUaBaseEntity.CreateMode mode, string browseDisplayName, NodeId referenceTypeFromParentId = null, NodeId typeDefinitionId = null, AasUaNodeHelper.ModellingRule modellingRule = AasUaNodeHelper.ModellingRule.None, string extraName = null) { var x = AasUaNodeHelper.CreateObject(parent, browseDisplayName, typeDefinitionId: typeDefinitionId, modellingRule: modellingRule, extraName: extraName); x.NodeId = nodeMgr.NewFromParent(nodeMgr.SystemContext, mode, x, parent); nodeMgr.AddPredefinedNode(nodeMgr.SystemContext, x); if (parent != null) { parent.AddChild(x); } if (referenceTypeFromParentId != null) { if (parent != null) { if (!parent.ReferenceExists(referenceTypeFromParentId, false, x.NodeId)) { parent.AddReference(referenceTypeFromParentId, false, x.NodeId); } if (referenceTypeFromParentId == ReferenceTypeIds.HasComponent) { x.AddReference(referenceTypeFromParentId, true, parent.NodeId); } if (referenceTypeFromParentId == ReferenceTypeIds.HasProperty) { x.AddReference(referenceTypeFromParentId, true, parent.NodeId); } } //// nodeMgr.AddReference(parentNodeId, new AasReference(referenceTypeId, false, x.NodeId)); } //// if (typeDefinitionId != null) //// { //// x.TypeDefinitionId = typeDefinitionId; //// x.AddReference(ReferenceTypeIds.HasTypeDefinition, false, typeDefinitionId); //// // nodeMgr.AddReference(x.NodeId, new AasReference(ReferenceTypeIds.HasTypeDefinition, false, //// // typeDefinitionId)); //// } return(x); }
//// Folders // public FolderState CreateAddFolder(AasUaBaseEntity.CreateMode mode, NodeState parent, string browseDisplayName) { var x = new FolderState(parent); x.BrowseName = browseDisplayName; x.DisplayName = browseDisplayName; x.NodeId = nodeMgr.New(nodeMgr.SystemContext, mode, x); x.TypeDefinitionId = ObjectTypeIds.FolderType; nodeMgr.AddPredefinedNode(nodeMgr.SystemContext, x); if (parent != null) { parent.AddChild(x); } return(x); }
public NodeId NewFromParent(ISystemContext context, AasUaBaseEntity.CreateMode mode, NodeState node, NodeState parent) { // create known node ids from the full path in the AAS // causes an exception if anything has more than one qualifier! if (parent == null) { return(new NodeId(node.BrowseName.Name, m_namespaceIndex)); } if (node.BrowseName.Name == "Qualifier") { return(New(context, mode, node)); } else { return(new NodeId(parent.NodeId.Identifier.ToString() + "." + node.BrowseName.Name, m_namespaceIndex)); } }
public MethodState CreateAddMethodState( NodeState parent, AasUaBaseEntity.CreateMode mode, string browseDisplayName, Argument[] inputArgs = null, Argument[] outputArgs = null, NodeId referenceTypeFromParentId = null, NodeId methodDeclarationId = null, GenericMethodCalledEventHandler onCalled = null) { // method node var m = new MethodState(parent); m.BrowseName = "" + browseDisplayName; m.DisplayName = "" + browseDisplayName; m.Description = new LocalizedText("en", browseDisplayName); m.NodeId = nodeMgr.New(nodeMgr.SystemContext, mode, m); if (methodDeclarationId != null) { m.MethodDeclarationId = methodDeclarationId; } m.Executable = true; m.UserExecutable = true; nodeMgr.AddPredefinedNode(nodeMgr.SystemContext, m); if (parent != null) { parent.AddChild(m); } if (referenceTypeFromParentId != null) { if (parent != null) { parent.AddReference(referenceTypeFromParentId, false, m.NodeId); if (referenceTypeFromParentId == ReferenceTypeIds.HasComponent) { m.AddReference(referenceTypeFromParentId, true, parent.NodeId); } if (referenceTypeFromParentId == ReferenceTypeIds.HasProperty) { m.AddReference(referenceTypeFromParentId, true, parent.NodeId); } } } // can have inputs, outputs for (int i = 0; i < 2; i++) { // pretty argument list var arguments = (i == 0) ? inputArgs : outputArgs; if (arguments == null || arguments.Length < 1) { continue; } // make a property for this var prop = CreateAddPropertyState <Argument[]>( m, mode, (i == 0) ? "InputArguments" : "OutputArguments", DataTypeIds.Argument, arguments, ReferenceTypeIds.HasProperty, typeDefinitionId: VariableTypeIds.PropertyType, valueRank: 1); // explicitely add arguments ass well? if (i == 0) { m.InputArguments = prop; } if (i == 1) { m.OutputArguments = prop; } } // event handler if (onCalled != null) { m.OnCallMethod = onCalled; } return(m); }
//// Properties // /// <summary> /// Helper to create an PropertyState-Node for a certain type and add it to the information model. /// Note: __NO__ NodeId is created by the default! Must be done by outer functionality!! /// </summary> /// <typeparam name="T">C# type of the proprty</typeparam> /// <param name="parent">Parent node</param> /// <param name="mode">Type or instance</param> /// <param name="browseDisplayName">Name displayed in the node tree</param> /// <param name="dataTypeId">Data type, such as String.. Given by DataTypeIds...</param> /// <param name="value">Value of the type T or Null</param> /// <param name="referenceTypeFromParentId"></param> /// <param name="typeDefinitionId">Type definition; independent from DataType!</param> /// <param name="valueRank">-1 or e.g. 1 for array</param> /// <param name="defaultSettings">Apply default settings for a normal Property</param> /// <param name="modellingRule">Modeling Rule, if not None</param> /// <returns>NodeState</returns> public PropertyState <T> CreateAddPropertyState <T>( NodeState parent, AasUaBaseEntity.CreateMode mode, string browseDisplayName, NodeId dataTypeId, T value, NodeId referenceTypeFromParentId = null, NodeId typeDefinitionId = null, int valueRank = -2, bool defaultSettings = false, AasUaNodeHelper.ModellingRule modellingRule = AasUaNodeHelper.ModellingRule.None) { // apply cumulative settings if (defaultSettings) { referenceTypeFromParentId = ReferenceTypeIds.HasProperty; typeDefinitionId = VariableTypeIds.PropertyType; if (valueRank == -2) { valueRank = -1; } } // make Property var x = new PropertyState <T>(parent); x.BrowseName = "" + browseDisplayName; x.DisplayName = "" + browseDisplayName; x.Description = new LocalizedText("en", browseDisplayName); x.DataType = dataTypeId; if (valueRank > -2) { x.ValueRank = valueRank; } // ReSharper disable once RedundantCast x.Value = (T)value; AasUaNodeHelper.CheckSetModellingRule(modellingRule, x); x.NodeId = nodeMgr.New(nodeMgr.SystemContext, mode, x); // add Node nodeMgr.AddPredefinedNode(nodeMgr.SystemContext, x); if (parent != null) { parent.AddChild(x); } // set relations if (referenceTypeFromParentId != null) { if (parent != null) { parent.AddReference(referenceTypeFromParentId, false, x.NodeId); if (referenceTypeFromParentId == ReferenceTypeIds.HasComponent) { x.AddReference(referenceTypeFromParentId, true, parent.NodeId); } if (referenceTypeFromParentId == ReferenceTypeIds.HasProperty) { x.AddReference(referenceTypeFromParentId, true, parent.NodeId); } } } if (typeDefinitionId != null) { x.TypeDefinitionId = typeDefinitionId; } x.AccessLevel = AccessLevels.CurrentReadOrWrite; x.UserAccessLevel = AccessLevels.CurrentReadOrWrite; return(x); }