Beispiel #1
0
        // In this example we use predefined structures to setup synchrophasor style metadata. This is only for setup simplification of
        // the initial target uses cases that interact with IEEE C37.118. Technically the publisher can create its own metadata sets.
        private void DefineMetadata()
        {
            // This sample just generates random Guid measurement and device identifiers - for a production system,
            // these Guid values would need to persist between runs defining a permanent association between the
            // defined metadata and the identifier...

            DeviceMetadata device1Metadata = new DeviceMetadata();
            DateTime       timestamp       = DateTime.UtcNow;

            // Add a device
            device1Metadata.Name            = "Test PMU";
            device1Metadata.Acronym         = device1Metadata.Name.Replace(" ", "").ToUpper();
            device1Metadata.UniqueID        = Guid.NewGuid();
            device1Metadata.Longitude       = 300;
            device1Metadata.Latitude        = 200;
            device1Metadata.FramesPerSecond = 30;
            device1Metadata.ProtocolName    = "STTP";
            device1Metadata.UpdatedOn       = timestamp;

            m_deviceMetadata.Add(device1Metadata);

            string pointTagPrefix    = device1Metadata.Acronym + ".";
            string measurementSource = "PPA:";
            int    runtimeIndex      = 1;

            // Add a frequency measurement
            MeasurementMetadata measurement1Metadata = new MeasurementMetadata();

            measurement1Metadata.ID                = $"{measurementSource}{runtimeIndex++}";
            measurement1Metadata.PointTag          = pointTagPrefix + "FREQ";
            measurement1Metadata.SignalID          = Guid.NewGuid();
            measurement1Metadata.DeviceAcronym     = device1Metadata.Acronym;
            measurement1Metadata.Reference.Acronym = device1Metadata.Acronym;
            measurement1Metadata.Reference.Kind    = SignalKind.Frequency;
            measurement1Metadata.Reference.Index   = 0;
            measurement1Metadata.PhasorSourceIndex = 0;
            measurement1Metadata.UpdatedOn         = timestamp;

            // Add a dF/dt measurement
            MeasurementMetadata measurement2Metadata = new MeasurementMetadata();

            measurement2Metadata.ID                = $"{measurementSource}{runtimeIndex++}";
            measurement2Metadata.PointTag          = pointTagPrefix + "DFDT";
            measurement2Metadata.SignalID          = Guid.NewGuid();
            measurement2Metadata.DeviceAcronym     = device1Metadata.Acronym;
            measurement2Metadata.Reference.Acronym = device1Metadata.Acronym;
            measurement2Metadata.Reference.Kind    = SignalKind.DfDt;
            measurement2Metadata.Reference.Index   = 0;
            measurement2Metadata.PhasorSourceIndex = 0;
            measurement2Metadata.UpdatedOn         = timestamp;

            // Add a phase angle measurement
            MeasurementMetadata measurement3Metadata = new MeasurementMetadata();

            measurement3Metadata.ID                = $"{measurementSource}{runtimeIndex++}";
            measurement3Metadata.PointTag          = pointTagPrefix + "VPHA";
            measurement3Metadata.SignalID          = Guid.NewGuid();
            measurement3Metadata.DeviceAcronym     = device1Metadata.Acronym;
            measurement3Metadata.Reference.Acronym = device1Metadata.Acronym;
            measurement3Metadata.Reference.Kind    = SignalKind.Angle;
            measurement3Metadata.Reference.Index   = 1; // First phase angle
            measurement3Metadata.PhasorSourceIndex = 1; // Match to Phasor.SourceIndex = 1
            measurement3Metadata.UpdatedOn         = timestamp;

            // Add a phase magnitude measurement
            MeasurementMetadata measurement4Metadata = new MeasurementMetadata();

            measurement4Metadata.ID                = $"{measurementSource}{runtimeIndex++}";
            measurement4Metadata.PointTag          = pointTagPrefix + "VPHM";
            measurement4Metadata.SignalID          = Guid.NewGuid();
            measurement4Metadata.DeviceAcronym     = device1Metadata.Acronym;
            measurement4Metadata.Reference.Acronym = device1Metadata.Acronym;
            measurement4Metadata.Reference.Kind    = SignalKind.Magnitude;
            measurement4Metadata.Reference.Index   = 1; // First phase magnitude
            measurement4Metadata.PhasorSourceIndex = 1; // Match to Phasor.SourceIndex = 1
            measurement4Metadata.UpdatedOn         = timestamp;

            m_measurementMetadata.Add(measurement1Metadata);
            m_measurementMetadata.Add(measurement2Metadata);
            m_measurementMetadata.Add(measurement3Metadata);
            m_measurementMetadata.Add(measurement4Metadata);

            // Add a phasor
            PhasorMetadata phasor1Metadata = new PhasorMetadata();

            phasor1Metadata.DeviceAcronym = device1Metadata.Acronym;
            phasor1Metadata.Label         = device1Metadata.Name + " Voltage Phasor";
            phasor1Metadata.Type          = "V"; // Voltage phasor
            phasor1Metadata.Phase         = "+"; // Positive sequence
            phasor1Metadata.SourceIndex   = 1;   // Phasor number 1
            phasor1Metadata.UpdatedOn     = timestamp;

            m_phasorMetadata.Add(phasor1Metadata);

            m_metadataVersion++;

            // Pass meta-data to publisher instance for proper conditioning
            base.DefineMetadata(m_deviceMetadata, m_measurementMetadata, m_phasorMetadata, m_metadataVersion);
        }
Beispiel #2
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PhasorMetadata obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }