Example #1
0
        /// <summary>
        /// Creates node for Signal associated to Component in Visual Components.
        /// </summary>
        private BaseDataVariableState CreateVariableNode(FolderState parentFolder, string nodeName, NodeId nodeDataType)
        {
            string namespaceUri   = Namespaces.vc2opcua;
            string nodeNameParent = String.Format("{0}-{1}", nodeName, parentFolder.Parent.DisplayName);

            BaseDataVariableState variableNode = new BaseDataVariableState(parentFolder);
            NodeId nodeId = NodeId.Create(nodeNameParent, namespaceUri, uaServer.NamespaceUris);

            variableNode.Create(
                nodeManager.context,
                nodeId,
                new QualifiedName(nodeNameParent, (ushort)uaServer.NamespaceUris.GetIndex(namespaceUri)),
                new LocalizedText(nodeName),
                true);

            variableNode.DataType = nodeDataType;

            parentFolder.AddReference(ReferenceTypeIds.Organizes, false, variableNode.NodeId);
            variableNode.AddReference(ReferenceTypeIds.Organizes, true, parentFolder.NodeId);

            return(variableNode);
        }
Example #2
0
        /// <summary>
        /// Creates a variable from a tag.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="tag">The tag.</param>
        /// <returns>The variable that represents the tag.</returns>
        private BaseVariableState CreateVariable(ISystemContext context, UnderlyingSystemTag tag)
        {
            // create the variable type based on the tag type.
            BaseDataVariableState variable = null;

            switch (tag.TagType)
            {
            case UnderlyingSystemTagType.Analog:
            {
                AnalogItemState node = new AnalogItemState(this);

                if (tag.EngineeringUnits != null)
                {
                    node.EngineeringUnits = new PropertyState <EUInformation>(node);
                }

                if (tag.EuRange.Length >= 4)
                {
                    node.InstrumentRange = new PropertyState <Range>(node);
                }

                variable = node;
                break;
            }

            case UnderlyingSystemTagType.Digital:
            {
                TwoStateDiscreteState node = new TwoStateDiscreteState(this);
                variable = node;
                break;
            }

            case UnderlyingSystemTagType.Enumerated:
            {
                MultiStateDiscreteState node = new MultiStateDiscreteState(this);

                if (tag.Labels != null)
                {
                    node.EnumStrings = new PropertyState <LocalizedText[]>(node);
                }

                variable = node;
                break;
            }

            default:
            {
                DataItemState node = new DataItemState(this);
                variable = node;
                break;
            }
            }

            // set the symbolic name and reference types.
            variable.SymbolicName    = tag.Name;
            variable.ReferenceTypeId = ReferenceTypeIds.HasComponent;

            // initialize the variable from the type model.
            variable.Create(
                context,
                null,
                new QualifiedName(tag.Name, this.BrowseName.NamespaceIndex),
                null,
                true);

            // update the variable values.
            UpdateVariable(context, tag, variable);

            return(variable);
        }