コード例 #1
0
        /// <summary>
        /// Validates a <see cref="PublishedDataSetDataType"/> configuration object.
        /// </summary>
        /// <param name="publishedDataSet">The <see cref="PublishedDataSetDataType"/> that is to be validated.</param>
        /// <returns>true if configuration is correct.</returns>
        public bool ValidatePublishedDataSet(PublishedDataSetDataType publishedDataSet)
        {
            if (publishedDataSet == null)
            {
                throw new ArgumentException(nameof(publishedDataSet));
            }
            if (publishedDataSet.DataSetMetaData == null)
            {
                Utils.Trace(Utils.TraceMasks.Error, "The DataSetMetaData field is null.");
                return false;
            }
            PublishedDataItemsDataType publishedDataItems = ExtensionObject.ToEncodeable(publishedDataSet.DataSetSource) as PublishedDataItemsDataType;
            if (publishedDataItems != null && publishedDataItems.PublishedData != null)
            {
                if (publishedDataItems.PublishedData.Count != publishedDataSet.DataSetMetaData.Fields.Count)
                {
                    Utils.Trace(Utils.TraceMasks.Error, "The DataSetSource.Count is different from DataSetMetaData.Fields.Count.");
                    return false;
                }
            }

            return true;
        }
コード例 #2
0
        public void ValidateCollectDataFromExtensionFields()
        {
            //Arrange
            UaPubSubDataStore dataStore     = new UaPubSubDataStore();
            DataCollector     dataCollector = new DataCollector(dataStore);

            #region set up published data set that collects data from extension fields
            PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType();
            publishedDataSetSimple.Name = "Simple";
            // Define  publishedDataSetSimple.DataSetMetaData
            publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType();
            publishedDataSetSimple.DataSetMetaData.DataSetClassId = new Uuid(Guid.Empty);
            publishedDataSetSimple.DataSetMetaData.Name           = publishedDataSetSimple.Name;
            publishedDataSetSimple.DataSetMetaData.Fields         = new FieldMetaDataCollection()
            {
                new FieldMetaData()
                {
                    Name           = "BoolToggle",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.Boolean,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32Fast",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "DateTime",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.DateTime,
                    ValueRank      = ValueRanks.Scalar
                }
            };

            //initialize Extension fields collection
            publishedDataSetSimple.ExtensionFields = new KeyValuePairCollection()
            {
                new Opc.Ua.KeyValuePair()
                {
                    Key   = new QualifiedName("BoolToggle"),
                    Value = true
                },
                new Opc.Ua.KeyValuePair()
                {
                    Key   = new QualifiedName("Int32"),
                    Value = (int)100
                },
                new Opc.Ua.KeyValuePair()
                {
                    Key   = new QualifiedName("Int32Fast"),
                    Value = (int)50
                },
                new Opc.Ua.KeyValuePair()
                {
                    Key   = new QualifiedName("DateTime"),
                    Value = DateTime.Today
                }
            };

            PublishedDataItemsDataType publishedDataItems = new PublishedDataItemsDataType();
            publishedDataItems.PublishedData = new PublishedVariableDataTypeCollection();
            //create PublishedData based on metadata names
            foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields)
            {
                publishedDataItems.PublishedData.Add(
                    new PublishedVariableDataType()
                {
                    SubstituteValue = new QualifiedName(field.Name)
                });
            }
            publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataItems);
            #endregion

            //Act
            dataCollector.AddPublishedDataSet(publishedDataSetSimple);
            DataSet collectedDataSet = dataCollector.CollectData(publishedDataSetSimple.Name);
            //Assert
            Assert.IsNotNull(publishedDataItems, "The m_firstPublishedDataSet.DataSetSource is not PublishedDataItemsDataType.");
            Assert.IsNotNull(collectedDataSet, "collectedDataSet is null.");
            Assert.IsNotNull(collectedDataSet.Fields, "collectedDataSet.Fields is null.");

            Assert.AreEqual(collectedDataSet.Fields.Length, publishedDataItems.PublishedData.Count, "collectedDataSet and published data fields count do not match.");
            // validate collected values
            Assert.AreEqual(collectedDataSet.Fields[0].Value.Value, true, "collectedDataSet.Fields[0].Value.Value does not match.");
            Assert.AreEqual(collectedDataSet.Fields[1].Value.Value, (int)100, "collectedDataSet.Fields[1].Value.Value does not match.");
            Assert.AreEqual(collectedDataSet.Fields[2].Value.Value, (int)50, "collectedDataSet.Fields[2].Value.Value does not match.");
            Assert.AreEqual(collectedDataSet.Fields[3].Value.Value, DateTime.Today, "collectedDataSet.Fields[3].Value.Value does not match.");
        }
コード例 #3
0
        public void ValidateCollectDataFromDataStore()
        {
            //Arrange
            UaPubSubDataStore dataStore = new UaPubSubDataStore();

            dataStore.WritePublishedDataItem(new NodeId("BoolToggle", NamespaceIndex), 0, new DataValue(new Variant(false)));
            dataStore.WritePublishedDataItem(new NodeId("Int32", NamespaceIndex), 0, new DataValue(new Variant(1)));
            dataStore.WritePublishedDataItem(new NodeId("Int32Fast", NamespaceIndex), 0, new DataValue(new Variant(2)));
            dataStore.WritePublishedDataItem(new NodeId("DateTime", NamespaceIndex), 0, new DataValue(new Variant(DateTime.MaxValue)));

            DataCollector dataCollector = new DataCollector(dataStore);

            #region set up published data set that collects data from extension fields
            PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType();
            publishedDataSetSimple.Name = "Simple";
            // Define  publishedDataSetSimple.DataSetMetaData
            publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType();
            publishedDataSetSimple.DataSetMetaData.DataSetClassId = new Uuid(Guid.Empty);
            publishedDataSetSimple.DataSetMetaData.Name           = publishedDataSetSimple.Name;
            publishedDataSetSimple.DataSetMetaData.Fields         = new FieldMetaDataCollection()
            {
                new FieldMetaData()
                {
                    Name           = "BoolToggle",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.Boolean,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32Fast",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "DateTime",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    DataType       = DataTypeIds.DateTime,
                    ValueRank      = ValueRanks.Scalar
                }
            };

            PublishedDataItemsDataType publishedDataItems = new PublishedDataItemsDataType();
            publishedDataItems.PublishedData = new PublishedVariableDataTypeCollection();
            //create PublishedData based on metadata names
            foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields)
            {
                publishedDataItems.PublishedData.Add(
                    new PublishedVariableDataType()
                {
                    PublishedVariable = new NodeId(field.Name, NamespaceIndex),
                    AttributeId       = Attributes.Value,
                });
            }
            publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataItems);
            #endregion

            //Act
            dataCollector.AddPublishedDataSet(publishedDataSetSimple);
            DataSet collectedDataSet = dataCollector.CollectData(publishedDataSetSimple.Name);

            //Assert
            Assert.IsNotNull(publishedDataItems, "The m_firstPublishedDataSet.DataSetSource is not PublishedDataItemsDataType.");
            Assert.IsNotNull(collectedDataSet, "collectedDataSet is null.");
            Assert.IsNotNull(collectedDataSet.Fields, "collectedDataSet.Fields is null.");

            Assert.AreEqual(collectedDataSet.Fields.Length, publishedDataItems.PublishedData.Count, "collectedDataSet and published data fields count do not match.");

            // validate collected values
            Assert.AreEqual(collectedDataSet.Fields[0].Value.Value, false, "collectedDataSet.Fields[0].Value.Value does not match.");
            Assert.AreEqual(collectedDataSet.Fields[1].Value.Value, (int)1, "collectedDataSet.Fields[1].Value.Value does not match.");
            Assert.AreEqual(collectedDataSet.Fields[2].Value.Value, (int)2, "collectedDataSet.Fields[2].Value.Value does not match.");
            Assert.AreEqual(collectedDataSet.Fields[3].Value.Value, DateTime.MaxValue, "collectedDataSet.Fields[3].Value.Value does not match.");
        }
コード例 #4
0
        /// <summary>
        ///  Create and return a DataSet object created from its dataSetName
        /// </summary>
        /// <param name="dataSetName"></param>
        /// <returns></returns>
        public DataSet CollectData(string dataSetName)
        {
            PublishedDataSetDataType publishedDataSet = GetPublishedDataSet(dataSetName);

            if (publishedDataSet != null)
            {
                if (publishedDataSet.DataSetSource != null)
                {
                    DataSet dataSet = new DataSet(dataSetName);
                    PublishedDataItemsDataType publishedDataItems = ExtensionObject.ToEncodeable(publishedDataSet.DataSetSource) as PublishedDataItemsDataType;

                    if (publishedDataItems != null && publishedDataItems.PublishedData != null && publishedDataItems.PublishedData.Count > 0)
                    {
                        dataSet.Fields = new Field[publishedDataItems.PublishedData.Count];
                        for (int i = 0; i < publishedDataItems.PublishedData.Count; i++)
                        {
                            try
                            {
                                PublishedVariableDataType publishedVariable = publishedDataItems.PublishedData[i];
                                dataSet.Fields[i] = new Field();
                                // set FieldMetaData property
                                dataSet.Fields[i].FieldMetaData = publishedDataSet.DataSetMetaData.Fields[i];

                                // retrieve value from DataStore
                                DataValue dataValue = null;
                                if (publishedVariable.PublishedVariable != null)
                                {
                                    //todo handle missing value in data store
                                    dataValue = m_dataStore.ReadPublishedDataItem(publishedVariable.PublishedVariable, publishedVariable.AttributeId);
                                }

                                if (dataValue == null)
                                {
                                    //try to get the dataValue from ExtensionFields

                                    /*If an entry of the PublishedData references one of the ExtensionFields, the substituteValue shall contain the
                                     * QualifiedName of the ExtensionFields entry.
                                     * All other fields of this PublishedVariableDataType array element shall be null*/
                                    QualifiedName extensionFieldName = publishedVariable.SubstituteValue.Value as QualifiedName;
                                    if (extensionFieldName != null)
                                    {
                                        KeyValuePair extensionField = publishedDataSet.ExtensionFields.Find(x => x.Key == extensionFieldName);
                                        if (extensionField != null)
                                        {
                                            dataValue = new DataValue(extensionField.Value);
                                        }
                                    }
                                    if (dataValue == null)
                                    {
                                        dataValue = new DataValue(StatusCodes.Bad, DateTime.UtcNow);
                                    }
                                }
                                else
                                {
                                    dataValue = Utils.Clone(dataValue) as DataValue;

                                    //check StatusCode and return SubstituteValue if possible
                                    if (dataValue.StatusCode == StatusCodes.Bad && publishedVariable.SubstituteValue != Variant.Null)
                                    {
                                        dataValue.Value      = publishedVariable.SubstituteValue.Value;
                                        dataValue.StatusCode = StatusCodes.UncertainSubstituteValue;
                                    }
                                }

                                dataValue.ServerTimestamp = DateTime.UtcNow;

                                #region FieldMetaData -> MaxStringLength size validation

                                Field   field   = dataSet.Fields[i];
                                Variant variant = dataValue.WrappedValue;

                                bool shouldBringToConstraints(uint givenStrlen)
                                {
                                    if (field.FieldMetaData.MaxStringLength > 0 &&
                                        givenStrlen > field.FieldMetaData.MaxStringLength)
                                    {
                                        return(true);
                                    }

                                    return(false);
                                }

                                switch ((BuiltInType)field.FieldMetaData.BuiltInType)
                                {
                                case BuiltInType.String:
                                    if (field.FieldMetaData.ValueRank == ValueRanks.Scalar)
                                    {
                                        string strFieldValue = variant.Value as string;
                                        if (strFieldValue != null && shouldBringToConstraints((uint)strFieldValue.Length))
                                        {
                                            variant.Value   = strFieldValue.Substring(0, (int)field.FieldMetaData.MaxStringLength);
                                            dataValue.Value = variant;
                                        }
                                    }
                                    else if (field.FieldMetaData.ValueRank == ValueRanks.OneDimension)
                                    {
                                        string[] valueArray = variant.Value as string[];
                                        if (valueArray != null)
                                        {
                                            for (int idx = 0; idx < valueArray.Length; idx++)
                                            {
                                                if (shouldBringToConstraints((uint)valueArray[idx].Length))
                                                {
                                                    valueArray[idx] = valueArray[idx].Substring(0, (int)field.FieldMetaData.MaxStringLength);
                                                }
                                            }
                                        }
                                        dataValue.Value = valueArray;
                                    }
                                    break;

                                case BuiltInType.ByteString:
                                    if (field.FieldMetaData.ValueRank == ValueRanks.Scalar)
                                    {
                                        byte[] byteStringFieldValue = variant.Value as byte[];
                                        if (byteStringFieldValue != null && shouldBringToConstraints((uint)byteStringFieldValue.Length))
                                        {
                                            byte[] byteArray = (byte[])byteStringFieldValue.Clone();
                                            Array.Resize(ref byteArray, (int)field.FieldMetaData.MaxStringLength);
                                            variant.Value   = byteArray;
                                            dataValue.Value = variant;
                                        }
                                    }
                                    else if (field.FieldMetaData.ValueRank == ValueRanks.OneDimension)
                                    {
                                        byte[][] valueArray = variant.Value as byte[][];
                                        if (valueArray != null)
                                        {
                                            for (int idx = 0; idx < valueArray.Length; idx++)
                                            {
                                                if (shouldBringToConstraints((uint)valueArray[idx].Length))
                                                {
                                                    byte[] byteArray = (byte[])valueArray[idx].Clone();
                                                    Array.Resize(ref byteArray, (int)field.FieldMetaData.MaxStringLength);
                                                    valueArray[idx] = byteArray;
                                                }
                                            }
                                        }
                                        dataValue.Value = valueArray;
                                    }
                                    break;

                                default:
                                    break;
                                }

                                #endregion

                                dataSet.Fields[i].Value = dataValue;
                            }
                            catch (Exception ex)
                            {
                                dataSet.Fields[i].Value = new DataValue(StatusCodes.Bad, DateTime.UtcNow);
                                Utils.Trace(Utils.TraceMasks.Information, "DataCollector.CollectData for dataset {0} field {1} resulted in ex {2}",
                                            dataSetName, i, ex);
                            }
                        }
                        return(dataSet);
                    }
                }
            }
            return(null);
        }
コード例 #5
0
        /// <summary>
        /// Creates a PubSubConfiguration object programmatically.
        /// </summary>
        /// <returns></returns>
        public static PubSubConfigurationDataType CreatePublisherConfiguration()
        {
            // Define a PubSub connection with PublisherId 100
            PubSubConnectionDataType pubSubConnection1 = new PubSubConnectionDataType();

            pubSubConnection1.Name                = "UADPConnection1";
            pubSubConnection1.Enabled             = true;
            pubSubConnection1.PublisherId         = (UInt16)100;
            pubSubConnection1.TransportProfileUri = Profiles.UadpTransport;
            NetworkAddressUrlDataType address = new NetworkAddressUrlDataType();

            // Specify the local Network interface name to be used
            // e.g. address.NetworkInterface = "Ethernet";
            // Leave empty to publish on all available local interfaces.
            address.NetworkInterface = String.Empty;
            address.Url = "opc.udp://239.0.0.1:4840";
            pubSubConnection1.Address = new ExtensionObject(address);

            #region Define WriterGroup1
            WriterGroupDataType writerGroup1 = new WriterGroupDataType();
            writerGroup1.Name                  = "WriterGroup 1";
            writerGroup1.Enabled               = true;
            writerGroup1.WriterGroupId         = 1;
            writerGroup1.PublishingInterval    = 5000;
            writerGroup1.KeepAliveTime         = 5000;
            writerGroup1.MaxNetworkMessageSize = 1500;
            writerGroup1.HeaderLayoutUri       = "UADP-Cyclic-Fixed";
            UadpWriterGroupMessageDataType messageSettings = new UadpWriterGroupMessageDataType()
            {
                DataSetOrdering           = DataSetOrderingType.AscendingWriterId,
                GroupVersion              = 0,
                NetworkMessageContentMask = (uint)(UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.GroupHeader
                                                   | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.GroupVersion
                                                   | UadpNetworkMessageContentMask.NetworkMessageNumber | UadpNetworkMessageContentMask.SequenceNumber)
            };

            writerGroup1.MessageSettings   = new ExtensionObject(messageSettings);
            writerGroup1.TransportSettings = new ExtensionObject(new DatagramWriterGroupTransportDataType());

            // Define DataSetWriter 'Simple'
            DataSetWriterDataType dataSetWriter1 = new DataSetWriterDataType();
            dataSetWriter1.Name                    = "Writer 1";
            dataSetWriter1.DataSetWriterId         = 1;
            dataSetWriter1.Enabled                 = true;
            dataSetWriter1.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData;
            dataSetWriter1.DataSetName             = "Simple";
            dataSetWriter1.KeyFrameCount           = 1;
            UadpDataSetWriterMessageDataType uadpDataSetWriterMessage = new UadpDataSetWriterMessageDataType()
            {
                ConfiguredSize            = 32,
                DataSetOffset             = 15,
                NetworkMessageNumber      = 1,
                DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber),
            };
            dataSetWriter1.MessageSettings = new ExtensionObject(uadpDataSetWriterMessage);
            writerGroup1.DataSetWriters.Add(dataSetWriter1);

            // Define DataSetWriter 'AllTypes'
            DataSetWriterDataType dataSetWriter2 = new DataSetWriterDataType();
            dataSetWriter2.Name                    = "Writer 2";
            dataSetWriter2.DataSetWriterId         = 2;
            dataSetWriter2.Enabled                 = true;
            dataSetWriter2.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData;
            dataSetWriter2.DataSetName             = "AllTypes";
            dataSetWriter2.KeyFrameCount           = 1;
            uadpDataSetWriterMessage               = new UadpDataSetWriterMessageDataType()
            {
                ConfiguredSize            = 32,
                DataSetOffset             = 47,
                NetworkMessageNumber      = 1,
                DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber),
            };
            dataSetWriter2.MessageSettings = new ExtensionObject(uadpDataSetWriterMessage);
            writerGroup1.DataSetWriters.Add(dataSetWriter2);

            pubSubConnection1.WriterGroups.Add(writerGroup1);
            #endregion

            #region  Define PublishedDataSet Simple
            PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType();
            publishedDataSetSimple.Name = "Simple"; //name shall be unique in a configuration
            // Define  publishedDataSetSimple.DataSetMetaData
            publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType();
            publishedDataSetSimple.DataSetMetaData.DataSetClassId = Uuid.Empty;
            publishedDataSetSimple.DataSetMetaData.Name           = publishedDataSetSimple.Name;
            publishedDataSetSimple.DataSetMetaData.Fields         = new FieldMetaDataCollection()
            {
                new FieldMetaData()
                {
                    Name           = "BoolToggle",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Boolean,
                    DataType       = DataTypeIds.Boolean,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int32,
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32Fast",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int32,
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "DateTime",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.DateTime,
                    DataType       = DataTypeIds.DateTime,
                    ValueRank      = ValueRanks.Scalar
                },
            };
            publishedDataSetSimple.DataSetMetaData.ConfigurationVersion = new ConfigurationVersionDataType()
            {
                MinorVersion = 1,
                MajorVersion = 1
            };

            PublishedDataItemsDataType publishedDataSetSimpleSource = new PublishedDataItemsDataType();
            publishedDataSetSimpleSource.PublishedData = new PublishedVariableDataTypeCollection();
            //create PublishedData based on metadata names
            foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields)
            {
                publishedDataSetSimpleSource.PublishedData.Add(
                    new PublishedVariableDataType()
                {
                    PublishedVariable = new NodeId(field.Name, PublishedValuesWrites.NamespaceIndexSimple),
                    AttributeId       = Attributes.Value,
                });
            }

            publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataSetSimpleSource);
            #endregion

            #region  Define PublishedDataSet AllTypes
            PublishedDataSetDataType publishedDataSetAllTypes = new PublishedDataSetDataType();
            publishedDataSetAllTypes.Name = "AllTypes"; //name shall be unique in a configuration
            // Define  publishedDataSetAllTypes.DataSetMetaData
            publishedDataSetAllTypes.DataSetMetaData = new DataSetMetaDataType();
            publishedDataSetAllTypes.DataSetMetaData.DataSetClassId = Uuid.Empty;
            publishedDataSetAllTypes.DataSetMetaData.Name           = publishedDataSetAllTypes.Name;
            publishedDataSetAllTypes.DataSetMetaData.Fields         = new FieldMetaDataCollection()
            {
                new FieldMetaData()
                {
                    Name           = "BoolToggle",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Boolean,
                    DataType       = DataTypeIds.Boolean,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Byte",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Byte,
                    DataType       = DataTypeIds.Byte,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int16",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int16,
                    DataType       = DataTypeIds.Int16,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int32,
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "SByte",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.SByte,
                    DataType       = DataTypeIds.SByte,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "UInt16",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.UInt16,
                    DataType       = DataTypeIds.UInt16,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "UInt32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.UInt32,
                    DataType       = DataTypeIds.UInt32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Float",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Float,
                    DataType       = DataTypeIds.Float,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Double",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Double,
                    DataType       = DataTypeIds.Double,
                    ValueRank      = ValueRanks.Scalar
                },
            };
            publishedDataSetAllTypes.DataSetMetaData.ConfigurationVersion = new ConfigurationVersionDataType()
            {
                MinorVersion = 1,
                MajorVersion = 1
            };
            PublishedDataItemsDataType publishedDataSetAllTypesSource = new PublishedDataItemsDataType();
            //create PublishedData based on metadata names
            foreach (var field in publishedDataSetAllTypes.DataSetMetaData.Fields)
            {
                publishedDataSetAllTypesSource.PublishedData.Add(
                    new PublishedVariableDataType()
                {
                    PublishedVariable = new NodeId(field.Name, PublishedValuesWrites.NamespaceIndexAllTypes),
                    AttributeId       = Attributes.Value,
                });
            }
            publishedDataSetAllTypes.DataSetSource = new ExtensionObject(publishedDataSetAllTypesSource);
            #endregion

            //create  the PubSub configuration root object
            PubSubConfigurationDataType pubSubConfiguration = new PubSubConfigurationDataType();
            pubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection()
            {
                pubSubConnection1
            };
            pubSubConfiguration.PublishedDataSets = new PublishedDataSetDataTypeCollection()
            {
                publishedDataSetSimple, publishedDataSetAllTypes
            };

            return(pubSubConfiguration);
        }
コード例 #6
0
        /// <summary>
        /// Creates the "AllTypes" DataSet
        /// </summary>
        /// <returns></returns>
        private static PublishedDataSetDataType CreatePublishedDataSetAllTypes()
        {
            PublishedDataSetDataType publishedDataSetAllTypes = new PublishedDataSetDataType();

            publishedDataSetAllTypes.Name = "AllTypes"; //name shall be unique in a configuration
            // Define  publishedDataSetAllTypes.DataSetMetaData
            publishedDataSetAllTypes.DataSetMetaData = new DataSetMetaDataType();
            publishedDataSetAllTypes.DataSetMetaData.DataSetClassId = Uuid.Empty;
            publishedDataSetAllTypes.DataSetMetaData.Name           = publishedDataSetAllTypes.Name;
            publishedDataSetAllTypes.DataSetMetaData.Fields         = new FieldMetaDataCollection()
            {
                new FieldMetaData()
                {
                    Name           = "BoolToggle",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Boolean,
                    DataType       = DataTypeIds.Boolean,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Byte",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Byte,
                    DataType       = DataTypeIds.Byte,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int16",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int16,
                    DataType       = DataTypeIds.Int16,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int32,
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "SByte",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.SByte,
                    DataType       = DataTypeIds.SByte,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "UInt16",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.UInt16,
                    DataType       = DataTypeIds.UInt16,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "UInt32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.UInt32,
                    DataType       = DataTypeIds.UInt32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "UInt64",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.UInt64,
                    DataType       = DataTypeIds.UInt64,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Float",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Float,
                    DataType       = DataTypeIds.Float,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Double",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Double,
                    DataType       = DataTypeIds.Double,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "String",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.String,
                    DataType       = DataTypeIds.String,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "ByteString",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.ByteString,
                    DataType       = DataTypeIds.ByteString,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Guid",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Guid,
                    DataType       = DataTypeIds.Guid,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "DateTime",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.DateTime,
                    DataType       = DataTypeIds.DateTime,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "UInt32Array",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.UInt32,
                    DataType       = DataTypeIds.UInt32,
                    ValueRank      = ValueRanks.OneDimension
                },
            };

            publishedDataSetAllTypes.DataSetMetaData.ConfigurationVersion = new ConfigurationVersionDataType()
            {
                MinorVersion = 1,
                MajorVersion = 1
            };
            PublishedDataItemsDataType publishedDataSetAllTypesSource = new PublishedDataItemsDataType();

            //create PublishedData based on metadata names
            foreach (var field in publishedDataSetAllTypes.DataSetMetaData.Fields)
            {
                publishedDataSetAllTypesSource.PublishedData.Add(
                    new PublishedVariableDataType()
                {
                    PublishedVariable = new NodeId(field.Name, PublishedValuesWrites.NamespaceIndexAllTypes),
                    AttributeId       = Attributes.Value,
                });
            }
            publishedDataSetAllTypes.DataSetSource = new ExtensionObject(publishedDataSetAllTypesSource);

            return(publishedDataSetAllTypes);
        }
コード例 #7
0
        /// <summary>
        /// Creates the "Simple" DataSet
        /// </summary>
        /// <returns></returns>
        private static PublishedDataSetDataType CreatePublishedDataSetSimple()
        {
            PublishedDataSetDataType publishedDataSetSimple = new PublishedDataSetDataType();

            publishedDataSetSimple.Name = "Simple"; //name shall be unique in a configuration
            // Define  publishedDataSetSimple.DataSetMetaData
            publishedDataSetSimple.DataSetMetaData = new DataSetMetaDataType();
            publishedDataSetSimple.DataSetMetaData.DataSetClassId = Uuid.Empty;
            publishedDataSetSimple.DataSetMetaData.Name           = publishedDataSetSimple.Name;
            publishedDataSetSimple.DataSetMetaData.Fields         = new FieldMetaDataCollection()
            {
                new FieldMetaData()
                {
                    Name           = "BoolToggle",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Boolean,
                    DataType       = DataTypeIds.Boolean,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int32,
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "Int32Fast",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.Int32,
                    DataType       = DataTypeIds.Int32,
                    ValueRank      = ValueRanks.Scalar
                },
                new FieldMetaData()
                {
                    Name           = "DateTime",
                    DataSetFieldId = new Uuid(Guid.NewGuid()),
                    BuiltInType    = (byte)DataTypes.DateTime,
                    DataType       = DataTypeIds.DateTime,
                    ValueRank      = ValueRanks.Scalar
                },
            };
            publishedDataSetSimple.DataSetMetaData.ConfigurationVersion = new ConfigurationVersionDataType()
            {
                MinorVersion = 1,
                MajorVersion = 1
            };

            PublishedDataItemsDataType publishedDataSetSimpleSource = new PublishedDataItemsDataType();

            publishedDataSetSimpleSource.PublishedData = new PublishedVariableDataTypeCollection();
            //create PublishedData based on metadata names
            foreach (var field in publishedDataSetSimple.DataSetMetaData.Fields)
            {
                publishedDataSetSimpleSource.PublishedData.Add(
                    new PublishedVariableDataType()
                {
                    PublishedVariable = new NodeId(field.Name, PublishedValuesWrites.NamespaceIndexSimple),
                    AttributeId       = Attributes.Value,
                });
            }

            publishedDataSetSimple.DataSetSource = new ExtensionObject(publishedDataSetSimpleSource);

            return(publishedDataSetSimple);
        }